]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Update KBD67 readme so that it mentions the KBD65 PCB (#5143)
authorDrashna Jaelre <drashna@live.com>
Thu, 28 Mar 2019 05:13:29 +0000 (22:13 -0700)
committerGitHub <noreply@github.com>
Thu, 28 Mar 2019 05:13:29 +0000 (22:13 -0700)
* The code in this directory supports the KBD65

* Update readme.md

* Update readme.md

* Clear up the confusion between the kbd67/kbd65 naming.

* Update keyboards/kbdfans/kbd67/readme.md

Co-Authored-By: Hackerpilot <briancschott@gmail.com>
1003 files changed:
Dockerfile
Makefile
Vagrantfile
common_features.mk
docs/_summary.md
docs/config_options.md
docs/contributing.md
docs/custom_quantum_functions.md
docs/eclipse.md [deleted file]
docs/faq_build.md
docs/feature_advanced_keycodes.md
docs/feature_audio.md
docs/feature_debounce_type.md
docs/feature_grave_esc.md
docs/feature_macros.md
docs/feature_mouse_keys.md
docs/feature_rgb_matrix.md
docs/feature_rgblight.md
docs/feature_tap_dance.md
docs/feature_unicode.md
docs/feature_userspace.md
docs/features.md
docs/flashing.md
docs/getting_started_build_tools.md
docs/getting_started_make_guide.md
docs/hand_wire.md
docs/how_keyboards_work.md
docs/i2c_driver.md
docs/isp_flashing_guide.md
docs/keymap.md
docs/newbs_flashing.md
docs/newbs_getting_started.md
docs/other_eclipse.md [new file with mode: 0644]
docs/other_vscode.md [new file with mode: 0644]
docs/understanding_qmk.md
drivers/arm/i2c_master.c
drivers/arm/i2c_master.h
drivers/avr/i2c_master.c
drivers/avr/i2c_master.h
drivers/avr/i2c_slave.c
keyboards/1upkeyboards/1up60hse/1up60hse.h
keyboards/1upkeyboards/1up60hse/rules.mk
keyboards/1upkeyboards/1up60hte/1up60hte.h
keyboards/1upkeyboards/1up60hte/config.h
keyboards/1upkeyboards/1up60hte/info.json [new file with mode: 0644]
keyboards/1upkeyboards/1up60hte/keymaps/default/keymap.c
keyboards/1upkeyboards/1up60hte/keymaps/hhkb/keymap.c
keyboards/1upkeyboards/1up60hte/rules.mk
keyboards/1upkeyboards/1up60rgb/1up60rgb.h
keyboards/1upkeyboards/1up60rgb/config.h
keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c
keyboards/1upkeyboards/1up60rgb/keymaps/mdyevimnav/keymap.c [new file with mode: 0644]
keyboards/1upkeyboards/1up60rgb/readme.md
keyboards/1upkeyboards/1up60rgb/rules.mk
keyboards/1upkeyboards/readme.md
keyboards/1upkeyboards/super16/keymaps/default/config.h
keyboards/1upkeyboards/super16/rules.mk
keyboards/1upkeyboards/sweet16/config.h
keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c
keyboards/1upkeyboards/sweet16/readme.md
keyboards/1upkeyboards/sweet16/rules.mk
keyboards/1upkeyboards/sweet16/sweet16.h
keyboards/40percentclub/foobar/info.json
keyboards/40percentclub/half_n_half/config.h
keyboards/40percentclub/half_n_half/half_n_half.h
keyboards/40percentclub/half_n_half/info.json
keyboards/40percentclub/half_n_half/keymaps/Boy_314/config.h [new file with mode: 0644]
keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c [new file with mode: 0644]
keyboards/40percentclub/half_n_half/keymaps/Boy_314/readme.md [new file with mode: 0644]
keyboards/40percentclub/half_n_half/keymaps/Boy_314/rules.mk [new file with mode: 0644]
keyboards/40percentclub/half_n_half/rules.mk
keyboards/40percentclub/mf68/config.h
keyboards/40percentclub/mf68/keymaps/default/keymap.c
keyboards/40percentclub/mf68/keymaps/mf68_ble/config.h [new file with mode: 0644]
keyboards/40percentclub/mf68/keymaps/mf68_ble/keymap.c [new file with mode: 0644]
keyboards/40percentclub/mf68/keymaps/mf68_ble/readme.md [new file with mode: 0644]
keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk [new file with mode: 0644]
keyboards/40percentclub/mf68/rules.mk
keyboards/40percentclub/mf68_ble/config.h [deleted file]
keyboards/40percentclub/mf68_ble/info.json [deleted file]
keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c [deleted file]
keyboards/40percentclub/mf68_ble/mf68_ble.c [deleted file]
keyboards/40percentclub/mf68_ble/mf68_ble.h [deleted file]
keyboards/40percentclub/mf68_ble/readme.md [deleted file]
keyboards/40percentclub/mf68_ble/rules.mk [deleted file]
keyboards/40percentclub/ut47/keymaps/default/config.h
keyboards/412_64/412_64.c [deleted file]
keyboards/412_64/412_64.h [deleted file]
keyboards/412_64/config.h [deleted file]
keyboards/412_64/keymaps/default/config.h [deleted file]
keyboards/412_64/keymaps/default/keymap.c [deleted file]
keyboards/412_64/keymaps/default/rules.mk [deleted file]
keyboards/412_64/readme.md [deleted file]
keyboards/412_64/rules.mk [deleted file]
keyboards/ai03/orbit/config.h [new file with mode: 0644]
keyboards/ai03/orbit/info.json [new file with mode: 0644]
keyboards/ai03/orbit/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/ai03/orbit/keymaps/default/readme.md [new file with mode: 0644]
keyboards/ai03/orbit/matrix.c [new file with mode: 0644]
keyboards/ai03/orbit/matrix.h [new file with mode: 0644]
keyboards/ai03/orbit/orbit.c [new file with mode: 0644]
keyboards/ai03/orbit/orbit.h [new file with mode: 0644]
keyboards/ai03/orbit/readme.md [new file with mode: 0644]
keyboards/ai03/orbit/rules.mk [new file with mode: 0644]
keyboards/ai03/orbit/serial.c [new file with mode: 0644]
keyboards/ai03/orbit/serial.h [new file with mode: 0644]
keyboards/ai03/orbit/split_flags.c [new file with mode: 0644]
keyboards/ai03/orbit/split_flags.h [new file with mode: 0644]
keyboards/ai03/orbit/split_util.c [new file with mode: 0644]
keyboards/ai03/orbit/split_util.h [new file with mode: 0644]
keyboards/ai03/orbit/transport.c [new file with mode: 0644]
keyboards/ai03/orbit/transport.h [new file with mode: 0644]
keyboards/alice/alice.h
keyboards/alice/program [deleted file]
keyboards/alice/rules.mk
keyboards/amj96/keymaps/default/config.h
keyboards/amjpad/keymaps/default/keymap.c
keyboards/atreus/keymaps/default/keymap.c
keyboards/atreus/keymaps/dvorak_42_key/keymap.c
keyboards/atreus/keymaps/yttyx/README.md
keyboards/atreus/keymaps/yttyx/config.h
keyboards/atreus/keymaps/yttyx/keymap.c
keyboards/atreus62/keymaps/jarred/config.h [new file with mode: 0644]
keyboards/atreus62/keymaps/jarred/keymap.c [new file with mode: 0644]
keyboards/bm16a/bm16a.c [new file with mode: 0644]
keyboards/bm16a/bm16a.h [new file with mode: 0644]
keyboards/bm16a/config.h [new file with mode: 0644]
keyboards/bm16a/info.json [new file with mode: 0644]
keyboards/bm16a/keymaps/default/config.h [new file with mode: 0644]
keyboards/bm16a/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/bm16a/keymaps/default/readme.md [new file with mode: 0644]
keyboards/bm16a/readme.md [new file with mode: 0644]
keyboards/bm16a/rules.mk [new file with mode: 0644]
keyboards/boardwalk/boardwalk.h [new file with mode: 0644]
keyboards/boardwalk/config.h [new file with mode: 0644]
keyboards/boardwalk/info.json [new file with mode: 0644]
keyboards/boardwalk/keymaps/default/config.h [new file with mode: 0644]
keyboards/boardwalk/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/boardwalk/keymaps/default/readme.md [new file with mode: 0644]
keyboards/boardwalk/keymaps/mcallaster/keymap.c [new file with mode: 0644]
keyboards/boardwalk/keymaps/nchristus/config.h [new file with mode: 0644]
keyboards/boardwalk/keymaps/nchristus/keymap.c [new file with mode: 0644]
keyboards/boardwalk/keymaps/nchristus/readme.md [new file with mode: 0644]
keyboards/boardwalk/keymaps/nchristus/rules.mk [new file with mode: 0644]
keyboards/boardwalk/readme.md [new file with mode: 0644]
keyboards/boardwalk/rules.mk [new file with mode: 0644]
keyboards/bpiphany/tiger_lily/keymaps/default/config.h
keyboards/bpiphany/unloved_bastard/keymaps/default/config.h
keyboards/c39/c39.c [new file with mode: 0755]
keyboards/c39/c39.h [new file with mode: 0755]
keyboards/c39/config.h [new file with mode: 0755]
keyboards/c39/info.json [new file with mode: 0755]
keyboards/c39/keymaps/default/config.h [new file with mode: 0755]
keyboards/c39/keymaps/default/keymap.c [new file with mode: 0755]
keyboards/c39/keymaps/default/readme.md [new file with mode: 0755]
keyboards/c39/readme.md [new file with mode: 0755]
keyboards/c39/rules.mk [new file with mode: 0755]
keyboards/candybar/keymaps/default/keymap.c
keyboards/cannonkeys/instant60/boards/ST_STM32F072B_DISCOVERY/board.c [new file with mode: 0644]
keyboards/cannonkeys/instant60/boards/ST_STM32F072B_DISCOVERY/board.h [new file with mode: 0644]
keyboards/cannonkeys/instant60/boards/ST_STM32F072B_DISCOVERY/board.mk [new file with mode: 0644]
keyboards/cannonkeys/instant60/boards/ST_STM32F072B_DISCOVERY/cfg/board.chcfg [new file with mode: 0644]
keyboards/cannonkeys/instant60/bootloader_defs.h [new file with mode: 0644]
keyboards/cannonkeys/instant60/chconf.h [new file with mode: 0644]
keyboards/cannonkeys/instant60/config.h [new file with mode: 0644]
keyboards/cannonkeys/instant60/halconf.h [new file with mode: 0644]
keyboards/cannonkeys/instant60/instant60.c [new file with mode: 0644]
keyboards/cannonkeys/instant60/instant60.h [new file with mode: 0644]
keyboards/cannonkeys/instant60/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/cannonkeys/instant60/mcuconf.h [new file with mode: 0644]
keyboards/cannonkeys/instant60/readme.md [new file with mode: 0644]
keyboards/cannonkeys/instant60/rules.mk [new file with mode: 0644]
keyboards/cannonkeys/satisfaction75/config.h
keyboards/cannonkeys/satisfaction75/i2c_master.c
keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c [new file with mode: 0644]
keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk [new file with mode: 0644]
keyboards/cannonkeys/satisfaction75/prototype/prototype.h [new file with mode: 0644]
keyboards/cannonkeys/satisfaction75/prototype/rules.mk [new file with mode: 0644]
keyboards/cannonkeys/satisfaction75/rev1/rev1.h [new file with mode: 0644]
keyboards/cannonkeys/satisfaction75/rev1/rules.mk [new file with mode: 0644]
keyboards/cannonkeys/satisfaction75/rules.mk
keyboards/cannonkeys/satisfaction75/satisfaction75.c
keyboards/cannonkeys/satisfaction75/satisfaction75.h
keyboards/cannonkeys/satisfaction75/satisfaction_encoder.c
keyboards/cannonkeys/satisfaction75/satisfaction_oled.c
keyboards/cannonkeys/stm32f072/keyboard.c [new file with mode: 0644]
keyboards/cannonkeys/stm32f072/keyboard.h [new file with mode: 0644]
keyboards/cannonkeys/stm32f072/led.c [new file with mode: 0644]
keyboards/cannonkeys/stm32f072/led_custom.h [new file with mode: 0644]
keyboards/cannonkeys/stm32f072/ws2812.c [new file with mode: 0644]
keyboards/cannonkeys/stm32f072/ws2812.h [new file with mode: 0644]
keyboards/chibios_test/keymaps/default/keymap.c
keyboards/chimera_ortho/keymaps/dcompact/README.md [deleted file]
keyboards/chimera_ortho/keymaps/dcompact/readme.md [new file with mode: 0644]
keyboards/christmas_tree/keymaps/default/config.h
keyboards/ckeys/obelus/keymaps/default/config.h
keyboards/ckeys/obelus/keymaps/default/keymap.c
keyboards/clueboard/2x1800/keymaps/default/config.h
keyboards/clueboard/66_hotswap/gen1/config.h
keyboards/comet46/keymaps/default/config.h
keyboards/contra/keymaps/default/config.h
keyboards/contra/keymaps/msiu/config.h [new file with mode: 0644]
keyboards/contra/keymaps/msiu/keymap.c [new file with mode: 0644]
keyboards/contra/keymaps/msiu/readme.md [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/config.h [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/info.json [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/keymaps/default/config.h [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/keymaps/default/readme.md [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/keymaps/newbold/config.h [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/keymaps/newbold/keymap.c [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/keymaps/newbold/readme.md [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/numeric_keypad_IIe.c [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/numeric_keypad_IIe.h [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/readme.md [new file with mode: 0644]
keyboards/converter/numeric_keypad_IIe/rules.mk [new file with mode: 0644]
keyboards/converter/usb_usb/custom_matrix.cpp
keyboards/converter/usb_usb/keymaps/default/config.h
keyboards/cospad/keymaps/default/keymap.c
keyboards/crkbd/keymaps/drashna/keymap.c
keyboards/crkbd/keymaps/drashna/rules.mk
keyboards/crkbd/keymaps/edvorakjp/config.h
keyboards/crkbd/keymaps/edvorakjp/keymap.c
keyboards/crkbd/keymaps/edvorakjp/oled.c
keyboards/crkbd/keymaps/jarred/config.h [new file with mode: 0644]
keyboards/crkbd/keymaps/jarred/keymap.c [new file with mode: 0644]
keyboards/crkbd/keymaps/jarred/readme.md [new file with mode: 0644]
keyboards/crkbd/keymaps/jarred/rules.mk [new file with mode: 0644]
keyboards/crkbd/keymaps/thefrey/README.md [new file with mode: 0644]
keyboards/crkbd/keymaps/thefrey/config.h [new file with mode: 0644]
keyboards/crkbd/keymaps/thefrey/keymap.c [new file with mode: 0644]
keyboards/crkbd/keymaps/thefrey/rules.mk [new file with mode: 0644]
keyboards/cu24/keymaps/default/keymap.c
keyboards/cu75/keymaps/default/config.h
keyboards/dc01/left/matrix.c
keyboards/deltasplit75/keymaps/default/config.h
keyboards/dichotomy/keymaps/default/keymap.c
keyboards/diverge3/keymaps/default/config.h
keyboards/dk60/dk60.c
keyboards/do60/keymaps/default/keymap.c
keyboards/dozen0/config.h [new file with mode: 0644]
keyboards/dozen0/dozen0.c [new file with mode: 0644]
keyboards/dozen0/dozen0.h [new file with mode: 0644]
keyboards/dozen0/info.json [new file with mode: 0644]
keyboards/dozen0/keymaps/default/config.h [new file with mode: 0644]
keyboards/dozen0/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/dozen0/keymaps/default/readme.md [new file with mode: 0644]
keyboards/dozen0/keymaps/f12/config.h [new file with mode: 0644]
keyboards/dozen0/keymaps/f12/keymap.c [new file with mode: 0644]
keyboards/dozen0/readme.md [new file with mode: 0644]
keyboards/dozen0/rules.mk [new file with mode: 0644]
keyboards/dz60/keymaps/edulpn/README.md [new file with mode: 0644]
keyboards/dz60/keymaps/edulpn/keymap.c [new file with mode: 0644]
keyboards/dztech/dz40rgb/bootloader_defs.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/chconf.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/config.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/dz40rgb.c [new file with mode: 0644]
keyboards/dztech/dz40rgb/dz40rgb.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/halconf.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/keymaps/default/config.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/dztech/dz40rgb/keymaps/split_space/config.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/keymaps/split_space/keymap.c [new file with mode: 0644]
keyboards/dztech/dz40rgb/mcuconf.h [new file with mode: 0644]
keyboards/dztech/dz40rgb/rules.mk [new file with mode: 0644]
keyboards/dztech/dz60rgb/config.h
keyboards/dztech/dz60rgb/dz60rgb.c
keyboards/dztech/dz60rgb/dz60rgb.h
keyboards/dztech/dz60rgb/keymaps/ansi/config.h [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/ansi/keymap.c [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/default/keymap.c
keyboards/dztech/dz60rgb/keymaps/hhkb/config.h [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/hhkb/keymap.c [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/hhkb_iso/config.h [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/hhkb_iso/keymap.c [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/iso/config.h [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/iso/keymap.c [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/mekanist/keymap.c [new file with mode: 0644]
keyboards/dztech/dz60rgb/keymaps/mekanist/readme.md [new file with mode: 0644]
keyboards/ergodash/rev1/keymaps/default/config.h
keyboards/ergodash/rev1/keymaps/default/keymap.c
keyboards/ergodash/rev2/keymaps/default/config.h
keyboards/ergodash/rev2/keymaps/default/keymap.c
keyboards/ergodash/rev2/keymaps/greenshadowmaker/config.h [new file with mode: 0644]
keyboards/ergodash/rev2/keymaps/greenshadowmaker/keyboard-layout-editor.json [new file with mode: 0644]
keyboards/ergodash/rev2/keymaps/greenshadowmaker/keymap.c [new file with mode: 0644]
keyboards/ergodash/rev2/keymaps/greenshadowmaker/rules.mk [new file with mode: 0644]
keyboards/ergodone/keymaps/default/keymap.c
keyboards/ergodox_ez/ergodox_ez.c
keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
keyboards/ergodox_ez/keymaps/steno/keymap.c
keyboards/ergodox_ez/keymaps/steno/rules.mk
keyboards/ergodox_ez/matrix.c
keyboards/ergodox_infinity/keymaps/default/keymap.c
keyboards/ergotravel/keymaps/jarred/config.h [new file with mode: 0644]
keyboards/ergotravel/keymaps/jarred/keymap.c [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/bmc.c [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/bmc.h [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/config.h [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/info.json [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/keymaps/default/config.h [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/keymaps/default/readme.md [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/readme.md [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/rules.mk [new file with mode: 0644]
keyboards/exclusive/e6v2/bmc/usbconfig.h [new file with mode: 0644]
keyboards/facew/facew.h
keyboards/facew/info.json
keyboards/facew/keymaps/default/keymap.c
keyboards/facew/keymaps/mechmerlin/keymap.c
keyboards/fc660c/keymaps/default/config.h
keyboards/fc980c/keymaps/default/config.h
keyboards/fortitude60/keymaps/default/config.h
keyboards/fortitude60/keymaps/default/keymap.c
keyboards/four_banger/keymaps/default/keymap.c
keyboards/georgi/config.h [new file with mode: 0644]
keyboards/georgi/georgi.c [new file with mode: 0644]
keyboards/georgi/georgi.h [new file with mode: 0644]
keyboards/georgi/info.json [new file with mode: 0644]
keyboards/georgi/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/georgi/keymaps/default/readme.md [new file with mode: 0644]
keyboards/georgi/keymaps/default/rules.mk [new file with mode: 0644]
keyboards/georgi/keymaps/template/keymap.c [new file with mode: 0644]
keyboards/georgi/keymaps/template/readme.md [new file with mode: 0644]
keyboards/georgi/keymaps/template/rules.mk [new file with mode: 0644]
keyboards/georgi/matrix.c [new file with mode: 0644]
keyboards/georgi/readme.md [new file with mode: 0644]
keyboards/georgi/rules.mk [new file with mode: 0644]
keyboards/georgi/sten.c [new file with mode: 0644]
keyboards/georgi/sten.h [new file with mode: 0644]
keyboards/gergo/gergo.c
keyboards/gergo/matrix.c
keyboards/gray_studio/hb85/config.h [new file with mode: 0644]
keyboards/gray_studio/hb85/hb85.c [new file with mode: 0644]
keyboards/gray_studio/hb85/hb85.h [new file with mode: 0644]
keyboards/gray_studio/hb85/i2c.c [new file with mode: 0644]
keyboards/gray_studio/hb85/i2c.h [new file with mode: 0644]
keyboards/gray_studio/hb85/info.json [new file with mode: 0644]
keyboards/gray_studio/hb85/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/gray_studio/hb85/keymaps/stt/keymap.c [new file with mode: 0644]
keyboards/gray_studio/hb85/readme.md [new file with mode: 0644]
keyboards/gray_studio/hb85/rules.mk [new file with mode: 0644]
keyboards/gray_studio/hb85/usbconfig.h [new file with mode: 0644]
keyboards/hadron/ver2/keymaps/default/keymap.c
keyboards/hadron/ver2/keymaps/readme.md
keyboards/handwired/412_64/412_64.c [new file with mode: 0644]
keyboards/handwired/412_64/412_64.h [new file with mode: 0644]
keyboards/handwired/412_64/config.h [new file with mode: 0644]
keyboards/handwired/412_64/keymaps/default/config.h [new file with mode: 0644]
keyboards/handwired/412_64/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/412_64/keymaps/default/rules.mk [new file with mode: 0644]
keyboards/handwired/412_64/readme.md [new file with mode: 0644]
keyboards/handwired/412_64/rules.mk [new file with mode: 0644]
keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h
keyboards/handwired/dactyl_manuform/4x5/keymaps/default/keymap.c
keyboards/handwired/dactyl_manuform/5x6/5x6.h
keyboards/handwired/dactyl_manuform/5x6/info.json
keyboards/handwired/dactyl_manuform/5x7/5x7.h
keyboards/handwired/dactyl_manuform/5x7/info.json
keyboards/handwired/dactyl_manuform/6x6/6x6.h
keyboards/handwired/dactyl_manuform/6x6/info.json
keyboards/handwired/frenchdev/keymaps/default/keymap.c
keyboards/handwired/hexon38/keymaps/default/keymap.c
keyboards/handwired/jot50/config.h [new file with mode: 0644]
keyboards/handwired/jot50/jot50.c [new file with mode: 0644]
keyboards/handwired/jot50/jot50.h [new file with mode: 0644]
keyboards/handwired/jot50/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/jot50/readme.md [new file with mode: 0644]
keyboards/handwired/jot50/rules.mk [new file with mode: 0644]
keyboards/handwired/jotanck/config.h
keyboards/handwired/jotanck/jotanck.h
keyboards/handwired/jotanck/keymaps/default/keymap.c
keyboards/handwired/jotanck/readme.md
keyboards/handwired/jotanck/rules.mk
keyboards/handwired/lovelive9/config.h [new file with mode: 0644]
keyboards/handwired/lovelive9/info.json [new file with mode: 0644]
keyboards/handwired/lovelive9/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/lovelive9/lovelive9.c [new file with mode: 0644]
keyboards/handwired/lovelive9/lovelive9.h [new file with mode: 0644]
keyboards/handwired/lovelive9/readme.md [new file with mode: 0644]
keyboards/handwired/lovelive9/rules.mk [new file with mode: 0644]
keyboards/handwired/maartenwut/keymaps/default/keymap.c
keyboards/handwired/magicforce61/README.md [deleted file]
keyboards/handwired/magicforce61/config.h
keyboards/handwired/magicforce61/info.json [new file with mode: 0644]
keyboards/handwired/magicforce61/keymaps/default/keymap.c
keyboards/handwired/magicforce61/magicforce61.h
keyboards/handwired/magicforce61/readme.md [new file with mode: 0644]
keyboards/handwired/magicforce68/README.md [deleted file]
keyboards/handwired/magicforce68/info.json [new file with mode: 0644]
keyboards/handwired/magicforce68/keymaps/default/keymap.c
keyboards/handwired/magicforce68/magicforce68.h
keyboards/handwired/magicforce68/readme.md [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/config.h [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/info.json [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/keymaps/default/readme.md [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/mechboards_micropad.c [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/mechboards_micropad.h [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/readme.md [new file with mode: 0644]
keyboards/handwired/mechboards_micropad/rules.mk [new file with mode: 0644]
keyboards/handwired/minorca/keymaps/default/config.h
keyboards/handwired/prime_exl/config.h
keyboards/handwired/prime_exl/keymaps/default/keymap.c
keyboards/handwired/prime_exl/keymaps/via/keymap.c [new file with mode: 0644]
keyboards/handwired/prime_exl/keymaps/via/readme.md [new file with mode: 0644]
keyboards/handwired/prime_exl/keymaps/via/rules.mk [new file with mode: 0644]
keyboards/handwired/prime_exl/prime_exl.c
keyboards/handwired/prime_exl/prime_exl.h
keyboards/handwired/splittest/config.h [new file with mode: 0644]
keyboards/handwired/splittest/keymaps/default/config.h [new file with mode: 0644]
keyboards/handwired/splittest/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/handwired/splittest/readme.md [new file with mode: 0644]
keyboards/handwired/splittest/rules.mk [new file with mode: 0644]
keyboards/handwired/splittest/splittest.c [new file with mode: 0644]
keyboards/handwired/splittest/splittest.h [new file with mode: 0644]
keyboards/handwired/terminus_mini/info.json [new file with mode: 0644]
keyboards/handwired/terminus_mini/keymaps/default/config.h
keyboards/handwired/terminus_mini/keymaps/default/keymap.c
keyboards/handwired/terminus_mini/readme.md
keyboards/handwired/terminus_mini/terminus_mini.h
keyboards/handwired/trackpoint/README.md [deleted file]
keyboards/handwired/trackpoint/config.h
keyboards/handwired/trackpoint/keymaps/default/keymap.c
keyboards/handwired/trackpoint/readme.md [new file with mode: 0644]
keyboards/handwired/trackpoint/trackpoint.h
keyboards/handwired/traveller/keymaps/default/keymap.c
keyboards/handwired/woodpad/keymaps/default/config.h
keyboards/handwired/woodpad/keymaps/default/keymap.c
keyboards/hecomi/alpha/info.json [new file with mode: 0644]
keyboards/hecomi/alpha/readme.md
keyboards/hecomi/info.json [deleted file]
keyboards/hecomi/keymaps/default/keymap.c
keyboards/helix/pico/keymaps/default/config.h
keyboards/helix/rev1/keymaps/default/config.h
keyboards/helix/rev2/keymaps/default/config.h
keyboards/helix/rev2/keymaps/edvorakjp/config.h
keyboards/helix/rev2/keymaps/edvorakjp/keymap.c
keyboards/helix/rev2/keymaps/edvorakjp/keymap_4rows.c
keyboards/helix/rev2/keymaps/edvorakjp/keymap_5rows.c
keyboards/helix/rev2/keymaps/edvorakjp/keymap_xrows.h
keyboards/helix/rev2/keymaps/edvorakjp/oled.c
keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
keyboards/hid_liber/keymaps/default/keymap.c
keyboards/hifumi/config.h [new file with mode: 0644]
keyboards/hifumi/hifumi.h [new file with mode: 0644]
keyboards/hifumi/info.json [new file with mode: 0644]
keyboards/hifumi/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/hifumi/keymaps/test/keymap.c [new file with mode: 0644]
keyboards/hifumi/readme.md [new file with mode: 0644]
keyboards/hifumi/rules.mk [new file with mode: 0644]
keyboards/hotdox/config.h [new file with mode: 0644]
keyboards/hotdox/hotdox.c [new file with mode: 0644]
keyboards/hotdox/hotdox.h [new file with mode: 0644]
keyboards/hotdox/info.json [new file with mode: 0644]
keyboards/hotdox/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/hotdox/keymaps/eozaki/keymap.c [new file with mode: 0644]
keyboards/hotdox/keymaps/kloki/keymap.c [new file with mode: 0644]
keyboards/hotdox/left.c [new file with mode: 0644]
keyboards/hotdox/left.h [new file with mode: 0644]
keyboards/hotdox/matrix.c [new file with mode: 0644]
keyboards/hotdox/readme.md [new file with mode: 0644]
keyboards/hotdox/rules.mk [new file with mode: 0644]
keyboards/hs60/v2/info.json
keyboards/hs60/v2/keymaps/ansi/readme.md
keyboards/hs60/v2/keymaps/ansi_via/config.h [new file with mode: 0644]
keyboards/hs60/v2/keymaps/ansi_via/keymap.c [new file with mode: 0644]
keyboards/hs60/v2/keymaps/ansi_via/readme.md [new file with mode: 0644]
keyboards/hs60/v2/keymaps/ansi_via/rules.mk [new file with mode: 0644]
keyboards/hs60/v2/keymaps/default/readme.md
keyboards/hs60/v2/keymaps/default_via/keymap.c [new file with mode: 0644]
keyboards/hs60/v2/keymaps/default_via/readme.md [new file with mode: 0644]
keyboards/hs60/v2/keymaps/default_via/rules.mk [new file with mode: 0644]
keyboards/hs60/v2/keymaps/hhkb/readme.md
keyboards/hs60/v2/keymaps/hhkb_via/config.h [new file with mode: 0644]
keyboards/hs60/v2/keymaps/hhkb_via/keymap.c [new file with mode: 0644]
keyboards/hs60/v2/keymaps/hhkb_via/readme.md [new file with mode: 0644]
keyboards/hs60/v2/keymaps/hhkb_via/rules.mk [new file with mode: 0644]
keyboards/hs60/v2/keymaps/iso_andys8/keymap.c [new file with mode: 0644]
keyboards/hs60/v2/keymaps/iso_andys8/readme.md [new file with mode: 0644]
keyboards/hs60/v2/keymaps/iso_andys8/rules.mk [new file with mode: 0644]
keyboards/hs60/v2/keymaps/stanrc85/config.h
keyboards/hs60/v2/keymaps/stanrc85/keymap.c
keyboards/hs60/v2/keymaps/stanrc85/readme.md
keyboards/hs60/v2/keymaps/stanrc85/rules.mk
keyboards/hs60/v2/keymaps/win_osx_dual/keymap.c [new file with mode: 0644]
keyboards/hs60/v2/keymaps/win_osx_dual/readme.md [new file with mode: 0644]
keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk [new file with mode: 0644]
keyboards/hs60/v2/readme.md
keyboards/hs60/v2/rules.mk
keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json [new file with mode: 0644]
keyboards/idobo/keymaps/greenshadowmaker/keymap.c [new file with mode: 0644]
keyboards/idobo/keymaps/greenshadowmaker/readme.md [new file with mode: 0644]
keyboards/idobo/keymaps/greenshadowmaker/rules.mk [new file with mode: 0644]
keyboards/jc65/v32u4/keymaps/default/config.h
keyboards/jj40/README.md
keyboards/jj4x4/README.md
keyboards/jj50/README.md
keyboards/jj50/keymaps/archetype/README.md [new file with mode: 0644]
keyboards/jj50/keymaps/archetype/config.h [new file with mode: 0644]
keyboards/jj50/keymaps/archetype/keymap.c [new file with mode: 0644]
keyboards/jj50/keymaps/archetype/rules.mk [new file with mode: 0644]
keyboards/jj50/keymaps/default/keymap.c
keyboards/jj50/program [deleted file]
keyboards/jj50/rules.mk
keyboards/k_type/keymaps/default/keymap.c
keyboards/katana60/keymaps/default/config.h
keyboards/katana60/keymaps/msiu/config.h [new file with mode: 0644]
keyboards/katana60/keymaps/msiu/keymap.c [new file with mode: 0644]
keyboards/katana60/keymaps/msiu/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd19x/info.json
keyboards/kbdfans/kbd4x/kbd4x.h
keyboards/kbdfans/kbd4x/rules.mk
keyboards/kbdfans/kbd66/config.h
keyboards/kbdfans/kbd66/kbd66.h
keyboards/kbdfans/kbd66/keymaps/default/config.h
keyboards/kbdfans/kbd66/rules.mk
keyboards/kbdfans/kbd67/hotswap/config.h
keyboards/kbdfans/kbd67/rev1/keymaps/default/keymap.c
keyboards/kbdfans/kbd67/rev1/keymaps/koba/config.h [new file with mode: 0644]
keyboards/kbdfans/kbd67/rev1/keymaps/koba/keymap.c [new file with mode: 0644]
keyboards/kbdfans/kbd67/rev1/keymaps/koba/readme.md [new file with mode: 0644]
keyboards/kbdfans/kbd67/rev1/rev1.h
keyboards/kbdfans/kbd6x/kbd6x.h
keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
keyboards/kbdfans/kbd6x/keymaps/konstantin/rules.mk
keyboards/kbdfans/kbd75/kbd75.h
keyboards/kc60se/keymaps/default/config.h
keyboards/keebio/chocopad/keymaps/default/config.h
keyboards/keebio/iris/keymaps/default/config.h
keyboards/keebio/iris/keymaps/default/keymap.c
keyboards/keebio/iris/keymaps/edvorakjp/config.h
keyboards/keebio/iris/keymaps/edvorakjp/keymap.c
keyboards/keebio/iris/keymaps/edvorakjp/rules.mk
keyboards/keebio/iris/keymaps/moonfall/config.h [new file with mode: 0644]
keyboards/keebio/iris/keymaps/moonfall/keymap.c [new file with mode: 0644]
keyboards/keebio/iris/keymaps/moonfall/rules.mk [new file with mode: 0644]
keyboards/keebio/iris/keymaps/nstickney/README.md [new file with mode: 0644]
keyboards/keebio/iris/keymaps/nstickney/config.h [new file with mode: 0644]
keyboards/keebio/iris/keymaps/nstickney/keymap.c [new file with mode: 0644]
keyboards/keebio/iris/keymaps/nstickney/rules.mk [new file with mode: 0644]
keyboards/keebio/iris/keymaps/vyolle/keymap.c
keyboards/keebio/iris/rev3/config.h
keyboards/keebio/levinson/keymaps/dcompact/config.h [new file with mode: 0644]
keyboards/keebio/levinson/keymaps/dcompact/keymap.c [new file with mode: 0644]
keyboards/keebio/levinson/keymaps/dcompact/readme.md [new file with mode: 0644]
keyboards/keebio/levinson/keymaps/dcompact/rules.mk [new file with mode: 0644]
keyboards/keebio/levinson/keymaps/omgvee/config.h [new file with mode: 0644]
keyboards/keebio/levinson/keymaps/omgvee/keymap.c [new file with mode: 0644]
keyboards/keebio/levinson/keymaps/omgvee/readme.md [new file with mode: 0644]
keyboards/keebio/levinson/keymaps/omgvee/rules.mk [new file with mode: 0644]
keyboards/keebio/nyquist/keymaps/skug/keymap.c
keyboards/keebio/nyquist/rev3/config.h
keyboards/keebio/quefrency/info.json
keyboards/keebio/quefrency/keymaps/unausgeschlafen/config.h [new file with mode: 0644]
keyboards/keebio/quefrency/keymaps/unausgeschlafen/keymap.c [new file with mode: 0644]
keyboards/keebio/quefrency/keymaps/unausgeschlafen/readme.md [new file with mode: 0644]
keyboards/keebio/quefrency/keymaps/unausgeschlafen/rules.mk [new file with mode: 0644]
keyboards/keebio/quefrency/rev1/config.h
keyboards/kinesis/keymaps/default/config.h
keyboards/kira75/keymaps/default/config.h
keyboards/kmac/keymaps/default/config.h
keyboards/knops/mini/keymaps/default/config.h
keyboards/kona_classic/keymaps/default/config.h
keyboards/launchpad/keymaps/default/keymap.c
keyboards/launchpad/keymaps/default_rgb/config.h [new file with mode: 0644]
keyboards/launchpad/keymaps/default_rgb/keymap.c [new file with mode: 0644]
keyboards/launchpad/keymaps/default_rgb/readme.md [new file with mode: 0644]
keyboards/launchpad/keymaps/default_rgb/rules.mk [new file with mode: 0644]
keyboards/lazydesigners/the60/config.h [new file with mode: 0644]
keyboards/lazydesigners/the60/info.json [new file with mode: 0644]
keyboards/lazydesigners/the60/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/lazydesigners/the60/keymaps/default/readme.md [new file with mode: 0644]
keyboards/lazydesigners/the60/readme.md [new file with mode: 0644]
keyboards/lazydesigners/the60/rules.mk [new file with mode: 0644]
keyboards/lazydesigners/the60/the60.c [new file with mode: 0644]
keyboards/lazydesigners/the60/the60.h [new file with mode: 0644]
keyboards/lets_split/keymaps/vim-mode/config.h [new file with mode: 0644]
keyboards/lets_split/keymaps/vim-mode/keymap.c [new file with mode: 0644]
keyboards/lets_split/keymaps/vim-mode/readme.md [new file with mode: 0644]
keyboards/lets_split/keymaps/vim-mode/rules.mk [new file with mode: 0644]
keyboards/lets_split_eh/keymaps/msiu/config.h [new file with mode: 0644]
keyboards/lets_split_eh/keymaps/msiu/keymap.c [new file with mode: 0644]
keyboards/lfkeyboards/lfk87/keymaps/default/config.h
keyboards/lfkeyboards/lfkpad/keymaps/default/config.h
keyboards/lfkeyboards/mini1800/keymaps/default/config.h
keyboards/lfkeyboards/smk65/keymaps/default/config.h
keyboards/lily58/config.h
keyboards/lily58/keymaps/default/keymap.c
keyboards/lily58/rev1/info.json [new file with mode: 0644]
keyboards/lily58/rules.mk
keyboards/m10a/keymaps/default/keymap.c
keyboards/maxipad/config.h
keyboards/maxipad/info.json
keyboards/maxipad/keymaps/default/config.h [new file with mode: 0644]
keyboards/maxipad/keymaps/default/keymap.c
keyboards/maxipad/keymaps/default/readme.md [new file with mode: 0644]
keyboards/maxipad/maxipad.c
keyboards/maxipad/maxipad.h
keyboards/maxipad/promicro/config.h [new file with mode: 0644]
keyboards/maxipad/promicro/promicro.c [new file with mode: 0644]
keyboards/maxipad/promicro/promicro.h [new file with mode: 0644]
keyboards/maxipad/promicro/rules.mk [new file with mode: 0644]
keyboards/maxipad/readme.md
keyboards/maxipad/rules.mk
keyboards/maxipad/teensy2/config.h [new file with mode: 0644]
keyboards/maxipad/teensy2/rules.mk [new file with mode: 0644]
keyboards/maxipad/teensy2/teensy2.c [new file with mode: 0644]
keyboards/maxipad/teensy2/teensy2.h [new file with mode: 0644]
keyboards/mechkeys/mk60/config.h [new file with mode: 0644]
keyboards/mechkeys/mk60/info.json [new file with mode: 0644]
keyboards/mechkeys/mk60/keymaps/default/config.h [new file with mode: 0644]
keyboards/mechkeys/mk60/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/mechkeys/mk60/keymaps/default/readme.md [new file with mode: 0644]
keyboards/mechkeys/mk60/mk60.c [new file with mode: 0644]
keyboards/mechkeys/mk60/mk60.h [new file with mode: 0644]
keyboards/mechkeys/mk60/readme.md [new file with mode: 0644]
keyboards/mechkeys/mk60/rules.mk [new file with mode: 0644]
keyboards/mechmini/v1/README.md
keyboards/mechmini/v1/keymaps/default/keymap.c
keyboards/mechmini/v2/keymaps/arkag/keymap.c
keyboards/mechmini/v2/keymaps/arkag/rules.mk
keyboards/mehkee96/program [deleted file]
keyboards/mehkee96/rules.mk
keyboards/meira/keymaps/default/config.h
keyboards/meira/keymaps/default/keymap.c
keyboards/meishi/keymaps/default/keymap.c
keyboards/melody96/keymaps/konstantin/config.h [new file with mode: 0644]
keyboards/melody96/keymaps/konstantin/keymap.c [new file with mode: 0644]
keyboards/melody96/keymaps/konstantin/rules.mk [new file with mode: 0644]
keyboards/meme/keymaps/default/config.h
keyboards/minidox/keymaps/dustypomerleau/config.h
keyboards/minidox/keymaps/dustypomerleau/keymap.c
keyboards/minidox/keymaps/dustypomerleau/rules.mk
keyboards/miuni32/keymaps/default/config.h
keyboards/mt40/keymaps/default/config.h
keyboards/mt980/config.h [new file with mode: 0644]
keyboards/mt980/info.json [new file with mode: 0644]
keyboards/mt980/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/mt980/keymaps/walker/config.h [new file with mode: 0644]
keyboards/mt980/keymaps/walker/keymap.c [new file with mode: 0644]
keyboards/mt980/keymaps/walker/rules.mk [new file with mode: 0644]
keyboards/mt980/mt980.c [new file with mode: 0644]
keyboards/mt980/mt980.h [new file with mode: 0644]
keyboards/mt980/readme.md [new file with mode: 0644]
keyboards/mt980/rules.mk [new file with mode: 0644]
keyboards/mxss/keymaps/default/config.h
keyboards/mxss/rgblight.h [new file with mode: 0644]
keyboards/niu_mini/keymaps/yttyx/README.md [new file with mode: 0644]
keyboards/niu_mini/keymaps/yttyx/config.h [new file with mode: 0644]
keyboards/niu_mini/keymaps/yttyx/keymap.c [new file with mode: 0644]
keyboards/niu_mini/keymaps/yttyx/rules.mk [new file with mode: 0644]
keyboards/org60/keymaps/default/keymap.c
keyboards/org60/keymaps/jarred/keymap.c [new file with mode: 0644]
keyboards/orthodox/keymaps/default/config.h
keyboards/phantom/keymaps/default/config.h
keyboards/plaid/config.h [new file with mode: 0644]
keyboards/plaid/info.json [new file with mode: 0644]
keyboards/plaid/keymaps/default/config.h [new file with mode: 0644]
keyboards/plaid/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/plaid/keymaps/default/readme.md [new file with mode: 0644]
keyboards/plaid/plaid.c [new file with mode: 0644]
keyboards/plaid/plaid.h [new file with mode: 0644]
keyboards/plaid/readme.md [new file with mode: 0644]
keyboards/plaid/rules.mk [new file with mode: 0644]
keyboards/plaid/usbconfig.h [new file with mode: 0644]
keyboards/planck/keymaps/callum/config.h [new file with mode: 0644]
keyboards/planck/keymaps/callum/keymap.c
keyboards/planck/keymaps/callum/readme.md
keyboards/planck/keymaps/callum/rules.mk
keyboards/planck/keymaps/cbbrowne/readme.md [deleted file]
keyboards/planck/keymaps/cbbrowne/readme.org [new file with mode: 0644]
keyboards/planck/keymaps/dcompact/README.md [deleted file]
keyboards/planck/keymaps/dcompact/keymap.c
keyboards/planck/keymaps/dcompact/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/dsanchezseco/config.h [new file with mode: 0644]
keyboards/planck/keymaps/dsanchezseco/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/dsanchezseco/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/dsanchezseco/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/jarred/keymap.c
keyboards/planck/keymaps/juno/config.h [new file with mode: 0644]
keyboards/planck/keymaps/juno/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/juno/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/juno/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/msiu/config.h [new file with mode: 0644]
keyboards/planck/keymaps/msiu/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/msiu/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/msiu/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/rjhilgefort/config.h [new file with mode: 0644]
keyboards/planck/keymaps/rjhilgefort/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/rjhilgefort/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/rjhilgefort/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/samuel/README.org
keyboards/planck/keymaps/samuel/keymap.c
keyboards/planck/keymaps/tom/config.h [new file with mode: 0644]
keyboards/planck/keymaps/tom/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/tom/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/tom/rules.mk [new file with mode: 0644]
keyboards/planck/keymaps/vxid/config.h [new file with mode: 0644]
keyboards/planck/keymaps/vxid/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/vxid/readme.md [new file with mode: 0644]
keyboards/preonic/keymaps/bucktooth/keymap.c
keyboards/preonic/keymaps/bucktooth/readme.md
keyboards/preonic/keymaps/default/config.h
keyboards/preonic/keymaps/juno/config.h [new file with mode: 0644]
keyboards/preonic/keymaps/juno/keymap.c [new file with mode: 0644]
keyboards/preonic/keymaps/juno/readme.md [new file with mode: 0644]
keyboards/preonic/keymaps/juno/rules.mk [new file with mode: 0644]
keyboards/primekb/prime_e/config.h [new file with mode: 0644]
keyboards/primekb/prime_e/info.json [new file with mode: 0644]
keyboards/primekb/prime_e/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/primekb/prime_e/keymaps/default/readme.md [new file with mode: 0644]
keyboards/primekb/prime_e/keymaps/via/keymap.c [new file with mode: 0644]
keyboards/primekb/prime_e/keymaps/via/readme.md [new file with mode: 0644]
keyboards/primekb/prime_e/keymaps/via/rules.mk [new file with mode: 0644]
keyboards/primekb/prime_e/prime_e.c [new file with mode: 0644]
keyboards/primekb/prime_e/prime_e.h [new file with mode: 0644]
keyboards/primekb/prime_e/readme.md [new file with mode: 0644]
keyboards/primekb/prime_e/rules.mk [new file with mode: 0644]
keyboards/primekb/prime_r/keymaps/default/config.h
keyboards/ps2avrGB/README.md
keyboards/ps2avrGB/keymaps/default/keymap.c
keyboards/ps2avrGB/program [deleted file]
keyboards/ps2avrGB/ps2avrGB.h
keyboards/ps2avrGB/rules.mk
keyboards/rama/m10_b/keymaps/default/config.h
keyboards/redox/keymaps/fculpo/config.h [new file with mode: 0644]
keyboards/redox/keymaps/fculpo/keymap.c [new file with mode: 0644]
keyboards/redox/keymaps/fculpo/keymap.json [new file with mode: 0644]
keyboards/redox/keymaps/fculpo/readme.md [new file with mode: 0644]
keyboards/redox/keymaps/fculpo/rules.mk [new file with mode: 0644]
keyboards/redox/keymaps/finex/config.h
keyboards/redox/keymaps/finex/keymap.c
keyboards/redox/keymaps/finex/readme.md
keyboards/redox/keymaps/finex/rules.mk
keyboards/redox/keymaps/nrichers/config.h [new file with mode: 0755]
keyboards/redox/keymaps/nrichers/keymap.c [new file with mode: 0755]
keyboards/redox/keymaps/nrichers/keymap.png [new file with mode: 0644]
keyboards/redox/keymaps/nrichers/readme.md [new file with mode: 0755]
keyboards/redox/keymaps/nrichers/rules.mk [new file with mode: 0755]
keyboards/satan/config.h
keyboards/satan/keymaps/default/keymap.c
keyboards/satan/pinout.txt [deleted file]
keyboards/satan/readme.md
keyboards/satan/rules.mk
keyboards/satan/satan.c
keyboards/satan/satan.h
keyboards/scarletbandana/keymaps/default/config.h
keyboards/scrabblepad/keymaps/default/config.h
keyboards/scrabblepad/keymaps/default/keymap.c
keyboards/singa/keymaps/default/config.h
keyboards/sirius/unigo66/info.json
keyboards/speedo/keymaps/default/config.h
keyboards/standaside/config.h [new file with mode: 0644]
keyboards/standaside/keymaps/default/config.h [new file with mode: 0644]
keyboards/standaside/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/standaside/readme.md [new file with mode: 0644]
keyboards/standaside/rules.mk [new file with mode: 0644]
keyboards/standaside/standaside.c [new file with mode: 0644]
keyboards/standaside/standaside.h [new file with mode: 0644]
keyboards/staryu/backlight_staryu.c [deleted file]
keyboards/staryu/backlight_staryu.h
keyboards/staryu/config.h
keyboards/staryu/keymaps/default/keymap.c
keyboards/staryu/rules.mk
keyboards/staryu/staryu.c
keyboards/staryu/staryu.h
keyboards/subatomic/keymaps/default/config.h
keyboards/subatomic/keymaps/default/keymap.c
keyboards/sx60/keymaps/default/config.h
keyboards/tanuki/keymaps/default/keymap.c
keyboards/telophase/keymaps/default/keymap.c
keyboards/tetris/keymaps/default/keymap.c
keyboards/the_ruler/keymaps/default/config.h
keyboards/the_ruler/keymaps/default/keymap.c
keyboards/thevankeyboards/bananasplit/keymaps/default/config.h
keyboards/thevankeyboards/minivan/keymaps/default/config.h
keyboards/thevankeyboards/roadkit/keymaps/default/config.h
keyboards/tmo50/keymaps/pyrol/keymap.c [new file with mode: 0644]
keyboards/v60_type_r/keymaps/default/config.h
keyboards/vision_division/keymaps/default/config.h
keyboards/vision_division/keymaps/default/keymap.c
keyboards/vitamins_included/keymaps/juno/keymap.c [new file with mode: 0644]
keyboards/vitamins_included/keymaps/juno/rules.mk [new file with mode: 0644]
keyboards/vitamins_included/keymaps/numpad/config.h [new file with mode: 0644]
keyboards/vitamins_included/keymaps/numpad/keymap.c [new file with mode: 0644]
keyboards/westfoxtrot/aanzee/info.json
keyboards/westfoxtrot/cypher/config.h [new file with mode: 0644]
keyboards/westfoxtrot/cypher/cypher.c [new file with mode: 0644]
keyboards/westfoxtrot/cypher/cypher.h [new file with mode: 0644]
keyboards/westfoxtrot/cypher/info.json [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/default-iso/config.h [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/default-iso/keymap.c [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/default-iso/readme.md [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/default/config.h [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/default/readme.md [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/kwer/config.h [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/kwer/keymap.c [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/kwer/readme.md [new file with mode: 0644]
keyboards/westfoxtrot/cypher/keymaps/kwer/rules.mk [new file with mode: 0644]
keyboards/westfoxtrot/cypher/readme.md [new file with mode: 0644]
keyboards/westfoxtrot/cypher/rules.mk [new file with mode: 0644]
keyboards/whitefox/keymaps/konstantin/keymap.c
keyboards/whitefox/keymaps/konstantin/rules.mk
keyboards/winkeyless/bface/program [deleted file]
keyboards/winkeyless/bface/rules.mk
keyboards/xd60/keymaps/default/keymap.c
keyboards/xd75/keymaps/adi/config.h
keyboards/xd75/keymaps/adi/keymap.c
keyboards/xd75/keymaps/adi/rules.mk
keyboards/xd75/keymaps/atomic_style/config.h
keyboards/xd75/keymaps/atomic_style/keymap.c
keyboards/xd75/keymaps/bbaserdem/config.h
keyboards/xd75/keymaps/bbaserdem/keymap.c
keyboards/xd75/keymaps/bramver/README.md [deleted file]
keyboards/xd75/keymaps/bramver/readme.md [new file with mode: 0644]
keyboards/xd75/keymaps/c4software_bepo/README.md [deleted file]
keyboards/xd75/keymaps/c4software_bepo/config.h
keyboards/xd75/keymaps/c4software_bepo/readme.md [new file with mode: 0644]
keyboards/xd75/keymaps/cbbrowne/config.h
keyboards/xd75/keymaps/cbbrowne/keymap.c
keyboards/xd75/keymaps/cbbrowne/rules.mk [new file with mode: 0644]
keyboards/xd75/keymaps/colinta/config.h
keyboards/xd75/keymaps/colinta/keymap.c
keyboards/xd75/keymaps/davidrambo/config.h
keyboards/xd75/keymaps/davidrambo/keymap.c
keyboards/xd75/keymaps/default/config.h
keyboards/xd75/keymaps/default/keymap.c
keyboards/xd75/keymaps/developper_bepo/README.md [deleted file]
keyboards/xd75/keymaps/developper_bepo/config.h
keyboards/xd75/keymaps/developper_bepo/readme.md [new file with mode: 0644]
keyboards/xd75/keymaps/dyn_macro_tap_dance/config.h
keyboards/xd75/keymaps/dyn_macro_tap_dance/keymap.c
keyboards/xd75/keymaps/emilyh/config.h
keyboards/xd75/keymaps/emilyh/keymap.c
keyboards/xd75/keymaps/fabian/config.h
keyboards/xd75/keymaps/french/README.md [deleted file]
keyboards/xd75/keymaps/french/config.h
keyboards/xd75/keymaps/french/keymap.c
keyboards/xd75/keymaps/french/readme.md [new file with mode: 0644]
keyboards/xd75/keymaps/germanized/config.h
keyboards/xd75/keymaps/germanized/keymap.c
keyboards/xd75/keymaps/kim-kim-xd73/config.h
keyboards/xd75/keymaps/kim-kim/config.h
keyboards/xd75/keymaps/kloki/config.h
keyboards/xd75/keymaps/kloki/keymap.c
keyboards/xd75/keymaps/markus/config.h
keyboards/xd75/keymaps/markus/keymap.c
keyboards/xd75/keymaps/msiu/config.h [new file with mode: 0644]
keyboards/xd75/keymaps/msiu/keymap.c [new file with mode: 0644]
keyboards/xd75/keymaps/msiu/readme.md [new file with mode: 0644]
keyboards/xd75/keymaps/mtdjr/config.h
keyboards/xd75/keymaps/mtdjr/keymap.c
keyboards/xd75/keymaps/tdl-jturner/config.h
keyboards/xd75/keymaps/tdl-jturner/keymap.c
keyboards/xd75/readme.md
keyboards/xd75/xd75.h
keyboards/xd96/config.h [new file with mode: 0644]
keyboards/xd96/custom_matrix_helper.c [new file with mode: 0644]
keyboards/xd96/info.json [new file with mode: 0644]
keyboards/xd96/keymaps/default/keymap.c [new file with mode: 0644]
keyboards/xd96/keymaps/default_iso/keymap.c [new file with mode: 0644]
keyboards/xd96/matrix.c [new file with mode: 0644]
keyboards/xd96/pca9555.c [new file with mode: 0644]
keyboards/xd96/pca9555.h [new file with mode: 0644]
keyboards/xd96/readme.md [new file with mode: 0644]
keyboards/xd96/rules.mk [new file with mode: 0644]
keyboards/xd96/xd96.c [new file with mode: 0644]
keyboards/xd96/xd96.h [new file with mode: 0644]
keyboards/ymd75/README.md
keyboards/ymd75/program [deleted file]
keyboards/ymd75/rules.mk
keyboards/ymd96/keymaps/default/keymap.c
keyboards/ymd96/program [deleted file]
keyboards/zeal60/zeal60_api.h
keyboards/zen/keymaps/default/config.h
keyboards/zen/matrix.c
layouts/community/60_ansi/mechmerlin-ansi/keymap.c
layouts/community/60_ansi/stanrc85-ansi/config.h [deleted file]
layouts/community/60_ansi/stanrc85-ansi/keymap.c
layouts/community/60_ansi/stanrc85-ansi/readme.md
layouts/community/60_ansi/stanrc85-ansi/rules.mk
layouts/community/60_ansi_split_bs_rshift/mechmerlin-split/keymap.c
layouts/community/66_ansi/mechmerlin/config.h
layouts/community/66_ansi/mechmerlin/keymap.c
layouts/community/75_ansi/mechmerlin-75_ansi/keymap.c
layouts/community/ergodox/drashna/keymap.c
layouts/community/ergodox/drashna_glow/README.md [deleted file]
layouts/community/ergodox/drashna_glow/config.h
layouts/community/ergodox/drashna_glow/keymap.c
layouts/community/ergodox/dvorak_programmer_swe/keymap.c
layouts/community/ergodox/dvorak_programmer_swe/readme.md
layouts/community/ergodox/familiar/README.md [deleted file]
layouts/community/ergodox/familiar/keymap.c [deleted file]
layouts/community/ergodox/familiar/rules.mk [deleted file]
layouts/community/ergodox/nstickney/keymap.c [new file with mode: 0644]
layouts/community/ergodox/nstickney/rules.mk [new file with mode: 0644]
layouts/community/numpad_5x6/bjohnson/config.h [new file with mode: 0644]
layouts/community/numpad_5x6/bjohnson/keymap.c [new file with mode: 0644]
layouts/community/numpad_5x6/bjohnson/rules.mk [new file with mode: 0644]
layouts/community/numpad_5x6/drashna/config.h [new file with mode: 0644]
layouts/community/numpad_5x6/drashna/keymap.c [new file with mode: 0644]
layouts/community/numpad_5x6/drashna/rules.mk [new file with mode: 0644]
layouts/community/numpad_5x6/layout.json [new file with mode: 0644]
layouts/community/numpad_5x6/readme.md [new file with mode: 0644]
layouts/community/ortho_4x12/bakingpy/config.h
layouts/community/ortho_4x12/bakingpy/rules.mk
layouts/community/ortho_4x12/drashna/config.h
layouts/community/ortho_4x12/drashna/keymap.c
layouts/community/ortho_4x12/drashna/rules.mk
layouts/community/ortho_4x12/jotix/keymap.c
layouts/community/ortho_4x12/jotix/readme.md
layouts/community/ortho_4x12/jotix2/keymap.c [new file with mode: 0644]
layouts/community/ortho_4x12/jotix2/readme.md [new file with mode: 0644]
layouts/community/ortho_4x12/symbolic/README.md
layouts/community/ortho_4x12/symbolic/config.h
layouts/community/ortho_4x12/symbolic/keymap.c
layouts/community/ortho_4x4/jotix/keymap.c
message.mk
quantum/api.c
quantum/audio/audio.c
quantum/audio/audio_arm.c
quantum/audio/audio_pwm.c
quantum/audio/musical_notes.h
quantum/audio/song_list.h
quantum/config_common.h
quantum/debounce/debounce_eager_pk.c [deleted file]
quantum/debounce/debounce_sym_g.c [deleted file]
quantum/debounce/eager_pk.c [new file with mode: 0644]
quantum/debounce/readme.md
quantum/debounce/sym_g.c [new file with mode: 0644]
quantum/keymap_common.c
quantum/process_keycode/process_unicode_common.c
quantum/quantum.c
quantum/quantum.h
quantum/rgb_matrix.c
quantum/rgb_matrix.h
quantum/rgblight.c
quantum/rgblight.h
quantum/split_common/i2c.c [deleted file]
quantum/split_common/i2c.h [deleted file]
quantum/split_common/matrix.c
quantum/split_common/split_flags.c [deleted file]
quantum/split_common/split_flags.h [deleted file]
quantum/split_common/split_util.c
quantum/split_common/transport.c
quantum/template/avr/config.h
quantum/template/avr/readme.md
quantum/template/avr/template.c
quantum/template/base/keymaps/default/config.h
quantum/template/base/keymaps/default/keymap.c
quantum/template/base/template.h
quantum/template/ps2avrgb/template.c
show_options.mk
tmk_core/avr.mk
tmk_core/common/avr/suspend.c
tmk_core/common/mousekey.c
tmk_core/common/mousekey.h
tmk_core/protocol/vusb/usbdrv/usbdrv.c
tmk_core/rules.mk
users/arkag/arkag.c
users/arkag/arkag.h
users/arkag/config.h
users/cbbrowne/cbbrowne.c [new file with mode: 0644]
users/cbbrowne/cbbrowne.h [new file with mode: 0644]
users/cbbrowne/rules.mk [new file with mode: 0644]
users/drashna/config.h
users/drashna/drashna.c
users/drashna/drashna.h
users/drashna/process_records.c
users/drashna/rgb_stuff.c
users/drashna/rules.mk
users/edvorakjp/edvorakjp.c
users/edvorakjp/edvorakjp.h
users/edvorakjp/edvorakjp_process_record.c
users/edvorakjp/edvorakjp_status.c
users/edvorakjp/edvorakjp_tap_dance.c
users/edvorakjp/readme.md
users/jarred/config.h
users/jarred/jarred.c
users/jarred/jarred.h
users/konstantin/konstantin.c
users/konstantin/konstantin.h
users/konstantin/rgb.c [new file with mode: 0644]
users/konstantin/rgb.h [new file with mode: 0644]
users/konstantin/rules.mk
users/konstantin/tap_dance.c
users/konstantin/tap_dance.h
users/konstantin/unicode.c [new file with mode: 0644]
users/konstantin/unicode.h
users/mechmerlin/changelog.md
users/mechmerlin/config.h
users/mechmerlin/readme.md
users/mechmerlin/rules.mk
users/stanrc85/config.h [new file with mode: 0644]
users/stanrc85/layer_rgb.c [new file with mode: 0644]
users/stanrc85/readme.md [new file with mode: 0644]
users/stanrc85/rules.mk [new file with mode: 0644]
users/stanrc85/stanrc85.c [new file with mode: 0644]
users/stanrc85/stanrc85.h [new file with mode: 0644]
util/bootloader_atmega32a_1_0_0.hex [new file with mode: 0644]
util/new_project.sh

index 8f78dc2bfe8a98e46a580ead307f65f4fe1051e1..6bd5acb335736505fc2cb4f400872244c07a8813 100644 (file)
@@ -1,4 +1,4 @@
-FROM debian
+FROM debian:9
 
 RUN apt-get update && apt-get install --no-install-recommends -y \
     avr-libc \
index 610f53b4d42d3cbc15fb846b704e74582f2495b5..bf3abbe5289549c7508e57d8a384057a05452799 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -536,9 +536,9 @@ endef
        cmp $(ROOT_DIR)/Makefile $(ROOT_DIR)/Makefile >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
        # Check if the submodules are dirty, and display a warning if they are
 ifndef SKIP_GIT
-       if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --init lib/chibios; fi
-       if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --init lib/chibios-contrib; fi
-       if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --init lib/ugfx; fi
+       if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 1 --init lib/chibios; fi
+       if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 1 --init lib/chibios-contrib; fi
+       if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 1 --init lib/ugfx; fi
        git submodule status --recursive 2>/dev/null | \
        while IFS= read -r x; do \
                case "$$x" in \
index 5aa56bf2a723f68edfa277c3612e31403cedf42d..2235d9c2ec7cfca2c921b2a4752f9a296cf623c7 100644 (file)
@@ -6,7 +6,7 @@ Vagrant.configure(2) do |config|
   config.vm.define "qmk_firmware"
 
   # VMware/Virtualbox ( and also Hyperv/Parallels) 64 bit
-  config.vm.box = "bento/ubuntu-16.04"
+  config.vm.box = "generic/debian9"
 
   # This section allows you to customize the Virtualbox VM
   # settings, ie showing the GUI or upping the memory
@@ -55,7 +55,7 @@ Vagrant.configure(2) do |config|
   # image, you'll need to: chmod -R a+rw .
   config.vm.provider "docker" do |docker, override|
     override.vm.box = nil
-    docker.image = "jesselang/debian-vagrant:jessie"
+    docker.image = "jesselang/debian-vagrant:stretch"
     docker.has_ssh = true
   end
 
index f5bef3d5dd68b80b1f696c145155bd1f05cb6d3c..046f94d1dbe5f505c9e6aba24025c9bd374ed63e 100644 (file)
@@ -298,34 +298,26 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
 endif
 
 DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
-# Debounce Modules. If implemented in matrix.c, don't use these.
+# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
 DEBOUNCE_TYPE?= sym_g
-VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
-ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
-    $(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
+ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
+    QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
 endif
-ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
-    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
-else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
-    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
-endif
-
-
 
 ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
     OPT_DEFS += -DSPLIT_KEYBOARD
 
     # Include files used by all split keyboards
-    QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
-                   $(QUANTUM_DIR)/split_common/split_util.c
+    QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_util.c
 
     # Determine which (if any) transport files are required
     ifneq ($(strip $(SPLIT_TRANSPORT)), custom)
         QUANTUM_SRC += $(QUANTUM_DIR)/split_common/transport.c
         # Functions added via QUANTUM_LIB_SRC are only included in the final binary if they're called.
-        # Unused functions are pruned away, which is why we can add both drivers here without bloat.
-        QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c \
-                           $(QUANTUM_DIR)/split_common/serial.c
+        # Unused functions are pruned away, which is why we can add multiple drivers here without bloat.
+        QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c \
+                           i2c_master.c \
+                           i2c_slave.c
     endif
     COMMON_VPATH += $(QUANTUM_PATH)/split_common
 endif
index 09ea9e6e7967cd2679d850e901af09abc9475c0b..c9d6c2bb14ec303b472dee71f44237be85951791 100644 (file)
@@ -3,7 +3,7 @@
   * [Building Your First Firmware](newbs_building_firmware.md)
   * [Flashing Firmware](newbs_flashing.md)
   * [Testing and Debugging](newbs_testing_debugging.md)
-  * [Best Practices](newbs_best_practices.md)
+  * [Git Best Practices](newbs_best_practices.md)
   * [Learning Resources](newbs_learn_more_resources.md)
 
 * [QMK Basics](README.md)
@@ -60,6 +60,7 @@
   * [Key Lock](feature_key_lock.md)
   * [Layouts](feature_layouts.md)
   * [Leader Key](feature_leader_key.md)
+  * [LED Matrix](feature_led_matrix.md)
   * [Macros](feature_macros.md)
   * [Mouse Keys](feature_mouse_keys.md)
   * [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
@@ -91,7 +92,8 @@
   * [Understanding QMK](understanding_qmk.md)
 
 * Other Topics
-  * [Using Eclipse with QMK](eclipse.md)
+  * [Using Eclipse with QMK](other_eclipse.md)
+  * [Using VSCode with QMK](other_vscode.md)
   * [Support](support.md)
 
 * QMK Internals (In Progress)
index 8fa6e944f067704d49333edf806121e74075eb76..ad42e978020193f3cfa324bb1b111f18318f10c3 100644 (file)
@@ -171,11 +171,15 @@ If you define these options you will enable the associated feature, which may in
 ## RGB Light Configuration
 
 * `#define RGB_DI_PIN D7`
-  * pin the DI on the ws2812 is hooked-up to
+  * pin the DI on the WS2812 is hooked-up to
 * `#define RGBLIGHT_ANIMATIONS`
   * run RGB animations
-* `#define RGBLED_NUM 15`
+* `#define RGBLED_NUM 12`
   * number of LEDs
+* `#define RGBLED_SPLIT { 6, 6 }`
+  * number of LEDs connected that are directly wired to `RGB_DI_PIN` on each half of a split keyboard
+  * First value indicates number of LEDs for left half, second value is for the right half
+  * Needed if both halves of the board have RGB LEDs wired directly to the RGB output pin on the controllers instead of passing the output of the left half to the input of the right half
 * `#define RGBLIGHT_HUE_STEP 12`
   * units to step when in/decreasing hue
 * `#define RGBLIGHT_SAT_STEP 25`
@@ -208,9 +212,13 @@ There are a few different ways to set handedness for split keyboards (listed in
 
 1. Set `SPLIT_HAND_PIN`: Reads a pin to determine handedness. If pin is high, it's the left side, if low, the half is determined to be the right side
 2. Set `EE_HANDS` and flash `eeprom-lefthand.eep`/`eeprom-righthand.eep` to each half
+   * For boards with DFU bootloader you can use `:dfu-split-left`/`:dfu-split-right` to flash these EEPROM files
+   * For boards with Caterina bootloader (like stock Pro Micros), use `:avrdude-split-left`/`:avrdude-split-right`
 3. Set `MASTER_RIGHT`: Half that is plugged into the USB port is determined to be the master and right half (inverse of the default)
 4. Default: The side that is plugged into the USB port is the master half and is assumed to be the left half. The slave side is the right half
 
+#### Defines for handedness
+
 * `#define SPLIT_HAND_PIN B7`
   * For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
 
@@ -232,6 +240,9 @@ There are a few different ways to set handedness for split keyboards (listed in
 * `#define MATRIX_COL_PINS_RIGHT { <col pins> }`
   * If you want to specify a different pinout for the right half than the left half, you can define `MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT`. Currently, the size of `MATRIX_ROW_PINS` must be the same as `MATRIX_ROW_PINS_RIGHT` and likewise for the definition of columns.
 
+* `#define RGBLED_SPLIT { 6, 6 }`
+  * See [RGB Light Configuration](#rgb-light-configuration)
+
 * `#define SELECT_SOFT_SERIAL_SPEED <speed>` (default speed is 1)
   * Sets the protocol speed when using serial communication
   * Speeds:
@@ -307,8 +318,8 @@ Use these to enable or disable building certain features. The more you have enab
   * Enables split keyboard support (dual MCU like the let's split and bakingpy's boards) and includes all necessary files located at quantum/split_common
 * `CUSTOM_MATRIX`
   * Allows replacing the standard matrix scanning routine with a custom one.
-* `CUSTOM_DEBOUNCE`
-  * Allows replacing the standard key debouncing routine with a custom one.
+* `DEBOUNCE_TYPE`
+  * Allows replacing the standard key debouncing routine with an alternative or custom one.
 * `WAIT_FOR_USB`
   * Forces the keyboard to wait for a USB connection to be established before it starts up
 * `NO_USB_STARTUP_CHECK`
index eee40609bb5de6115a2b2c2e712fc7ebb92d7cd8..15066185bc6a057cf826ff680bafa8feaba2bf70 100644 (file)
@@ -129,6 +129,20 @@ Documentation is one of the easiest ways to get started contributing to QMK. Fin
 
 You'll find all our documentation in the `qmk_firmware/docs` directory, or if you'd rather use a web based workflow you can click "Suggest An Edit" at the top of each page on http://docs.qmk.fm/.
 
+When providing code examples in your documentation, try to observe naming conventions used elsewhere in the docs. For example, standardizing enums as `my_layers` or `my_keycodes` for consistency:
+
+```c
+enum my_layers {
+  _FIRST_LAYER,
+  _SECOND_LAYER
+};
+
+enum my_keycodes {
+  FIRST_LAYER = SAFE_RANGE,
+  SECOND_LAYER
+};
+```
+
 ## Keymaps
 
 Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap.
@@ -137,7 +151,7 @@ Most first-time QMK contributors start with their personal keymaps. We try to ke
 * All Keymap PR's are squashed, so if you care about how your commits are squashed you should do it yourself
 * Do not lump features in with keymap PR's. Submit the feature first and then a second PR for the keymap.
 * Do not include `Makefile`s in your keymap folder (they're no longer used)
-* Update copyrights in file headers (look for `REPLACE_WITH_YOUR_NAME `)
+* Update copyrights in file headers (look for `%YOUR_NAME%`)
 
 ## Keyboards
 
@@ -150,7 +164,7 @@ We also ask that you follow these guidelines:
 * Do not lump core features in with new keyboards. Submit the feature first and then submit a separate PR for the keyboard.
 * Name `.c`/`.h` file after the immediate parent folder, eg `/keyboards/<kb1>/<kb2>/<kb2>.[ch]`
 * Do not include `Makefile`s in your keyboard folder (they're no longer used)
-* Update copyrights in file headers (look for `REPLACE_WITH_YOUR_NAME `)
+* Update copyrights in file headers (look for `%YOUR_NAME%`)
 
 ## Quantum/TMK Core
 
index cc84e141f928d02b22062b1d485718e80a567c28..655fa1578e5724ff73d8e33cc7a005cf5982785c 100644 (file)
@@ -116,29 +116,29 @@ Use the `IS_LED_ON(usb_led, led_name)` and `IS_LED_OFF(usb_led, led_name)` macro
 ```c
 void led_set_user(uint8_t usb_led) {
     if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
-        PORTB |= (1<<0);
+        writePinLow(B0);
     } else {
-        PORTB &= ~(1<<0);
+        writePinHigh(B0);
     }
     if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
-        PORTB |= (1<<1);
+        writePinLow(B1);
     } else {
-        PORTB &= ~(1<<1);
+        writePinHigh(B1);
     }
     if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
-        PORTB |= (1<<2);
+        writePinLow(B2);
     } else {
-        PORTB &= ~(1<<2);
+        writePinHigh(B2);
     }
     if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
-        PORTB |= (1<<3);
+        writePinLow(B3);
     } else {
-        PORTB &= ~(1<<3);
+        writePinHigh(B3);
     }
     if (IS_LED_ON(usb_led, USB_LED_KANA)) {
-        PORTB |= (1<<4);
+        writePinLow(B4);
     } else {
-        PORTB &= ~(1<<4);
+        writePinHigh(B4);
     }
 }
 ```
@@ -189,16 +189,18 @@ However, if you have hardware stuff that you need initialized, this is the best
 
 ### Example `keyboard_pre_init_user()` Implementation
 
-This example, at the keyboard level, sets up B1, B2, and B3 as LED pins.
+This example, at the keyboard level, sets up B0, B1, B2, B3, and B4 as LED pins.
 
 ```c
 void keyboard_pre_init_user(void) {
   // Call the keyboard pre init code.
 
   // Set our LED pins as output
-  DDRB |= (1<<1);
-  DDRB |= (1<<2);
-  DDRB |= (1<<3);
+  setPinOutput(B0);
+  setPinOutput(B1);
+  setPinOutput(B2);
+  setPinOutput(B3);
+  setPinOutput(B4);
 }
 ```
 
@@ -270,16 +272,13 @@ This is controlled by two functions: `suspend_power_down_*` and `suspend_wakeup_
 
 ### Example suspend_power_down_user() and suspend_wakeup_init_user() Implementation
 
-This example, at the keyboard level, sets up B1, B2, and B3 as LED pins.
 
 ```c
-void suspend_power_down_user(void)
-{
+void suspend_power_down_user(void) {
     rgb_matrix_set_suspend_state(true);
 }
 
-void suspend_wakeup_init_user(void)
-{
+void suspend_wakeup_init_user(void) {
     rgb_matrix_set_suspend_state(false);
 }
 ```
@@ -321,7 +320,7 @@ uint32_t layer_state_set_user(uint32_t state) {
 ```
 ### `layer_state_set_*` Function Documentation
 
-* Keyboard/Revision: `void uint32_t layer_state_set_kb(uint32_t state)`
+* Keyboard/Revision: `uint32_t layer_state_set_kb(uint32_t state)`
 * Keymap: `uint32_t layer_state_set_user(uint32_t state)`
 
 The `state` is the bitmask of the active layers, as explained in the [Keymap Overview](keymap.md#keymap-layer-status)
@@ -356,11 +355,11 @@ user_config_t user_config;
 
 This sets up a 32 bit structure that we can store settings with in memory, and write to the EEPROM. Using this removes the need to define variables, since they're defined in this structure. Remember that `bool` (boolean) values use 1 bit, `uint8_t` uses 8 bits, `uint16_t` uses up 16 bits.  You can mix and match, but changing the order can cause issues, as it will change the values that are read and written. 
 
-We're using `rgb_layer_change`, for the `layer_state_set_*` function, and use `matrix_init_user` and `process_record_user` to configure everything. 
+We're using `rgb_layer_change`, for the `layer_state_set_*` function, and use `keyboard_post_init_user` and `process_record_user` to configure everything. 
 
-Now, using the `matrix_init_user` code above, you want to add `eeconfig_read_user()` to it, to populate the structure you've just created. And you can then immediately use this structure to control functionality in your keymap.  And It should look like: 
+Now, using the `keyboard_post_init_user` code above, you want to add `eeconfig_read_user()` to it, to populate the structure you've just created. And you can then immediately use this structure to control functionality in your keymap.  And It should look like: 
 ```
-void matrix_init_user(void) {
+void keyboard_post_init_user(void) {
   // Call the keymap level matrix init.
 
   // Read the user config from EEPROM
@@ -447,6 +446,7 @@ And lastly, you want to add the `eeconfig_init_user` function, so that when the
 
 ```
 void eeconfig_init_user(void) {  // EEPROM is getting reset! 
+  user_config.raw = 0;
   user_config.rgb_layer_change = true; // We want this enabled by default
   eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
 
diff --git a/docs/eclipse.md b/docs/eclipse.md
deleted file mode 100644 (file)
index 2cb9064..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# Setting up Eclipse for QMK Development
-
-[Eclipse][1] is an open-source [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment) (IDE) widely used for Java development, but with an extensible plugin system that allows to customize it for other languages and usages.
-
-Using an IDE such as Eclipse provides many advantages over a plain text editor, such as:
-* intelligent code completion
-* convenient navigation in the code
-* refactoring tools
-* build automation (no need for the command-line)
-* a GUI for GIT
-* static code analysis
-* many other tools such as debugging, code formatting, showing call hierarchies etc.
-
-The purpose of the is page is to document how to set-up Eclipse for developing AVR software, and working on the QMK code base.
-
-Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
-
-# Prerequisites
-## Build Environment
-Before starting, you must have followed the [Getting Started](README.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
-
-## Java
-Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
-
-# Install Eclipse and Its Plugins
-Eclipse comes in [several flavours](http://www.eclipse.org/downloads/eclipse-packages/) depending on the target usage that you will have. There is no package comprising the AVR stack, so we will need to start from Eclipse CDT (C/C++ Development Tooling) and install the necessary plugins.
-
-## Download and Install Eclipse CDT
-If you already have Eclipse CDT on your system, you can skip this step. However it is advised to keep it up-to-date for better support.
-
-If you have another Eclipse package installed, it is normally possible to [install the CDT plugin over it](https://eclipse.org/cdt/downloads.php). However it is probably better to reinstall it from scratch to keep it light and avoid the clutter of tools that you don't need for the projects you will be working on.
-
-Installation is very simple: follow the [5 Steps to Install Eclipse](https://eclipse.org/downloads/eclipse-packages/?show_instructions=TRUE), and choose **Eclipse IDE for C/C++ Developers** at Step 3.
-
-Alternatively, you can also directly [download Eclipse IDE for C/C++ Developers](http://www.eclipse.org/downloads/eclipse-packages/) ([direct link to current version](http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/neonr)) and extract the package to the location of your choice (this creates an `eclipse` folder).
-
-## First Launch
-When installation is complete, click the <kbd>Launch</kbd> button. (If you extracted the package manually, open the Eclipse installation folder and double-click the `eclipse` executable)
-
-When you are prompted with the Workspace Selector, select a directory that will hold Eclipse metadata and usually your projects. **Do not select the `qmk_firmware` directory**, this will be the project directory. Select the parent folder instead, or another (preferably empty) folder of your choice (the default is fine if you do not use it yet).
-
-Once started, click the <kbd>Workbench</kbd> button at the top right to switch to the workbench view (there is a also checkbox at the bottom to skip the welcome screen at startup).
-
-## Install the Necessary Plugins
-Note: you do not need to restart Eclipse after installing each plugin. Simply restart once all plugins are installed.
-
-### [The AVR Plugin](http://avr-eclipse.sourceforge.net/)
-This is the most important plugin as it will allow Eclipse to _understand_ AVR C code. Follow [the instructions for using the update site](http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download#Update_Site), and agree with the security warning for unsigned content.
-
-### [ANSI Escape in Console](https://marketplace.eclipse.org/content/ansi-escape-console)
-This plugin is necessary to properly display the colored build output generated by the QMK makefile.
-
-1. Open <kbd><kbd>Help</kbd> > <kbd>Eclipse Marketplace…</kbd></kbd>
-2. Search for _ANSI Escape in Console_
-3. Click the <samp>Install</samp> button of the plugin
-4. Follow the instructions and agree again with the security warning for unsigned content.
-
-Once both plugins are installed, restart Eclipse as prompted.
-
-# Configure Eclipse for QMK
-## Importing the Project
-1. Click <kbd><kbd>File</kbd> > <kbd>New</kbd> > <kbd>Makefile Project with Existing Code</kbd></kbd>
-2. On the next screen:
-  * Select the directory where you cloned the repository as _Existing Code Location_;
-  * (Optional) Give a different name to the project¹, e.g. _QMK_ or _Quantum_;
-  * Select the _AVR-GCC Toolchain_;
-  * Keep the rest as-is and click <kbd>Finish</kbd>
-
-  ![Importing QMK in Eclipse](http://i.imgur.com/oHYR1yW.png)
-
-3. The project will now be loaded and indexed. Its files can be browsed easily through the _Project Explorer_ on the left.
-
-¹ There might be issues for importing the project with a custom name. If it does not work properly, try leaving the default project name (i.e. the name of the directory, probably `qmk_firmware`).
-
-## Build Your Keyboard
-We will now configure a make target that cleans the project and builds the keymap of your choice.
-
-1. On the right side of the screen, select the <kbd>Make Target</kbd> tab
-2. Expand the folder structure to the keyboard of your choice, e.g. `qmk_firmware/keyboards/ergodox`
-3. Right-click on the keyboard folder and select <kbd>New…</kbd> (or select the folder and click the <kbd>New Make Target</kbd> icon above the tree)
-4. Choose a name for your build target, e.g. _clean \<your keymap\>_
-5. Make Target: this is the arguments that you give to `make` when building from the command line. If your target name does not match these arguments, uncheck <kbd>Same as target name</kbd> and input the correct arguments, e.g. `clean <your keymap>`
-6. Leave the other options checked and click <kbd>OK</kbd>. Your make target will now appear under the selected keyboard.
-7. (Optional) Toggle the <kbd>Hide Empty Folders</kbd> icon button above the targets tree to only show your build target.
-8. Double-click the build target you created to trigger a build.
-9. Select the <kbd>Console</kbd> view at the bottom to view the running build.
-
-  [1]: https://en.wikipedia.org/wiki/Eclipse_(software)
\ No newline at end of file
index be26a7c581fee5a51790801b02804e114ea5bf47..0c1bedd7155a66b25fe597b48d16c6b990d01e43 100644 (file)
@@ -15,7 +15,7 @@ or just:
 
     $ sudo make <keyboard>:<keymap>:dfu
 
-Note that running `make` with `sudo` is generally *not* a good idea, and you should use one of the former methods, if possible.
+Note that running `make` with `sudo` is generally ***not*** a good idea, and you should use one of the former methods, if possible.
 
 ### Linux `udev` Rules
 On Linux, you'll need proper privileges to access the MCU. You can either use
@@ -36,6 +36,12 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="066
 # tmk keyboard products     https://github.com/tmk/tmk_keyboard
 SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
 ```
+**/etc/udev/rules.d/54-input-club-keyboard.rules:**
+
+```
+# Input Club keyboard bootloader
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
+```
 
 ### Serial device is not detected in bootloader mode on Linux
 Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
@@ -47,7 +53,12 @@ If you're using Windows to flash your keyboard, and you are running into issues,
 
 Re-running the installation script for MSYS2 may help (eg run `./util/qmk_install.sh` from MSYS2/WSL) or reinstalling the QMK Toolbox may fix the issue.
 
-If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUS(libusb-1.0)` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again.
+If that doesn't work, then you may need to grab the [Zadig Utility](https://zadig.akeo.ie/). Download this, find the device in question, and select the `WinUSB` option, and hit "Reinstall driver". Once you've done that, try flashing your board, again.  If that doesn't work, try all of the options, until one works. 
+
+?> There isn't a best option for which driver should be used here.  Some options work better on some systems than others.  libUSB and WinUSB seem to be the best options here.
+
+If the bootloader doesn't show up in the list for devices, you may need to enable the "List all devices" option in the `Options` menu, and then find the bootloader in question. 
+
 
 ## WINAVR is Obsolete
 It is no longer recommended and may cause some problem.
index b20acf3c44ec46750b52b77b08ec6e5191884e59..a6ddf458cc9faf9bbd547763d52784cdad9d66eb 100644 (file)
@@ -15,7 +15,7 @@ This will allow you to use `FN_CAPS` and `ALT_TAB` in your keymap, keeping it mo
 
 ## Caveats
 
-Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored.
+Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. If you need to apply modifiers to your tapped keycode, [Tap Dance](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
 
 Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two.
 
index 38861e8c14dffafb019a95ea1bc06e81a90117df..e1dd4c5a85c105dc5ad6529ed9d525a88dce93c3 100644 (file)
@@ -100,6 +100,16 @@ In music mode, the following keycodes work differently, and don't pass through:
 * `KC_UP` - speed-up playback
 * `KC_DOWN` - slow-down playback
 
+The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
+
+    #define PITCH_STANDARD_A 432.0f
+
+You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller.  To disable it, add this to your `config.h`:
+
+    #define NO_MUSIC_MODE
+
+### Music Mask
+
 By default, `MUSIC_MASK` is set to `keycode < 0xFF` which means keycodes less than `0xFF` are turned into notes, and don't output anything. You can change this by defining this in your `config.h` like this:
 
     #define MUSIC_MASK keycode != KC_NO
@@ -120,13 +130,26 @@ For a more advanced way to control which keycodes should still be processed, you
 
 Things that return false are not part of the mask, and are always processed.
 
-The pitch standard (`PITCH_STANDARD_A`) is 440.0f by default - to change this, add something like this to your `config.h`:
+### Music Map
 
-    #define PITCH_STANDARD_A 432.0f
+By default, the Music Mode uses the columns and row to determine the scale for the keys. For a board that uses a rectangular matrix that matches the keyboard layout, this is just fine.  However, for boards that use a more complicated matrix (such as the Planck Rev6, or many split keyboards) this would result in a very skewed experience.  
 
-You can completely disable Music Mode as well. This is useful, if you're pressed for space on your controller.  To disable it, add this to your `config.h`:
+However, the Music Map option allows you to remap the scaling for the music mode, so it fits the layout, and is more natural. 
 
-    #define NO_MUSIC_MODE
+To enable this feature, add `#define MUSIC_MAP` to your `config.h` file, and then you will want to add a `uint8_t music_map` to your keyboard's `c` file, or your `keymap.c`.
+
+```c
+const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_ortho_4x12(
+       36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+       24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+       12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+        0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11
+);
+```
+
+You will want to use whichever `LAYOUT` macro that your keyboard uses here.  This maps it to the correct key location.  Start in  the bottom left of the keyboard layout, and  move to the right, and then upwards.  Fill in all the entries until you have a complete matrix.  
+
+You can look at the [Planck Keyboard](https://github.com/qmk/qmk_firmware/blob/e9ace1487887c1f8b4a7e8e6d87c322988bec9ce/keyboards/planck/planck.c#L24-L29) as an example of how to implement this. 
 
 ## Audio Click
 
index 82b3d7de1237cce25b48e9aeebbb80df2aa8b17f..5d4343f08b9b559b9ebb5e72f35de2953e0632bc 100644 (file)
@@ -2,45 +2,38 @@
 
 QMK supports multiple debounce algorithms through its debounce API.
 
-The underlying debounce algorithm is determined by which matrix.c file you are using.
-
 The logic for which debounce method called is below. It checks various defines that you have set in rules.mk
 
 ```
+DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
 DEBOUNCE_TYPE?= sym_g
-VALID_DEBOUNCE_TYPES := sym_g eager_pk custom
-ifeq ($(filter $(DEBOUNCE_TYPE),$(VALID_DEBOUNCE_TYPES)),)
-    $(error DEBOUNCE_TYPE="$(DEBOUNCE_TYPE)" is not a valid debounce algorithm)
-endif
-ifeq ($(strip $(DEBOUNCE_TYPE)), sym_g)
-    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_sym_g.c
-else ifeq ($(strip $(DEBOUNCE_TYPE)), eager_pk)
-    QUANTUM_SRC += $(DEBOUNCE_DIR)/debounce_eager_pk.c
+ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
+    QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
 endif
 ```
 
 # Debounce selection
 
-| DEBOUNCE_ALGO    | Description                                                 | What to do                    |
-| -------------    | ---------------------------------------------------         | ----------------------------- |
-| Not defined      | You are using the included matrix.c and debounce.c          | Nothing. Debounce_sym_g will be compiled, and used if necessary |
-| custom           | Use your own debounce.c                                     | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
-| sym_g / eager_pk | You are using the included matrix.c and debounce.c          | Use an alternative debounce algorithm |
+| DEBOUNCE_TYPE    | Description                                          | What else is needed           |
+| -------------    | ---------------------------------------------------  | ----------------------------- |
+| Not defined      | Use the default algorithm, currently sym_g           | Nothing                       |
+| custom           | Use your own debounce.c                              | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
+| anything_else    | Use another algorithm from quantum/debounce/*        | Nothing                       |
 
-**Regarding split keyboards**: 
+**Regarding split keyboards**:
 The debounce code is compatible with split keyboards.
 
 # Use your own debouncing code
 * Set ```DEBOUNCE_TYPE = custom ```.
 * Add ```SRC += debounce.c```
-* Add your own ```debounce.c```. Look at included ```debounce_sym_g.c```s for sample implementations.
+* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
 * Debouncing occurs after every raw matrix scan.
 * Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
 
 # Changing between included debouncing methods
 You can either use your own code, by including your own debounce.c, or switch to another included one.
 Included debounce methods are:
-* debounce_eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` millseconds of no further input for that key
-* debounce_sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed.
+* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` millseconds of no further input for that key
+* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed.
 
 
index a7261d2dc88797f8bbe81c87096babfebc94320e..f57c6042ca5a0a97dea440a13aed4415ce9ce854 100644 (file)
@@ -18,7 +18,7 @@ If Mary presses GESC on her keyboard, the OS will see an KC_ESC character. Now i
 
 ### Caveats
 
- * On macOS CMD/GUI + KC_GRV is actually mapped to a hot key so it will not output a backtick.
+On macOS, Command+<code>&#96;</code> is by default mapped to "Move focus to next window" so it will not output a backtick. Additionally, Terminal always recognises this shortcut to cycle between windows, even if the shortcut is changed in the Keyboard preferences.
 
 ## Configuration
 
index 79419abd20a4c80637439f42d1fc35da356bb497..743fc3ad550c955d22689f01587efbdba439998d 100644 (file)
@@ -146,9 +146,59 @@ send_string(my_str);
 SEND_STRING(".."SS_TAP(X_END));
 ```
 
-## The Old Way: `MACRO()` & `action_get_macro`
 
-?> This is inherited from TMK, and hasn't been updated - it's recommend that you use `SEND_STRING` and `process_record_user` instead.
+## Advanced Macro Functions
+
+There are some functions you may find useful in macro-writing. Keep in mind that while you can write some fairly advanced code within a macro, if your functionality gets too complex you may want to define a custom keycode instead. Macros are meant to be simple.
+
+### `record->event.pressed`
+
+This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
+
+```c
+    if (record->event.pressed) {
+        // on keydown
+    } else {
+        // on keyup
+    }
+```
+
+### `register_code(<kc>);`
+
+This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
+
+### `unregister_code(<kc>);`
+
+Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
+
+### `tap_code(<kc>);`
+
+This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
+
+If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
+
+### `register_code16(<kc>);`, `unregister_code16(<kc>);` and `tap_code16(<kc>);`
+
+These functions work similar to their regular counterparts, but allow you to use modded keycodes (with Shift, Alt, Control, and/or GUI applied to them).
+
+Eg, you could use `register_code16(S(KC_5));` instead of registering the mod, then registering the keycode.
+
+### `clear_keyboard();`
+
+This will clear all mods and keys currently pressed.
+
+### `clear_mods();`
+
+This will clear all mods currently pressed.
+
+### `clear_keyboard_but_mods();`
+
+This will clear all keys besides the mods currently pressed.
+
+
+##  **(DEPRECATED)** The Old Way: `MACRO()` & `action_get_macro`
+
+!> This is inherited from TMK, and hasn't been updated - it's recommended that you use `SEND_STRING` and `process_record_user` instead.
 
 By default QMK assumes you don't have any macros. To define your macros you create an `action_get_macro()` function. For example:
 
@@ -222,49 +272,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 };
 ```
 
-## Advanced Macro Functions
-
-There are some functions you may find useful in macro-writing. Keep in mind that while you can write some fairly advanced code within a macro if your functionality gets too complex you may want to define a custom keycode instead. Macros are meant to be simple.
-
-### `record->event.pressed`
-
-This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
-
-```c
-    if (record->event.pressed) {
-        // on keydown
-    } else {
-        // on keyup
-    }
-```
-
-### `register_code(<kc>);`
-
-This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
-
-### `unregister_code(<kc>);`
-
-Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
-
-### `tap_code(<kc>);`
-
-This will send `register_code(<kc>)` and then `unregister_code(<kc>)`. This is useful if you want to send both the press and release events ("tap" the key, rather than hold it).
-
-If you're having issues with taps (un)registering, you can add a delay between the register and unregister events by setting `#define TAP_CODE_DELAY 100` in your `config.h` file. The value is in milliseconds.
-
-### `clear_keyboard();`
-
-This will clear all mods and keys currently pressed.
-
-### `clear_mods();`
-
-This will clear all mods currently pressed.
-
-### `clear_keyboard_but_mods();`
-
-This will clear all keys besides the mods currently pressed.
 
-## Advanced Example: Single-Key Copy/Paste
+### Advanced Example: Single-Key Copy/Paste
 
 This example defines a macro which sends `Ctrl-C` when pressed down, and `Ctrl-V` when released.
 
index 673eafaef5e02aa060681a3df9b58d1eaf00db96..e64ddf3d06669ba503eef566985fdfa978b640e4 100644 (file)
@@ -1,48 +1,48 @@
 # Mousekeys
 
 
-Mousekeys is a feature that allows you to emulate a mouse using your keyboard. You can move the pointer around, click up to 5 buttons, and even scroll in all 4 directions. QMK uses the same algorithm as the X Window System MouseKeysAccel feature. You can read more about it [on Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys).
+Mousekeys is a feature that allows you to emulate a mouse using your keyboard. You can move the pointer around, click up to 5 buttons, and even scroll in all 4 directions.
 
-## Adding Mousekeys to a Keymap
+There are 2 ways to define how the mousekeys behave, using "[auto-accelerating](#configuring-the-behavior-of-mousekeys-with-auto-accelerated-movement)" or "[3-speed constant](#configuring-the-behavior-of-mousekeys-with-3-speed-constant-movement)" behavior.
 
-There are two steps to adding Mousekeys support to your keyboard. You must enable support in the `rules.mk` file and you must map mouse actions to keys on your keyboard.
+In either case, you will need to enable mousekeys in your makefile,
+and add the relevant [keycodes](#mapping-mouse-actions-to-keyboard-keys) to your keymap.
 
-### Adding Mousekeys Support in the `rules.mk`
+#### Enable Mousekeys
 
-To add support for Mousekeys you simply need to add a single line to your keymap's `rules.mk`:
+To enable the mousekey functionality, add the following line to your keymap's `rules.mk`:
 
 ```
 MOUSEKEY_ENABLE = yes
 ```
 
-You can see an example here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/keymaps/mouse_keys/rules.mk
-
-### Mapping Mouse Actions to Keyboard Keys
+#### Mapping Mouse Actions to Keyboard Keys
 
 You can use these keycodes within your keymap to map button presses to mouse actions:
 
-|Key             |Aliases  |Description                |
-|----------------|---------|---------------------------|
-|`KC_MS_UP`      |`KC_MS_U`|Mouse Cursor Up            |
-|`KC_MS_DOWN`    |`KC_MS_D`|Mouse Cursor Down          |
-|`KC_MS_LEFT`    |`KC_MS_L`|Mouse Cursor Left          |
-|`KC_MS_RIGHT`   |`KC_MS_R`|Mouse Cursor Right         |
-|`KC_MS_BTN1`    |`KC_BTN1`|Mouse Button 1             |
-|`KC_MS_BTN2`    |`KC_BTN2`|Mouse Button 2             |
-|`KC_MS_BTN3`    |`KC_BTN3`|Mouse Button 3             |
-|`KC_MS_BTN4`    |`KC_BTN4`|Mouse Button 4             |
-|`KC_MS_BTN5`    |`KC_BTN5`|Mouse Button 5             |
-|`KC_MS_WH_UP`   |`KC_WH_U`|Mouse Wheel Up             |
-|`KC_MS_WH_DOWN` |`KC_WH_D`|Mouse Wheel Down           |
-|`KC_MS_WH_LEFT` |`KC_WH_L`|Mouse Wheel Left           |
-|`KC_MS_WH_RIGHT`|`KC_WH_R`|Mouse Wheel Right          |
-|`KC_MS_ACCEL0`  |`KC_ACL0`|Set mouse acceleration to 0|
-|`KC_MS_ACCEL1`  |`KC_ACL1`|Set mouse acceleration to 1|
-|`KC_MS_ACCEL2`  |`KC_ACL2`|Set mouse acceleration to 2|
-
-You can see an example in the `_ML` here: https://github.com/qmk/qmk_firmware/blob/master/keyboards/clueboard/66/keymaps/mouse_keys/keymap.c#L46
-
-## Configuring the Behavior of Mousekeys
+|Key             |Aliases  |Description                        |
+|----------------|---------|-----------------------------------|
+|`KC_MS_UP`      |`KC_MS_U`|Mouse Cursor Up                    |
+|`KC_MS_DOWN`    |`KC_MS_D`|Mouse Cursor Down                  |
+|`KC_MS_LEFT`    |`KC_MS_L`|Mouse Cursor Left                  |
+|`KC_MS_RIGHT`   |`KC_MS_R`|Mouse Cursor Right                 |
+|`KC_MS_BTN1`    |`KC_BTN1`|Mouse Button 1                     |
+|`KC_MS_BTN2`    |`KC_BTN2`|Mouse Button 2                     |
+|`KC_MS_BTN3`    |`KC_BTN3`|Mouse Button 3                     |
+|`KC_MS_BTN4`    |`KC_BTN4`|Mouse Button 4                     |
+|`KC_MS_BTN5`    |`KC_BTN5`|Mouse Button 5                     |
+|`KC_MS_WH_UP`   |`KC_WH_U`|Mouse Wheel Up                     |
+|`KC_MS_WH_DOWN` |`KC_WH_D`|Mouse Wheel Down                   |
+|`KC_MS_WH_LEFT` |`KC_WH_L`|Mouse Wheel Left                   |
+|`KC_MS_WH_RIGHT`|`KC_WH_R`|Mouse Wheel Right                  |
+|`KC_MS_ACCEL0`  |`KC_ACL0`|Set mouse acceleration to 0(slow)  |
+|`KC_MS_ACCEL1`  |`KC_ACL1`|Set mouse acceleration to 1(medium)|
+|`KC_MS_ACCEL2`  |`KC_ACL2`|Set mouse acceleration to 2(fast)  |
+
+
+## Configuring the Behavior of Mousekeys with auto-accelerated movement
+
+This behavior is intended to emulate the X Window System MouseKeysAccel feature. You can read more about it [on Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys).
 
 The default speed for controlling the mouse with the keyboard is intentionally slow. You can adjust these parameters by adding these settings to your keymap's `config.h` file. All times are specified in milliseconds (ms).
 
@@ -55,27 +55,60 @@ The default speed for controlling the mouse with the keyboard is intentionally s
 #define MOUSEKEY_WHEEL_TIME_TO_MAX 40
 ```
 
-
-### `MOUSEKEY_DELAY`
+#### `MOUSEKEY_DELAY`
 
 When one of the mouse movement buttons is pressed this setting is used to define the delay between that button press and the mouse cursor moving. Some people find that small movements are impossible if this setting is too low, while settings that are too high feel sluggish.
 
-### `MOUSEKEY_INTERVAL`
+#### `MOUSEKEY_INTERVAL`
 
 When a movement key is held down this specifies how long to wait between each movement report. Lower settings will translate into an effectively higher mouse speed.
 
-### `MOUSEKEY_MAX_SPEED`
+#### `MOUSEKEY_MAX_SPEED`
 
 As a movement key is held down the speed of the mouse cursor will increase until it reaches `MOUSEKEY_MAX_SPEED`.
 
-### `MOUSEKEY_TIME_TO_MAX`
+#### `MOUSEKEY_TIME_TO_MAX`
 
 How long you want to hold down a movement key for until `MOUSEKEY_MAX_SPEED` is reached. This controls how quickly your cursor will accelerate.
 
-### `MOUSEKEY_WHEEL_MAX_SPEED`
+#### `MOUSEKEY_WHEEL_MAX_SPEED`
 
 The top speed for scrolling movements.
 
-### `MOUSEKEY_WHEEL_TIME_TO_MAX`
+#### `MOUSEKEY_WHEEL_TIME_TO_MAX`
 
 How long you want to hold down a scroll key for until `MOUSEKEY_WHEEL_MAX_SPEED` is reached. This controls how quickly your scrolling will accelerate.
+
+
+## Configuring the Behavior of Mousekeys with 3-speed constant movement
+
+In your keymap's `config.h`, you must add the line:
+```
+#define MK_3_SPEED
+```
+Then you can precisely define 3 different speeds for both the cursor and the mouse wheel, and also whether speed selection is momentary or tap-to-select.
+For each speed, you can specify how many milliseconds you want between reports(interval), and how far you want to it to move per report(offset).
+
+For example:
+
+```
+#define MK_3_SPEED
+#define MK_MOMENTARY_ACCEL // comment this out for tap-to-select acceleration
+// cursor speeds:
+#define MK_C_OFFSET_SLOW     1 // pixels
+#define MK_C_INTERVAL_SLOW 100 // milliseconds
+#define MK_C_OFFSET_MED      4
+#define MK_C_INTERVAL_MED   16
+#define MK_C_OFFSET_FAST    12
+#define MK_C_INTERVAL_FAST  16
+// scroll wheel speeds:
+#define MK_W_OFFSET_SLOW     1 // wheel clicks
+#define MK_W_INTERVAL_SLOW 400 // milliseconds
+#define MK_W_OFFSET_MED      1
+#define MK_W_INTERVAL_MED  200
+#define MK_W_OFFSET_FAST     1
+#define MK_W_INTERVAL_FAST 100
+```
+
+Medium values will be used as the default or unmodified speed.
+The speed at which both the cursor and scrolling move can be selected with KC_ACL0, KC_ACL1, KC_ACL2 for slow, medium, and fast. However, if you leave MK_MOMENTARY_ACCEL defined then there is no need to ever send KC_ACL1, since that will be the unmodified speed.
index 910a704691255aa94fbf6cc1d4471e4912059e76..8d1efb12a2750954286a45a80b2660a55e12d522 100644 (file)
@@ -147,6 +147,7 @@ These are the effects that are currently available:
            RGB_MATRIX_DIGITAL_RAIN,
        #ifdef RGB_MATRIX_KEYPRESSES
            RGB_MATRIX_SOLID_REACTIVE,
+           RGB_MATRIX_REACTIVE_SIMPLE,
            RGB_MATRIX_SPLASH,
            RGB_MATRIX_MULTISPLASH,
            RGB_MATRIX_SOLID_SPLASH,
@@ -173,6 +174,7 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
 |`#define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS`   |Disables `RGB_MATRIX_JELLYBEAN_RAINDROPS`   |
 |`#define DISABLE_RGB_MATRIX_DIGITAL_RAIN`          |Disables `RGB_MATRIX_DIGITAL_RAIN`          |
 |`#define DISABLE_RGB_MATRIX_SOLID_REACTIVE`        |Disables `RGB_MATRIX_SOLID_REACTIVE`        |
+|`#define DISABLE_RGB_MATRIX_REACTIVE_SIMPLE`       |Disables `RGB_MATRIX_REACTIVE_SIMPLE`       |
 |`#define DISABLE_RGB_MATRIX_SPLASH`                |Disables `RGB_MATRIX_SPLASH`                |
 |`#define DISABLE_RGB_MATRIX_MULTISPLASH`           |Disables `RGB_MATRIX_MULTISPLASH`           |
 |`#define DISABLE_RGB_MATRIX_SOLID_SPLASH`          |Disables `RGB_MATRIX_SOLID_SPLASH`          |
index 23b6f1c941dba30771ee7507cf4032e1caa90aa9..9ecc0deb5cdafb375291264d466639fefbc1b414 100644 (file)
@@ -23,10 +23,11 @@ RGBLIGHT_ENABLE = yes
 
 At minimum you must define the data pin your LED strip is connected to, and the number of LEDs in the strip, in your `config.h`. If your keyboard has onboard RGB LEDs, and you are simply creating a keymap, you usually won't need to modify these.
 
-|Define      |Description                                  |
-|------------|---------------------------------------------|
-|`RGB_DI_PIN`|The pin connected to the data pin of the LEDs|
-|`RGBLED_NUM`|The number of LEDs connected                 |
+|Define         |Description                                                                                              |
+|---------------|---------------------------------------------------------------------------------------------------------|
+|`RGB_DI_PIN`   |The pin connected to the data pin of the LEDs                                                            |
+|`RGBLED_NUM`   |The number of LEDs connected                                                                             |
+|`RGBLED_SPLIT` |(Optional) For split keyboards, the number of LEDs connected on each half directly wired to `RGB_DI_PIN` |
 
 Then you should be able to use the keycodes below to change the RGB lighting to your liking.
 
@@ -188,6 +189,53 @@ If you need to change your RGB lighting in code, for example in a macro to chang
 
 Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list!
 
+## Changing the order of the LEDs
+
+If you want to make the logical order of LEDs different from the electrical connection order, you can do this by defining the `RGBLIGHT_LED_MAP` macro in your `config.h`.
+
+By defining `RGBLIGHT_LED_MAP` as in the example below, you can specify the LED with addressing in reverse order of the electrical connection order.
+
+```c
+// config.h
+
+#define RGBLED_NUM 10
+#define RGBLIGHT_LED_MAP { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }
+
+```
+
+For keyboards that use the RGB LEDs as a backlight for each key, you can also define it as in the example below.
+
+```c
+// config.h
+
+#define RGBLED_NUM 30
+
+/* RGB LED Conversion macro from physical array to electric array */
+#define LED_LAYOUT( \
+    L00, L01, L02, L03, L04, L05,  \
+    L10, L11, L12, L13, L14, L15,  \
+    L20, L21, L22, L23, L24, L25,  \
+    L30, L31, L32, L33, L34, L35,  \
+    L40, L41, L42, L43, L44, L45 ) \
+  { \
+    L05, L04, L03, L02, L01, L00,   \
+    L10, L11, L12, L13, L14, L15,   \
+    L25, L24, L23, L22, L21, L20,   \
+    L30, L31, L32, L33, L34, L35,   \
+    L46, L45, L44, L43, L42, L41    \
+  }
+
+/* RGB LED logical order map */
+/* Top->Bottom, Right->Left */
+#define RGBLIGHT_LED_MAP LED_LAYOUT( \
+  25, 20, 15, 10,  5,  0,       \
+  26, 21, 16, 11,  6,  1,       \
+  27, 22, 17, 12,  7,  2,       \
+  28, 23, 18, 13,  8,  3,       \
+  29, 24, 19, 14,  9,  4 )
+
+```
+
 ## Hardware Modification
 
 If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins.
index f2f2749440a218cc46d7b2c68e1363e299d1fbd7..b5e5218b093d01c7ad8c99bf79c76efbebf2d345 100644 (file)
@@ -314,3 +314,86 @@ qk_tap_dance_action_t tap_dance_actions[] = {
 And then simply use `TD(X_CTL)` anywhere in your keymap.
 
 If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace.
+
+### Example 5: Using tap dance for advanced mod-tap and layer-tap keys
+
+Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`.
+
+Below your layers and custom keycodes, add the following:
+
+```c
+// tapdance keycodes
+enum td_keycodes {
+  ALT_LP // Our example key: `LALT` when held, `(` when tapped. Add additional keycodes for each tapdance.
+};
+
+// define a type containing as many tapdance states as you need
+typedef enum {
+  SINGLE_TAP,
+  SINGLE_HOLD,
+  DOUBLE_SINGLE_TAP
+} td_state_t;
+
+// create a global instance of the tapdance state type
+static td_state_t td_state;
+
+// declare your tapdance functions:
+
+// function to determine the current tapdance state
+int cur_dance (qk_tap_dance_state_t *state);
+
+// `finished` and `reset` functions for each tapdance keycode
+void altlp_finished (qk_tap_dance_state_t *state, void *user_data);
+void altlp_reset (qk_tap_dance_state_t *state, void *user_data);
+```
+
+Below your `LAYOUT`, define each of the tapdance functions:
+
+```c
+// determine the tapdance state to return
+int cur_dance (qk_tap_dance_state_t *state) {
+  if (state->count == 1) {
+    if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
+    else { return SINGLE_HOLD; }
+  }
+  if (state->count == 2) { return DOUBLE_SINGLE_TAP; }
+  else { return 3; } // any number higher than the maximum state value you return above
+}
+// handle the possible states for each tapdance keycode you define:
+
+void altlp_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_state = cur_dance(state);
+  switch (td_state) {
+    case SINGLE_TAP:
+      register_code16(KC_LPRN);
+      break;
+    case SINGLE_HOLD:
+      register_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
+      break;
+    case DOUBLE_SINGLE_TAP: // allow nesting of 2 parens `((` within tapping term
+      tap_code16(KC_LPRN);
+      register_code16(KC_LPRN);
+  }
+}
+
+void altlp_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (td_state) {
+    case SINGLE_TAP:
+      unregister_code16(KC_LPRN);
+      break;
+    case SINGLE_HOLD:
+      unregister_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
+      break;
+    case DOUBLE_SINGLE_TAP:
+      unregister_code16(KC_LPRN);
+  }
+}
+
+// define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [ALT_LP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altlp_finished, altlp_reset)
+};
+```
+
+Wrap each tapdance keycode in `TD()` when including it in your keymap, e.g. `TD(ALT_LP)`.
index 7dd85c5c2e7815885ec14d87e90f00a16a4b5495..1bc3c89d2025de27e2b302b58c5eb2197033d99a 100644 (file)
@@ -65,6 +65,8 @@ The following input modes are available:
   To enable, go to _System Preferences > Keyboard > Input Sources_, add _Unicode Hex Input_ to the list (it's under _Other_), then activate it from the input dropdown in the Menu Bar.
   By default, this mode uses the left Option key (`KC_LALT`), but this can be changed by defining [`UNICODE_OSX_KEY`](#input-key-configuration) with another keycode.
 
+  **Note:** Using the _Unicode Hex Input_ input source may disable some Option based shortcuts, such as: Option + Left Arrow (`moveWordLeftAndModifySelection`) and Option + Right Arrow  (`moveWordRightAndModifySelection`).
+
 * **`UC_LNX`**: Linux built-in IBus Unicode input. Supports code points up to `0x10FFFF` (all possible code points).
 
   Enabled by default and works almost anywhere on IBus-enabled distros. Without IBus, this mode works under GTK apps, but rarely anywhere else.
@@ -121,7 +123,7 @@ For instance, you can add these definitions to your `config.h` file:
 
 ### Additional Customization
 
-Because Unicode is such a large and variable feature, there are a number of options that you can customize to work better on your system. 
+Because Unicode is such a large and variable feature, there are a number of options that you can customize to work better on your system.
 
 #### Start and Finish input functions
 
@@ -183,7 +185,7 @@ AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
 
 ### US International
 
-If you enable the US International layout on the system, it will use punctuation to accent the characters. 
+If you enable the US International layout on the system, it will use punctuation to accent the characters.
 
 For instance, typing "`a" will result in à.
 
index 5a9fc287b3e17f33ce3d492abb034c6ea4be13d2..d82d43138d7789c3c4d0d835267cce8ecd826fa0 100644 (file)
@@ -201,27 +201,51 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   switch (keycode) {
-  case KC_MAKE:
-    if (!record->event.pressed) {
-      SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP
-#if  (defined(BOOTLOADER_DFU) || defined(BOOTLOADER_LUFA_DFU) || defined(BOOTLOADER_QMK_DFU))
-       ":dfu "
-#elif defined(BOOTLOADER_HALFKAY)
-      ":teensy "
-#elif defined(BOOTLOADER_CATERINA)
-       ":avrdude "
-#endif
-        SS_TAP(X_ENTER));
-    }
-    return false;
-    break;
+    case KC_MAKE:  // Compiles the firmware, and adds the flash command based on keyboard bootloader
+            if (!record->event.pressed) {
+            uint8_t temp_mod = get_mods();
+            uint8_t temp_osm = get_oneshot_mods();
+            clear_mods(); clear_oneshot_mods();
+            SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
+    #ifndef FLASH_BOOTLOADER
+            if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT ) 
+    #endif
+            { // 
+                #if defined(__arm__)  // only run for ARM boards
+                    SEND_STRING(":dfu-util");
+                #elif defined(BOOTLOADER_DFU) // only run for DFU boards
+                    SEND_STRING(":dfu");
+                #elif defined(BOOTLOADER_HALFKAY) // only run for teensy boards
+                    SEND_STRING(":teensy");
+                #elif defined(BOOTLOADER_CATERINA) // only run for Pro Micros
+                    SEND_STRING(":avrdude");
+                #endif // bootloader options
+            }
+            if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) { 
+                SEND_STRING(" -j8 --output-sync"); 
+            }
+            SEND_STRING(SS_TAP(X_ENTER));
+            set_mods(temp_mod);
+        }
+        break;
+
   }
   return process_record_keymap(keycode, record);
 }
 ```
 
+For boards that may not have a shift button (such as on a macro pad), we need a way to always include the bootloader option.  To do that, add the following to the `rules.mk` in your userspace folder: 
+
+```make 
+ifeq ($(strip $(FLASH_BOOTLOADER)), yes)
+    OPT_DEFS += -DFLASH_BOOTLOADER
+endif
+```
+
 This will add a new `KC_MAKE` keycode that can be used in any of your keymaps.  And this keycode will output `make <keyboard>:<keymap>`, making frequent compiling easier.  And this will work with any keyboard and any keymap as it will output the current boards info, so that you don't have to type this out every time.
 
-Additionally, this should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely (and will dump the HEX in the ".build" folder instead).
+Also, holding `shift` will add the appropriate flashing command (`:dfu`, `:teensy`, `:avrdude`, `:dfu-util`) for a majority of keyboards.  Holding `control` will add some commands that will speed up compiling time by processing multiple files at once. 
 
+And for the boards that lack a shift key, or that you want to always attempt the flashing part, you can add `FLASH_BOOTLOADER = yes` to the `rules.mk` of that keymap.
 
+?> This should flash the newly compiled firmware automatically, using the correct utility, based on the bootloader settings (or default to just generating the HEX file). However, it should be noted that this may not work on all systems. AVRDUDE doesn't work on WSL, namely. And this doesn't support BootloadHID or mdloader. 
index 9030500a2bb1383ad1573d6445ace589eaf5b6df..014d6ef107bde933b119e5b205987c36bf23d914 100644 (file)
@@ -17,6 +17,7 @@ QMK has a staggering number of features for building your keyboard. It can take
 * [Key Lock](feature_key_lock.md) - Lock a key in the "down" state.
 * [Layouts](feature_layouts.md) - Use one keymap with any keyboard that supports your layout.
 * [Leader Key](feature_leader_key.md) - Tap the leader key followed by a sequence to trigger custom behavior.
+* [LED Matrix](feature_led_matrix.md) - LED Matrix single color lights for per key lighting (Single Color, not RGB).
 * [Macros](feature_macros.md) - Send multiple key presses when pressing only one physical key.
 * [Mouse keys](feature_mouse_keys.md) - Control your mouse pointer from your keyboard.
 * [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) - Sticky Keys, lets hit a key rather than holding it.
index bc418c4150608f8bd037454e21ac5f89755974f8..3b4582f0057e4f14edffac7f9536afe2aa79cbea 100644 (file)
@@ -49,9 +49,18 @@ To generate this bootloader, use the `bootloader` target, eg `make planck/rev4:d
 
 To generate a production-ready .hex file (containing the application and the bootloader), use the `production` target, eg `make planck/rev4:default:production`.
 
+### DFU commands
+
+There are a number of DFU commands that you can use to flash firmware to a DFU device:
+
+* `:dfu` - This is the normal option and waits until a DFU device is available, and then flashes the firmware. This will check every 5 seconds, to see if a DFU device has appeared.
+* `:dfu-ee` - This flashes an `eep` file instead of the normal hex.  This is uncommon. 
+* `:dfu-split-left` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Left Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
+* `:dfu-split-right` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Right Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
+
 ## Caterina
 
-Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
+Arduino boards and their clones use the [Caterina bootloader](https://github.com/arduino/ArduinoCore-avr/tree/master/bootloaders/caterina) (any keyboard built with a Pro Micro, or clone), and uses the avr109 protocol to communicate through virtual serial. Bootloaders like [A-Star](https://www.pololu.com/docs/0J61/9) are based on Caterina.
 
 To ensure compatibility with the Caterina bootloader, make sure this block is present your `rules.mk`:
 
@@ -84,6 +93,7 @@ or if you want to flash multiple boards, use the following command
 
 When you're done flashing boards, you'll need to hit Ctrl + C or whatever the correct keystroke is for your operating system to break the loop.
 
+
 ## Halfkay
 
 Halfkay is a super-slim protocol developed by PJRC that uses HID, and come on all Teensys (namely the 2.0).
@@ -131,3 +141,12 @@ Flashing sequence:
     * You will receive a warning about the DFU signature; Just ignore it
 4. Reset the device into application mode (may be done automatically)
     * If you are building from command line (e.g. `make planck/rev6:default:dfu-util`), make sure that `:leave` is passed to the `DFU_ARGS` variable inside your `rules.mk` (e.g. `DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave`) so that your device resets after flashing
+
+### STM32 Commands
+
+There are a number of DFU commands that you can use to flash firmware to a STM32 device:
+
+* `:dfu-util` - The default command for flashing to STM32 devices. 
+* `:dfu-util-wait` - This works like the default command, but it gives you a (configurable) 10 second timeout before it attempts to flash the firmware.  You can use `TIME_DELAY=20` from the command line to change the timeout.
+   * Eg: `make <keyboard>:<keymap>:dfu-util TIME_DELAY=5`
+* `:st-link-cli` - This allows you to flash the firmware via ST-LINK's CLI utility, rather than dfu-util. 
index eb9f5b370fb26945d5a5cbd781ed905d14f62feb..1f771b1a04bf8e07c28fc5f1587095be31b6c845 100644 (file)
@@ -44,9 +44,7 @@ Fedora / Red Hat example:
     
 Arch / Manjaro example:
 
-    pacman -S base-devel gcc unzip wget zip avr-gcc avr-binutils avr-libc dfu-util arm-none-eabi-gcc arm-none-eabi-binutils arm-none-eabi-newlib git
-
-(the `dfu-programmer` package is availble on AUR only so you should download from there or use an AUR helper)
+    pacman -S base-devel gcc unzip wget zip avr-gcc avr-binutils avr-libc dfu-util arm-none-eabi-gcc arm-none-eabi-binutils arm-none-eabi-newlib git dfu-programmer dfu-util
 
 ## Nix
 
index bb7e1e7e3b6f534516c0d00b31cdc39446aa0379..75eafd42ccca52cdb1f2c1c7b017f54b9cfa973f 100644 (file)
@@ -143,9 +143,9 @@ As there is no standard split communication driver for ARM-based split keyboards
 
 Lets you replace the default matrix scanning routine with your own code. You will need to provide your own implementations of matrix_init() and matrix_scan().
 
-`CUSTOM_DEBOUNCE`
+`DEBOUNCE_TYPE`
 
-Lets you replace the default key debouncing routine with your own code. You will need to provide your own implementation of debounce().
+Lets you replace the default key debouncing routine with an alternative one. If `custom` you will need to provide your own implementation.
 
 ## Customizing Makefile Options on a Per-Keymap Basis
 
index 697a508052117cdd4612de67c03514510b7a0311..d2cba770e27fe9c138f90a1af06efcc4ed122a64 100644 (file)
@@ -196,7 +196,7 @@ If you're more of a visual learner, or want some additional tips and something m
 
 From here, you should have a working keyboard once you program a firmware. Before we attach the Teensy permanently to the keyboard, let's quickly get some firmware loaded onto the Teensy so we can test each keyswitch.
 
-To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/).
+To start out, download [the firmware](https://github.com/qmk/qmk_firmware/) - we'll be using my (Jack's) fork of TMK called QMK/Quantum. We'll be doing a lot from the Terminal/command prompt, so get that open, along with a decent text editor like [Sublime Text](http://www.sublimetext.com/) (paid) or [Visual Studio Code](https://code.visualstudio.com) (free).
 
 The first thing we're going to do is create a new project using the script in the root directory of the firmware. In your terminal, run this command with `<project_name>` replaced by the name of your project - it'll need to be different from any other project in the `keyboards/` folder:
 
index cc54e566a1f1c24c8afd01833d99a88b6c0dc98c..0772f055d685496253daa5f98d530ef53f77314c 100644 (file)
@@ -12,7 +12,7 @@ place:
 ``` text
 +------+         +-----+       +----------+      +----------+     +----+
 | User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS |
-+------+         +-----+       +----------+      +----------+     |----+
++------+         +-----+       +----------+      +----------+     +----+
 ```
 
 This scheme is a very simple view of what's going on, and more details follow
index 18546fc62be5ced8d1a5e5ce308107cc31af4954..bb1a2d74ffd2ab455ac1ac974ea22d7dd29ca734 100644 (file)
@@ -12,7 +12,7 @@ The I2C Master drivers used in QMK have a set of common functions to allow porta
 |`uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);`                         |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. |
 |`uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);`       |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written.                                                                          |
 |`uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);`        |Same as the `i2c_receive` function but `regaddr` sets from where in the slave the data will be read.                                                                         |
-|`uint8_t i2c_stop(uint16_t timeout);`                                                                             |Stops the I2C driver.                                                                                                                                                        |
+|`uint8_t i2c_stop(void);`                                                                                         |Ends an I2C transaction.                                                                                                                                                     |
 
 ### Function Return
 
index 18f2147846b96f2aa35a5cb37a1214e0bcfef035..0f786c5141bf6f3dc0a7bed893c890aea03749b9 100644 (file)
@@ -63,6 +63,7 @@ If you just want to get things back to normal, you can flash only a bootloader f
 
 * [`atmega32u4`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32u4_1_0_0.hex) - Most keyboards, Planck Rev 1-5, Preonic Rev 1-2
 * [`at90usb1286`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_at90usb128x_1_0_1.hex) - Planck Light Rev 1
+* [`atmega32a`](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader_atmega32a_1_0_0.hex) - jj40
 
 If you're not sure what your board uses, look in the `rules.mk` file for the keyboard in QMK. The `MCU =` line will have the value you need. It may differ between different versions of the board.
 
@@ -113,6 +114,10 @@ Since our keyboard uses an `atmega32u4` (common), that is the chip we'll specify
 
     avrdude -c avrisp -P COM3 -p atmega32u4 -U flash:w:main.hex:i
 
+If your board uses an `atmega32a` (e.g. on a jj40), the command is this (the extra code at the end sets the fuses correctly):
+
+       avrdude -c avrisp -P COM3 -p atmega32 -U flash:w:main.hex:i -U hfuse:w:0xD0:m -U lfuse:w:0x0F:m
+
 You should see a couple of progress bars, then you should see:
 
     avrdude: verifying ...
index 49e6654a26dc756d2905f5133a842ce36e6a5aca..457dbf67e1cd0b9777f7e09ffaacce08097e8739 100644 (file)
@@ -161,62 +161,6 @@ Some interesting things to note:
 * We have used our `_______` definition to turn `KC_TRNS` into `_______`. This makes it easier to spot the keys that have changed on this layer.
 * While in this layer if you press one of the `_______` keys it will activate the key in the next lowest active layer.
 
-### Custom Functions
-
-At the bottom of the file we've defined a single custom function. This function defines a key that sends `KC_ESC` when pressed without modifiers and `KC_GRAVE` when modifiers are held. There are a couple pieces that need to be in place for this to work, and we will go over both of them.
-
-#### `fn_actions[]`
-
-We define the `fn_actions[]` array to point to custom functions. `F(N)` in a keymap will call element N of that array. For the Clueboard's that looks like this:
-
-    const uint16_t PROGMEM fn_actions[] = {
-      [0] = ACTION_FUNCTION(0),  // Calls action_function()
-    };
-
-In this case we've instructed QMK to call the `ACTION_FUNCTION` callback, which we will define in the next section.
-
-> This `fn_actions[]` interface is mostly for backward compatibility.  In QMK, you don't need to use `fn_actions[]`.  You can directly use `ACTION_FUNCTION(N)` or any other action code value itself normally generated by the macro in `keymaps[][MATRIX_ROWS][MATRIX_COLS]`.  N in `F(N)` can only be 0 to 31.  Use of the action code directly in `keymaps` unlocks this limitation.
-
-You can get a full list of Action Functions in [action_code.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action_code.h). 
-
-#### `action_function()`
-
-To actually handle the keypress event we define an `action_function()`. This function will be called when the key is pressed, and then again when the key is released. We have to handle both situations within our code, as well as determining whether to send/release `KC_ESC` or `KC_GRAVE`.
-
-    void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
-      static uint8_t mods_pressed;
-
-      switch (id) {
-        case 0:
-          /* Handle the combined Grave/Esc key
-           */
-          mods_pressed = get_mods()&GRAVE_MODS; // Check to see what mods are pressed
-
-          if (record->event.pressed) {
-            /* The key is being pressed.
-             */
-            if (mods_pressed) {
-              add_key(KC_GRV);
-              send_keyboard_report();
-            } else {
-              add_key(KC_ESC);
-              send_keyboard_report();
-            }
-          } else {
-            /* The key is being released.
-             */
-            if (mods_pressed) {
-              del_key(KC_GRV);
-              send_keyboard_report();
-            } else {
-              del_key(KC_ESC);
-              send_keyboard_report();
-            }
-          }
-          break;
-      }
-    }
-
 # Nitty Gritty Details
 
 This should have given you a basic overview for creating your own keymap. For more details see the following resources:
index 9d2bf920f53afb6219d8ffa766d9b686ae4e3536..a985e5d2b2f34a8790a7af2294fd227b2de85830 100644 (file)
@@ -131,6 +131,16 @@ If you have any issues with this, you may need to this:
 
     sudo make <my_keyboard>:<my_keymap>:dfu
 
+#### DFU commands
+
+There are a number of DFU commands that you can use to flash firmware to a DFU device:
+
+* `:dfu` - This is the normal option and waits until a DFU device is available, and then flashes the firmware. This will check every 5 seconds, to see if a DFU device has appeared.
+* `:dfu-ee` - This flashes an `eep` file instead of the normal hex.  This is uncommon. 
+* `:dfu-split-left` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Left Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
+* `:dfu-split-right` - This flashes the normal firmware, just like the default option (`:dfu`). However, this also flashes the "Right Side" EEPROM file for split keyboards. _This is ideal for Elite C based split keyboards._
+
+
 ### Caterina 
 
 For Arduino boards and their clones (such as the SparkFun ProMicro), when you're ready to compile and flash your firmware, open up your terminal window and run the build command: 
@@ -199,6 +209,14 @@ If you have any issues with this, you may need to this:
 
     sudo make <my_keyboard>:<my_keymap>:avrdude
 
+
+Additionally, if you want to flash multiple boards, use the following command:
+
+    make <keyboard>:<keymap>:avrdude-loop
+
+When you're done flashing boards, you'll need to hit Ctrl + C or whatever the correct keystroke is for your operating system to break the loop.
+
+
 ## HalfKay
 
 For the PJRC devices (Teensy's), when you're ready to compile and flash your firmware, open up your terminal window and run the build command: 
@@ -226,12 +244,61 @@ Waiting for Teensy device...
 
  ```
  Found HalfKay Bootloader
-Read "./.build/ergodox_ez_drashna.hex": 28532 bytes, 88.5% usage
+Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
 Programming............................................................................................................................................................................
 ...................................................
 Booting
 ```
 
+## STM32 (ARM)
+
+For a majority of ARM boards (including the Proton C, Planck Rev 6, and Preonic Rev 3), when you're ready to compile and flash your firmware, open up your terminal window and run the build command: 
+
+    make <my_keyboard>:<my_keymap>:dfu-util
+
+For example, if your keymap is named "xyverz" and you're building a keymap for the Planck Revision 6 keyboard, you'll use this command and then reboot the keyboard to the bootloader (before it finishes compiling):
+
+    make planck/rev6:xyverz:dfu-util
+
+Once the firmware finishes compiling, it will output something like this: 
+
+```
+Linking: .build/planck_rev6_xyverz.elf                                                             [OK]
+Creating binary load file for flashing: .build/planck_rev6_xyverz.bin                               [OK]
+Creating load file for flashing: .build/planck_rev6_xyverz.hex                                     [OK]
+
+Size after:
+   text    data     bss     dec     hex filename
+      0   41820       0   41820    a35c .build/planck_rev6_xyverz.hex
+
+Copying planck_rev6_xyverz.bin to qmk_firmware folder                                              [OK]
+dfu-util 0.9
+
+Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
+Copyright 2010-2016 Tormod Volden and Stefan Schmidt
+This program is Free Software and has ABSOLUTELY NO WARRANTY
+Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
+
+Invalid DFU suffix signature
+A valid DFU suffix will be required in a future dfu-util release!!!
+Opening DFU capable USB device...
+ID 0483:df11
+Run-time device DFU version 011a
+Claiming USB DFU Interface...
+Setting Alternate Setting #0 ...
+Determining device status: state = dfuERROR, status = 10
+dfuERROR, clearing status
+Determining device status: state = dfuIDLE, status = 0
+dfuIDLE, continuing
+DFU mode device DFU version 011a
+Device returned transfer size 2048
+DfuSe interface name: "Internal Flash  "
+Downloading to address = 0x08000000, size = 41824
+Download        [=========================] 100%        41824 bytes
+Download done.
+File downloaded successfully
+Transitioning to dfuMANIFEST state
+```
 
 ## Test It Out!
 
index aefa1b73850c49977d79b02fbfdd946b926e7ef9..ae4b799a9c5371570a1b48933ff63b9178fa1cb1 100644 (file)
@@ -66,8 +66,10 @@ You will need to install Git. It's very likely that you already have it, but if
 
 Once you have set up your Linux/Unix environment, you are ready to download QMK. We will do this by using Git to "clone" the QMK repository. Open a Terminal or MSYS2 MinGW window and leave it open for the remainder of this guide. Inside that window run these two commands:
 
-    git clone https://github.com/qmk/qmk_firmware.git
-    cd qmk_firmware
+```shell
+git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
+cd qmk_firmware
+```
 
 ?> If you already know [how to use GitHub](getting_started_github.md), we recommend that you create and clone your own fork instead. If you don't know what that means, you can safely ignore this message.
 
diff --git a/docs/other_eclipse.md b/docs/other_eclipse.md
new file mode 100644 (file)
index 0000000..2cb9064
--- /dev/null
@@ -0,0 +1,88 @@
+# Setting up Eclipse for QMK Development
+
+[Eclipse][1] is an open-source [Integrated Development Environment](https://en.wikipedia.org/wiki/Integrated_development_environment) (IDE) widely used for Java development, but with an extensible plugin system that allows to customize it for other languages and usages.
+
+Using an IDE such as Eclipse provides many advantages over a plain text editor, such as:
+* intelligent code completion
+* convenient navigation in the code
+* refactoring tools
+* build automation (no need for the command-line)
+* a GUI for GIT
+* static code analysis
+* many other tools such as debugging, code formatting, showing call hierarchies etc.
+
+The purpose of the is page is to document how to set-up Eclipse for developing AVR software, and working on the QMK code base.
+
+Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
+
+# Prerequisites
+## Build Environment
+Before starting, you must have followed the [Getting Started](README.md#getting-started) section corresponding to your system. In particular, you must have been able to build the firmware with [the `make` command](../#the-make-command).
+
+## Java
+Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
+
+# Install Eclipse and Its Plugins
+Eclipse comes in [several flavours](http://www.eclipse.org/downloads/eclipse-packages/) depending on the target usage that you will have. There is no package comprising the AVR stack, so we will need to start from Eclipse CDT (C/C++ Development Tooling) and install the necessary plugins.
+
+## Download and Install Eclipse CDT
+If you already have Eclipse CDT on your system, you can skip this step. However it is advised to keep it up-to-date for better support.
+
+If you have another Eclipse package installed, it is normally possible to [install the CDT plugin over it](https://eclipse.org/cdt/downloads.php). However it is probably better to reinstall it from scratch to keep it light and avoid the clutter of tools that you don't need for the projects you will be working on.
+
+Installation is very simple: follow the [5 Steps to Install Eclipse](https://eclipse.org/downloads/eclipse-packages/?show_instructions=TRUE), and choose **Eclipse IDE for C/C++ Developers** at Step 3.
+
+Alternatively, you can also directly [download Eclipse IDE for C/C++ Developers](http://www.eclipse.org/downloads/eclipse-packages/) ([direct link to current version](http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/neonr)) and extract the package to the location of your choice (this creates an `eclipse` folder).
+
+## First Launch
+When installation is complete, click the <kbd>Launch</kbd> button. (If you extracted the package manually, open the Eclipse installation folder and double-click the `eclipse` executable)
+
+When you are prompted with the Workspace Selector, select a directory that will hold Eclipse metadata and usually your projects. **Do not select the `qmk_firmware` directory**, this will be the project directory. Select the parent folder instead, or another (preferably empty) folder of your choice (the default is fine if you do not use it yet).
+
+Once started, click the <kbd>Workbench</kbd> button at the top right to switch to the workbench view (there is a also checkbox at the bottom to skip the welcome screen at startup).
+
+## Install the Necessary Plugins
+Note: you do not need to restart Eclipse after installing each plugin. Simply restart once all plugins are installed.
+
+### [The AVR Plugin](http://avr-eclipse.sourceforge.net/)
+This is the most important plugin as it will allow Eclipse to _understand_ AVR C code. Follow [the instructions for using the update site](http://avr-eclipse.sourceforge.net/wiki/index.php/Plugin_Download#Update_Site), and agree with the security warning for unsigned content.
+
+### [ANSI Escape in Console](https://marketplace.eclipse.org/content/ansi-escape-console)
+This plugin is necessary to properly display the colored build output generated by the QMK makefile.
+
+1. Open <kbd><kbd>Help</kbd> > <kbd>Eclipse Marketplace…</kbd></kbd>
+2. Search for _ANSI Escape in Console_
+3. Click the <samp>Install</samp> button of the plugin
+4. Follow the instructions and agree again with the security warning for unsigned content.
+
+Once both plugins are installed, restart Eclipse as prompted.
+
+# Configure Eclipse for QMK
+## Importing the Project
+1. Click <kbd><kbd>File</kbd> > <kbd>New</kbd> > <kbd>Makefile Project with Existing Code</kbd></kbd>
+2. On the next screen:
+  * Select the directory where you cloned the repository as _Existing Code Location_;
+  * (Optional) Give a different name to the project¹, e.g. _QMK_ or _Quantum_;
+  * Select the _AVR-GCC Toolchain_;
+  * Keep the rest as-is and click <kbd>Finish</kbd>
+
+  ![Importing QMK in Eclipse](http://i.imgur.com/oHYR1yW.png)
+
+3. The project will now be loaded and indexed. Its files can be browsed easily through the _Project Explorer_ on the left.
+
+¹ There might be issues for importing the project with a custom name. If it does not work properly, try leaving the default project name (i.e. the name of the directory, probably `qmk_firmware`).
+
+## Build Your Keyboard
+We will now configure a make target that cleans the project and builds the keymap of your choice.
+
+1. On the right side of the screen, select the <kbd>Make Target</kbd> tab
+2. Expand the folder structure to the keyboard of your choice, e.g. `qmk_firmware/keyboards/ergodox`
+3. Right-click on the keyboard folder and select <kbd>New…</kbd> (or select the folder and click the <kbd>New Make Target</kbd> icon above the tree)
+4. Choose a name for your build target, e.g. _clean \<your keymap\>_
+5. Make Target: this is the arguments that you give to `make` when building from the command line. If your target name does not match these arguments, uncheck <kbd>Same as target name</kbd> and input the correct arguments, e.g. `clean <your keymap>`
+6. Leave the other options checked and click <kbd>OK</kbd>. Your make target will now appear under the selected keyboard.
+7. (Optional) Toggle the <kbd>Hide Empty Folders</kbd> icon button above the targets tree to only show your build target.
+8. Double-click the build target you created to trigger a build.
+9. Select the <kbd>Console</kbd> view at the bottom to view the running build.
+
+  [1]: https://en.wikipedia.org/wiki/Eclipse_(software)
\ No newline at end of file
diff --git a/docs/other_vscode.md b/docs/other_vscode.md
new file mode 100644 (file)
index 0000000..7427f75
--- /dev/null
@@ -0,0 +1,117 @@
+# Setting up Visual Studio Code for QMK Development
+
+[Visual Studio Code](https://code.visualstudio.com/) (VS Code) is an open-source code editor that supports many different programming languages. 
+
+Using a full-featured editor such as VS Code provides many advantages over a plain text editor, such as:
+* intelligent code completion
+* convenient navigation in the code
+* refactoring tools
+* build automation (no need for the command-line)
+* a graphical front end for GIT
+* many other tools such as debugging, code formatting, showing call hierarchies etc.
+
+The purpose of this page is to document how to set up VS Code for developing QMK Firmware.
+
+This guide covers how to configure everything needed on Windows and Ubuntu 18.04
+
+# Set up VS Code
+Before starting, you will want to make sure that you have all of the build tools set up, and QMK Firmware cloned. Head to the the [Newbs Getting Started Guide](newbs_getting_started.md) to get things set up, if you haven't already.
+
+## Windows
+
+### Prerequisites
+
+* [Git for Windows](https://git-scm.com/download/win) (This link will prompt to save/run the installer)
+  
+  1. Disable all of the options but `Git LFS (Large File Support)` and `Check daily for Git for Windows updates`. 
+  2. Set the default editor to `Use Visual Studio Code as Git's default editor`
+  3. Select the `Use Git from Git Bash only` option, since that's the option that you should use here.
+  4. For the `Choosing HTTPS transport backend`, either option should be fine.
+  5. Select the `Checkout as-is, commit Unix-style line endings` option. QMK Firmware uses Unix style commits.
+  6. For the extra options, leave the default options as is. 
+
+  This software is needed for Git support in VS Code. It may be possible to not include this, but it is much simpler to just use this. 
+
+* [Git Credential Manager for Windows](https://github.com/Microsoft/Git-Credential-Manager-for-Windows/releases) (Optional) 
+
+  This software provides better support for Git by providing secure storage for git credentials, MFA and personal access token generation. 
+  
+  This isn't strictly needed, but we would recommend it. 
+
+
+### Installing VS Code
+
+1. Head to [VS Code](https://code.visualstudio.com/) and download the installer
+2. Run the installer
+
+This part is super simple.  However, there is some configuration that we need to do to ensure things are configured correctly.
+
+### Configuring VS Code
+
+First, we need to set up IntelliSense. This isn't strictly required, but it will make your life a LOT easier. To do this, we need to create the `.vscode/c_cpp_properies.json` file in the QMK Firmware folder, You can do this all manually, but I've done most of the work already. 
+
+Grab [this file](https://gist.github.com/drashna/48e2c49ce877be592a1650f91f8473e8) and save it.  You may need to edit this file, if you didn't install MSYS2 to the default location, or are using WSL/LxSS.  
+
+Once you have saved this file, you will need to reload VS Code, if it was already running. 
+
+?> You should see an `extensions.json` and `settings.json` file in the `.vscode` folder, as well.
+
+
+Now, we will set up the MSYS2 window to show up in VSCode as the integrated terminal.  This has a number of advantages. Mostly, you can control+click on errors and jump to those files.  This makes debugging much easier.  It's also nice, in that you don't have to jump to another window. 
+
+1. Click <kbd><kbd>File</kbd> > <kbd>Preferences ></kbd> > <kbd>Settings</kbd> </kbd>
+2. Click on the <kbd>{}</kbd> button, in the top right to open the `settings.json` file. 
+3. Set the file's content to: 
+
+   ```json
+   {
+        "terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe",
+        "terminal.integrated.env.windows": {
+            "MSYSTEM": "MINGW64",
+            "CHERE_INVOKING": "1"
+        },
+        "terminal.integrated.shellArgs.windows": [
+            "--login"
+        ],
+        "terminal.integrated.cursorStyle": "line"
+    }
+    ```
+
+   If there are settings here already, then just add everything between the first and last curly brackets.  
+
+?> If you installed MSYS2 to a different folder, then you'll need to change the path for `terminal.integrated.shell.windows` to the correct path for your system. 
+
+4. Hit Ctrl-` (grave) to bring up the terminal.  
+
+   This should start the terminal in the workspace's folder (so the `qmk_firmware` folder), and then you can compile your keyboard. 
+
+
+## Every other Operating System
+
+1. Head to [VS Code](https://code.visualstudio.com/) and download the installer
+2. Run the installer
+3. That's it
+
+No, really, that's it.  The paths needed are already included when installing the packages, and it is much better about detecting the current workspace files and parsing them for IntelliSense. 
+
+## Plugins
+
+There are a number of extensions that you may want to install:
+
+* [Git Extension Pack](https://marketplace.visualstudio.com/items?itemName=donjayamanne.git-extension-pack) - 
+This installs a bunch of Git related tools that may make using Git with QMK Firmware easier.
+* [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - _[Optional]_ -  Helps to keep the code to the QMK Coding Conventions.
+* [Bracket Pair Colorizer 2](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2) - _[Optional]_ - This color codes the brackets in your code, to make it easier to reference nested code.
+* [Github Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's.
+* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out.  This is great if you're having issues and need some help from somebody.
+* [VIM Keymap](https://marketplace.visualstudio.com/items?itemName=GiuseppeCesarano.vim-keymap) - _[Optional]_ - For those that prefer VIM style keybindings. There are other options for this, too. 
+* [Travis CI Status](https://marketplace.visualstudio.com/items?itemName=felixrieseberg.vsc-travis-ci-status) - _[Optional]_ - This shows the current Travis CI status, if you have it set up.
+
+Restart once you've installed any extensions
+
+# Configure VS Code for QMK
+1. Click <kbd><kbd>File</kbd> > <kbd>Open Folder</kbd></kbd>
+2. Open the QMK Firmware folder that you cloned from GitHub. 
+3. Click <kbd><kbd>File</kbd> > <kbd>Save Workspace As...</kbd></kbd>
+
+And now you're ready to code QMK Firmware in VS Code
index bf4b5eadcdde73b5778a9a9e0798e0fe1e652b73..a94c9c3191e7882e3d88049d845a5f8346875859 100644 (file)
@@ -135,9 +135,11 @@ The `process_record()` function itself is deceptively simple, but hidden within
 * [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/action.c#L172)
   * [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L206)
     * [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L226)
+    * [`void velocikey_accelerate(void)`](https://github.com/qmk/qmk_firmware/blob/c1c5922aae7b60b7c7d13d3769350eed9dda17ab/quantum/velocikey.c#L27)
     * [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L119)
     * [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_key_lock.c#L62)
     * [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_clicky.c#L79)
+    * [`bool process_haptic(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/2cee371bf125a6ec541dd7c5a809573facc7c456/drivers/haptic/haptic.c#L216)
     * [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/card.c#L20)
       * [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/card/keymaps/default/keymap.c#L58)
     * [`bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/rgb_matrix.c#L139)
index 50a30ebce77dcfdfa369d3d8e14f8759f82c0ac2..0e5edcc380a3d3d5804b0f8ece1fb62929802ff3 100644 (file)
@@ -101,8 +101,7 @@ uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t l
   return i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), regaddr, 1, data, length, MS2ST(timeout));
 }
 
-// This is usually not needed. It releases the driver to allow pins to become GPIO again.
-uint8_t i2c_stop(uint16_t timeout)
+uint8_t i2c_stop(void)
 {
   i2cStop(&I2C_DRIVER);
   return 0;
index 7a9eb32eb9fb7131aa2a1ed6f6406082ec33dcea..4ab2301f8cfb40f5660b7bf4e9089b80f1ad1841 100644 (file)
@@ -47,4 +47,4 @@ uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t ti
 uint8_t i2c_transmit_receive(uint8_t address, uint8_t * tx_body, uint16_t tx_length, uint8_t * rx_body, uint16_t rx_length);
 uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
 uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
-uint8_t i2c_stop(uint16_t timeout);
+uint8_t i2c_stop(void);
index 19bae33e9f174c31e60133b8ab83925713afb983..0db949db4aba25ac3ff6a32cc3b9a477e69c45f9 100755 (executable)
@@ -7,43 +7,44 @@
 
 #include "i2c_master.h"
 #include "timer.h"
+#include "wait.h"
 
 #ifndef F_SCL
-#define F_SCL 400000UL // SCL frequency
+#  define F_SCL 400000UL  // SCL frequency
 #endif
 #define Prescaler 1
-#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16 ) / 2)
+#define TWBR_val ((((F_CPU / F_SCL) / Prescaler) - 16) / 2)
 
-void i2c_init(void)
-{
-  TWSR = 0;     /* no prescaler */
+void i2c_init(void) {
+  TWSR = 0; /* no prescaler */
   TWBR = (uint8_t)TWBR_val;
 }
 
-i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
-{
+i2c_status_t i2c_start(uint8_t address, uint16_t timeout) {
   // reset TWI control register
   TWCR = 0;
   // transmit START condition
-  TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+  TWCR = (1 << TWINT) | (1 << TWSTA) | (1 << TWEN);
 
   uint16_t timeout_timer = timer_read();
-  while( !(TWCR & (1<<TWINT)) ) {
+  while (!(TWCR & (1 << TWINT))) {
     if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
       return I2C_STATUS_TIMEOUT;
     }
   }
 
   // check if the start condition was successfully transmitted
-  if(((TW_STATUS & 0xF8) != TW_START) && ((TW_STATUS & 0xF8) != TW_REP_START)){ return I2C_STATUS_ERROR; }
+  if (((TW_STATUS & 0xF8) != TW_START) && ((TW_STATUS & 0xF8) != TW_REP_START)) {
+    return I2C_STATUS_ERROR;
+  }
 
   // load slave address into data register
   TWDR = address;
   // start transmission of address
-  TWCR = (1<<TWINT) | (1<<TWEN);
+  TWCR = (1 << TWINT) | (1 << TWEN);
 
   timeout_timer = timer_read();
-  while( !(TWCR & (1<<TWINT)) ) {
+  while (!(TWCR & (1 << TWINT))) {
     if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
       return I2C_STATUS_TIMEOUT;
     }
@@ -51,38 +52,39 @@ i2c_status_t i2c_start(uint8_t address, uint16_t timeout)
 
   // check if the device has acknowledged the READ / WRITE mode
   uint8_t twst = TW_STATUS & 0xF8;
-  if ( (twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return I2C_STATUS_ERROR;
+  if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+    return I2C_STATUS_ERROR;
+  }
 
   return I2C_STATUS_SUCCESS;
 }
 
-i2c_status_t i2c_write(uint8_t data, uint16_t timeout)
-{
+i2c_status_t i2c_write(uint8_t data, uint16_t timeout) {
   // load data into data register
   TWDR = data;
   // start transmission of data
-  TWCR = (1<<TWINT) | (1<<TWEN);
+  TWCR = (1 << TWINT) | (1 << TWEN);
 
   uint16_t timeout_timer = timer_read();
-  while( !(TWCR & (1<<TWINT)) ) {
+  while (!(TWCR & (1 << TWINT))) {
     if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
       return I2C_STATUS_TIMEOUT;
     }
   }
 
-  if( (TW_STATUS & 0xF8) != TW_MT_DATA_ACK ){ return I2C_STATUS_ERROR; }
+  if ((TW_STATUS & 0xF8) != TW_MT_DATA_ACK) {
+    return I2C_STATUS_ERROR;
+  }
 
   return I2C_STATUS_SUCCESS;
 }
 
-int16_t i2c_read_ack(uint16_t timeout)
-{
-
+int16_t i2c_read_ack(uint16_t timeout) {
   // start TWI module and acknowledge data after reception
-  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA);
+  TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWEA);
 
   uint16_t timeout_timer = timer_read();
-  while( !(TWCR & (1<<TWINT)) ) {
+  while (!(TWCR & (1 << TWINT))) {
     if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
       return I2C_STATUS_TIMEOUT;
     }
@@ -92,14 +94,12 @@ int16_t i2c_read_ack(uint16_t timeout)
   return TWDR;
 }
 
-int16_t i2c_read_nack(uint16_t timeout)
-{
-
+int16_t i2c_read_nack(uint16_t timeout) {
   // start receiving without acknowledging reception
-  TWCR = (1<<TWINT) | (1<<TWEN);
+  TWCR = (1 << TWINT) | (1 << TWEN);
 
   uint16_t timeout_timer = timer_read();
-  while( !(TWCR & (1<<TWINT)) ) {
+  while (!(TWCR & (1 << TWINT))) {
     if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
       return I2C_STATUS_TIMEOUT;
     }
@@ -109,115 +109,89 @@ int16_t i2c_read_nack(uint16_t timeout)
   return TWDR;
 }
 
-i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
   i2c_status_t status = i2c_start(address | I2C_WRITE, timeout);
-  if (status) return status;
 
-  for (uint16_t i = 0; i < length; i++) {
+  for (uint16_t i = 0; i < length && status >= 0; i++) {
     status = i2c_write(data[i], timeout);
-    if (status) return status;
   }
 
-  status = i2c_stop(timeout);
-  if (status) return status;
+  i2c_stop();
 
-  return I2C_STATUS_SUCCESS;
+  return status;
 }
 
-i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout) {
   i2c_status_t status = i2c_start(address | I2C_READ, timeout);
-  if (status) return status;
 
-  for (uint16_t i = 0; i < (length-1); i++) {
+  for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {
     status = i2c_read_ack(timeout);
     if (status >= 0) {
       data[i] = status;
-    } else {
-      return status;
     }
   }
 
-  status = i2c_read_nack(timeout);
-  if (status >= 0 ) {
-    data[(length-1)] = status;
-  } else {
-    return status;
+  if (status >= 0) {
+    status = i2c_read_nack(timeout);
+    if (status >= 0) {
+      data[(length - 1)] = status;
+    }
   }
 
-  status = i2c_stop(timeout);
-  if (status) return status;
+  i2c_stop();
 
-  return I2C_STATUS_SUCCESS;
+  return (status < 0) ? status : I2C_STATUS_SUCCESS;
 }
 
-i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
   i2c_status_t status = i2c_start(devaddr | 0x00, timeout);
-  if (status) return status;
-
-  status = i2c_write(regaddr, timeout);
-  if (status) return status;
+  if (status >= 0) {
+    status = i2c_write(regaddr, timeout);
 
-  for (uint16_t i = 0; i < length; i++) {
-    status = i2c_write(data[i], timeout);
-    if (status) return status;
+    for (uint16_t i = 0; i < length && status >= 0; i++) {
+      status = i2c_write(data[i], timeout);
+    }
   }
 
-  status = i2c_stop(timeout);
-  if (status) return status;
+  i2c_stop();
 
-  return I2C_STATUS_SUCCESS;
+  return status;
 }
 
-i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)
-{
+i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) {
   i2c_status_t status = i2c_start(devaddr, timeout);
-  if (status) return status;
+  if (status < 0) {
+    goto error;
+  }
 
   status = i2c_write(regaddr, timeout);
-  if (status) return status;
-
-  status = i2c_stop(timeout);
-  if (status) return status;
+  if (status < 0) {
+    goto error;
+  }
 
   status = i2c_start(devaddr | 0x01, timeout);
-  if (status) return status;
 
-  for (uint16_t i = 0; i < (length-1); i++) {
+  for (uint16_t i = 0; i < (length - 1) && status >= 0; i++) {
     status = i2c_read_ack(timeout);
     if (status >= 0) {
       data[i] = status;
-    } else {
-      return status;
     }
   }
 
-  status = i2c_read_nack(timeout);
-  if (status >= 0 ) {
-    data[(length-1)] = status;
-  } else {
-    return status;
+  if (status >= 0) {
+    status = i2c_read_nack(timeout);
+    if (status >= 0) {
+      data[(length - 1)] = status;
+    }
   }
 
-  status = i2c_stop(timeout);
-  if (status) return status;
+error:
+  i2c_stop();
 
-  return I2C_STATUS_SUCCESS;
+  return (status < 0) ? status : I2C_STATUS_SUCCESS;
 }
 
-i2c_status_t i2c_stop(uint16_t timeout)
-{
+void i2c_stop(void) {
   // transmit STOP condition
-  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
-  uint16_t timeout_timer = timer_read();
-  while(TWCR & (1<<TWSTO)) {
-    if ((timeout != I2C_TIMEOUT_INFINITE) && ((timer_read() - timeout_timer) >= timeout)) {
-      return I2C_STATUS_TIMEOUT;
-    }
-  }
-
-  return I2C_STATUS_SUCCESS;
+  TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
 }
index 89c64599c51abdff9aeef6ce4ab760ccc491b989..81a7fb5e322de27ae7aac6c52409ab8bf7c4d60a 100755 (executable)
@@ -26,6 +26,6 @@ i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint1
 i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);
 i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
 i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);
-i2c_status_t i2c_stop(uint16_t timeout);
+void i2c_stop(void);
 
 #endif // I2C_MASTER_H
\ No newline at end of file
index 18a29a45a5a440433c6a7b8376c2ae4777734545..dbb9fb0df349375b0faea70f3a4a08903a61d26b 100755 (executable)
@@ -16,7 +16,7 @@ static volatile bool slave_has_register_set = false;
 
 void i2c_slave_init(uint8_t address){
     // load address into TWI address register
-    TWAR = (address << 1);
+    TWAR = address;
     // set the TWCR to enable address matching and enable TWI, clear TWINT, enable TWI interrupt
     TWCR = (1 << TWIE) | (1 << TWEA) | (1 << TWINT) | (1 << TWEN);
 }
index d24bbaabf6048485cdde9f17d723f403a92fd7f0..f1b4f5e43e96bc2de217edec641699c3c2b8d2f7 100644 (file)
@@ -13,8 +13,7 @@
  * 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 KB_H
-#define KB_H
+#pragma once
 
 #include "quantum.h"
 
@@ -36,4 +35,3 @@
        { K30,  K31,  K32,  K33,   K34,   K35, K36,   K37,   K38,   K39, K3A, KC_NO, KC_NO, K3D }, \
        { K40,  K41,  K42,  KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B,   KC_NO, K4D }  \
 }
-#endif
index f33e33fd9e4775b0fb442f47305b06e9b1795b43..72e6849e04f16687a026bfa2abb78a44ecf27e9d 100644 (file)
@@ -68,5 +68,6 @@ 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)
+EXTRAFLAGS += -flto
 
 LAYOUTS = 60_ansi
index eb4082f1ae75831c4d25f432625f9c00fbc9d7b6..b6d3c8e0d15d26e4e33ea73e792de282ad03fcd6 100644 (file)
@@ -19,12 +19,12 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "quantum.h"
 
-#define LAYOUT_all( \
-       K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
+#define LAYOUT_tsangan( \
+       K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K413, \
        K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
        K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212,       \
        K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312,       \
-       K400, K401, K402,                   K406,                   K410, K411, K412, K413  \
+       K400, K401, K402,                   K406,                   K410, K411, K412        \
 ) { \
        { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013 }, \
        { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113 }, \
@@ -35,11 +35,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* HHKB Variant */
 #define LAYOUT_60_hhkb( \
-  K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
+    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K413, \
        K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
        K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212,       \
        K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312,       \
-             K401, K402,                  K406,                    K410, K411,       K413  \
+             K401, K402,                  K406,                    K410, K411              \
 ) { \
        { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013 }, \
        { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113 }, \
@@ -47,4 +47,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
        { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  KC_NO }, \
        { KC_NO, K401,  K402,  KC_NO, KC_NO, KC_NO, K406,  KC_NO, KC_NO, KC_NO, K410,  K411,  KC_NO, K413 }  \
 }
-
index c7e023a5edcb3a72cc42ce4c17b0afd20d7c7178..892a8b9fe82cc63ad26eb3ede9407ccf3bea2a9c 100644 (file)
@@ -62,4 +62,4 @@ 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
-#endif
+#endif
\ No newline at end of file
diff --git a/keyboards/1upkeyboards/1up60hte/info.json b/keyboards/1upkeyboards/1up60hte/info.json
new file mode 100644 (file)
index 0000000..86521d3
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "keyboard_name": "1up60hte", 
+    "url": "https://www.1upkeyboards.com/shop/controllers/1up-rgb-60-pcb-hte/", 
+    "maintainer": "1upkeyboards", 
+    "width": 15, 
+    "height": 5, 
+    "layouts": {
+        "LAYOUT_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":"~", "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":"Control", "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}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Alt", "x":1.5, "y":4}, {"label":"Meta", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Meta", "x":11, "y":4, "w":1.5}, {"label":"Alt", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+        },
+        "LAYOUT_60_hhkb": {
+            "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":"~", "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":"Control", "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}, {"label":"Fn", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"label":"Meta", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Meta", "x":11, "y":4, "w":1.5}, {"label":"Alt", "x":12.5, "y":4}]
+        }
+    }
+}
index 396b660803a29431cafa72b8023e29bb4929e964..7fefebd0b19a5c6827a4d16602dc57ded4acfedd 100644 (file)
@@ -17,21 +17,19 @@ 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] = {
-
-       [0] = 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_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_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_LSFT, KC_NO,
-               KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_LCTL, KC_BSPC),
-
-       [1] = LAYOUT_all(
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
-
+       [0] = LAYOUT_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_GRV,
+               KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,     KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC,
+               KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,     KC_L,    KC_SCLN, KC_QUOT, KC_ENT,
+               KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM,  KC_DOT,  KC_SLSH, KC_LSFT, MO(1),
+               KC_LCTL, KC_LALT, KC_LGUI, KC_SPC,  KC_LGUI, KC_LALT, KC_LCTL),
+               
+       [1] = LAYOUT_tsangan(
+               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_INS, KC_DEL,
+               KC_CAPS, BL_TOGG, BL_DEC,  BL_INC,  BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLCK,  KC_PAUS, KC_UP,   KC_TRNS, KC_CLR,
+               KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPLY, KC_MPRV, KC_MNXT, RGB_VAD, KC_HOME, KC_PGUP,  KC_LEFT, KC_RGHT, KC_TRNS,
+               KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, KC_END, KC_PGDN,   KC_DOWN, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
 };
 
 void matrix_init_user(void) {
@@ -46,35 +44,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 }
 
 void led_set_user(uint8_t usb_led) {
-
-       if (usb_led & (1 << USB_LED_NUM_LOCK)) {
-
-       } else {
-
-       }
-
-       if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+       if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
                writePinLow(B6);
        } else {
                writePinHigh(B6);
        }
-
-       if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
-
-       } else {
-
-       }
-
-       if (usb_led & (1 << USB_LED_COMPOSE)) {
-
-       } else {
-
-       }
-
-       if (usb_led & (1 << USB_LED_KANA)) {
-
-       } else {
-
-       }
-
 }
index 1b06739b68f47df1da46f598b04c4a5feb095701..7658087d1fd7ffe947b28dac4aae2bbddb6f8162 100644 (file)
@@ -17,20 +17,19 @@ 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] = {
-
-       [0] = 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_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
-               KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1),
-               KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_LCTL, KC_BSPC),
-
-       [1] = LAYOUT_all(
-               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_INS,
-               KC_CAPS, BL_TOGG, BL_DEC, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
-               KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPLY, KC_MPRV, KC_MNXT, RGB_VAD, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
-               KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL)
+       [0] = LAYOUT_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_GRV,
+               KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,     KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC,
+               KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,     KC_L,    KC_SCLN, KC_QUOT, KC_ENT,
+               KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM,  KC_DOT,  KC_SLSH, KC_LSFT, MO(1),
+               KC_NO,   KC_LALT, KC_LGUI, KC_SPC,  KC_LGUI, KC_LALT, KC_NO),
+               
+       [1] = LAYOUT_tsangan(
+               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_INS, KC_DEL,
+               KC_CAPS, BL_TOGG, BL_DEC,  BL_INC,  BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLCK,  KC_PAUS, KC_UP,   KC_TRNS, KC_CLR,
+               KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPLY, KC_MPRV, KC_MNXT, RGB_VAD, KC_HOME, KC_PGUP,  KC_LEFT, KC_RGHT, KC_TRNS,
+               KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, KC_END, KC_PGDN,   KC_DOWN, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
 };
 
 void matrix_init_user(void) {
@@ -45,35 +44,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 }
 
 void led_set_user(uint8_t usb_led) {
-
-       if (usb_led & (1 << USB_LED_NUM_LOCK)) {
-
-       } else {
-
-       }
-
-       if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+       if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
                writePinLow(B6);
        } else {
                writePinHigh(B6);
        }
-
-       if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
-
-       } else {
-
-       }
-
-       if (usb_led & (1 << USB_LED_COMPOSE)) {
-
-       } else {
-
-       }
-
-       if (usb_led & (1 << USB_LED_KANA)) {
-
-       } else {
-
-       }
-
 }
index b8b5582991bac26b02654e5921f7254b546011ac..860a754a643de1872770169ec415b202a087df5f 100644 (file)
@@ -54,5 +54,6 @@ NKRO_ENABLE = yes             # USB Nkey Rollover - if this doesn't work, see here: https:/
 BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
 AUDIO_ENABLE = no
 RGBLIGHT_ENABLE = yes
+EXTRAFLAGS += -flto
 
 LAYOUTS = 60_hhkb
index 6905fd22050879e4a1740689fa9ca25a8c28b870..0f6818a6d861c375366973375e9a0b935f4dd47a 100644 (file)
@@ -1,5 +1,4 @@
-#ifndef KB_H
-#define KB_H
+#pragma once
 
 #include "quantum.h"
 
@@ -77,5 +76,3 @@
        K300, KC_NO,K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313, K314, \
        KC_NO,K401,       K403,             K406,                   KC_NO,K411,       K413, KC_NO \
 )
-
-#endif
index 86696dab845759e50de32ed1f0f37936bef7586b..fbafe0c44bc112cc1a4257e883e43e99db813006 100644 (file)
@@ -1,5 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
 
 #include "config_common.h"
 
@@ -46,5 +45,3 @@
 #define RGBLIGHT_SAT_STEP 8
 #define RGBLIGHT_VAL_STEP 8
 #endif
-
-#endif
index cb372e15d733def33d1fcd4d51da87f2f0acc36c..8567b780a75d01794fcf49a048ead003b408082a 100644 (file)
@@ -1,4 +1,4 @@
-#include "1up60rgb.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/mdyevimnav/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/mdyevimnav/keymap.c
new file mode 100644 (file)
index 0000000..bb0d104
--- /dev/null
@@ -0,0 +1,48 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*
+ * Layer 0
+ * ,-----------------------------------------------------------------------------------------.
+ * |  ~  |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |  -  |  =  |    Bksp   |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab    |  q  |  w  |  e  |  r  |  t  |  y  |  u  |  i  |  o  |  p  |  [  |  ]  |   \    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Esc     |  a  |  s  |  d  |  f  |  g  |  h  |  j  |  k  |  l  |  ;  |  '  |    Enter    |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift      |  z  |  x  |  c  |  v  |  b  |  n  |  m  |  ,  |  .  |  /  |    Shift       |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl  |  L1   |  Alt  |               space             |  Alt  |  Sup  |  L1   | Ctrl  |
+ * \-----------------------------------------------------------------------------------------/
+ *
+ */
+  LAYOUT_all(
+    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_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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT,
+    KC_LSHIFT, KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT, KC_RSHIFT,
+    KC_LCTL, MO(1), KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL),
+
+/*
+ * Layer 1
+ * ,-----------------------------------------------------------------------------------------.
+ * |     |  f1 |  f2 |  f3 |  f4 |  f5 |  f6 |  f7 |  f8 |  f9 | f10 | f11 | f12 |    Del    |
+ * |-----------------------------------------------------------------------------------------+
+ * |        |     |     |     |     |     |     |     | Ins |     | Paus|     |     |  Prnt  |
+ * |-----------------------------------------------------------------------------------------+
+ * |         |     |     |     |     |     |  L  |  D  |  U  |  R  |     |     |             |
+ * |-----------------------------------------------------------------------------------------+
+ * |            |     |     |     |     |     | Hom | PDn | PUp | End |     |                |
+ * |-----------------------------------------------------------------------------------------+
+ * |       |       |       |                                 |       |       |       |       |
+ * \-----------------------------------------------------------------------------------------/
+ *
+ */
+  LAYOUT_all(
+    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_DEL,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PAUS, KC_TRNS, KC_TRNS, KC_PSCR,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, KC_TRNS, KC_TRNS,
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
index de3ad98b7388dce6846bd72678e8092197d3a1ea..ad733f6b5e55b665212c742506ff826cd228f71c 100644 (file)
@@ -1,4 +1,4 @@
-# 1upkeyboards 60% RGB
+# 1up60rgb 60% RGB
 
 Firmware for custom keyboard PCB with 60% key layout.
 
index 540e4ea96c271bb04425c76203b9bb22cc5bff7a..8b1cf6667fa179e86cbe5d89c67263f8931ffd6c 100644 (file)
@@ -44,15 +44,15 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 # Build Options
 #   comment out to disable the options.
 #
-BOOTMAGIC_ENABLE ?= yes        # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= 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 ?= yes  # Enable keyboard backlight functionality
-AUDIO_ENABLE ?= no
-RGBLIGHT_ENABLE ?= yes
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes  # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
+CONSOLE_ENABLE = no    # Console for debug(+400)
+COMMAND_ENABLE = no    # 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 = yes  # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
 
 LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift 60_hhkb
index 4f075d827922d6a83dc9d442b14a839c93181af1..de8ae36acb6ccaba69eef9c45c7dc5635fd60729 100644 (file)
@@ -1,5 +1,7 @@
 # 1UP Keyboards
 
+1UP Keyboards is an online mechanical keyboard retailer located in New York, USA.
+
 Website: [1UP Keyboards](https://www.1upkeyboards.com/)  
 Discord: [Server Invite](https://discordapp.com/invite/c6SYn8)  
 YouTube: [skiwithpete](https://www.youtube.com/user/skiwithpete)  
\ No newline at end of file
index 16fc8b9746808c9fbe91152ecf386d571a7fa738..26c6d6ade1011ccf79e800fb13f59c20d53b544c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2019 'mechmerlin'
+/* Copyright 2019 MechMerlin
  *
  * 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 efcde883428f315e5cda5e6bbaeb34ae296f0b95..8fb44b9b5cf0969ffc95c113c3f3074e44a48871 100644 (file)
@@ -80,4 +80,4 @@ 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)
 
-LAYOUTS = ortho_4x4
\ No newline at end of file
+LAYOUTS = ortho_4x4
index eedd3708f219c01321bfc6a6dba4098a1444fb87..b05b5774006e2955c17defa2d4cf8d0718ad6650 100644 (file)
@@ -1,5 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
 
 #include "config_common.h"
 
@@ -47,4 +46,3 @@
 #define RGBLIGHT_VAL_STEP 8
 #endif
 
-#endif
index 899afaba174253c8fa9ff3f7232a5bbe13451205..4cc754dc164d807bb38155a143376a806c8514c2 100644 (file)
@@ -1,4 +1,4 @@
-#include "sweet16.h"
+#include QMK_KEYBOARD_H
 
 enum custom_keycodes {
   UP_URL = SAFE_RANGE
index 3b7b1d6f0b094d5e639af64f8db641c56c982bc2..f096a5fc992a47f244730904e2b9644d940c0feb 100644 (file)
@@ -1,5 +1,4 @@
-Sweet16
-===
+# Sweet 16 Macropad
 
 A 4x4 numpad/macro pad sold by 1up Keyboards - designed by Bishop Keyboards
 
index 212e74059e4b5a38857fabc7024ce598d3b825c3..e3436dc3387f578f9896f067655350953d28e824 100644 (file)
@@ -53,4 +53,5 @@ 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 = yes
\ No newline at end of file
+RGBLIGHT_ENABLE = yes
+EXTRAFLAGS += -flto
index 879f51fae66afffbd870de5a3c0e7fbecb9ff7f4..7320ccd9e07423f4a2e24bc63ea3913fcd79716d 100644 (file)
@@ -1,5 +1,4 @@
-#ifndef KB_H
-#define KB_H
+#pragma once
 
 #include "quantum.h"
 
@@ -29,4 +28,3 @@
     { KC_NO, K31,   K32,   KC_NO }  \
 }
 
-#endif
index cb7f29b25613f48e04b12d9a15209c3211609fb9..6d722ae6ee86bcc2067ae2e88e356356f1960ddf 100644 (file)
@@ -2,10 +2,12 @@
     "keyboard_name": "foobar",
     "url": "",
     "maintainer": "qmk",
-    "width": 6,
-    "height": 2,
+    "width": 10,
+    "height": 3,
     "layouts": {
         "LAYOUT_macro": {
+            "width": 5,
+            "height": 3,
             "key_count": 15,
             "layout": [
               {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0},
index 9aa8e810dd965cf53d73f0a0c159788fde119958..c74fcacbb95182101f464841c94eb94332c74ed6 100644 (file)
@@ -46,12 +46,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define UNUSED_PINS
 
 /* COL2ROW, ROW2COL*/
-#define DIODE_DIRECTION 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 USE_SERIAL
 
 // #define BACKLIGHT_PIN B7
 // #define BACKLIGHT_BREATHING
index 6cec5992908c76d4093fc3b8fee60b8ce25938d3..bc330c9cb7b821e6e8139fb1b107bd762c905e2b 100644 (file)
@@ -16,6 +16,7 @@
 #pragma once
 
 #include "quantum.h"
+#define ___ KC_NO
 
 /* This a shortcut to help you visually see your layout.
  *
  * represents the switch matrix.
  */
 #define LAYOUT( \
-    K00, K01, K02, K03, K04, K05, K06,     K50, K51, K52, K53, K54, K55, K56, \
-    K10, K11, K12, K13, K14, K15, K16,     K60, K61, K62, K63, K64, K65, K66, \
-    K20, K21, K22, K23, K24, K25, K26,     K70, K71, K72, K73, K74, K75, K76, \
-                        K34,                         K82 \
+    L00, L01, L02, L03, L04, L05, L06,     R00, R01, R02, R03, R04, R05, R06, \
+    L10, L11, L12, L13, L14, L15, L16,     R10, R11, R12, R13, R14, R15, R16, \
+    L20, L21, L22, L23, L24, L25, L26,     R20, R21, R22, R23, R24, R25, R26, \
+                        L34,                         R32 \
 ) { \
-    { K00,   K01,   K02,   K03,   K04, K05,   K06   }, \
-    { K10,   K11,   K12,   K13,   K14, K15,   K16   }, \
-    { K20,   K21,   K22,   K23,   K24, K25,   K26   }, \
-    { KC_NO, KC_NO, KC_NO, KC_NO, K34, KC_NO, KC_NO }, \
+    { L00, L01, L02, L03, L04, L05, L06 }, \
+    { L10, L11, L12, L13, L14, L15, L16 }, \
+    { L20, L21, L22, L23, L24, L25, L26 }, \
+    { ___, ___, ___, ___, L34, ___, ___ }, \
 \
-    { K56,   K55,   K54,   K53,   K52, K51,   K50   }, \
-    { K66,   K65,   K64,   K63,   K62, K61,   K60   }, \
-    { K76,   K75,   K74,   K73,   K72, K71,   K70   }, \
-    { KC_NO, KC_NO, KC_NO, KC_NO, K82, KC_NO, KC_NO }  \
+    { R06, R05, R04, R03, R02, R01, R00 }, \
+    { R16, R15, R14, R13, R12, R11, R10 }, \
+    { R26, R25, R24, R23, R22, R21, R20 }, \
+    { ___, ___, ___, ___, R32, ___, ___ }  \
 }
+
+#ifdef USE_I2C
+  #error "I2C not Supported"
+#endif
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e791e36c68a8bd40513444ef142208ad417e7f21 100644 (file)
@@ -0,0 +1,62 @@
+{
+  "keyboard_name": "half_n_half",
+  "url": "",
+  "maintainer": "qmk",
+  "width": 14,
+  "height": 4,
+  "layouts": {
+    "LAYOUT": {
+      "key_count": 44,
+      "layout": [
+          {"label":"L00", "x":0, "y":0},
+          {"label":"L01", "x":1, "y":0},
+          {"label":"L02", "x":2, "y":0},
+          {"label":"L03", "x":3, "y":0},
+          {"label":"L04", "x":4, "y":0},
+          {"label":"L05", "x":5, "y":0},
+          {"label":"L06", "x":6, "y":0},
+          {"label":"R00", "x":7, "y":0},
+          {"label":"R01", "x":8, "y":0},
+          {"label":"R02", "x":9, "y":0},
+          {"label":"R03", "x":10, "y":0},
+          {"label":"R04", "x":11, "y":0},
+          {"label":"R05", "x":12, "y":0},
+          {"label":"R06", "x":13, "y":0},
+
+          {"label":"L10", "x":0, "y":1},
+          {"label":"L11", "x":1, "y":1},
+          {"label":"L12", "x":2, "y":1},
+          {"label":"L13", "x":3, "y":1},
+          {"label":"L14", "x":4, "y":1},
+          {"label":"L15", "x":5, "y":1},
+          {"label":"L16", "x":6, "y":1},
+          {"label":"R10", "x":7, "y":1},
+          {"label":"R11", "x":8, "y":1},
+          {"label":"R12", "x":9, "y":1},
+          {"label":"R13", "x":10, "y":1},
+          {"label":"R14", "x":11, "y":1},
+          {"label":"R15", "x":12, "y":1},
+          {"label":"R16", "x":13, "y":1},
+
+          {"label":"L20", "x":0, "y":2},
+          {"label":"L21", "x":1, "y":2},
+          {"label":"L22", "x":2, "y":2},
+          {"label":"L23", "x":3, "y":2},
+          {"label":"L24", "x":4, "y":2},
+          {"label":"L25", "x":5, "y":2},
+          {"label":"L26", "x":6, "y":2},
+          {"label":"R20", "x":7, "y":2},
+          {"label":"R21", "x":8, "y":2},
+          {"label":"R22", "x":9, "y":2},
+          {"label":"R23", "x":10, "y":2},
+          {"label":"R24", "x":11, "y":2},
+          {"label":"R25", "x":12, "y":2},
+          {"label":"R26", "x":13, "y":2},
+          {"label":"L34", "x":4, "y":3, "w":2},
+          {"label":"R32", "x":8, "y":3, "w":2}
+      ]
+    }
+  }
+}
+  
\ No newline at end of file
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/config.h b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/config.h
new file mode 100644 (file)
index 0000000..f73fd05
--- /dev/null
@@ -0,0 +1,22 @@
+/* Copyright 2019 Boy_314
+ *
+ * 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
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 200
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/keymap.c
new file mode 100644 (file)
index 0000000..2eef3dc
--- /dev/null
@@ -0,0 +1,173 @@
+/* Copyright 2019 Boy_314
+ *
+ * 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
+
+// Tap Dance Declarations
+enum {
+       TD_SWAP_LAYERS = 0
+};
+
+enum layers {
+       _DVORAK,
+       _QWERTY,
+       _LOWER,
+       _RAISE,
+};
+
+enum halfnhalf_keycodes {
+       NEWTAB = SAFE_RANGE,
+       ALTF4,
+       CLSTAB,
+       PRVWIN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       /* DVORAK
+        * ,-------------------------------------------------------------------------------------------------.
+        * |Tab   |'     |,     |.     |P     |Y     |Brght+|=     |F     |G     |C     |R     |L     |Bksp  |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |CtlCps|A     |O     |E     |U     |I     |Brght-|Ctrl+F|D     |H     |T     |N     |S     |Enter |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |LShift|;     |Q     |J     |K     |X     |LAlt  |-     |B     |M     |W     |V     |Z     |RShift|
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        *                             |TD Swap Layer|             |Space        |
+        *                             `-------------'                         `-------------'
+        */
+       [_DVORAK] = LAYOUT(/* Base Dvorak */
+         KC_TAB,           KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_BRIU, KC_EQL,     KC_F, KC_G, KC_C,    KC_R,   KC_L,   KC_BSPC,
+         LCTL_T(KC_CAPS),  KC_A,    KC_O,    KC_E,   KC_U, KC_I, KC_BRID, LCTL(KC_F), KC_D, KC_H, KC_T,    KC_N,   KC_S,   KC_ENT,
+         KC_LSPO,          KC_SCLN, KC_Q,    KC_J,   KC_K, KC_X, KC_LALT, KC_MINS,    KC_B, KC_M, KC_W,    KC_V,   KC_Z,   KC_RSPC,
+                                                     TD(TD_SWAP_LAYERS),                    KC_SPC
+       ),
+
+       /* QWERTY
+        * ,-------------------------------------------------------------------------------------------------.
+        * |Tab   |Q     |W     |E     |R     |T     |Brght+|'     |Y     |U     |I     |O     |P     |Bksp  |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |CtlCps|A     |S     |D     |F     |G     |Brght-|Ctrl+F|H     |J     |K     |L     |;     |Enter |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |LShift|Z     |X     |C     |V     |B     |LAlt  |-     |N     |M     |,     |.     |/     |RShift|
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        *                             |TD Swap Layer|             |Space        |
+        *                             `-------------'                         `-------------'
+        */
+       [_QWERTY] = LAYOUT(/* Base Qwerty */
+         KC_TAB,           KC_Q,    KC_W,    KC_E,   KC_R, KC_T, KC_BRIU, KC_QUOT,    KC_Y, KC_U, KC_I,    KC_O,   KC_P,    KC_BSPC,
+         LCTL_T(KC_CAPS),  KC_A,    KC_S,    KC_D,   KC_F, KC_G, KC_BRID, LCTL(KC_F), KC_H, KC_J, KC_K,    KC_L,   KC_SCLN, KC_ENT,
+         KC_LSPO,          KC_Z,    KC_X,    KC_C,   KC_V, KC_B, KC_LALT, KC_MINS,    KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+                                                     TD(TD_SWAP_LAYERS),                    KC_SPC
+       ),
+
+       /* LOWER
+        * ,-------------------------------------------------------------------------------------------------.
+        * |Esc   |1     |2     |3     |4     |5     |      |      |6     |7     |8     |9     |0     |/     |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |Caps  |F1    |F2    |F3    |F4    |F5    |F6    |Vol Up|Play  |_     |+     |{     |}     ||     |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |      |F7    |F8    |F9    |F10   |F11   |F12   |Vol Dn|Next  |Home  |PgDn  |PgUp  |End   |      |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        *                             |             |             |             |
+        *                             `-------------'             `-------------'
+        */
+       [_LOWER] = LAYOUT(/* Numbers, Function Row, Media Control, Shifted Symbols, Dvorak Slash Key */
+         KC_GESC, KC_1,  KC_2,  KC_3,  KC_4,   KC_5,   KC_TRNS, KC_TRNS, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_SLSH,
+         KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4,  KC_F5,  KC_F6,   KC_VOLU, KC_MPLY, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+         KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,  KC_VOLD, KC_MNXT, KC_HOME, KC_PGDN, KC_PGUP, KC_END,  KC_TRNS,
+                                                                                       KC_TRNS,                                                    KC_TRNS
+       ),
+
+       /* RAISE
+        * ,-------------------------------------------------------------------------------------------------.
+        * |Reset |      |      |Up    |      |      |      |PRVWIN|CLSTAB|      |      |      |      |Del   |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |`     |      |Left  |Down  |Right |      |      |NEWTAB|ALTF4 |-     |=     |[     |]     |\     |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        * |      |!     |@     |#     |$     |%     |      |      |^     |&     |*     |(     |)     |      |
+        * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+        *                             |             |             |             |
+        *                             `-------------'             `-------------'
+        */
+       [_RAISE] = LAYOUT(/* Arrows, Shifted Numbers, Symbols, Delete, Macros */
+         RESET,   KC_TRNS, KC_TRNS, KC_UP,   KC_TRNS, KC_TRNS, KC_TRNS, PRVWIN,  CLSTAB,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
+         KC_GRV,  KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, NEWTAB,  ALTF4,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+         KC_TRNS, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_TRNS, KC_TRNS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
+                                                                                                   KC_TRNS,                            KC_TRNS
+       )
+};
+
+void tap_dance_choose_layer (qk_tap_dance_state_t *state, void *user_data) {
+       switch (state->count) {
+               case 1:
+                       layer_on(_LOWER);
+                       break;
+               case 2:
+                       layer_on(_RAISE);
+                       break;
+       }
+}
+
+void tap_dance_choose_layer_reset (qk_tap_dance_state_t *state, void *user_data) {
+       switch (state->count) {
+               case 1:
+                       layer_off(_LOWER);
+                       break;
+               case 2:
+                       layer_off(_RAISE);
+                       break;
+               case 3:
+                       if (biton32(default_layer_state) == _DVORAK) {
+                               set_single_persistent_default_layer(_QWERTY);
+                       }
+                       else if (biton32(default_layer_state) == _QWERTY) {
+                               set_single_persistent_default_layer(_DVORAK);
+                       }
+                       break;
+       }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+       [TD_SWAP_LAYERS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_choose_layer, tap_dance_choose_layer_reset)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+       switch (keycode) {
+               // Control + T
+               case NEWTAB:
+                       if (record->event.pressed) {
+                               SEND_STRING(SS_LCTRL("t"));
+                       }
+                       break;
+               // Alt + F4
+               case ALTF4:
+                       if (record->event.pressed) {
+                               SEND_STRING(SS_DOWN(X_LALT)SS_TAP(X_F4)SS_UP(X_LALT));
+                       }
+                       break;
+               // Control + W
+               case CLSTAB:
+                       if (record->event.pressed) {
+                               SEND_STRING(SS_LCTRL("w"));
+                       }
+                       break;
+               // Control + Shift + N
+               case PRVWIN:
+                       if (record->event.pressed) {
+                               SEND_STRING(SS_LCTRL(SS_LSFT("n")));
+                       }
+                       break;
+       }
+       return true;
+}
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/readme.md b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/readme.md
new file mode 100644 (file)
index 0000000..9eff08b
--- /dev/null
@@ -0,0 +1,2 @@
+# Boy_314's keymap for half_n_half
+# Currently only supports DVORAK. QWERTY Support is on the TODO list.
\ No newline at end of file
diff --git a/keyboards/40percentclub/half_n_half/keymaps/Boy_314/rules.mk b/keyboards/40percentclub/half_n_half/keymaps/Boy_314/rules.mk
new file mode 100644 (file)
index 0000000..59c7ccf
--- /dev/null
@@ -0,0 +1,5 @@
+TAP_DANCE_ENABLE = yes      # Enable Tap Dance
+NKRO_ENABLE = yes           # USB Nkey Rollover
+
+# Enable generic behavior for split boards
+SPLIT_KEYBOARD = yes
\ No newline at end of file
index bd0d8f808cd4706342cd6086df1cc0fe670f70cc..cc5fccee98449aee41bbb69e2563a333fe56a5f5 100644 (file)
@@ -79,3 +79,6 @@ 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)
+
+# Enable generic behavior for split boards
+SPLIT_KEYBOARD = yes
index 857205c37d8f6b41022be25ee9669a49b96b7d77..25252d16032637c57a7a5dd117760cbb87bd2dea 100644 (file)
@@ -52,6 +52,28 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #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
+// #endif
+
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 #define DEBOUNCING_DELAY 5
 
index ae7e7297cb89ea220ac35885a384e86cc36e2606..c91b9b908abadb0dcf75062c19e3e8349f432a6f 100644 (file)
@@ -3,51 +3,29 @@
 #define _QWERTY 0
 #define _FN1 1
 #define _FN2 2
-#define KC_ KC_TRNS
-#define KC_X0 LT(_FN2, KC_GRV)
-#define KC_X1 MO(_FN1)
-#define KC_X2 BL_STEP
+
+#define FN2_GRV LT(_FN2, KC_GRV)
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_QWERTY] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    ESC , 1  , 2  , 3  , 4  , 5  , 6  , 7  , 8  , 9  , 0  ,MINS,EQL ,  BSPC  ,   INS ,PGUP,
- /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------|  |----`----| */
-    TAB   , Q  , W  , E  , R  , T  , Y  , U  , I  , O  , P  ,LBRC,RBRC, BSLS ,   DEL ,PGDN,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------|  `----`----' */
-    X0     , A  , S  , D  , F  , G  , H  , J  , K  , L  ,SCLN,QUOT,    ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------|  ,----. */
-    LSFT     , Z  , X  , C  , V  , B  , N  , M  ,COMM,DOT ,SLSH,       RSFT  ,    UP ,
- /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
-    LCTL ,LGUI ,LALT ,            SPACE             ,  X1  ,RALT ,RCTL ,    LEFT,DOWN,RGHT
- /*`-----+-----+-----+------------------------------+------+-----+-----'   `----+----+----' */
+  [_QWERTY] = LAYOUT_68_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_INS,  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_PGDN,
+    FN2_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_LGUI, KC_LALT,                            KC_SPC,                             MO(1),   KC_RALT, KC_RCTL,          KC_LEFT, KC_DOWN, KC_RGHT
   ),
-
-  [_FN1] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
-          ,    ,    , UP ,    ,    ,    ,    ,    ,    ,    ,    , X2 ,      ,   VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
-           ,    ,LEFT,DOWN,RGHT,    ,    ,    ,    ,    ,    ,    ,          ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
-             ,    ,    ,    ,    ,    ,    ,MUTE,    ,    ,    ,             ,   MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
-         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
+  [_FN1] = LAYOUT_68_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_BSPC,          KC_VOLU, KC_HOME,
+    _______, _______, _______, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, _______,          KC_VOLD, KC_END,
+    _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______,          _______,
+    _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______,                   _______,          KC_MUTE,
+    _______, _______, _______,                            _______,                            _______, _______, _______,          KC_MPRV, KC_MPLY, KC_MNXT
   ),
-
-  [_FN2] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
-          ,    ,    , UP ,    ,    ,    , 7  , 8  , 9  ,    ,    ,    ,      ,   VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
-           ,    ,LEFT,DOWN,RGHT,    ,    , 4  , 5  , 6  ,    ,    ,          ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
-             ,    ,    ,    ,    ,    , 0  , 1  , 2  , 3  ,    ,             ,   MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
-         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
+  [_FN2] = LAYOUT_68_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_BSPC,          KC_VOLU, KC_HOME,
+    _______, _______, _______, KC_UP,   _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, _______, _______, _______,          KC_VOLD, KC_END,
+    _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______,          _______,
+    _______, _______, _______, _______, _______, _______, KC_0,    KC_1,    KC_2,    KC_3,    _______,                   _______,          KC_MUTE,
+    _______, _______, _______,                            _______,                            _______, _______, _______,          KC_MPRV, KC_MPLY, KC_MNXT
   )
 };
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/config.h b/keyboards/40percentclub/mf68/keymaps/mf68_ble/config.h
new file mode 100644 (file)
index 0000000..7d96ab9
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+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"
+
+/* Overrides for Feather 32u4 Bluefruit */
+
+/* USB Device descriptor parameter */
+#undef DESCRIPTION
+#define DESCRIPTION     Magicforce 68 BLE
+
+/*
+ * 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)
+ *
+*/
+#undef MATRIX_ROW_PINS
+#undef MATRIX_COL_PINS
+#undef UNUSED_PINS
+#define MATRIX_ROW_PINS { D1, D0, C6, D7, B5, B6, B7, D6 }
+#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, F0, D2, D3 }
+#define UNUSED_PINS {B5}
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/keymap.c b/keyboards/40percentclub/mf68/keymaps/mf68_ble/keymap.c
new file mode 100644 (file)
index 0000000..ae7e729
--- /dev/null
@@ -0,0 +1,53 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _FN1 1
+#define _FN2 2
+#define KC_ KC_TRNS
+#define KC_X0 LT(_FN2, KC_GRV)
+#define KC_X1 MO(_FN1)
+#define KC_X2 BL_STEP
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
+    ESC , 1  , 2  , 3  , 4  , 5  , 6  , 7  , 8  , 9  , 0  ,MINS,EQL ,  BSPC  ,   INS ,PGUP,
+ /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------|  |----`----| */
+    TAB   , Q  , W  , E  , R  , T  , Y  , U  , I  , O  , P  ,LBRC,RBRC, BSLS ,   DEL ,PGDN,
+ /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------|  `----`----' */
+    X0     , A  , S  , D  , F  , G  , H  , J  , K  , L  ,SCLN,QUOT,    ENTER ,
+ /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------|  ,----. */
+    LSFT     , Z  , X  , C  , V  , B  , N  , M  ,COMM,DOT ,SLSH,       RSFT  ,    UP ,
+ /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
+    LCTL ,LGUI ,LALT ,            SPACE             ,  X1  ,RALT ,RCTL ,    LEFT,DOWN,RGHT
+ /*`-----+-----+-----+------------------------------+------+-----+-----'   `----+----+----' */
+  ),
+
+  [_FN1] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
+    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
+          ,    ,    , UP ,    ,    ,    ,    ,    ,    ,    ,    , X2 ,      ,   VOLD,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
+           ,    ,LEFT,DOWN,RGHT,    ,    ,    ,    ,    ,    ,    ,          ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
+             ,    ,    ,    ,    ,    ,    ,MUTE,    ,    ,    ,             ,   MUTE,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
+  ),
+
+  [_FN2] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
+    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
+          ,    ,    , UP ,    ,    ,    , 7  , 8  , 9  ,    ,    ,    ,      ,   VOLD,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
+           ,    ,LEFT,DOWN,RGHT,    ,    , 4  , 5  , 6  ,    ,    ,          ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
+             ,    ,    ,    ,    ,    , 0  , 1  , 2  , 3  ,    ,             ,   MUTE,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
+  )
+};
diff --git a/keyboards/40percentclub/mf68/keymaps/mf68_ble/readme.md b/keyboards/40percentclub/mf68/keymaps/mf68_ble/readme.md
new file mode 100644 (file)
index 0000000..e590ae3
--- /dev/null
@@ -0,0 +1,29 @@
+# mf68_ble
+
+![mf68_ble](https://i.imgur.com/zuTyy7k.jpg)
+===
+
+Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib).
+
+Keyboard Maintainer: QMK Community  
+Hardware Supported: [Feather 32u4 Bluefruit](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/)
+Please note: This is 32u4 and not M0
+Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb)  
+[MF68 thicc case files](https://github.com/harshitgoel96/mf68-case-thicc)  
+Story
+-----
+
+The story and the idea behind this mod is available on [my reddit post](https://www.reddit.com/r/MechanicalKeyboards/comments/7eiiht/guide_i_built_a_bluetooth_enabled_magicforce68_no/)
+
+Wiring
+------
+
+Below is how you wire the Feather to PCB
+
+![wire map](https://i.imgur.com/zYOjlTA.png)
+
+Make example for this keyboard (after setting up your build environment):  
+
+    make 40percentclub/mf68:mf68_ble
+
+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/40percentclub/mf68/keymaps/mf68_ble/rules.mk b/keyboards/40percentclub/mf68/keymaps/mf68_ble/rules.mk
new file mode 100644 (file)
index 0000000..2509d0b
--- /dev/null
@@ -0,0 +1,66 @@
+# Overrides for Feather 32u4 Bluefruit
+# 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 = 8000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# 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
+
+
+# Build Options
+#   change yes to no to disable
+#
+BLUETOOTH = AdafruitBLE
+BACKLIGHT_ENABLE = no
index 38c9f517b9d47da1c4a4f7a84461a36340586f05..27642d8604feafb4e8e683e745f15e2150d5959f 100644 (file)
@@ -63,13 +63,14 @@ BOOTLOADER = caterina
 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
+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 = yes      # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
 MIDI_ENABLE = no            # MIDI controls
 UNICODE_ENABLE = no         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/40percentclub/mf68_ble/config.h b/keyboards/40percentclub/mf68_ble/config.h
deleted file mode 100644 (file)
index 3d9bb36..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xCEEB
-#define PRODUCT_ID      0x0510
-#define DEVICE_VER      0x0101
-#define MANUFACTURER    di0ib
-#define PRODUCT         MF68
-#define DESCRIPTION     Magicforce 68 BLE
-
-/* key matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 9
-
-/*
- * 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 { D1, D0, C6, D7, B5, B6, B7, D6 }
-#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, F0, D2, D3 }
-#define UNUSED_PINS {B5}
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-/*
-#define BACKLIGHT_PIN B5
-#define BACKLIGHT_BREATHING
-#define BACKLIGHT_LEVELS 3
-*/
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* 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
diff --git a/keyboards/40percentclub/mf68_ble/info.json b/keyboards/40percentclub/mf68_ble/info.json
deleted file mode 100644 (file)
index 4cd9b2c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "keyboard_name": "MF68 BLE",
-  "url": "",
-  "maintainer": "qmk",
-  "width": 17.25,
-  "height": 5,
-  "layouts": {
-      "LAYOUT_68_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}, {"x":15.25, "y":0}, {"x":16.25, "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}, {"x":15.25, "y":1}, {"x":16.25, "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":"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}, {"x":15.25, "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}, {"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}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
-      }
-  }
-}
diff --git a/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c b/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c
deleted file mode 100644 (file)
index ae7e729..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _QWERTY 0
-#define _FN1 1
-#define _FN2 2
-#define KC_ KC_TRNS
-#define KC_X0 LT(_FN2, KC_GRV)
-#define KC_X1 MO(_FN1)
-#define KC_X2 BL_STEP
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_QWERTY] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    ESC , 1  , 2  , 3  , 4  , 5  , 6  , 7  , 8  , 9  , 0  ,MINS,EQL ,  BSPC  ,   INS ,PGUP,
- /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------|  |----`----| */
-    TAB   , Q  , W  , E  , R  , T  , Y  , U  , I  , O  , P  ,LBRC,RBRC, BSLS ,   DEL ,PGDN,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------|  `----`----' */
-    X0     , A  , S  , D  , F  , G  , H  , J  , K  , L  ,SCLN,QUOT,    ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------|  ,----. */
-    LSFT     , Z  , X  , C  , V  , B  , N  , M  ,COMM,DOT ,SLSH,       RSFT  ,    UP ,
- /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
-    LCTL ,LGUI ,LALT ,            SPACE             ,  X1  ,RALT ,RCTL ,    LEFT,DOWN,RGHT
- /*`-----+-----+-----+------------------------------+------+-----+-----'   `----+----+----' */
-  ),
-
-  [_FN1] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
-          ,    ,    , UP ,    ,    ,    ,    ,    ,    ,    ,    , X2 ,      ,   VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
-           ,    ,LEFT,DOWN,RGHT,    ,    ,    ,    ,    ,    ,    ,          ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
-             ,    ,    ,    ,    ,    ,    ,MUTE,    ,    ,    ,             ,   MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
-         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
-  ),
-
-  [_FN2] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
-          ,    ,    , UP ,    ,    ,    , 7  , 8  , 9  ,    ,    ,    ,      ,   VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
-           ,    ,LEFT,DOWN,RGHT,    ,    , 4  , 5  , 6  ,    ,    ,          ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
-             ,    ,    ,    ,    ,    , 0  , 1  , 2  , 3  ,    ,             ,   MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
-         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
-  )
-};
diff --git a/keyboards/40percentclub/mf68_ble/mf68_ble.c b/keyboards/40percentclub/mf68_ble/mf68_ble.c
deleted file mode 100644 (file)
index 95f8592..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "mf68_ble.h"
-
-void matrix_init_kb(void) {
-       // put your keyboard start-up code here
-       // runs once when the firmware starts up
-
-       matrix_init_user();
-}
diff --git a/keyboards/40percentclub/mf68_ble/mf68_ble.h b/keyboards/40percentclub/mf68_ble/mf68_ble.h
deleted file mode 100644 (file)
index a34f9cd..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#pragma once
-
-#include "quantum.h"
-
-#define LAYOUT_68_ansi( \
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14,     K15, K16, \
-    K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32,     K33, K34, \
-    K35,  K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47,     K48, \
-    K50,   K51, K52, K53, K54, K55, K56, K57, K58, K60, K61,    K62,          K63, \
-    K64,  K65,  K66,                 K67,              K68,  K70,  K71,  K72, K73, K74 \
-) { \
-    { K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
-    { K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
-    { K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
-    { K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
-    { K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
-    { K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
-    { K60, K61, K62, K63, K64, K65, K66, K67, K68 }, \
-    { K70, K71, K72, K73, K74 } \
-}
-
-#define LAYOUT_kc( \
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, K12, K13, K14,     K15, K16, \
-    K17, K18, K20, K21, K22, K23, K24, K25, K26, K27, K28, K30, K31, K32,     K33, K34, \
-    K35,  K36, K37, K38, K40, K41, K42, K43, K44, K45, K46, K47,     K48, \
-    K50,   K51, K52, K53, K54, K55, K56, K57, K58, K60, K61,    K62,          K63, \
-    K64,  K65,  K66,                 K67,              K68,  K70,  K71,  K72, K73, K74 \
-) LAYOUT_68_ansi( \
-    KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, \
-    KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, \
-    KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, \
-    KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, \
-    KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_##K48, \
-    KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, KC_##K58, \
-    KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68, \
-    KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 \
-)
diff --git a/keyboards/40percentclub/mf68_ble/readme.md b/keyboards/40percentclub/mf68_ble/readme.md
deleted file mode 100644 (file)
index 0e0f4b9..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# mf68_ble
-
-![mf68_ble](https://3.bp.blogspot.com/-0YCA3Hx2Rq0/WD3U3GWhyvI/AAAAAAAB_Uo/RWTeyCPblGcxDrDwT9WL9ck2ZRuR26DgACLcB/s640/IMG_20161129_063741.jpg)
-===
-
-Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib).
-
-Keyboard Maintainer: QMK Community  
-Hardware Supported: [Feather 32u4 Bluefruit](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/)
-Please note: This is 32u4 and not M0
-Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb)  
-[MF68 thicc case files](https://github.com/harshitgoel96/mf68-case-thicc)  
-Story
------
-
-The story and the idea behind this mod is available on [my reddit post](https://www.reddit.com/r/MechanicalKeyboards/comments/7eiiht/guide_i_built_a_bluetooth_enabled_magicforce68_no/)
-
-Wiring
-------
-
-Below is how you wire the Feather to PCB
-
-![wire map](https://i.imgur.com/zYOjlTA.png)
-
-Make example for this keyboard (after setting up your build environment):  
-
-    make 40percentclub/mf68_ble: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/40percentclub/mf68_ble/rules.mk b/keyboards/40percentclub/mf68_ble/rules.mk
deleted file mode 100644 (file)
index 2ca8118..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# 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 = 8000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# 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
-
-
-# Build Options
-#   change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
-CONSOLE_ENABLE = yes        # Console for debug(+400)
-COMMAND_ENABLE = yes        # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no            # USB Nkey Rollover
-BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE = no            # MIDI controls
-UNICODE_ENABLE = no         # Unicode
-BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no           # Audio output on port C6
-
-BLUETOOTH = AdafruitBLE
index f88ebf7e80372e1aba59d742ff1b88ccc7f3c574..023c753c27a571392150e190f9a238bff01d148d 100644 (file)
@@ -16,6 +16,4 @@
 
 #pragma once
 
-#include "config_common.h"
-
 // place overrides here
diff --git a/keyboards/412_64/412_64.c b/keyboards/412_64/412_64.c
deleted file mode 100644 (file)
index eaec54a..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#include "412_64.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/412_64/412_64.h b/keyboards/412_64/412_64.h
deleted file mode 100644 (file)
index 27a32f1..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#ifndef FOURx16_H
-#define FOURx16_H
-
-#include "quantum.h"
-#define ___ KC_NO
-
-// This a shortcut to help you visually see your layout.
-// The first section contains all of the arguments
-// The second converts the arguments into a two-dimensional array
-
-#define LAYOUT_ortho_4x16( \
-    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \
-    K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, K31, \
-    K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, \
-    K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, K61, K62, K63 \
-) \
-{ \
-    { K00, K02, K04, K06, K08, K10, K12, K14 }, \
-    { K01, K03, K05, K07, K09, K11, K13, K15 }, \
-    { K16, K18, K20, K22, K24, K26, K28, K30 }, \
-    { K17, K19, K21, K23, K25, K27, K29, K31 }, \
-    { K32, K34, K36, K38, K40, K42, K44, K46 }, \
-    { K33, K35, K37, K39, K41, K43, K45, K47 }, \
-    { K48, K50, K52, K54, K56, K58, K60, K62 }, \
-    { K49, K51, K53, K55, K57, K59, K61, K63 } \
-}
-
-#endif
diff --git a/keyboards/412_64/config.h b/keyboards/412_64/config.h
deleted file mode 100644 (file)
index 9cdb3fa..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID       0xF7E0
-#define PRODUCT_ID      0x0412
-#define DEVICE_VER      0x0000
-#define MANUFACTURER    EDI/SCI
-#define PRODUCT         412 64 Model 00
-#define DESCRIPTION     A compact 60% keyboard inspired by the 4x4x4x4x4
-
-/* key matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 8
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#define MATRIX_ROW_PINS { D3, F4, F5, F6, F7, B1, B3, B2 }
-#define MATRIX_COL_PINS { B0, D2, D0, D1, D4, C6, D7, E6 }
-#define UNUSED_PINS { B4, B5, B6, B7, C7, F0, F1 }
-
-/* COL2ROW, ROW2COL*/
-#define DIODE_DIRECTION COL2ROW
-
-// #define BACKLIGHT_PIN C7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* 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/412_64/keymaps/default/config.h b/keyboards/412_64/keymaps/default/config.h
deleted file mode 100644 (file)
index d533d80..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-#pragma once
-
-// place overrides here
diff --git a/keyboards/412_64/keymaps/default/keymap.c b/keyboards/412_64/keymaps/default/keymap.c
deleted file mode 100644 (file)
index 405c563..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-
-#include QMK_KEYBOARD_H
-
-#define _MAIN 0
-#define _RAISE 1
-#define _LOWER 2
-
-// Readability keycodes
-#define LOWER   MO(_LOWER)
-#define RAISE   MO(_RAISE)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-
-/* MAIN
- * .-----------------------------------------------------------------------------------------------------------------------------------------------.
- * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | Backsp | Delete |   7    |   8    |   9    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | ESC    | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      |  PgUp  |   4    |   5    |   6    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | SHIFT  | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | ENTER  |  PgDn  |   1    |   2    |   3    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL  |  PAUS  | GUI    | ALT    | Lower  | Space  |  Space | Raise  | Left   | Down   | Up     | Right  |  Shift |   0    |   .    |  ENTER |
- * '-----------------------------------------------------------------------------------------------------------------------------------------------'
- */
-
-  [_MAIN] = LAYOUT_ortho_4x16(
-  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, KC_DEL, KC_KP_7, KC_KP_8, KC_KP_9,
-  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_PGUP, KC_KP_4, KC_KP_5, KC_KP_6,
-  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_PGDN, KC_KP_1, KC_KP_2, KC_KP_3,
-  KC_LCTL, KC_PAUS, KC_LGUI, KC_LALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_RSFT, KC_KP_0, KC_KP_DOT, KC_PENT
-  ),
-
-/* RAISE
- * .-----------------------------------------------------------------------------------------------------------------------------------------------.
- * |    `   |  1     |  2     |  3     |  4     |  5     |  6     |  7     |  8     |  9     |  0     |        | Insert |        |        |        |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        |        |        |        |        |        |        | -      | =      | [      | ]      |   \    |  Home  |        |        |        |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        |        |        |        |        |        |        |  ISO # |  ISO / |        |        |  PScr  |  End   |        |        |        |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        |        |        |        |        |                 |        |  Next  |  Vol-  |  Vol+  |  Play  |        |        |        |        |
- * '-----------------------------------------------------------------------------------------------------------------------------------------------'
- */
-
-  [_RAISE] = LAYOUT_ortho_4x16(
-  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, KC_INS, _______, _______, _______,
-  _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, _______, _______, _______,
-  _______, _______, _______, _______, _______, _______, _______, KC_NUHS, KC_NUBS, _______, _______, KC_PSCR, KC_END, _______, _______, _______,
-  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, _______
-  ),
-
-/* LOWER
- * .-----------------------------------------------------------------------------------------------------------------------------------------------.
- * |    ~   |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |    (   |    )   |        |        |        |        | Reset  |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    _   |    +   |    {   |    }   |   |    |        |        |        |        |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        |   F7   |   F8   |   F9   |  F10   |  F11   |  F12   | ISO ~  | ISO |  |        |        |        |        |        |        |        |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        |        |        |        |        |                 |        |        |        |        |  Mute  |        |        |        |        |
- * '-----------------------------------------------------------------------------------------------------------------------------------------------'
- */
-
-  [_LOWER] = LAYOUT_ortho_4x16(
-  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,  _______, _______, _______, RESET,
-  _______,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS,  KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______,
-  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS), _______, _______, _______, _______, _______, _______, _______,
-  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______
-  ),
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-  keyevent_t event = record->event;
-    (void)event;
-
-  switch (id) {
-
-  }
-  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/412_64/keymaps/default/rules.mk b/keyboards/412_64/keymaps/default/rules.mk
deleted file mode 100644 (file)
index 08fdcc0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-KEY_LOCK_ENABLE = yes       # Enable the universal locking key, which lets you do any locking you require.
\ No newline at end of file
diff --git a/keyboards/412_64/readme.md b/keyboards/412_64/readme.md
deleted file mode 100644 (file)
index 0811031..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# 412-64
-
-![412-64](image_here)
-
-A compact 60% keyboard designed by Fate Everywhere and sold on a limited basis. Born out of the desire for a Planck with a numpad for technical work.
-
-Keyboard Maintainer: [Fate Everywhere](https://github.com/fateeverywhere)  
-Hardware Supported: 4x16 T&E Prototype, 412-64 Mk. 0, Mk. 1.  
-Hardware Availability: Highly limited, contact /u/FateEverywhere on reddit for availability.
-
-Make example for this keyboard (after setting up your build environment):
-
-    make 412-64: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/412_64/rules.mk b/keyboards/412_64/rules.mk
deleted file mode 100644 (file)
index 9e74da5..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-# 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
-
-# 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
-
-# Build Options
-#   change yes to no to disable
-#
-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 = yes        # Console for debug(+400)
-COMMAND_ENABLE = yes        # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no            # USB Nkey Rollover
-BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE = no            # MIDI 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)
-
-LAYOUTS = ortho_4x16 
diff --git a/keyboards/ai03/orbit/config.h b/keyboards/ai03/orbit/config.h
new file mode 100644 (file)
index 0000000..f4dc4fd
--- /dev/null
@@ -0,0 +1,249 @@
+/*
+Copyright 2018 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      0x0003
+#define DEVICE_VER      0x0003
+#define MANUFACTURER    ai03 Keyboard Designs
+#define PRODUCT         Orbit
+#define DESCRIPTION     Split ergonomic keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10 // Double rows for split keyboards. Orbit has 5, so define 10
+#define MATRIX_COLS 7
+
+/*
+ * 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, F6, F5, F4, D3 }
+#define MATRIX_COL_PINS { C7, B4, D7, D6, D4, F1, F0 }
+#define MATRIX_ROW_PINS_RIGHT { B6, B5, B4, D7, E6 }
+#define MATRIX_COL_PINS_RIGHT { D4, D6, F1, F0, F4, F5, C6 }
+
+#define SPLIT_HAND_PIN D5
+
+//#define USE_I2C
+
+#define SELECT_SOFT_SERIAL_SPEED 1
+
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#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
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/ai03/orbit/info.json b/keyboards/ai03/orbit/info.json
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/ai03/orbit/keymaps/default/keymap.c b/keyboards/ai03/orbit/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..4c8c39f
--- /dev/null
@@ -0,0 +1,91 @@
+/* Copyright 2018 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
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  MANUAL = SAFE_RANGE,
+  DBLZERO
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = LAYOUT( /* Base */
+               TO(1),   KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_BSPC, \
+               TO(1),   KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_RBRC, KC_BSLS, \
+               KC_NO,   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_NO,   KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_PSCR, KC_DEL,  \
+                            KC_LCTL, KC_LCTL, KC_LGUI, KC_LALT, MO(1),   KC_SPC,  KC_SPC,  MO(2),   KC_GRV,  KC_MENU, KC_MINS, KC_EQL 
+       ),
+       [1] = LAYOUT( /* Fn, Arrowkeys, Media control, Backlight */
+               TO(2),   _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_VOLU, _______, \
+               TO(2),   _______, _______, KC_PGUP, _______, _______, KC_F11,  KC_F12,  _______, KC_UP,   _______, _______, KC_VOLD, BL_STEP, \
+               TO(0),   _______, KC_HOME, KC_PGDN, KC_END,  _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_MPLY, _______, \
+               TO(0),   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,  \
+                            _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+       ),
+       [2] = LAYOUT( /* Mousekeys and Numpad */
+               KC_NO,   _______, _______, _______, _______, _______, _______, KC_NLCK, KC_P7,   KC_P8,   KC_P9,   KC_PSLS, _______, _______, \
+               KC_NO,   _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, _______, _______, KC_P4,   KC_P5,   KC_P6,   KC_PAST, _______, _______, \
+               TO(1),   _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, _______, _______, KC_P1,   KC_P2,   KC_P3,   KC_PMNS, _______, _______, \
+               TO(1),   _______, KC_ACL0, KC_ACL1, KC_ACL2, KC_BTN3, _______, DBLZERO, KC_P0,   KC_PDOT, KC_PENT, KC_PPLS, _______, MANUAL,  \
+                            _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+       )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+       switch (keycode) {
+               case MANUAL:
+                       if (record->event.pressed) 
+                       {
+                               // Keypress
+                               SEND_STRING("https://kb.ai03.me/redir/orbit");
+                       } 
+                       else 
+                       {
+                               // Key release
+                       }
+                       break;
+               case DBLZERO:
+                       if (record->event.pressed) 
+                       {
+                               // Keypress
+                               SEND_STRING("00");
+                       } 
+                       else 
+                       {
+                               // Key release
+                       }
+                       break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+               
+       return state;
+}
diff --git a/keyboards/ai03/orbit/keymaps/default/readme.md b/keyboards/ai03/orbit/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..63c528a
--- /dev/null
@@ -0,0 +1,3 @@
+# The default keymap for Orbit
+
+[KLE of layout](http://www.keyboard-layout-editor.com/#/gists/53ebf59524de12515cb7e2e6de94f0d6)
\ No newline at end of file
diff --git a/keyboards/ai03/orbit/matrix.c b/keyboards/ai03/orbit/matrix.c
new file mode 100644 (file)
index 0000000..a150966
--- /dev/null
@@ -0,0 +1,328 @@
+/*
+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/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "util.h"
+#include "matrix.h"
+#include "split_util.h"
+#include "config.h"
+#include "split_flags.h"
+#include "quantum.h"
+#include "debounce.h"
+#include "transport.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 ERROR_DISCONNECT_COUNT 5
+
+//#define ROWS_PER_HAND (MATRIX_ROWS / 2)
+
+#ifdef DIRECT_PINS
+static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
+#else
+static pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+#endif
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t raw_matrix[ROWS_PER_HAND];
+
+// row offsets for each hand
+uint8_t thisHand, thatHand;
+
+// user-defined overridable functions
+
+__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
+
+__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
+
+__attribute__((weak)) void matrix_init_user(void) {}
+
+__attribute__((weak)) void matrix_scan_user(void) {}
+
+__attribute__((weak)) void matrix_slave_scan_user(void) {}
+
+// helper functions
+
+inline uint8_t matrix_rows(void) { return MATRIX_ROWS; }
+
+inline uint8_t matrix_cols(void) { return MATRIX_COLS; }
+
+bool matrix_is_modified(void) {
+  if (debounce_active()) return false;
+  return true;
+}
+
+inline bool matrix_is_on(uint8_t row, uint8_t col) { return (matrix[row] & ((matrix_row_t)1 << col)); }
+
+inline matrix_row_t matrix_get_row(uint8_t row) { return matrix[row]; }
+
+void matrix_print(void) {
+  print_matrix_header();
+
+  for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+    phex(row);
+    print(": ");
+    print_matrix_row(row);
+    print("\n");
+  }
+}
+
+uint8_t matrix_key_count(void) {
+  uint8_t count = 0;
+  for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+    count += matrix_bitpop(i);
+  }
+  return count;
+}
+
+// matrix code
+
+#ifdef DIRECT_PINS
+
+static void init_pins(void) {
+  for (int row = 0; row < MATRIX_ROWS; row++) {
+    for (int col = 0; col < MATRIX_COLS; col++) {
+      pin_t pin = direct_pins[row][col];
+      if (pin != NO_PIN) {
+        setPinInputHigh(pin);
+      }
+    }
+  }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+  matrix_row_t last_row_value = current_matrix[current_row];
+  current_matrix[current_row] = 0;
+
+  for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+    pin_t pin = direct_pins[current_row][col_index];
+    if (pin != NO_PIN) {
+      current_matrix[current_row] |= readPin(pin) ? 0 : (ROW_SHIFTER << col_index);
+    }
+  }
+
+  return (last_row_value != current_matrix[current_row]);
+}
+
+#elif (DIODE_DIRECTION == COL2ROW)
+
+static void select_row(uint8_t row) {
+  setPinOutput(row_pins[row]);
+  writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row) { setPinInputHigh(row_pins[row]); }
+
+static void unselect_rows(void) {
+  for (uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+    setPinInputHigh(row_pins[x]);
+  }
+}
+
+static void init_pins(void) {
+  unselect_rows();
+  for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+    setPinInputHigh(col_pins[x]);
+  }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+  // Store last value of row prior to reading
+  matrix_row_t last_row_value = current_matrix[current_row];
+
+  // Clear data in matrix row
+  current_matrix[current_row] = 0;
+
+  // Select row and wait for row selecton to stabilize
+  select_row(current_row);
+  wait_us(30);
+
+  // For each col...
+  for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+    // Populate the matrix row with the state of the col pin
+    current_matrix[current_row] |= readPin(col_pins[col_index]) ? 0 : (ROW_SHIFTER << col_index);
+  }
+
+  // Unselect row
+  unselect_row(current_row);
+
+  return (last_row_value != current_matrix[current_row]);
+}
+
+#elif (DIODE_DIRECTION == ROW2COL)
+
+static void select_col(uint8_t col) {
+  setPinOutput(col_pins[col]);
+  writePinLow(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col) { setPinInputHigh(col_pins[col]); }
+
+static void unselect_cols(void) {
+  for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+    setPinInputHigh(col_pins[x]);
+  }
+}
+
+static void init_pins(void) {
+  unselect_cols();
+  for (uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+    setPinInputHigh(row_pins[x]);
+  }
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+  bool matrix_changed = false;
+
+  // Select col and wait for col selecton to stabilize
+  select_col(current_col);
+  wait_us(30);
+
+  // For each row...
+  for (uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++) {
+    // Store last value of row prior to reading
+    matrix_row_t last_row_value = current_matrix[row_index];
+
+    // Check row pin state
+    if (readPin(row_pins[row_index])) {
+      // 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)) {
+      matrix_changed = true;
+    }
+  }
+
+  // Unselect col
+  unselect_col(current_col);
+
+  return matrix_changed;
+}
+
+#endif
+
+void matrix_init(void) {
+  debug_enable = true;
+  debug_matrix = true;
+  debug_mouse  = true;
+
+  // Set pinout for right half if pinout for that half is defined
+  if (!isLeftHand) {
+#ifdef MATRIX_ROW_PINS_RIGHT
+    const uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT;
+    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+      row_pins[i] = row_pins_right[i];
+    }
+#endif
+#ifdef MATRIX_COL_PINS_RIGHT
+    const uint8_t col_pins_right[MATRIX_COLS] = MATRIX_COL_PINS_RIGHT;
+    for (uint8_t i = 0; i < MATRIX_COLS; i++) {
+      col_pins[i] = col_pins_right[i];
+    }
+#endif
+  }
+
+  thisHand = isLeftHand ? 0 : (ROWS_PER_HAND);
+  thatHand = ROWS_PER_HAND - thisHand;
+
+  // initialize key pins
+  init_pins();
+
+  // initialize matrix state: all keys off
+  for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+    matrix[i] = 0;
+  }
+
+  debounce_init(ROWS_PER_HAND);
+
+  matrix_init_quantum();
+}
+
+uint8_t _matrix_scan(void) {
+  bool changed = false;
+
+#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
+  // Set row, read cols
+  for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
+    changed |= read_cols_on_row(raw_matrix, current_row);
+  }
+#elif (DIODE_DIRECTION == ROW2COL)
+  // Set col, read rows
+  for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+    changed |= read_rows_on_col(raw_matrix, current_col);
+  }
+#endif
+
+  debounce(raw_matrix, matrix + thisHand, ROWS_PER_HAND, changed);
+
+  return 1;
+}
+
+uint8_t matrix_scan(void) {
+  uint8_t ret = _matrix_scan();
+
+  if (is_keyboard_master()) {
+    static uint8_t error_count;
+
+    if (!transport_master(matrix + thatHand)) {
+      error_count++;
+
+      if (error_count > ERROR_DISCONNECT_COUNT) {
+        // reset other half if disconnected
+        for (int i = 0; i < ROWS_PER_HAND; ++i) {
+          matrix[thatHand + i] = 0;
+        }
+      }
+    } else {
+      error_count = 0;
+    }
+
+    matrix_scan_quantum();
+  } else {
+    transport_slave(matrix + thisHand);
+    matrix_slave_scan_user();
+  }
+
+  return ret;
+}
diff --git a/keyboards/ai03/orbit/matrix.h b/keyboards/ai03/orbit/matrix.h
new file mode 100644 (file)
index 0000000..c2bdd30
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+#include <common/matrix.h>
diff --git a/keyboards/ai03/orbit/orbit.c b/keyboards/ai03/orbit/orbit.c
new file mode 100644 (file)
index 0000000..2f14987
--- /dev/null
@@ -0,0 +1,228 @@
+/* Copyright 2018 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 "orbit.h"
+#include "split_util.h"
+#include "transport.h"
+
+
+// Call led_toggle to set LEDs easily
+// LED IDs:
+// 
+// (LEFT) 0 1 2   |   3 4 5 (RIGHT)
+
+void led_toggle(int id, bool on) {
+       
+       if (isLeftHand) {
+               switch(id) {
+                       case 0:
+                               // Left hand C6
+                               if (on)
+                                       //PORTC |= (1<<6);
+                                       writePinHigh(C6);
+                               else
+                                       //PORTC &= ~(1<<6);
+                                       writePinLow(C6);
+                               break;
+                       case 1:
+                               // Left hand B6
+                               if (on)
+                                       //PORTB |= (1<<6);
+                                       writePinHigh(B6);
+                               else
+                                       //PORTB &= ~(1<<6);
+                                       writePinLow(B6);
+                               break;
+                       case 2:
+                               // Left hand B5
+                               if (on)
+                                       //PORTB |= (1<<5);
+                                       writePinHigh(B5);
+                               else
+                                       //PORTB &= ~(1<<5);
+                                       writePinLow(B5);
+                               break;
+                       default:
+                               break;
+               }
+       } else {
+               switch(id) {
+                       case 3:
+                               // Right hand F6
+                               if (on)
+                                       //PORTF |= (1<<6);
+                                       writePinHigh(F6);
+                               else
+                                       //PORTF &= ~(1<<6);
+                                       writePinLow(F6);
+                               break;
+                       case 4:
+                               // Right hand F7
+                               if (on)
+                                       //PORTF |= (1<<7);
+                                       writePinHigh(F7);
+                               else
+                                       //PORTF &= ~(1<<7);
+                                       writePinLow(F7);
+                               break;
+                       case 5:
+                               // Right hand C7
+                               if (on)
+                                       //PORTC |= (1<<7);
+                                       writePinHigh(C7);
+                               else
+                                       //PORTC &= ~(1<<7);
+                                       writePinLow(C7);
+                               break;
+                       default:
+                               break;
+               }
+       }
+}
+
+// Set all LEDs at once using an array of 6 booleans
+// LED IDs:
+// 
+// (LEFT) 0 1 2   |   3 4 5 (RIGHT)
+// 
+// Ex. set_all_leds({ false, false, false, true, true, true }) would turn off left hand, turn on right hand
+
+void set_all_leds(bool leds[6]) {
+       for (int i = 0; i < 6; i++) {
+               led_toggle(i, leds[i]);
+       }
+}
+
+void set_layer_indicators(uint8_t layer) {
+       
+       switch (layer)
+       {
+               case 0:
+                       led_toggle(0, true);
+                       led_toggle(1, false);
+                       led_toggle(2, false);
+                       break;
+               case 1:
+                       led_toggle(0, true);
+                       led_toggle(1, true);
+                       led_toggle(2, false);
+                       break;
+               case 2:
+                       led_toggle(0, true);
+                       led_toggle(1, true);
+                       led_toggle(2, true);
+                       break;
+               case 3:
+                       led_toggle(0, false);
+                       led_toggle(1, true);
+                       led_toggle(2, true);
+                       break;
+               case 4:
+                       led_toggle(0, false);
+                       led_toggle(1, false);
+                       led_toggle(2, true);
+                       break;
+               default:
+                       led_toggle(0, true);
+                       led_toggle(1, false);
+                       led_toggle(2, true);
+                       break;
+       }
+       
+}
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+       
+       // Initialize indicator LEDs to output
+       if (isLeftHand)
+       {
+               setPinOutput(C6);
+               setPinOutput(B6);
+               setPinOutput(B5);
+               //DDRC |= (1<<6);
+               //DDRB |= (1<<6);
+               //DDRB |= (1<<5);
+       }
+       else
+       {
+               setPinOutput(F6);
+               setPinOutput(F7);
+               setPinOutput(C7);
+               //DDRF |= (1<<6);
+               //DDRF |= (1<<7);
+               //DDRC |= (1<<7);
+       }
+
+       set_layer_indicators(0);
+       
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+       
+       if (is_keyboard_master()) {
+       
+               serial_m2s_buffer.nlock_led = IS_LED_ON(usb_led, USB_LED_NUM_LOCK);
+               serial_m2s_buffer.clock_led = IS_LED_ON(usb_led, USB_LED_CAPS_LOCK);
+               serial_m2s_buffer.slock_led = IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK);
+
+               led_toggle(3, IS_LED_ON(usb_led, USB_LED_NUM_LOCK));
+               led_toggle(4, IS_LED_ON(usb_led, USB_LED_CAPS_LOCK));
+               led_toggle(5, IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK));
+               
+       }
+
+       led_set_user(usb_led);
+}
+
+uint32_t layer_state_set_kb(uint32_t state) {
+       
+       if (is_keyboard_master())
+       {
+               
+               current_layer = biton32(state);
+               serial_m2s_buffer.current_layer = biton32(state);
+               
+               // If left half, do the LED toggle thing
+               if (isLeftHand)
+               {
+                       set_layer_indicators(biton32(state));
+               }
+               
+       }
+       // NOTE: Do not set slave LEDs here.
+       // This is not called on slave
+       
+       return layer_state_set_user(state);
+}
+
+
diff --git a/keyboards/ai03/orbit/orbit.h b/keyboards/ai03/orbit/orbit.h
new file mode 100644 (file)
index 0000000..211b9eb
--- /dev/null
@@ -0,0 +1,65 @@
+/* Copyright 2018 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/>.
+ */
+#ifndef ORBIT_H
+#define ORBIT_H
+
+#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.
+ */
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+  #include <avr/io.h>
+  #include <avr/interrupt.h>
+#endif
+#endif
+
+
+#define LAYOUT( \
+    L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+       L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+       L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+       L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
+         L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45 \
+) \
+{ \
+       { L00,   L01,   L02,   L03,   L04,   L05,   L06 }, \
+       { L10,   L11,   L12,   L13,   L14,   L15,   L16 }, \
+       { L20,   L21,   L22,   L23,   L24,   L25,   L26 }, \
+       { L30,   L31,   L32,   L33,   L34,   L35,   L36 }, \
+       { KC_NO, L41,   L42,   L43,   L44,   L45,   L46 }, \
+       { R00,   R01,   R02,   R03,   R04,   R05,   R06 }, \
+       { R10,   R11,   R12,   R13,   R14,   R15,   R16 }, \
+       { R20,   R21,   R22,   R23,   R24,   R25,   R26 }, \
+       { R30,   R31,   R32,   R33,   R34,   R35,   R36 }, \
+       { R40,   R41,   R42,   R43,   R44,   R45, KC_NO }  \
+}
+
+uint8_t current_layer;
+
+extern void led_toggle(int id, bool on);
+void set_all_leds(bool leds[6]);
+extern void set_layer_indicators(uint8_t layer);
+
+#endif
diff --git a/keyboards/ai03/orbit/readme.md b/keyboards/ai03/orbit/readme.md
new file mode 100644 (file)
index 0000000..58ba207
--- /dev/null
@@ -0,0 +1,15 @@
+# Orbit
+
+![Orbit](https://raw.githubusercontent.com/ai03-2725/Orbit/master/Images/PCB-R2.0.jpg) 
+
+A split ergonomic keyboard project.  
+
+Keyboard Maintainer: [ai03](https://github.com/ai03-2725)  
+Hardware Supported: The [Orbit PCB](https://github.com/ai03-2725/Orbit)  
+Hardware Availability: [This repository](https://github.com/ai03-2725/Orbit) has PCB files. Case group buy orders are currently closed.  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make ai03/orbit: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/orbit/rules.mk b/keyboards/ai03/orbit/rules.mk
new file mode 100644 (file)
index 0000000..4b40e47
--- /dev/null
@@ -0,0 +1,92 @@
+SRC += split_util.c \
+          split_flags.c \
+          serial.c \
+          transport.c \
+          matrix.c
+
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# 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 = 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 = yes      # 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)
+USE_I2C = no                # I2C for split communication
+CUSTOM_MATRIX = yes                    # For providing custom matrix.c (in this case, override regular matrix.c with split matrix.c)
+# SPLIT_KEYBOARD = yes         # Split keyboard flag disabled as manual edits had to be done to the split common files
+
+
diff --git a/keyboards/ai03/orbit/serial.c b/keyboards/ai03/orbit/serial.c
new file mode 100644 (file)
index 0000000..1315377
--- /dev/null
@@ -0,0 +1,546 @@
+/*
+ * WARNING: be careful changing this code, it is very timing dependent
+ *
+ * 2018-10-28 checked
+ *  avr-gcc 4.9.2
+ *  avr-gcc 5.4.0
+ *  avr-gcc 7.3.0
+ */
+
+#ifndef F_CPU
+#define F_CPU 16000000
+#endif
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include "serial.h"
+//#include <pro_micro.h>
+
+#ifdef SOFT_SERIAL_PIN
+
+#ifdef __AVR_ATmega32U4__
+  // if using ATmega32U4 I2C, can not use PD0 and PD1 in soft serial.
+  #ifdef USE_AVR_I2C
+    #if SOFT_SERIAL_PIN == D0 || SOFT_SERIAL_PIN == D1
+      #error Using ATmega32U4 I2C, so can not use PD0, PD1
+    #endif
+  #endif
+
+  #if SOFT_SERIAL_PIN >= D0 && SOFT_SERIAL_PIN <= D3
+    #define SERIAL_PIN_DDR   DDRD
+    #define SERIAL_PIN_PORT  PORTD
+    #define SERIAL_PIN_INPUT PIND
+    #if SOFT_SERIAL_PIN == D0
+      #define SERIAL_PIN_MASK _BV(PD0)
+      #define EIMSK_BIT       _BV(INT0)
+      #define EICRx_BIT       (~(_BV(ISC00) | _BV(ISC01)))
+      #define SERIAL_PIN_INTERRUPT INT0_vect
+    #elif  SOFT_SERIAL_PIN == D1
+      #define SERIAL_PIN_MASK _BV(PD1)
+      #define EIMSK_BIT       _BV(INT1)
+      #define EICRx_BIT       (~(_BV(ISC10) | _BV(ISC11)))
+      #define SERIAL_PIN_INTERRUPT INT1_vect
+    #elif  SOFT_SERIAL_PIN == D2
+      #define SERIAL_PIN_MASK _BV(PD2)
+      #define EIMSK_BIT       _BV(INT2)
+      #define EICRx_BIT       (~(_BV(ISC20) | _BV(ISC21)))
+      #define SERIAL_PIN_INTERRUPT INT2_vect
+    #elif  SOFT_SERIAL_PIN == D3
+      #define SERIAL_PIN_MASK _BV(PD3)
+      #define EIMSK_BIT       _BV(INT3)
+      #define EICRx_BIT       (~(_BV(ISC30) | _BV(ISC31)))
+      #define SERIAL_PIN_INTERRUPT INT3_vect
+    #endif
+  #elif  SOFT_SERIAL_PIN == E6
+    #define SERIAL_PIN_DDR   DDRE
+    #define SERIAL_PIN_PORT  PORTE
+    #define SERIAL_PIN_INPUT PINE
+    #define SERIAL_PIN_MASK  _BV(PE6)
+    #define EIMSK_BIT        _BV(INT6)
+    #define EICRx_BIT        (~(_BV(ISC60) | _BV(ISC61)))
+    #define SERIAL_PIN_INTERRUPT INT6_vect
+  #else
+  #error invalid SOFT_SERIAL_PIN value
+  #endif
+
+#else
+ #error serial.c now support ATmega32U4 only
+#endif
+
+#define ALWAYS_INLINE __attribute__((always_inline))
+#define NO_INLINE __attribute__((noinline))
+#define _delay_sub_us(x)    __builtin_avr_delay_cycles(x)
+
+// parity check
+#define ODD_PARITY 1
+#define EVEN_PARITY 0
+#define PARITY EVEN_PARITY
+
+#ifdef SERIAL_DELAY
+  // custom setup in config.h
+  // #define TID_SEND_ADJUST 2
+  // #define SERIAL_DELAY 6             // micro sec
+  // #define READ_WRITE_START_ADJUST 30 // cycles
+  // #define READ_WRITE_WIDTH_ADJUST 8 // cycles
+#else
+// ============ Standard setups ============
+
+#ifndef SELECT_SOFT_SERIAL_SPEED
+#define SELECT_SOFT_SERIAL_SPEED 1
+//  0: about 189kbps (Experimental only)
+//  1: about 137kbps (default)
+//  2: about 75kbps
+//  3: about 39kbps
+//  4: about 26kbps
+//  5: about 20kbps
+#endif
+
+#if __GNUC__ < 6
+  #define TID_SEND_ADJUST 14
+#else
+  #define TID_SEND_ADJUST 2
+#endif
+
+#if SELECT_SOFT_SERIAL_SPEED == 0
+  // Very High speed
+  #define SERIAL_DELAY 4             // micro sec
+  #if __GNUC__ < 6
+    #define READ_WRITE_START_ADJUST 33 // cycles
+    #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+  #else
+    #define READ_WRITE_START_ADJUST 34 // cycles
+    #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+  #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 1
+  // High speed
+  #define SERIAL_DELAY 6             // micro sec
+  #if __GNUC__ < 6
+    #define READ_WRITE_START_ADJUST 30 // cycles
+    #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+  #else
+    #define READ_WRITE_START_ADJUST 33 // cycles
+    #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+  #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 2
+  // Middle speed
+  #define SERIAL_DELAY 12            // micro sec
+  #define READ_WRITE_START_ADJUST 30 // cycles
+  #if __GNUC__ < 6
+    #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+  #else
+    #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+  #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 3
+  // Low speed
+  #define SERIAL_DELAY 24            // micro sec
+  #define READ_WRITE_START_ADJUST 30 // cycles
+  #if __GNUC__ < 6
+    #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+  #else
+    #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+  #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 4
+  // Very Low speed
+  #define SERIAL_DELAY 36            // micro sec
+  #define READ_WRITE_START_ADJUST 30 // cycles
+  #if __GNUC__ < 6
+    #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+  #else
+    #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+  #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 5
+  // Ultra Low speed
+  #define SERIAL_DELAY 48            // micro sec
+  #define READ_WRITE_START_ADJUST 30 // cycles
+  #if __GNUC__ < 6
+    #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+  #else
+    #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+  #endif
+#else
+#error invalid SELECT_SOFT_SERIAL_SPEED value
+#endif /* SELECT_SOFT_SERIAL_SPEED */
+#endif /* SERIAL_DELAY */
+
+#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
+#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
+
+#define SLAVE_INT_WIDTH_US 1
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+  #define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
+#else
+  #define SLAVE_INT_ACK_WIDTH_UNIT 2
+  #define SLAVE_INT_ACK_WIDTH 4
+#endif
+
+static SSTD_t *Transaction_table = NULL;
+static uint8_t Transaction_table_size = 0;
+
+inline static void serial_delay(void) ALWAYS_INLINE;
+inline static
+void serial_delay(void) {
+  _delay_us(SERIAL_DELAY);
+}
+
+inline static void serial_delay_half1(void) ALWAYS_INLINE;
+inline static
+void serial_delay_half1(void) {
+  _delay_us(SERIAL_DELAY_HALF1);
+}
+
+inline static void serial_delay_half2(void) ALWAYS_INLINE;
+inline static
+void serial_delay_half2(void) {
+  _delay_us(SERIAL_DELAY_HALF2);
+}
+
+inline static void serial_output(void) ALWAYS_INLINE;
+inline static
+void serial_output(void) {
+  SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
+}
+
+// make the serial pin an input with pull-up resistor
+inline static void serial_input_with_pullup(void) ALWAYS_INLINE;
+inline static
+void serial_input_with_pullup(void) {
+  SERIAL_PIN_DDR  &= ~SERIAL_PIN_MASK;
+  SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+inline static uint8_t serial_read_pin(void) ALWAYS_INLINE;
+inline static
+uint8_t serial_read_pin(void) {
+  return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
+}
+
+inline static void serial_low(void) ALWAYS_INLINE;
+inline static
+void serial_low(void) {
+  SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
+
+inline static void serial_high(void) ALWAYS_INLINE;
+inline static
+void serial_high(void) {
+  SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size)
+{
+    Transaction_table = sstd_table;
+    Transaction_table_size = (uint8_t)sstd_table_size;
+    serial_output();
+    serial_high();
+}
+
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size)
+{
+    Transaction_table = sstd_table;
+    Transaction_table_size = (uint8_t)sstd_table_size;
+    serial_input_with_pullup();
+
+    // Enable INT0-INT3,INT6
+    EIMSK |= EIMSK_BIT;
+#if SERIAL_PIN_MASK == _BV(PE6)
+    // Trigger on falling edge of INT6
+    EICRB &= EICRx_BIT;
+#else
+    // Trigger on falling edge of INT0-INT3
+    EICRA &= EICRx_BIT;
+#endif
+}
+
+// Used by the sender to synchronize timing with the reciver.
+static void sync_recv(void) NO_INLINE;
+static
+void sync_recv(void) {
+  for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
+  }
+  // This shouldn't hang if the target disconnects because the
+  // serial line will float to high if the target does disconnect.
+  while (!serial_read_pin());
+}
+
+// Used by the reciver to send a synchronization signal to the sender.
+static void sync_send(void) NO_INLINE;
+static
+void sync_send(void) {
+  serial_low();
+  serial_delay();
+  serial_high();
+}
+
+// Reads a byte from the serial line
+static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) NO_INLINE;
+static uint8_t serial_read_chunk(uint8_t *pterrcount, uint8_t bit) {
+    uint8_t byte, i, p, pb;
+
+  _delay_sub_us(READ_WRITE_START_ADJUST);
+  for( i = 0, byte = 0, p = PARITY; i < bit; i++ ) {
+      serial_delay_half1();   // read the middle of pulses
+      if( serial_read_pin() ) {
+          byte = (byte << 1) | 1; p ^= 1;
+      } else {
+          byte = (byte << 1) | 0; p ^= 0;
+      }
+      _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
+      serial_delay_half2();
+  }
+  /* recive parity bit */
+  serial_delay_half1();   // read the middle of pulses
+  pb = serial_read_pin();
+  _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
+  serial_delay_half2();
+
+  *pterrcount += (p != pb)? 1 : 0;
+
+  return byte;
+}
+
+// Sends a byte with MSB ordering
+void serial_write_chunk(uint8_t data, uint8_t bit) NO_INLINE;
+void serial_write_chunk(uint8_t data, uint8_t bit) {
+    uint8_t b, p;
+    for( p = PARITY, b = 1<<(bit-1); b ; b >>= 1) {
+        if(data & b) {
+            serial_high(); p ^= 1;
+        } else {
+            serial_low();  p ^= 0;
+        }
+        serial_delay();
+    }
+    /* send parity bit */
+    if(p & 1) { serial_high(); }
+    else      { serial_low(); }
+    serial_delay();
+
+    serial_low(); // sync_send() / senc_recv() need raise edge
+}
+
+static void serial_send_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
+static
+void serial_send_packet(uint8_t *buffer, uint8_t size) {
+  for (uint8_t i = 0; i < size; ++i) {
+    uint8_t data;
+    data = buffer[i];
+    sync_send();
+    serial_write_chunk(data,8);
+  }
+}
+
+static uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) NO_INLINE;
+static
+uint8_t serial_recive_packet(uint8_t *buffer, uint8_t size) {
+  uint8_t pecount = 0;
+  for (uint8_t i = 0; i < size; ++i) {
+    uint8_t data;
+    sync_recv();
+    data = serial_read_chunk(&pecount, 8);
+    buffer[i] = data;
+  }
+  return pecount == 0;
+}
+
+inline static
+void change_sender2reciver(void) {
+    sync_send();          //0
+    serial_delay_half1(); //1
+    serial_low();         //2
+    serial_input_with_pullup(); //2
+    serial_delay_half1(); //3
+}
+
+inline static
+void change_reciver2sender(void) {
+    sync_recv();     //0
+    serial_delay();  //1
+    serial_low();    //3
+    serial_output(); //3
+    serial_delay_half1(); //4
+}
+
+static inline uint8_t nibble_bits_count(uint8_t bits)
+{
+    bits = (bits & 0x5) + (bits >> 1 & 0x5);
+    bits = (bits & 0x3) + (bits >> 2 & 0x3);
+    return bits;
+}
+
+// interrupt handle to be used by the target device
+ISR(SERIAL_PIN_INTERRUPT) {
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+  serial_low();
+  serial_output();
+  SSTD_t *trans = Transaction_table;
+#else
+  // recive transaction table index
+  uint8_t tid, bits;
+  uint8_t pecount = 0;
+  sync_recv();
+  bits = serial_read_chunk(&pecount,7);
+  tid = bits>>3;
+  bits = (bits&7) != nibble_bits_count(tid);
+  if( bits || pecount> 0 || tid > Transaction_table_size ) {
+      return;
+  }
+  serial_delay_half1();
+
+  serial_high(); // response step1 low->high
+  serial_output();
+  _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT*SLAVE_INT_ACK_WIDTH);
+  SSTD_t *trans = &Transaction_table[tid];
+  serial_low(); // response step2 ack high->low
+#endif
+
+  // target send phase
+  if( trans->target2initiator_buffer_size > 0 )
+      serial_send_packet((uint8_t *)trans->target2initiator_buffer,
+                         trans->target2initiator_buffer_size);
+  // target switch to input
+  change_sender2reciver();
+
+  // target recive phase
+  if( trans->initiator2target_buffer_size > 0 ) {
+      if (serial_recive_packet((uint8_t *)trans->initiator2target_buffer,
+                               trans->initiator2target_buffer_size) ) {
+          *trans->status = TRANSACTION_ACCEPTED;
+      } else {
+          *trans->status = TRANSACTION_DATA_ERROR;
+      }
+  } else {
+      *trans->status = TRANSACTION_ACCEPTED;
+  }
+
+  sync_recv(); //weit initiator output to high
+}
+
+/////////
+//  start transaction by initiator
+//
+// int  soft_serial_transaction(int sstd_index)
+//
+// Returns:
+//    TRANSACTION_END
+//    TRANSACTION_NO_RESPONSE
+//    TRANSACTION_DATA_ERROR
+// this code is very time dependent, so we need to disable interrupts
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+int  soft_serial_transaction(void) {
+  SSTD_t *trans = Transaction_table;
+#else
+int  soft_serial_transaction(int sstd_index) {
+  if( sstd_index > Transaction_table_size )
+      return TRANSACTION_TYPE_ERROR;
+  SSTD_t *trans = &Transaction_table[sstd_index];
+#endif
+  cli();
+
+  // signal to the target that we want to start a transaction
+  serial_output();
+  serial_low();
+  _delay_us(SLAVE_INT_WIDTH_US);
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+  // wait for the target response
+  serial_input_with_pullup();
+  _delay_us(SLAVE_INT_RESPONSE_TIME);
+
+  // check if the target is present
+  if (serial_read_pin()) {
+    // target failed to pull the line low, assume not present
+    serial_output();
+    serial_high();
+    *trans->status = TRANSACTION_NO_RESPONSE;
+    sei();
+    return TRANSACTION_NO_RESPONSE;
+  }
+
+#else
+  // send transaction table index
+  int tid = (sstd_index<<3) | (7 & nibble_bits_count(sstd_index));
+  sync_send();
+  _delay_sub_us(TID_SEND_ADJUST);
+  serial_write_chunk(tid, 7);
+  serial_delay_half1();
+
+  // wait for the target response (step1 low->high)
+  serial_input_with_pullup();
+  while( !serial_read_pin() ) {
+      _delay_sub_us(2);
+  }
+
+  // check if the target is present (step2 high->low)
+  for( int i = 0; serial_read_pin(); i++ ) {
+      if (i > SLAVE_INT_ACK_WIDTH + 1) {
+          // slave failed to pull the line low, assume not present
+          serial_output();
+          serial_high();
+          *trans->status = TRANSACTION_NO_RESPONSE;
+          sei();
+          return TRANSACTION_NO_RESPONSE;
+      }
+      _delay_sub_us(SLAVE_INT_ACK_WIDTH_UNIT);
+  }
+#endif
+
+  // initiator recive phase
+  // if the target is present syncronize with it
+  if( trans->target2initiator_buffer_size > 0 ) {
+      if (!serial_recive_packet((uint8_t *)trans->target2initiator_buffer,
+                                trans->target2initiator_buffer_size) ) {
+          serial_output();
+          serial_high();
+          *trans->status = TRANSACTION_DATA_ERROR;
+          sei();
+          return TRANSACTION_DATA_ERROR;
+      }
+   }
+
+  // initiator switch to output
+  change_reciver2sender();
+
+  // initiator send phase
+  if( trans->initiator2target_buffer_size > 0 ) {
+      serial_send_packet((uint8_t *)trans->initiator2target_buffer,
+                         trans->initiator2target_buffer_size);
+  }
+
+  // always, release the line when not in use
+  sync_send();
+
+  *trans->status = TRANSACTION_END;
+  sei();
+  return TRANSACTION_END;
+}
+
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_get_and_clean_status(int sstd_index) {
+    SSTD_t *trans = &Transaction_table[sstd_index];
+    cli();
+    int retval = *trans->status;
+    *trans->status = 0;;
+    sei();
+    return retval;
+}
+#endif
+
+#endif
+
+// Helix serial.c history
+//   2018-1-29 fork from let's split and add PD2, modify sync_recv() (#2308, bceffdefc)
+//   2018-6-28 bug fix master to slave comm and speed up (#3255, 1038bbef4)
+//             (adjusted with avr-gcc 4.9.2)
+//   2018-7-13 remove USE_SERIAL_PD2 macro (#3374, f30d6dd78)
+//             (adjusted with avr-gcc 4.9.2)
+//   2018-8-11 add support multi-type transaction (#3608, feb5e4aae)
+//             (adjusted with avr-gcc 4.9.2)
+//   2018-10-21 fix serial and RGB animation conflict (#4191, 4665e4fff)
+//             (adjusted with avr-gcc 7.3.0)
+//   2018-10-28 re-adjust compiler depend value of delay (#4269, 8517f8a66)
+//             (adjusted with avr-gcc 5.4.0, 7.3.0)
+//   2018-12-17 copy to TOP/quantum/split_common/ and remove backward compatibility code (#4669)
diff --git a/keyboards/ai03/orbit/serial.h b/keyboards/ai03/orbit/serial.h
new file mode 100644 (file)
index 0000000..1c1e640
--- /dev/null
@@ -0,0 +1,62 @@
+#pragma once
+
+#include <stdbool.h>
+
+// /////////////////////////////////////////////////////////////////
+// Need Soft Serial defines in config.h
+// /////////////////////////////////////////////////////////////////
+// ex.
+//  #define SOFT_SERIAL_PIN ??   // ?? = D0,D1,D2,D3,E6
+//  OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
+//                                               //  1: about 137kbps (default)
+//                                               //  2: about 75kbps
+//                                               //  3: about 39kbps
+//                                               //  4: about 26kbps
+//                                               //  5: about 20kbps
+//
+// //// USE simple API (using signle-type transaction function)
+//   /* nothing */
+// //// USE flexible API (using multi-type transaction function)
+//   #define SERIAL_USE_MULTI_TRANSACTION
+//
+// /////////////////////////////////////////////////////////////////
+
+// Soft Serial Transaction Descriptor
+typedef struct _SSTD_t  {
+    uint8_t *status;
+    uint8_t initiator2target_buffer_size;
+    uint8_t *initiator2target_buffer;
+    uint8_t target2initiator_buffer_size;
+    uint8_t *target2initiator_buffer;
+} SSTD_t;
+#define TID_LIMIT( table ) (sizeof(table) / sizeof(SSTD_t))
+
+// initiator is transaction start side
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
+// target is interrupt accept side
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
+
+// initiator resullt
+#define TRANSACTION_END 0
+#define TRANSACTION_NO_RESPONSE 0x1
+#define TRANSACTION_DATA_ERROR  0x2
+#define TRANSACTION_TYPE_ERROR  0x4
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+int  soft_serial_transaction(void);
+#else
+int  soft_serial_transaction(int sstd_index);
+#endif
+
+// target status
+// *SSTD_t.status has
+//   initiator:
+//       TRANSACTION_END
+//    or TRANSACTION_NO_RESPONSE
+//    or TRANSACTION_DATA_ERROR
+//   target:
+//       TRANSACTION_DATA_ERROR
+//    or TRANSACTION_ACCEPTED
+#define TRANSACTION_ACCEPTED 0x8
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+int  soft_serial_get_and_clean_status(int sstd_index);
+#endif
diff --git a/keyboards/ai03/orbit/split_flags.c b/keyboards/ai03/orbit/split_flags.c
new file mode 100644 (file)
index 0000000..1f5825d
--- /dev/null
@@ -0,0 +1,5 @@
+#include "split_flags.h"
+
+volatile bool RGB_DIRTY = false;
+
+volatile bool BACKLIT_DIRTY = false;
\ No newline at end of file
diff --git a/keyboards/ai03/orbit/split_flags.h b/keyboards/ai03/orbit/split_flags.h
new file mode 100644 (file)
index 0000000..aaac474
--- /dev/null
@@ -0,0 +1,15 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stdint.h>
+
+/**
+* Global Flags
+**/
+
+//RGB Stuff
+extern volatile bool RGB_DIRTY;
+
+
+//Backlight Stuff
+extern volatile bool BACKLIT_DIRTY;
diff --git a/keyboards/ai03/orbit/split_util.c b/keyboards/ai03/orbit/split_util.c
new file mode 100644 (file)
index 0000000..5095cb8
--- /dev/null
@@ -0,0 +1,87 @@
+#include "split_util.h"
+#include "matrix.h"
+#include "keyboard.h"
+#include "config.h"
+#include "timer.h"
+#include "split_flags.h"
+#include "transport.h"
+#include "quantum.h"
+
+#ifdef EE_HANDS
+#   include "tmk_core/common/eeprom.h"
+#   include "eeconfig.h"
+#endif
+
+volatile bool isLeftHand = true;
+
+__attribute__((weak))
+bool is_keyboard_left(void) {
+  #ifdef SPLIT_HAND_PIN
+    // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
+    setPinInput(SPLIT_HAND_PIN);
+    return readPin(SPLIT_HAND_PIN);
+  #else
+    #ifdef EE_HANDS
+      return eeprom_read_byte(EECONFIG_HANDEDNESS);
+    #else
+      #ifdef MASTER_RIGHT
+        return !is_keyboard_master();
+      #else
+        return is_keyboard_master();
+      #endif
+    #endif
+  #endif
+}
+
+bool is_keyboard_master(void)
+{
+#ifdef __AVR__
+  static enum { UNKNOWN, MASTER, SLAVE } usbstate = UNKNOWN;
+
+  // only check once, as this is called often
+  if (usbstate == UNKNOWN)
+  {
+    USBCON |= (1 << OTGPADE);  // enables VBUS pad
+    wait_us(5);
+
+    usbstate = (USBSTA & (1 << VBUS)) ? MASTER : SLAVE;  // checks state of VBUS
+  }
+
+  return (usbstate == MASTER);
+#else
+  return true;
+#endif
+}
+
+static void keyboard_master_setup(void) {
+#if defined(USE_I2C) || defined(EH)
+  #ifdef SSD1306OLED
+    matrix_master_OLED_init ();
+  #endif
+#endif
+  transport_master_init();
+
+  // For master the Backlight info needs to be sent on startup
+  // Otherwise the salve won't start with the proper info until an update
+  BACKLIT_DIRTY = true;
+}
+
+static void keyboard_slave_setup(void)
+{
+  transport_slave_init();
+}
+
+// this code runs before the usb and keyboard is initialized
+void matrix_setup(void)
+{
+  isLeftHand = is_keyboard_left();
+
+  if (is_keyboard_master())
+  {
+    keyboard_master_setup();
+  }
+  else
+  {
+    keyboard_slave_setup();
+  }
+}
diff --git a/keyboards/ai03/orbit/split_util.h b/keyboards/ai03/orbit/split_util.h
new file mode 100644 (file)
index 0000000..20f7535
--- /dev/null
@@ -0,0 +1,10 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+extern volatile bool isLeftHand;
+
+void matrix_master_OLED_init (void);
diff --git a/keyboards/ai03/orbit/transport.c b/keyboards/ai03/orbit/transport.c
new file mode 100644 (file)
index 0000000..adedf24
--- /dev/null
@@ -0,0 +1,238 @@
+
+#include "transport.h"
+
+#include "config.h"
+#include "matrix.h"
+#include "quantum.h"
+
+#include "orbit.h"
+
+#define ROWS_PER_HAND (MATRIX_ROWS/2)
+
+#ifdef RGBLIGHT_ENABLE
+#   include "rgblight.h"
+#endif
+
+#ifdef BACKLIGHT_ENABLE
+# include "backlight.h"
+  extern backlight_config_t backlight_config;
+#endif
+
+#if defined(USE_I2C) || defined(EH)
+
+#include "i2c.h"
+
+#ifndef SLAVE_I2C_ADDRESS
+#  define SLAVE_I2C_ADDRESS           0x32
+#endif
+
+#if (MATRIX_COLS > 8)
+#  error "Currently only supports 8 COLS"
+#endif
+
+// Get rows from other half over i2c
+bool transport_master(matrix_row_t matrix[]) {
+  int err = 0;
+
+  // write backlight info
+#ifdef BACKLIGHT_ENABLE
+  if (BACKLIT_DIRTY) {
+    err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+    if (err) { goto i2c_error; }
+
+    // Backlight location
+    err = i2c_master_write(I2C_BACKLIT_START);
+    if (err) { goto i2c_error; }
+
+    // Write backlight
+    i2c_master_write(get_backlight_level());
+
+    BACKLIT_DIRTY = false;
+  }
+#endif
+
+  err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+  if (err) { goto i2c_error; }
+
+  // start of matrix stored at I2C_KEYMAP_START
+  err = i2c_master_write(I2C_KEYMAP_START);
+  if (err) { goto i2c_error; }
+
+  // Start read
+  err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
+  if (err) { goto i2c_error; }
+
+  if (!err) {
+    int i;
+    for (i = 0; i < ROWS_PER_HAND-1; ++i) {
+      matrix[i] = i2c_master_read(I2C_ACK);
+    }
+    matrix[i] = i2c_master_read(I2C_NACK);
+    i2c_master_stop();
+  } else {
+i2c_error: // the cable is disconnceted, or something else went wrong
+    i2c_reset_state();
+    return false;
+  }
+
+#ifdef RGBLIGHT_ENABLE
+  if (RGB_DIRTY) {
+    err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+    if (err) { goto i2c_error; }
+
+    // RGB Location
+    err = i2c_master_write(I2C_RGB_START);
+    if (err) { goto i2c_error; }
+
+    uint32_t dword = eeconfig_read_rgblight();
+
+    // Write RGB
+    err = i2c_master_write_data(&dword, 4);
+    if (err) { goto i2c_error; }
+
+    RGB_DIRTY = false;
+    i2c_master_stop();
+  }
+#endif
+
+  return true;
+}
+
+void transport_slave(matrix_row_t matrix[]) {
+
+  for (int i = 0; i < ROWS_PER_HAND; ++i)
+  {
+    i2c_slave_buffer[I2C_KEYMAP_START + i] = matrix[i];
+  }
+  // Read Backlight Info
+  #ifdef BACKLIGHT_ENABLE
+  if (BACKLIT_DIRTY)
+  {
+    backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]);
+    BACKLIT_DIRTY = false;
+  }
+  #endif
+  #ifdef RGBLIGHT_ENABLE
+  if (RGB_DIRTY)
+  {
+    // Disable interupts (RGB data is big)
+    cli();
+    // Create new DWORD for RGB data
+    uint32_t dword;
+
+    // Fill the new DWORD with the data that was sent over
+    uint8_t * dword_dat = (uint8_t *)(&dword);
+    for (int i = 0; i < 4; i++)
+    {
+      dword_dat[i] = i2c_slave_buffer[I2C_RGB_START + i];
+    }
+
+    // Update the RGB now with the new data and set RGB_DIRTY to false
+    rgblight_update_dword(dword);
+    RGB_DIRTY = false;
+    // Re-enable interupts now that RGB is set
+    sei();
+  }
+  #endif
+}
+
+void transport_master_init(void) {
+  i2c_master_init();
+}
+
+void transport_slave_init(void) {
+  i2c_slave_init(SLAVE_I2C_ADDRESS);
+}
+
+#else // USE_SERIAL
+
+#include "serial.h"
+
+
+
+volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
+volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
+uint8_t volatile status0 = 0;
+
+SSTD_t transactions[] = {
+  { (uint8_t *)&status0,
+    sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
+    sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
+  }
+};
+
+uint8_t slave_layer_cache;
+uint8_t slave_nlock_cache;
+uint8_t slave_clock_cache;
+uint8_t slave_slock_cache;
+
+void transport_master_init(void)
+{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
+
+void transport_slave_init(void)
+{ 
+       soft_serial_target_init(transactions, TID_LIMIT(transactions)); 
+       slave_layer_cache = 255;
+       slave_nlock_cache = 255;
+       slave_clock_cache = 255;
+       slave_slock_cache = 255;
+}
+
+bool transport_master(matrix_row_t matrix[]) {
+
+  if (soft_serial_transaction()) {
+    return false;
+  }
+
+  // TODO:  if MATRIX_COLS > 8 change to unpack()
+  for (int i = 0; i < ROWS_PER_HAND; ++i) {
+    matrix[i] = serial_s2m_buffer.smatrix[i];
+  }
+
+  #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+    // Code to send RGB over serial goes here (not implemented yet)
+  #endif
+
+  #ifdef BACKLIGHT_ENABLE
+    // Write backlight level for slave to read
+    serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
+  #endif
+
+  return true;
+}
+
+void transport_slave(matrix_row_t matrix[]) {
+
+  // TODO: if MATRIX_COLS > 8 change to pack()
+  for (int i = 0; i < ROWS_PER_HAND; ++i)
+  {
+    serial_s2m_buffer.smatrix[i] = matrix[i];
+  }
+  #ifdef BACKLIGHT_ENABLE
+    backlight_set(serial_m2s_buffer.backlight_level);
+  #endif
+  #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+  // Add serial implementation for RGB here
+  #endif
+  
+  if (slave_layer_cache != serial_m2s_buffer.current_layer) {  
+       slave_layer_cache = serial_m2s_buffer.current_layer;
+       set_layer_indicators(slave_layer_cache);
+  }
+  
+  if (slave_nlock_cache != serial_m2s_buffer.nlock_led) {
+       slave_nlock_cache = serial_m2s_buffer.nlock_led;
+       led_toggle(3, slave_nlock_cache);
+  }
+  if (slave_clock_cache != serial_m2s_buffer.clock_led) {
+       slave_clock_cache = serial_m2s_buffer.clock_led;
+       led_toggle(4, slave_clock_cache);
+  }
+  if (slave_slock_cache != serial_m2s_buffer.slock_led) {
+       slave_slock_cache = serial_m2s_buffer.slock_led;
+       led_toggle(5, slave_slock_cache);
+  }
+  
+}
+
+#endif
diff --git a/keyboards/ai03/orbit/transport.h b/keyboards/ai03/orbit/transport.h
new file mode 100644 (file)
index 0000000..422e2ec
--- /dev/null
@@ -0,0 +1,42 @@
+#pragma once
+
+#include <common/matrix.h>
+
+#define ROWS_PER_HAND (MATRIX_ROWS/2)
+
+typedef struct _Serial_s2m_buffer_t {
+  // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
+  matrix_row_t smatrix[ROWS_PER_HAND];
+} Serial_s2m_buffer_t;
+
+typedef struct _Serial_m2s_buffer_t {
+#ifdef BACKLIGHT_ENABLE
+    uint8_t backlight_level;
+#endif
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
+    rgblight_config_t rgblight_config; //not yet use
+    //
+    // When MCUs on both sides drive their respective RGB LED chains,
+    // it is necessary to synchronize, so it is necessary to communicate RGB information.
+    // In that case, define the RGBLIGHT_SPLIT macro.
+    //
+    // Otherwise, if the master side MCU drives both sides RGB LED chains,
+    // there is no need to communicate.
+#endif
+
+       uint8_t current_layer;
+       uint8_t nlock_led;
+       uint8_t clock_led;
+       uint8_t slock_led;
+
+} Serial_m2s_buffer_t;
+
+extern volatile Serial_s2m_buffer_t serial_s2m_buffer;
+extern volatile Serial_m2s_buffer_t serial_m2s_buffer;
+
+void transport_master_init(void);
+void transport_slave_init(void);
+
+// returns false if valid data not received from slave
+bool transport_master(matrix_row_t matrix[]);
+void transport_slave(matrix_row_t matrix[]);
index 16460ed701cf3749acb0c15f0be7b12e98a5e32c..1486612f9f17c6602e93bfdeb0029ba48debed33 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Copyright 2019 Felipe Coury <felipe.coury@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
@@ -21,30 +21,30 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* LAYOUT
  * ┌───┐ ┌───┬───┬───┬───┬───┬───┬───┐         ┌───┬───┬───┬───┬───┬───┬───┬───┐
- * │63 │ │00 │01 │02 │03 │04 │05 │06 │         │07 │08 │09 │10 │11 │12 │13 │14 │
+ * │50 │ │00 │01 │02 │03 │04 │05 │06 │         │07 │08 │09 │0A │0B │0C │0D │0E │
  * ├───┤ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘       ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
- * │64 │ │15   │16 │17 │18 │19 │20 │         │21 │22 │23 │24 │25 │26 │27 │28   │
+ * │51 │ │10   │11 │12 │13 │14 │15 │         │16 │17 │18 │19 │1A │1B │1C │1D   │
  * ├───┤ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┐        └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │65 │ │29    │30 │31 │32 │33 │34 │         │35 │36 │37 │38 │39 │40 │41      │
+ * │52 │ │20    │21 │22 │23 │24 │25 │         │26 │27 │28 │29 │2A │2B │2C      │
  * └───┘ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐     ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
- *       │42      │43 │44 │45 │46 │47 │     │48 │49 │50 │51 │52 │53 │54    │55 │
+ *       │30      │31 │32 │33 │34 │35 │     │36 │37 │38 │39 │4A │4B │4C    │4D │
  *       ├─────┬──┴──┬┴───┴┬──┴───┴┬──┴─┐   ├───┴───┴──┬┴───┴┬──┴───┴────┬─┴───┤
- *       │56   │     │57   │58     │59  │   │60        │61   │           │62   │
+ *       │40   │     │41   │42     │43  │   │46        │47   │           │48   │
  *       └─────┘     └─────┴───────┴────┘   └──────────┴─────┘           └─────┘
  */
 #define LAYOUT( \
-  K63,   K00, K01, K02, K03, K04, K05, K06,      K07, K08, K09, K10, K11, K12, K13, K14, \
-  K64,   K15, K16, K17, K18, K19, K20,      K21, K22, K23, K24, K25, K26, K27, K28,      \
-  K65,   K29, K30, K31, K32, K33, K34,      K35, K36, K37, K38, K39, K40,      K41,      \
-         K42, K43, K44, K45, K46, K47,      K48, K49, K50, K51, K52, K53, K54, K55,      \
-         K56,      K57,      K58, K59,           K60,      K61,                K62       \
+  K50,   K00, K01, K02, K03, K04, K05, K06,      K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+  K51,   K10, K11, K12, K13, K14, K15,      K16, K17, K18, K19, K1A, K1B, K1C, K1D,      \
+  K52,   K20, K21, K22, K23, K24, K25,      K26, K27, K28, K29, K2A, K2B,      K2C,      \
+         K30, K31, K32, K33, K34, K35,      K36, K37, K38, K39, K4A, K4B, K4C, K4D,      \
+         K40,      K41,      K42, K43,           K46,      K47,                K48       \
 ) \
 { \
-  { 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  , KC_NO }, \
-  { K29  , K30  , K31  , K32  , K33  , K34  , K35  , K36  , K37  , K38  , K39  , K40  , K41  , KC_NO, KC_NO }, \
-  { K42  , K43  , K44  , K45  , K46  , K47  , K48  , K49  , K50  , K51  , K52  , K53  , K54  , K55  , KC_NO }, \
-  { K56  , K57  , K58  , K59  , KC_NO, KC_NO, K60  , K61  , K62  , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
-  { K63  , K64  , K65  , 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  , K05  , K06  , K07  , K08  , K09  , K0A  , K0B  , K0C  , K0D  , K0E   }, \
+  { K10  , K11  , K12  , K13  , K14  , K15  , K16  , K17  , K18  , K19  , K1A  , K1B  , K1C  , K1D  , KC_NO }, \
+  { K20  , K21  , K22  , K23  , K24  , K25  , K26  , K27  , K28  , K29  , K2A  , K2B  , K2C  , KC_NO, KC_NO }, \
+  { K30  , K31  , K32  , K33  , K34  , K35  , K36  , K37  , K38  , K39  , K4A  , K4B  , K4C  , K4D  , KC_NO }, \
+  { K40  , K41  , K42  , K43  , KC_NO, KC_NO, K46  , K47  , K48  , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+  { K50  , K51  , K52  , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }  \
 }
 
diff --git a/keyboards/alice/program b/keyboards/alice/program
deleted file mode 100755 (executable)
index 3779bad..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, Sebastian Kaim <sebb@sebb767.de>
-#
-# 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/>.
-
-from __future__ import print_function
-
-import os
-import sys
-import time
-import usb
-
-
-def checkForKeyboardInNormalMode():
-    """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found."""
-    return usb.core.find(idVendor=0x20A0, idProduct=0x422D)
-
-def checkForKeyboardInBootloaderMode():
-    """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise."""
-    return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None)
-
-def flashKeyboard(firmware_file):
-    """Calls bootloadHID to flash the given file to the device."""
-    print('Flashing firmware to device ...')
-    if os.system('bootloadHID -r "%s"' % firmware_file) == 0:
-        print('\nDone!')
-    else:
-        print('\nbootloadHID returned an error.')
-
-def printDeviceInfo(dev):
-    """Prints all infos for a given USB device"""
-    print('Device Information:')
-    print('  idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
-    print('  idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
-    print('Manufacturer: %s' % (dev.iManufacturer))
-    print('Serial: %s' % (dev.iSerialNumber))
-    print('Product: %s' % (dev.iProduct), end='\n\n')
-
-def sendDeviceToBootloaderMode(dev):
-    """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing."""
-    try:
-        dev.set_configuration()
-
-        request_type = usb.util.build_request_type(
-                usb.util.CTRL_OUT,
-                usb.util.CTRL_TYPE_CLASS,
-                usb.util.CTRL_RECIPIENT_DEVICE)
-
-        USBRQ_HID_SET_REPORT = 0x09
-        HID_REPORT_OPTION = 0x0301
-
-        dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5)
-    except usb.core.USBError:
-        # for some reason I keep getting USBError, but it works!
-        pass
-
-
-if len(sys.argv) < 2:
-    print('Usage: %s <firmware.hex>' % sys.argv[0])
-    sys.exit(1)
-
-kb = checkForKeyboardInNormalMode()
-
-if kb is not None:
-    print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='')
-    printDeviceInfo(kb)
-    sendDeviceToBootloaderMode(kb)
-    print(' done.')
-    print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.")
-    print("      You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode")
-
-attempts = 12  # 60 seconds
-found = False
-for attempt in range(1, attempts + 1):
-    print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='')
-
-    if checkForKeyboardInBootloaderMode():
-        print('Found', end='\n\n')
-        flashKeyboard(sys.argv[1])
-        found = True
-        break
-    else:
-        print('Nothing.', end='')
-
-        if attempt != attempts:  # no need to wait on the last attempt
-            print(' Sleeping 5 seconds.', end='')
-            time.sleep(5)
-
-        # print a newline
-        print()
-
-if not found:
-    print("Couldn't find a flashable keyboard. Aborting.")
-    sys.exit(2)
-
index bb57cbeae304cdd62a2eb7893fcb475c25de0563..eecd38d7e760ba7225acc1825a4cfdb230aee7e7 100644 (file)
@@ -45,4 +45,4 @@ OPT_DEFS = -DDEBUG_LEVEL=0
 SRC += i2c_master.c
 
 # programming options
-PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
index 5e346088ed1dce24c90d7190ae97906208b0c705..0c01a85594d3c02c3235b22a4b54b1b62d623d7e 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "config_common.h"
 
 // place overrides here
-
-#endif
index 431537d25848ccb713e8dd99381f186ef6c0c9ce..1c9122c9ec7287dc43c54f739ad6d04a49391fe6 100644 (file)
@@ -1,9 +1,5 @@
 #include QMK_KEYBOARD_H
 
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
 // Each layer gets a name for readability, which is then used in the keymap matrix below.
 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 // Layer names don't all need to be of the same length, obviously, and you can also skip them
index d353728a97e4714af1f7ddaace41d191914ef9c4..631697384b899a3d44e3f6215a27d0d2400aa665 100644 (file)
@@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    */
   [_LW] = LAYOUT( /* [> LOWER <] */
     KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP,                   KC_UP,   KC_F7,   KC_F8,   KC_F9,   KC_F10  ,
-    KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN,                   KC_DOWN, KC_F4,   KC_F5,   KC_F6,   KC_F11  ,
+    KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,                   KC_DOWN, KC_F4,   KC_F5,   KC_F6,   KC_F11  ,
     KC_NO,   KC_VOLU, KC_NO,   KC_NO,   RESET,                     KC_NO,   KC_F1,   KC_F2,   KC_F3,   KC_F12  ,
     KC_NO,   KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC,  TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS )
 };
index a6efd1befa376e171afc996cc86ec0cc914e0144..0fda245e2ee5c3fd2bfeba03ee7b44bca12c9fbd 100644 (file)
@@ -8,6 +8,21 @@
 #define COMBINED  3
 #define BROWSER_CONTROL 4
 
+// aliases
+// shell
+#define SHELL_DEL_WORD RCTL(KC_W)
+// android studio
+
+#define AS_TABLEFT LALT(KC_LEFT)
+#define AS_TABRIGHT LALT(KC_RIGHT)
+#define AS_SYMBOL LCTL(LALT(KC_N))
+#define AS_CLASS LCTL(KC_N)
+#define AS_FINDUSAGE LALT(KC_F7)
+#define AS_BACK LCTL(LALT(KC_LEFT))
+#define AS_GO_DECLARATION LCTL(KC_B)
+#define AS_GO_IMPLEMENTATION LCTL(LALT(KC_B))
+#define AS_CLOSETAB LCTL(KC_F4)
+#define AS_CLOSETOOLWINDOW LCTL(LSFT(KC_F4))
 
 enum custom_keycodes {
   PLACEHOLDER = SAFE_RANGE, // can always be here
@@ -37,10 +52,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   ),
 
   [KEYNAV] = LAYOUT(
-    KC_ESC,      CLOUD9_GOTO_LINE,   RCTL(KC_Z),      RCTL(KC_S),       MEH(KC_F10),                         KC_TRNS,       KC_HOME,    KC_UP,           KC_END,     KC_PGUP,
-    MEH(KC_F11), CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB),    KC_TAB,           MEH(KC_A),                           LCTL(KC_LEFT), KC_LEFT,    KC_DOWN,         KC_RIGHT,   LCTL(KC_RIGHT),
-    MEH(KC_B),   CLOUD9_NAVIGATE,    CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE,                    KC_TRNS,       RCTL(KC_C), RCTL(KC_X),      RCTL(KC_V), KC_PGDOWN,
-    KC_TRNS,     KC_TRNS,            KC_TRNS,         KC_TRNS,          KC_TRNS,          KC_TRNS, KC_ENTER, KC_SPACE,      KC_BSPC,    RCTL(KC_BSPC),   KC_DELETE,  LCTL(KC_DELETE)
+    KC_ESC,             AS_GO_IMPLEMENTATION,  RCTL(KC_Z),      RCTL(KC_S),       MEH(KC_A),                           MEH(KC_B),     KC_HOME,    KC_UP,           KC_END,     KC_PGUP,
+    AS_BACK,            AS_SYMBOL,             RSFT(KC_TAB),    KC_TAB,           SHELL_DEL_WORD,                      LCTL(KC_LEFT), KC_LEFT,    KC_DOWN,         KC_RIGHT,   LCTL(KC_RIGHT),
+    AS_FINDUSAGE,       AS_CLASS,              AS_TABLEFT,      AS_TABRIGHT,      AS_CLOSETAB,                         KC_TRNS,       RCTL(KC_C), RCTL(KC_X),      RCTL(KC_V), KC_PGDOWN,
+    AS_CLOSETOOLWINDOW, AS_GO_DECLARATION,     KC_TRNS,         KC_TRNS,          KC_TRNS,          KC_TRNS, KC_ENTER, KC_SPACE,      KC_BSPC,    RCTL(KC_BSPC),   KC_DELETE,  LCTL(KC_DELETE)
   ),
 
   [KEYSEL] = LAYOUT(
index 9ed9d6239b78f11ab180473ac1ed0419d8a02ef8..aac02c6c11f70c693bdb5fa1f40b453592dea4fe 100644 (file)
 # Overview
 
-A Balance 12 layout for the Atreus keyboard.
+This layout is based on Balance Twelve (mirror variant) by Sasha Viminitz. Please see [this page](https://mathematicalmulticore.wordpress.com/the-keyboard-layout-project/) 
+for more information. It's designed for left-handers who use their right hand for the mouse.
 
-Balance 12 was created by Sasha Viminitz. Please see [this page](https://mathematicalmulticore.wordpress.com/the-keyboard-layout-project/)
-for some background on the design of the layout.
+## To build
 
-* The variant used here is a mirror of the original for left-handers
-* The central column of punctuation keys has been moved elsewhere
-* Home positions for the left and right forefingers are *T* and *A* respectively
+```
+sudo make atreus:yttyx
+```
 
-## To build/flash
+## To flash (example)
 
-> make atreus:yttyx:avrdude
+```
+sudo avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_yttyx.hex -P /dev/ttyACM0
+```
 
 ## Layers
 
 ### Base:
 
-      .----------------------------------.         .------------------------------.
-      | P    | L    | C    | D   | W     |         | U    | O   | Y   | K   | Q   |
-      +------+------+------+-----+-------|         |------+-----+-----+-----+-----|
-      | N    | R    | S    | T   | M     |         | A    | E   | I   | H   | V   |
-      +------+------+------+-----+-------|         |------+-----+-----+-----+-----|
-      | Z    | J    | F    | G   | B     |         | ,    | .   | ;   | X   | -   |
-      +------+------+------+-----+-------+---------+------+-----+-----+-----+-----|
-      | Shft | Ctl  | Alt  | BS  | Space | L1 | R1 | Shft | R2  | Win | Ctl | Alt |
-      '---------------------------------------------------------------------------'
-
-### L1:
-
-      .---------------------------------.         .--------------------------------.
-      | 1    | 2    | 3    | 4  | 5     |         | 6    | 7  | 8   | 9    | 0     |
-      |------+------+------+----+-------|         |------+----+-----+------+-------|
-      | Tab  | ?    | =    | -  | _     |         | '    | "  | +   | *    | Enter |
-      |------+------+------+----+-------|         |------+----+-----+------+-------|
-      | Esc  | !    | &    |    |       |         | ,    | .  | ;   |      | -     |
-      |------+------+------+----+-------+---------+------+----+-----+------+-------|
-      | Shft | Ctrl | Alt  | Bk | Space | L1 | R1 | Shft | R2 | Sup | Ctrl | Alt   |
-      '----------------------------------------------------------------------------'
-
-### R1:
-
-      .---------------------------------.         .-------------------------------.
-      | <    | >    | {   | }   | @     |         | $    | £  |     |      | R3   |
-      +------+------+-----+-----|-------|         |------+----+-----+------+------|
-      | [    | ]    | (   | )   | #     |         | '    | "  | ~   | `    | Caps |
-      |------+------+-----+-----+-------|         |------+----+-----+------+------|
-      | /    | \    | ^   | |   | %     |         | ,    | .  | ;   |      | PScn |
-      |------+------+-----+-----+-------+---------+------+----+-----+------+------|
-      | Shft | Ctrl | Alt | Del | Space | L1 | R1 | Shft | R2 | Sup | Ctrl | Alt  |
-      '---------------------------------------------------------------------------'
-
-### R2:
-
-      .-----------------------------------.         .--------------------.-----------------.
-      | F12  | F11  | F10  | F9   | Copy  |         | Home | Up   | End  | PgUp | Insert   |
-      |------+------+------+------+-------|         |------+------+------+------+----------|
-      | F8   | F7   | F6   | F5   | Paste |         | Left | Down | Right| PgDn | Enter    |
-      |------+------+------+------+-------|         |------+------+------+------+----------|
-      | F4   | F3   | F2   | F1   | Cut   |         | ^Tab |      | Tab  |      |          |
-      |------+------+------+------+-------+---------+------+------+------+------+----------|
-      | Shft | Ctrl | Alt  | Del  | Undo  | L1 | R1 | Shft | R2   | Sup  | Ctrl | WinRight |
-      '------------------------------------------------------------------------------------'
-
-### R3:
-
-      .----------------------------.         .------------------------.
-      | RESET |    |     |    |    |         |    |    |    |    | R3 |
-      |-------+----+-----+----+----|         |----+----+----+----+----|
-      |       |    |     |    |    |         |    |    |    |    |    |
-      |-------+----+-----+----+----|         |----+----+----+----+----|
-      |       |    |     |    |    |         |    |    |    |    |    |
-      |-------+----+-----+----+----+---------+----+----+----+----+----|
-      |       |    |     |    |    |    |    |    |    |    |    |    |
-      '---------------------------------------------------------------'
-
+    .--------.-------.-------.-------.--------.                           .-------.-------.-------.-------.------.
+    | P      | L     | C     | D     | W      |                           | U     | O     | Y     | K     | Q    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | N      | R     | S     | T     | M      |                           | A     | E     | I     | H     | V    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | Z Sft  | J Ctl | F Alt | G     | B      |                           | ,     | . Alt | ; Ctl | X Sft | Sup  |
+    '--------'-------'-------+-------+--------+-----.               .-----+-------+-------+-------'-------'------'
+                             | BS P1 | Spc P2 | P3  |               |     | Sft   |       |
+                             '-------'--------'-----'               '-----'-------'-------'
+
+### P1: Punctuation (1)
+
+
+    .--------.-------.-------.-------.-------.                              .------.-------.-------.-------.------.
+    | Esc    |       |       |       | RS    |                              | |    | /     | ^     | £     |  ~   |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Tab    |       |       |       |       |                              | &    | \     | `     | $     | Ent  |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Sft    | Ctl   | Alt   | Del   |       |                              | %    | Alt   | Ctl   | Sft   | Sup  |
+    '--------'-------'-------+-------+-------+-----.                  .-----+------+-------+-------'-------'------'
+                             | P1    |       |     |                  |     | Sft  |       |
+                             '-------'-------'-----'                  '-----'------'-------'
+
+### P2: Punctuation (2)
+
+    .-------.-------.-------.-------.-------.                               .-------.-------.-------.-------.------.
+    | Esc   |       | NC    | FV    |       |                               | (     | )     | "     | ?     |      |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Tab   | Ctl-X | Ctl-C | Ctl-V | Ctl-Z |                               | {     | }     | '     | !     | Ent  |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   | Ent   |                               | #     | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                   .-----+-------+-------+-------'-------'------'
+                            | BS    | P2    |     |                   |     | Sft   |       |
+                            '-------'-------'-----'                   '-----'-------'-------'
+
+### P3: Punctuation (3)
+
+    .-------.-------.-------.-------.-------.                             .------.-------.-------.-------.------.
+    | Esc   |       | Break | Pscr  | ScLk  |                             | <    | >     | +     | _     | =    |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Tab   |       |       | Caps  |       |                             | [    | ]     | *     | -     | Ent  |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   |       |                             | @    | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                 .-----+------+-------+-------'-------'------'
+                            | BS    |       | P3  |                 |     | Sft  |       |
+                            '-------'-------'-----'                 '-----'------'-------'
+
+### Numerals / Cursor control
+
+    .-------.-------.-------.------.-------.                              .------.-------.-------.------.------.
+    | 1     | 2     | 3     | 4    | 5     |                              | Home | Up    | End   | PgUp |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | 6     | 7     | 8     | 9    | 0     |                              | Left | Down  | Right | PgDn |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | Sft   | Ctl   | Alt   | Del  | .     |                              | Ins  | Alt   | Ctl   | Sft  | Sup  |
+    '-------'-------'-------+------+-------+-----.                  .-----+------+-------+-------'------'------'
+                            | BS   | BA    |     |                  |     | Sft  |       |
+                            '------'-------'-----'                  '-----'------'-------'
+
+### FV: Function keys / Cursor control (Vim)
+
+    .-------.------.-------.-----.-------.                                .------.-------.-----.-------.------.
+    | F1    | F2   | F3    | F4  | F5    |                                | 0    | K     | $   | Ctl-B |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | F6    | F7   | F8    | F9  | F10   |                                | H    | J     | L   | Ctl-F |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | Sft   | Ctl  | Alt   | F11 | F12   |                                |      | Alt   | Ctl | Sft   | Sup  |
+    '-------'------'-------+-----+-------+-----.                    .-----+------+-------+-----'-------'------'
+                           | BS  | BA    |     |                    |     | Sft  |       |
+                           '-----'-------'-----'                    '-----'------'-------'
+
+### RS: Reset
+
+    .-------.------.-------.-----.-------.                                .------.-------.-----.-------.------.
+    | RESET |      |       |     |       |                                |      |       |     |       |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    |       |      |       |     |       |                                |      |       |     |       |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    |       |      |       |     |       |                                |      |       |     |       |      |
+    '-------'------'-------+-----+-------+-----.                    .-----+------+-------+-----'-------'------'
+                           |     | BA    |     |                    |     |      |       |
+                           '-----'-------'-----'                    '-----'------'-------'
index 68e0225e0087be770cdff968d42f15df23513137..b9e113ec0bb48b5c1cf7874917e7a58d92526f86 100644 (file)
@@ -1,12 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#define ONESHOT_TIMEOUT       500   // Time (in ms) before the one shot key is released
-
-// Disable some options to reduce firmware size
-#define NO_PRINT
-#define NO_ACTION_TAPPING
+#pragma once
+#define NO_ACTION_ONESHOT
 #define NO_ACTION_MACRO
 #define NO_ACTION_FUNCTION
-
-#endif
index 210bfd36bae74b1412346092d81bc81345c50b01..dad36cad9288565fc6ee219b69c43204be53f46b 100644 (file)
 #include QMK_KEYBOARD_H
 
 enum layers {
-  BASE,         // Balance Twelve
-  L1,           // (momentary)
-  R1,           // (momentary)
-  R2,           // (momentary)
-  R3            // (momentary)
+  BA,           // Base (Balance Twelve mirror variant)
+  P1,           // Punctuation (1)
+  P2,           // Punctuation (2)
+  P3,           // Punctuation (2)
+  NC,           // Numerals / Cursor control
+  FV,           // Function keys / Cursor control (Vim)
+  RS            // Reset
 };
 
-// Aliases from replicaJunction's atreus layout
-#define KCX_LST   LSFT(KC_TAB)
-#define KX_COPY   LCTL(KC_C)
-#define KX_CUT    LCTL(KC_X)
-#define KX_PAST   LCTL(KC_V)
-#define KX_UNDO   LCTL(KC_Z)
+// Abbreviations - base
+#define KX_P1_BSPC      LT(P1, KC_BSPC)
+#define KX_P2_SPC       LT(P2, KC_SPC)
 
-#define KX_AT     LSFT(KC_QUOT)
-#define KX_PIPE   LSFT(KC_NUBS)
-#define KX_WINR   LSFT(LGUI(KC_RGHT))   // Move window to next monitor (Windows)
+#define KX_SFT_Z        MT(MOD_LSFT, KC_Z)
+#define KX_CTL_J        MT(MOD_LCTL, KC_J)
+#define KX_ALT_F        MT(MOD_LALT, KC_F)
 
+#define KX_ALT_DOT      MT(MOD_LALT, KC_DOT)
+#define KX_CTL_SCLN     MT(MOD_LCTL, KC_SCLN)
+#define KX_SFT_X        MT(MOD_LSFT, KC_X)
 
+#define KX_AT           LSFT(KC_QUOT)
+#define KX_DQUOT        LSFT(KC_2)
+#define KX_PIPE         LSFT(KC_NUBS)
+#define KX_TILDA        LSFT(KC_NUHS)
+
 const uint16_t PROGMEM keymaps[][ MATRIX_ROWS ][ MATRIX_COLS ] = {
+  /*
+    .--------.-------.-------.-------.--------.                           .-------.-------.-------.-------.------.
+    | P      | L     | C     | D     | W      |                           | U     | O     | Y     | K     | Q    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | N      | R     | S     | T     | M      |                           | A     | E     | I     | H     | V    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | Z Sft  | J Ctl | F Alt | G     | B      |                           | ,     | . Alt | ; Ctl | X Sft | Sup  |
+    '--------'-------'-------+-------+--------+-----.               .-----+-------+-------+-------'-------'------'
+                             | BS P1 | Spc P2 | P3  |               |     | Sft   |       |
+                             '-------'--------'-----'               '-----'-------'-------'
+  */                                                               
+  [BA] = LAYOUT(                                                   
+    KC_P,     KC_L,     KC_C,     KC_D,       KC_W,                          KC_U,    KC_O,       KC_Y,        KC_K,     KC_Q,
+    KC_N,     KC_R,     KC_S,     KC_T,       KC_M,                          KC_A,    KC_E,       KC_I,        KC_H,     KC_V,
+    KX_SFT_Z, KX_CTL_J, KX_ALT_F, KC_G,       KC_B,                          KC_COMM, KX_ALT_DOT, KX_CTL_SCLN, KX_SFT_X, KC_LGUI,
+    XXXXXXX,  XXXXXXX,  XXXXXXX,  KX_P1_BSPC, KX_P2_SPC, MO(P3),    XXXXXXX, KC_RSFT, XXXXXXX,    XXXXXXX,     XXXXXXX,  XXXXXXX
+  ),
+
+  /* P1: Punctuation (1)
+    .--------.-------.-------.-------.-------.                              .------.-------.-------.-------.------.
+    | Esc    |       |       |       | RS    |                              | |    | /     | ^     | £     |  ~   |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Tab    |       |       |       |       |                              | &    | \     | `     | $     | Ent  |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Sft    | Ctl   | Alt   | Del   |       |                              | %    | Alt   | Ctl   | Sft   | Sup  |
+    '--------'-------'-------+-------+-------+-----.                  .-----+------+-------+-------'-------'------'
+                             | P1    |       |     |                  |     | Sft  |       |
+                             '-------'-------'-----'                  '-----'------'-------'
+  */
+  [P1] = LAYOUT(
+    KC_ESC,  XXXXXXX,    XXXXXXX,    XXXXXXX,  TO(RS),                         KX_PIPE, KC_SLSH, KC_CIRC, KC_HASH, KX_TILDA,  
+    KC_TAB,  XXXXXXX,    XXXXXXX,    XXXXXXX,  XXXXXXX,                        KC_AMPR, KC_NUBS, KC_GRV,  KC_DLR,  KC_ENT,
+    KC_LSFT, KC_LCTL,    KC_LALT,    KC_DEL,   XXXXXXX,                        KC_PERC, KC_LALT, KC_LCTL, KC_LSFT, _______,
+    XXXXXXX, XXXXXXX,    XXXXXXX,    _______,  XXXXXXX, XXXXXXX,      XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
 
/* Balance Twelve mirror variant (left-handed)
-  .--------------------------------.         .------------------------------.
-  | P    | L    | C   | D  | W     |         | U    | O  | Y   | K    | Q   |
-  +------+------+-----+----+-------|         |------+----+-----+------+-----|
-  | N    | R    | S   | T  | M     |         | A    | E  | I   | H    | V   |
-  +------+------+-----+----+-------|         |------+----+-----+------+-----|
-  | Z    | J    | F   | G  | B     |         | ,    | .  | ;   | X    | -   |
-  +------+------+-----+----+-------+---------+------+----+-----+------+-----|
-  | Shft | Ctrl | Alt | Bk | Space | L1 | R1 | Shft | R2 | Win | Ctrl | Alt |
-  '-------------------------------------------------------------------------'
 /* P2: Punctuation (2)
+    .-------.-------.-------.-------.-------.                               .-------.-------.-------.-------.------.
+    | Esc   |       | NC    | FV    |       |                               | (     | )     | "     | ?     |      |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Tab   | Ctl-X | Ctl-C | Ctl-V | Ctl-Z |                               | {     | }     | '     | !     | Ent  |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   | Ent   |                               | #     | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                   .-----+-------+-------+-------'-------'------'
+                            | BS    | P2    |     |                   |     | Sft   |       |
+                            '-------'-------'-----'                   '-----'-------'-------'
   */
-  [BASE] = LAYOUT(
-    KC_P,    KC_L,    KC_C,    KC_D,    KC_W,                   KC_U,          KC_O,   KC_Y,    KC_K,    KC_Q,
-    KC_N,    KC_R,    KC_S,    KC_T,    KC_M,                   KC_A,          KC_E,   KC_I,    KC_H,    KC_V,
-    KC_Z,    KC_J,    KC_F,    KC_G,    KC_B,                   KC_COMM,       KC_DOT, KC_SCLN, KC_X,    KC_MINS,
-    KC_LSFT, KC_LCTL, KC_LALT, KC_BSPC, KC_SPC, MO(L1), MO(R1), OSM(MOD_LSFT), MO(R2), KC_LWIN, KC_RCTL, KC_RALT
+  [P2] = LAYOUT(
+    KC_ESC,  XXXXXXX,    TO(NC),     TO(FV),     XXXXXXX,                      KC_LPRN, KC_RPRN, KX_DQUOT, KC_QUES, XXXXXXX,
+    KC_TAB,  LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_Z),                   KC_LCBR, KC_RCBR, KC_QUOT,  KC_EXLM, KC_ENT,
+    KC_LSFT, KC_LCTL,    KC_LALT,    KC_DEL,     KC_ENT,                       KC_NUHS, KC_LALT, KC_LCTL,  KC_LSFT, _______,
+    XXXXXXX, XXXXXXX,    XXXXXXX,    KC_BSPC,    _______,    XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX
   ),
 
- /* L1
-  .---------------------------------.         .--------------------------------.
-  | 1    | 2    | 3    | 4  | 5     |         | 6    | 7  | 8   | 9    | 0     |
-  |------+------+------+----+-------|         |------+----+-----+------+-------|
-  | Tab  | ?    | =    | -  | _     |         | '    | "  | +   | *    | Enter |
-  |------+------+------+----+-------|         |------+----+-----+------+-------|
-  | Esc  | !    | &    |    |       |         | ,    | .  | ;   |      | -     |
-  |------+------+------+----+-------+---------+------+----+-----+------+-------|
-  | Shft | Ctrl | Alt  | Bk | Space | L1 | R1 | Shft | R2 | Sup | Ctrl | Alt   |
-  '----------------------------------------------------------------------------'
+  /* P3: Punctuation (3)
+    .-------.-------.-------.-------.-------.                             .------.-------.-------.-------.------.
+    | Esc   |       | Break | Pscr  | ScLk  |                             | <    | >     | +     | _     | =    |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Tab   |       |       | Caps  |       |                             | [    | ]     | *     | -     | Ent  |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   |       |                             | @    | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                 .-----+------+-------+-------'-------'------'
+                            | BS    |       | P3  |                 |     | Sft  |       |
+                            '-------'-------'-----'                 '-----'------'-------'
   */
-  [L1] = LAYOUT(
-    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,       KC_8,    KC_9,    KC_0,
-    KC_TAB,  KC_QUES, KC_EQL,  KC_MINS, KC_UNDS,                   KC_QUOT, LSFT(KC_2), KC_PLUS, KC_ASTR, KC_ENT,
-    KC_ESC,  KC_EXLM, KC_AMPR, XXXXXXX, XXXXXXX,                   _______, _______,    _______, XXXXXXX, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______, _______, _______
+  [P3] = LAYOUT(
+    KC_ESC,  XXXXXXX, KC_BRK,  KC_PSCR, KC_SLCK,                             KC_LABK, KC_RABK, KC_PLUS, KC_UNDS, KC_EQL,
+    KC_TAB,  XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX,                             KC_LBRC, KC_RBRC, KC_ASTR, KC_MINS, KC_ENT,
+    KC_LSFT, KC_LCTL, KC_LALT, KC_DEL,  XXXXXXX,                             KX_AT,   KC_LALT, KC_LCTL, KC_LSFT, _______,
+    XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, XXXXXXX, _______,           XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
   ),
 
- /* R1
-  .---------------------------------.         .-------------------------------.
-  | <    | >    | {   | }   | @     |         | $    | £  |     |      | R3   |
-  +------+------+-----+-----|-------|         |------+----+-----+------+------|
-  | [    | ]    | (   | )   | #     |         | '    | "  | ~   | `    | Caps |
-  |------+------+-----+-----+-------|         |------+----+-----+------+------|
-  | /    | \    | ^   | |   | %     |         | ,    | .  | ;   |      | PScn |
-  |------+------+-----+-----+-------+---------+------+----+-----+------+------|
-  | Shft | Ctrl | Alt | Del | Space | L1 | R1 | Shft | R2 | Sup | Ctrl | Alt  |
-  '---------------------------------------------------------------------------'
+  /* NC: Numerals / Cursor control
+    .-------.-------.-------.------.-------.                              .------.-------.-------.------.------.
+    | 1     | 2     | 3     | 4    | 5     |                              | Home | Up    | End   | PgUp |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | 6     | 7     | 8     | 9    | 0     |                              | Left | Down  | Right | PgDn |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | Sft   | Ctl   | Alt   | Del  | .     |                              | Ins  | Alt   | Ctl   | Sft  | Sup  |
+    '-------'-------'-------+------+-------+-----.                  .-----+------+-------+-------'------'------'
+                            | BS   | BA    |     |                  |     | Sft  |       |
+                            '------'-------'-----'                  '-----'------'-------'
   */
-  [R1] = LAYOUT(
-    KC_LABK, KC_RABK,  KC_LCBR,  KC_RCBR, KX_AT,                     KC_DLR,  KC_HASH,    XXXXXXX,       XXXXXXX, MO(R3),
-    KC_LBRC, KC_RBRC,  KC_LPRN,  KC_RPRN, KC_NUHS,                   KC_QUOT, LSFT(KC_2), LSFT(KC_NUHS), KC_GRV,  KC_CAPS,
-    KC_SLSH, KC_NUBS,  KC_CIRC,  KX_PIPE, KC_PERC,                   _______, _______,    _______,       XXXXXXX, KC_PSCR,
-    _______, _______,  _______,  KC_DEL,  _______, _______, _______, _______, _______,    _______,       _______, _______
+  [NC] = LAYOUT(
+    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                                KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX,
+    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,                                KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX,
+    KC_LSFT, KC_LCTL, KC_LALT, KC_DEL,  KC_DOT,                              KC_INS,  KC_LALT, KC_LCTL, KC_LSFT, _______,
+    XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, TO(BA), XXXXXXX,            XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
   ),
 
- /* R2
-  .-----------------------------------.         .--------------------.-----------------.
-  | F12  | F11  | F10  | F9   | Copy  |         | Home | Up   | End  | PgUp | Insert   |
-  |------+------+------+------+-------|         |------+------+------+------+----------|
-  | F8   | F7   | F6   | F5   | Paste |         | Left | Down | Right| PgDn | Enter    |
-  |------+------+------+------+-------|         |------+------+------+------+----------|
-  | F4   | F3   | F2   | F1   | Cut   |         | ^Tab |      | Tab  |      |          |
-  |------+------+------+------+-------+---------+------+------+------+------+----------|
-  | Shft | Ctrl | Alt  | Del  | Undo  | L1 | R1 | Shft | R2   | Sup  | Ctrl | WinRight |
-  '------------------------------------------------------------------------------------'
+  /* FV: Function keys / Cursor control (Vim)
+    .-------.------.-------.-----.-------.                                .------.-------.-----.-------.------.
+    | F1    | F2   | F3    | F4  | F5    |                                | 0    | K     | $   | Ctl-B |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | F6    | F7   | F8    | F9  | F10   |                                | H    | J     | L   | Ctl-F |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | Sft   | Ctl  | Alt   | F11 | F12   |                                |      | Alt   | Ctl | Sft   | Sup  |
+    '-------'------'-------+-----+-------+-----.                    .-----+------+-------+-----'-------'------'
+                           | BS  | BA    |     |                    |     | Sft  |       |
+                           '-----'-------'-----'                    '-----'------'-------'
   */
-  [R2] = LAYOUT(
-    KC_F12,  KC_F11,  KC_F10,  KC_F9,  KX_COPY,                   KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_INS, 
-    KC_F8,   KC_F7,   KC_F6,   KC_F5,  KX_PAST,                   KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_ENT,
-    KC_F4,   KC_F3,   KC_F2,   KC_F1,  KX_CUT,                    KCX_LST, XXXXXXX, KC_TAB,  XXXXXXX, XXXXXXX, 
-    _______, _______, _______, KC_DEL, KX_UNDO, _______, _______, _______, _______, _______, _______, KX_WINR
+  [FV] = LAYOUT(
+    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                               KC_0,    KC_K,    KC_DLR,   LCTL(KC_B), XXXXXXX,
+    KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,                              KC_H,    KC_J,    KC_L,     LCTL(KC_F), XXXXXXX,
+    KC_LSFT, KC_LCTL, KC_LALT, KC_F11,  KC_F12,                              XXXXXXX, KC_LALT, KC_LCTL,  KC_LSFT,    _______,
+    XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, TO(BA), XXXXXXX,            XXXXXXX, _______, XXXXXXX, XXXXXXX,  XXXXXXX,    XXXXXXX
   ),
 
- /* R3
-  .----------------------------.         .------------------------.
-  | RESET |    |     |    |    |         |    |    |    |    | R3 |
-  |-------+----+-----+----+----|         |----+----+----+----+----|
-  |       |    |     |    |    |         |    |    |    |    |    |
-  |-------+----+-----+----+----|         |----+----+----+----+----|
-  |       |    |     |    |    |         |    |    |    |    |    |
-  |-------+----+-----+----+----+---------+----+----+----+----+----|
-  |       |    |     |    |    |    |    |    |    |    |    |    |
-  '---------------------------------------------------------------'
+ /* RS: Reset
+    .-------.------.-------.-----.-------.                                .------.-------.-----.-------.------.
+    | RESET |      |       |     |       |                                |      |       |     |       |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    |       |      |       |     |       |                                |      |       |     |       |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    |       |      |       |     |       |                                |      |       |     |       |      |
+    '-------'------'-------+-----+-------+-----.                    .-----+------+-------+-----'-------'------'
+                           |     | BA    |     |                    |     |      |       |
+                           '-----'-------'-----'                    '-----'------'-------'
   */
-  [R3] = LAYOUT(
-    RESET,   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
+  [RS] = LAYOUT(
+    RESET,   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, TO(BA),  XXXXXXX,           XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
   )
 };
 
diff --git a/keyboards/atreus62/keymaps/jarred/config.h b/keyboards/atreus62/keymaps/jarred/config.h
new file mode 100644 (file)
index 0000000..34ab0ba
--- /dev/null
@@ -0,0 +1,21 @@
+/* Copyright 2018 Jarred Steenvoorden
+ *
+ * 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
+
+// My hand wire diodes are in the opposite direction to the Atreus62 PCB
+#undef DIODE_DIRECTION
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/atreus62/keymaps/jarred/keymap.c b/keyboards/atreus62/keymaps/jarred/keymap.c
new file mode 100644 (file)
index 0000000..7a49b28
--- /dev/null
@@ -0,0 +1,26 @@
+/* Copyright 2018 Jarred Steenvoorden
+ *
+ * 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
+#include "jarred.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_QW] = LAYOUT_atreus62_grid_wrapper(BLANK_12, QWERTY_1_12, QWERTY_2_12, QWERTY_3_12, QWERTY_L4, KC_NO, KC_NO, QWERTY_R4),
+    [_LW] = LAYOUT_atreus62_grid_wrapper(BLANK_12, LOWER_1_12 , LOWER_2_12 , LOWER_3_12 , LOWER_L4 , KC_NO, KC_NO, LOWER_R4 ),
+    [_NV] = LAYOUT_atreus62_grid_wrapper(BLANK_12, NAV_1_12   , NAV_2_12   , NAV_3_12   , NAV_L4   , KC_NO, KC_NO, NAV_R4   ),
+    [_NP] = LAYOUT_atreus62_grid_wrapper(BLANK_12, NUMPAD_1_12, NUMPAD_2_12, NUMPAD_3_12, NUMPAD_L4, KC_NO, KC_NO, NUMPAD_R4),
+    [_MS] = LAYOUT_atreus62_grid_wrapper(BLANK_12, MOUSE_1_12 , MOUSE_2_12 , MOUSE_3_12 , MOUSE_L4 , KC_NO, KC_NO, MOUSE_R4 )
+};
diff --git a/keyboards/bm16a/bm16a.c b/keyboards/bm16a/bm16a.c
new file mode 100644 (file)
index 0000000..3d616f2
--- /dev/null
@@ -0,0 +1,43 @@
+/* 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/>.
+ */
+#include "bm16a.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/bm16a/bm16a.h b/keyboards/bm16a/bm16a.h
new file mode 100644 (file)
index 0000000..cf8bab4
--- /dev/null
@@ -0,0 +1,39 @@
+/* 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"
+
+/* 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_ortho_4x4( \
+       K01, K02, K03, K04, \
+       K11, K12, K13, K14, \
+       K21, K22, K23, K24, \
+       K31, K32, K33, K34 \
+) \
+{ \
+  { K01, K02, K03, K04 }, \
+  { K11, K12, K13, K14 }, \
+  { K21, K22, K23, K24 }, \
+  { K31, K32, K33, K34 } \
+}
diff --git a/keyboards/bm16a/config.h b/keyboards/bm16a/config.h
new file mode 100644 (file)
index 0000000..c6b460a
--- /dev/null
@@ -0,0 +1,246 @@
+/* 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"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x424D
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    KPrepublic
+#define PRODUCT         bm16a
+#define DESCRIPTION     KPrepublic bm16a
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D3, D5, D1, D2}
+#define MATRIX_COL_PINS { D6, D4, D7, 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 B6
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN E2
+#define RGBLED_NUM 4
+#define RGBLIGHT_ANIMATIONS
+// #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
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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/bm16a/info.json b/keyboards/bm16a/info.json
new file mode 100644 (file)
index 0000000..4f87c5a
--- /dev/null
@@ -0,0 +1,30 @@
+{
+    "keyboard_name": "bm16a",
+    "url": "",
+    "maintainer": "qmk",
+    "width": 4,
+    "height": 4,
+    "layouts": {
+      "LAYOUT_ortho_4x4": {
+        "key_count": 16,
+        "layout": [
+          {"x":0, "y":0},
+          {"x":1, "y":0},
+          {"x":2, "y":0},
+          {"x":3, "y":0},
+          {"x":0, "y":1},
+          {"x":1, "y":1},
+          {"x":2, "y":1},
+          {"x":3, "y":1},
+          {"x":0, "y":2},
+          {"x":1, "y":2},
+          {"x":2, "y":2},
+          {"x":3, "y":2},
+          {"x":0, "y":3},
+          {"x":1, "y":3},
+          {"x":2, "y":3},
+          {"x":3, "y":3}
+        ]
+      }
+    }
+  }
\ No newline at end of file
diff --git a/keyboards/bm16a/keymaps/default/config.h b/keyboards/bm16a/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..08c234a
--- /dev/null
@@ -0,0 +1,19 @@
+/* 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
+
+// place overrides here
diff --git a/keyboards/bm16a/keymaps/default/keymap.c b/keyboards/bm16a/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..a0b06ee
--- /dev/null
@@ -0,0 +1,73 @@
+/* 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/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum layers {
+  _BASE = 0,
+  _FN1,
+  _FN2,
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  QMKBEST = SAFE_RANGE,
+  QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_BASE] = LAYOUT_ortho_4x4(
+    KC_PGUP,  KC_HOME,  KC_UP,    KC_END , \
+    KC_PGDN,  KC_LEFT,  KC_DOWN,  KC_RGHT, \
+    MO(_FN2), KC_VOLU,  KC_MPLY,  KC_MPRV, \
+    MO(_FN1), KC_VOLD,  KC_MUTE,  KC_MNXT  \
+  ),
+  [_FN1] = LAYOUT_ortho_4x4(
+    KC_ESC,   KC_P7,    KC_P8,    KC_P9,   \
+    KC_TAB,   KC_P4,    KC_P5,    KC_P6,   \
+    KC_ENT,   KC_P1,    KC_P2,    KC_P3,   \
+    _______,  KC_P0,    KC_P0,    KC_DOT   \
+  ),
+  [_FN2] = LAYOUT_ortho_4x4(
+    RGB_TOG,  RGB_HUI,  RGB_SAI,  RGB_VAI, \
+    RGB_MOD,  RGB_HUD,  RGB_SAD,  RGB_VAD, \
+    _______,  _______,  _______,  RESET,   \
+    BL_STEP,  _______,  QMKBEST,  QMKURL   \
+  )
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QMKBEST:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        SEND_STRING("QMK is the best thing ever!");
+      } else {
+        // when keycode QMKBEST is released
+      }
+      break;
+    case QMKURL:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+      } else {
+        // when keycode QMKURL is released
+      }
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/bm16a/keymaps/default/readme.md b/keyboards/bm16a/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..f356f2c
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for bm16a
\ No newline at end of file
diff --git a/keyboards/bm16a/readme.md b/keyboards/bm16a/readme.md
new file mode 100644 (file)
index 0000000..8d43b70
--- /dev/null
@@ -0,0 +1,15 @@
+# bm16a
+
+![bm16a](https://ae01.alicdn.com/kf/HTB1RRRQaZfrK1RjSszcq6xGGFXaY.jpg)
+
+A 16 key macropad, with USB C, RGB underglow and backlight.
+
+Keyboard Maintainer: QMK Community  
+Hardware Supported: The PCBs, controllers supported  
+Hardware Availability: [KPrepublic](https://kprepublic.com/products/bm16a-16-keys-custom-mechanical-keyboard-pcb-plate-programmed-numpad-layouts-qmk-firmware-with-rgb-bottom-underglow-alps-mx); [AliExpress](https://www.aliexpress.com/store/product/bm16a-16-keys-Custom-Mechanical-Keyboard-PCB-plate-programmed-numpad-layouts-qmk-firmware-with-rgb-bottom/3034003_32970629907.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make bm16a: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/bm16a/rules.mk b/keyboards/bm16a/rules.mk
new file mode 100644 (file)
index 0000000..013dac3
--- /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 = 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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes       # 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)
+
+LAYOUTS = ortho_4x4
diff --git a/keyboards/boardwalk/boardwalk.h b/keyboards/boardwalk/boardwalk.h
new file mode 100644 (file)
index 0000000..580a320
--- /dev/null
@@ -0,0 +1,78 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_5x14( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313, \
+  k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k410, k411, k412, k413 \
+) \
+{ \
+  { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013 }, \
+  { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113 }, \
+  { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213 }, \
+  { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313 }, \
+  { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k410, k411, k412, k413 } \
+}
+
+#define LAYOUT_ortho_hhkb( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313, \
+       k41, k42, k43, k44,   k45,     k47,     k49, k410, k411, k412       \
+) \
+{ \
+  { k00,   k01, k02, k03, k04, k05, k06,   k07, k08,   k09, k010, k011, k012, k013   }, \
+  { k10,   k11, k12, k13, k14, k15, k16,   k17, k18,   k19, k110, k111, k112, k113   }, \
+  { k20,   k21, k22, k23, k24, k25, k26,   k27, k28,   k29, k210, k211, k212, k213   }, \
+  { k30,   k31, k32, k33, k34, k35, k36,   k37, k38,   k39, k310, k311, k312, k313   }, \
+  { KC_NO, k41, k42, k43, k44, k45, KC_NO, k47, KC_NO, k49, k410, k411, k412, KC_NO } \
+}
+
+#define LAYOUT_ortho_7u( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313, \
+       k41, k42,                       k46,               k411, k412        \
+) \
+{ \
+  { k00,   k01, k02, k03,   k04,   k05,   k06, k07,   k08,   k09,   k010,  k011, k012, k013   }, \
+  { k10,   k11, k12, k13,   k14,   k15,   k16, k17,   k18,   k19,   k110,  k111, k112, k113   }, \
+  { k20,   k21, k22, k23,   k24,   k25,   k26, k27,   k28,   k29,   k210,  k211, k212, k213   }, \
+  { k30,   k31, k32, k33,   k34,   k35,   k36, k37,   k38,   k39,   k310,  k311, k312, k313   }, \
+  { KC_NO, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, KC_NO, k411, k412, KC_NO } \
+}
+
+#define LAYOUT_2u_arrow( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313, \
+  k40, k41, k42, k43,    k44,      k46,   k48, k49, k410, k411, k412, k413 \
+) \
+{ \
+  { k00, k01, k02, k03, k04, k05,   k06, k07,   k08, k09, k010, k011, k012, k013 }, \
+  { k10, k11, k12, k13, k14, k15,   k16, k17,   k18, k19, k110, k111, k112, k113 }, \
+  { k20, k21, k22, k23, k24, k25,   k26, k27,   k28, k29, k210, k211, k212, k213 }, \
+  { k30, k31, k32, k33, k34, k35,   k36, k37,   k38, k39, k310, k311, k312, k313 }, \
+  { k40, k41, k42, k43, k44, KC_NO, k46, KC_NO, k48, k49, k410, k411, k412, k413 } \
+}
+
+#define LAYOUT_625u_arrow( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313, \
+  k40, k41, k42,              k45,             k49, k410, k411, k412, k413 \
+) \
+{ \
+  { k00, k01, k02, k03,   k04,   k05,   k06,   k07,   k08,   k09, k010, k011, k012, k013 }, \
+  { k10, k11, k12, k13,   k14,   k15,   k16,   k17,   k18,   k19, k110, k111, k112, k113 }, \
+  { k20, k21, k22, k23,   k24,   k25,   k26,   k27,   k28,   k29, k210, k211, k212, k213 }, \
+  { k30, k31, k32, k33,   k34,   k35,   k36,   k37,   k38,   k39, k310, k311, k312, k313 }, \
+  { k40, k41, k42, KC_NO, KC_NO, k45,   KC_NO, KC_NO, KC_NO, k49, k410, k411, k412, k413 } \
+}
diff --git a/keyboards/boardwalk/config.h b/keyboards/boardwalk/config.h
new file mode 100644 (file)
index 0000000..67352b8
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+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       0xCDCD
+#define PRODUCT_ID      0x5337
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    shens
+#define PRODUCT         Boardwalk
+#define DESCRIPTION     QMK keyboard firmware for Boardwalk
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F1, F4, F5, F6 }
+#define MATRIX_COL_PINS { F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, D1, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN F5
+// #define BACKLIGHT_LEVELS 6
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * 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
+
+// ws2812 options
+#define RGB_DI_PIN B7 // pin the DI on the ws2812 is hooked-up to
+#define RGBLIGHT_ANIMATIONS // run RGB animations
+#define RGBLED_NUM 14 // number of LEDs
+#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
+#define RGBLIGHT_SAT_STEP 25 // units to step when in/decresing saturation
+#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
diff --git a/keyboards/boardwalk/info.json b/keyboards/boardwalk/info.json
new file mode 100644 (file)
index 0000000..a287f31
--- /dev/null
@@ -0,0 +1,359 @@
+{
+    "keyboard_name": "Boardwalk",
+    "url": "",
+    "maintainer": "qmk",
+    "width": 15,
+    "height": 5,
+    "layouts": {
+      "LAYOUT_ortho_5x14": {
+        "layout": [
+          {"label":"k00", "x":0, "y":0, "w":1.5},
+          {"label":"k01", "x":1.5, "y":0},
+          {"label":"k02", "x":2.5, "y":0},
+          {"label":"k03", "x":3.5, "y":0},
+          {"label":"k04", "x":4.5, "y":0},
+          {"label":"k05", "x":5.5, "y":0},
+          {"label":"k06", "x":6.5, "y":0},
+          {"label":"k07", "x":7.5, "y":0},
+          {"label":"k08", "x":8.5, "y":0},
+          {"label":"k09", "x":9.5, "y":0},
+          {"label":"k010", "x":10.5, "y":0},
+          {"label":"k011", "x":11.5, "y":0},
+          {"label":"k012", "x":12.5, "y":0},
+          {"label":"k013", "x":13.5, "y":0, "w":1.5},
+          {"label":"k10", "x":0, "y":1, "w":1.5},
+          {"label":"k11", "x":1.5, "y":1},
+          {"label":"k12", "x":2.5, "y":1},
+          {"label":"k13", "x":3.5, "y":1},
+          {"label":"k14", "x":4.5, "y":1},
+          {"label":"k15", "x":5.5, "y":1},
+          {"label":"k16", "x":6.5, "y":1},
+          {"label":"k17", "x":7.5, "y":1},
+          {"label":"k18", "x":8.5, "y":1},
+          {"label":"k19", "x":9.5, "y":1},
+          {"label":"k110", "x":10.5, "y":1},
+          {"label":"k111", "x":11.5, "y":1},
+          {"label":"k112", "x":12.5, "y":1},
+          {"label":"k113", "x":13.5, "y":1, "w":1.5},
+          {"label":"k20", "x":0, "y":2, "w":1.5},
+          {"label":"k21", "x":1.5, "y":2},
+          {"label":"k22", "x":2.5, "y":2},
+          {"label":"k23", "x":3.5, "y":2},
+          {"label":"k24", "x":4.5, "y":2},
+          {"label":"k25", "x":5.5, "y":2},
+          {"label":"k26", "x":6.5, "y":2},
+          {"label":"k27", "x":7.5, "y":2},
+          {"label":"k28", "x":8.5, "y":2},
+          {"label":"k29", "x":9.5, "y":2},
+          {"label":"k210", "x":10.5, "y":2},
+          {"label":"k211", "x":11.5, "y":2},
+          {"label":"k212", "x":12.5, "y":2},
+          {"label":"k213", "x":13.5, "y":2, "w":1.5},
+          {"label":"k30", "x":0, "y":3, "w":1.5},
+          {"label":"k31", "x":1.5, "y":3},
+          {"label":"k32", "x":2.5, "y":3},
+          {"label":"k33", "x":3.5, "y":3},
+          {"label":"k34", "x":4.5, "y":3},
+          {"label":"k35", "x":5.5, "y":3},
+          {"label":"k36", "x":6.5, "y":3},
+          {"label":"k37", "x":7.5, "y":3},
+          {"label":"k38", "x":8.5, "y":3},
+          {"label":"k39", "x":9.5, "y":3},
+          {"label":"k310", "x":10.5, "y":3},
+          {"label":"k311", "x":11.5, "y":3},
+          {"label":"k312", "x":12.5, "y":3},
+          {"label":"k313", "x":13.5, "y":3, "w":1.5},
+          {"label":"k40", "x":0, "y":4, "w":1.5},
+          {"label":"k41", "x":1.5, "y":4},
+          {"label":"k42", "x":2.5, "y":4},
+          {"label":"k43", "x":3.5, "y":4},
+          {"label":"k44", "x":4.5, "y":4},
+          {"label":"k45", "x":5.5, "y":4},
+          {"label":"k46", "x":6.5, "y":4},
+          {"label":"k47", "x":7.5, "y":4},
+          {"label":"k48", "x":8.5, "y":4},
+          {"label":"k49", "x":9.5, "y":4},
+          {"label":"k410", "x":10.5, "y":4},
+          {"label":"k411", "x":11.5, "y":4},
+          {"label":"k412", "x":12.5, "y":4},
+          {"label":"k413", "x":13.5, "y":4, "w":1.5}
+        ]
+      },
+      "LAYOUT_ortho_hhkb": {
+        "layout": [
+          {"label":"k00", "x":0, "y":0, "w":1.5},
+          {"label":"k01", "x":1.5, "y":0},
+          {"label":"k02", "x":2.5, "y":0},
+          {"label":"k03", "x":3.5, "y":0},
+          {"label":"k04", "x":4.5, "y":0},
+          {"label":"k05", "x":5.5, "y":0},
+          {"label":"k06", "x":6.5, "y":0},
+          {"label":"k07", "x":7.5, "y":0},
+          {"label":"k08", "x":8.5, "y":0},
+          {"label":"k09", "x":9.5, "y":0},
+          {"label":"k010", "x":10.5, "y":0},
+          {"label":"k011", "x":11.5, "y":0},
+          {"label":"k012", "x":12.5, "y":0},
+          {"label":"k013", "x":13.5, "y":0, "w":1.5},
+          {"label":"k10", "x":0, "y":1, "w":1.5},
+          {"label":"k11", "x":1.5, "y":1},
+          {"label":"k12", "x":2.5, "y":1},
+          {"label":"k13", "x":3.5, "y":1},
+          {"label":"k14", "x":4.5, "y":1},
+          {"label":"k15", "x":5.5, "y":1},
+          {"label":"k16", "x":6.5, "y":1},
+          {"label":"k17", "x":7.5, "y":1},
+          {"label":"k18", "x":8.5, "y":1},
+          {"label":"k19", "x":9.5, "y":1},
+          {"label":"k110", "x":10.5, "y":1},
+          {"label":"k111", "x":11.5, "y":1},
+          {"label":"k112", "x":12.5, "y":1},
+          {"label":"k113", "x":13.5, "y":1, "w":1.5},
+          {"label":"k20", "x":0, "y":2, "w":1.5},
+          {"label":"k21", "x":1.5, "y":2},
+          {"label":"k22", "x":2.5, "y":2},
+          {"label":"k23", "x":3.5, "y":2},
+          {"label":"k24", "x":4.5, "y":2},
+          {"label":"k25", "x":5.5, "y":2},
+          {"label":"k26", "x":6.5, "y":2},
+          {"label":"k27", "x":7.5, "y":2},
+          {"label":"k28", "x":8.5, "y":2},
+          {"label":"k29", "x":9.5, "y":2},
+          {"label":"k210", "x":10.5, "y":2},
+          {"label":"k211", "x":11.5, "y":2},
+          {"label":"k212", "x":12.5, "y":2},
+          {"label":"k213", "x":13.5, "y":2, "w":1.5},
+          {"label":"k30", "x":0, "y":3, "w":1.5},
+          {"label":"k31", "x":1.5, "y":3},
+          {"label":"k32", "x":2.5, "y":3},
+          {"label":"k33", "x":3.5, "y":3},
+          {"label":"k34", "x":4.5, "y":3},
+          {"label":"k35", "x":5.5, "y":3},
+          {"label":"k36", "x":6.5, "y":3},
+          {"label":"k37", "x":7.5, "y":3},
+          {"label":"k38", "x":8.5, "y":3},
+          {"label":"k39", "x":9.5, "y":3},
+          {"label":"k310", "x":10.5, "y":3},
+          {"label":"k311", "x":11.5, "y":3},
+          {"label":"k312", "x":12.5, "y":3},
+          {"label":"k313", "x":13.5, "y":3, "w":1.5},
+          {"label":"k41", "x":1.5, "y":4},
+          {"label":"k42", "x":2.5, "y":4},
+          {"label":"k43", "x":3.5, "y":4},
+          {"label":"k44", "x":4.5, "y":4},
+          {"label":"k45", "x":5.5, "y":4, "w":2},
+          {"label":"k47", "x":7.5, "y":4, "w":2},
+          {"label":"k49", "x":9.5, "y":4},
+          {"label":"k410", "x":10.5, "y":4},
+          {"label":"k411", "x":11.5, "y":4},
+          {"label":"k412", "x":12.5, "y":4}
+        ]
+      },
+      "LAYOUT_ortho_7u": {
+        "layout": [
+          {"label":"k00", "x":0, "y":0, "w":1.5},
+          {"label":"k01", "x":1.5, "y":0},
+          {"label":"k02", "x":2.5, "y":0},
+          {"label":"k03", "x":3.5, "y":0},
+          {"label":"k04", "x":4.5, "y":0},
+          {"label":"k05", "x":5.5, "y":0},
+          {"label":"k06", "x":6.5, "y":0},
+          {"label":"k07", "x":7.5, "y":0},
+          {"label":"k08", "x":8.5, "y":0},
+          {"label":"k09", "x":9.5, "y":0},
+          {"label":"k010", "x":10.5, "y":0},
+          {"label":"k011", "x":11.5, "y":0},
+          {"label":"k012", "x":12.5, "y":0},
+          {"label":"k013", "x":13.5, "y":0, "w":1.5},
+          {"label":"k10", "x":0, "y":1, "w":1.5},
+          {"label":"k11", "x":1.5, "y":1},
+          {"label":"k12", "x":2.5, "y":1},
+          {"label":"k13", "x":3.5, "y":1},
+          {"label":"k14", "x":4.5, "y":1},
+          {"label":"k15", "x":5.5, "y":1},
+          {"label":"k16", "x":6.5, "y":1},
+          {"label":"k17", "x":7.5, "y":1},
+          {"label":"k18", "x":8.5, "y":1},
+          {"label":"k19", "x":9.5, "y":1},
+          {"label":"k110", "x":10.5, "y":1},
+          {"label":"k111", "x":11.5, "y":1},
+          {"label":"k112", "x":12.5, "y":1},
+          {"label":"k113", "x":13.5, "y":1, "w":1.5},
+          {"label":"k20", "x":0, "y":2, "w":1.5},
+          {"label":"k21", "x":1.5, "y":2},
+          {"label":"k22", "x":2.5, "y":2},
+          {"label":"k23", "x":3.5, "y":2},
+          {"label":"k24", "x":4.5, "y":2},
+          {"label":"k25", "x":5.5, "y":2},
+          {"label":"k26", "x":6.5, "y":2},
+          {"label":"k27", "x":7.5, "y":2},
+          {"label":"k28", "x":8.5, "y":2},
+          {"label":"k29", "x":9.5, "y":2},
+          {"label":"k210", "x":10.5, "y":2},
+          {"label":"k211", "x":11.5, "y":2},
+          {"label":"k212", "x":12.5, "y":2},
+          {"label":"k213", "x":13.5, "y":2, "w":1.5},
+          {"label":"k30", "x":0, "y":3, "w":1.5},
+          {"label":"k31", "x":1.5, "y":3},
+          {"label":"k32", "x":2.5, "y":3},
+          {"label":"k33", "x":3.5, "y":3},
+          {"label":"k34", "x":4.5, "y":3},
+          {"label":"k35", "x":5.5, "y":3},
+          {"label":"k36", "x":6.5, "y":3},
+          {"label":"k37", "x":7.5, "y":3},
+          {"label":"k38", "x":8.5, "y":3},
+          {"label":"k39", "x":9.5, "y":3},
+          {"label":"k310", "x":10.5, "y":3},
+          {"label":"k311", "x":11.5, "y":3},
+          {"label":"k312", "x":12.5, "y":3},
+          {"label":"k313", "x":13.5, "y":3, "w":1.5},
+          {"label":"k41", "x":1.5, "y":4},
+          {"label":"k42", "x":2.5, "y":4, "w":1.5},
+          {"label":"k46", "x":4, "y":4, "w":7},
+          {"label":"k411", "x":11, "y":4, "w":1.5},
+          {"label":"k412", "x":12.5, "y":4}
+        ]
+      },
+      "LAYOUT_2u_arrow": {
+        "layout": [
+          {"label":"k00", "x":0, "y":0, "w":1.5},
+          {"label":"k01", "x":1.5, "y":0},
+          {"label":"k02", "x":2.5, "y":0},
+          {"label":"k03", "x":3.5, "y":0},
+          {"label":"k04", "x":4.5, "y":0},
+          {"label":"k05", "x":5.5, "y":0},
+          {"label":"k06", "x":6.5, "y":0},
+          {"label":"k07", "x":7.5, "y":0},
+          {"label":"k08", "x":8.5, "y":0},
+          {"label":"k09", "x":9.5, "y":0},
+          {"label":"k010", "x":10.5, "y":0},
+          {"label":"k011", "x":11.5, "y":0},
+          {"label":"k012", "x":12.5, "y":0},
+          {"label":"k013", "x":13.5, "y":0, "w":1.5},
+          {"label":"k10", "x":0, "y":1, "w":1.5},
+          {"label":"k11", "x":1.5, "y":1},
+          {"label":"k12", "x":2.5, "y":1},
+          {"label":"k13", "x":3.5, "y":1},
+          {"label":"k14", "x":4.5, "y":1},
+          {"label":"k15", "x":5.5, "y":1},
+          {"label":"k16", "x":6.5, "y":1},
+          {"label":"k17", "x":7.5, "y":1},
+          {"label":"k18", "x":8.5, "y":1},
+          {"label":"k19", "x":9.5, "y":1},
+          {"label":"k110", "x":10.5, "y":1},
+          {"label":"k111", "x":11.5, "y":1},
+          {"label":"k112", "x":12.5, "y":1},
+          {"label":"k113", "x":13.5, "y":1, "w":1.5},
+          {"label":"k20", "x":0, "y":2, "w":1.5},
+          {"label":"k21", "x":1.5, "y":2},
+          {"label":"k22", "x":2.5, "y":2},
+          {"label":"k23", "x":3.5, "y":2},
+          {"label":"k24", "x":4.5, "y":2},
+          {"label":"k25", "x":5.5, "y":2},
+          {"label":"k26", "x":6.5, "y":2},
+          {"label":"k27", "x":7.5, "y":2},
+          {"label":"k28", "x":8.5, "y":2},
+          {"label":"k29", "x":9.5, "y":2},
+          {"label":"k210", "x":10.5, "y":2},
+          {"label":"k211", "x":11.5, "y":2},
+          {"label":"k212", "x":12.5, "y":2, "w":1.5},
+          {"label":"k213", "x":14, "y":2},
+          {"label":"k30", "x":0, "y":3, "w":1.5},
+          {"label":"k31", "x":1.5, "y":3},
+          {"label":"k32", "x":2.5, "y":3},
+          {"label":"k33", "x":3.5, "y":3},
+          {"label":"k34", "x":4.5, "y":3},
+          {"label":"k35", "x":5.5, "y":3},
+          {"label":"k36", "x":6.5, "y":3},
+          {"label":"k37", "x":7.5, "y":3},
+          {"label":"k38", "x":8.5, "y":3},
+          {"label":"k39", "x":9.5, "y":3},
+          {"label":"k310", "x":10.5, "y":3},
+          {"label":"k311", "x":11.5, "y":3, "w":1.5},
+          {"label":"k312", "x":13, "y":3},
+          {"label":"k313", "x":14, "y":3},
+          {"label":"k40", "x":0, "y":4, "w":1.25},
+          {"label":"k41", "x":1.25, "y":4, "w":1.25},
+          {"label":"k42", "x":2.5, "y":4},
+          {"label":"k43", "x":3.5, "y":4},
+          {"label":"k44", "x":4.5, "y":4, "w":2},
+          {"label":"k46", "x":6.5, "y":4, "w":2},
+          {"label":"k48", "x":8.5, "y":4},
+          {"label":"k49", "x":9.5, "y":4, "w":1.25},
+          {"label":"k410", "x":10.75, "y":4, "w":1.25},
+          {"label":"k411", "x":12, "y":4},
+          {"label":"k412", "x":13, "y":4},
+          {"label":"k413", "x":14, "y":4}
+        ]
+      },
+      "LAYOUT_625u_arrow": {
+        "layout": [
+          {"label":"k00", "x":0, "y":0, "w":1.5},
+          {"label":"k01", "x":1.5, "y":0},
+          {"label":"k02", "x":2.5, "y":0},
+          {"label":"k03", "x":3.5, "y":0},
+          {"label":"k04", "x":4.5, "y":0},
+          {"label":"k05", "x":5.5, "y":0},
+          {"label":"k06", "x":6.5, "y":0},
+          {"label":"k07", "x":7.5, "y":0},
+          {"label":"k08", "x":8.5, "y":0},
+          {"label":"k09", "x":9.5, "y":0},
+          {"label":"k010", "x":10.5, "y":0},
+          {"label":"k011", "x":11.5, "y":0},
+          {"label":"k012", "x":12.5, "y":0},
+          {"label":"k013", "x":13.5, "y":0, "w":1.5},
+          {"label":"k10", "x":0, "y":1, "w":1.5},
+          {"label":"k11", "x":1.5, "y":1},
+          {"label":"k12", "x":2.5, "y":1},
+          {"label":"k13", "x":3.5, "y":1},
+          {"label":"k14", "x":4.5, "y":1},
+          {"label":"k15", "x":5.5, "y":1},
+          {"label":"k16", "x":6.5, "y":1},
+          {"label":"k17", "x":7.5, "y":1},
+          {"label":"k18", "x":8.5, "y":1},
+          {"label":"k19", "x":9.5, "y":1},
+          {"label":"k110", "x":10.5, "y":1},
+          {"label":"k111", "x":11.5, "y":1},
+          {"label":"k112", "x":12.5, "y":1},
+          {"label":"k113", "x":13.5, "y":1, "w":1.5},
+          {"label":"k20", "x":0, "y":2, "w":1.5},
+          {"label":"k21", "x":1.5, "y":2},
+          {"label":"k22", "x":2.5, "y":2},
+          {"label":"k23", "x":3.5, "y":2},
+          {"label":"k24", "x":4.5, "y":2},
+          {"label":"k25", "x":5.5, "y":2},
+          {"label":"k26", "x":6.5, "y":2},
+          {"label":"k27", "x":7.5, "y":2},
+          {"label":"k28", "x":8.5, "y":2},
+          {"label":"k29", "x":9.5, "y":2},
+          {"label":"k210", "x":10.5, "y":2},
+          {"label":"k211", "x":11.5, "y":2},
+          {"label":"k212", "x":12.5, "y":2, "w":1.5},
+          {"label":"k213", "x":14, "y":2},
+          {"label":"k30", "x":0, "y":3, "w":1.5},
+          {"label":"k31", "x":1.5, "y":3},
+          {"label":"k32", "x":2.5, "y":3},
+          {"label":"k33", "x":3.5, "y":3},
+          {"label":"k34", "x":4.5, "y":3},
+          {"label":"k35", "x":5.5, "y":3},
+          {"label":"k36", "x":6.5, "y":3},
+          {"label":"k37", "x":7.5, "y":3},
+          {"label":"k38", "x":8.5, "y":3},
+          {"label":"k39", "x":9.5, "y":3},
+          {"label":"k310", "x":10.5, "y":3},
+          {"label":"k311", "x":11.5, "y":3, "w":1.5},
+          {"label":"k312", "x":13, "y":3},
+          {"label":"k313", "x":14, "y":3},
+          {"label":"k40", "x":0, "y":4, "w":1.25},
+          {"label":"k41", "x":1.25, "y":4, "w":1.25},
+          {"label":"k42", "x":2.5, "y":4},
+          {"label":"k45", "x":3.5, "y":4, "w":6.25},
+          {"label":"k49", "x":9.75, "y":4},
+          {"label":"k410", "x":10.75, "y":4, "w":1.25},
+          {"label":"k411", "x":12, "y":4},
+          {"label":"k412", "x":13, "y":4},
+          {"label":"k413", "x":14, "y":4}
+        ]
+      }
+    }
+  }
\ No newline at end of file
diff --git a/keyboards/boardwalk/keymaps/default/config.h b/keyboards/boardwalk/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..a253024
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * 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
diff --git a/keyboards/boardwalk/keymaps/default/keymap.c b/keyboards/boardwalk/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..fddb3da
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+ * 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
+
+// Layer shorthand
+enum layer {
+  _1U,
+  _FN,
+  _HHKB,
+  _7U,
+  _2UARROW,
+  _625UARROW,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* 1uGrid
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | 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   | PG UP  | H      | J      | K      | L      | ;      | ENTER  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | END    | PG DN  | N      | M      | ,      | .      | /      | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL  | LGUI   | FN     | LALT   | SPACE  | SPACE  | SPACE  | SPACE  | SPACE  | SPACE  | RIGHT  | DOWN   | UP     | RIGHT  |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_1U] = LAYOUT_ortho_5x14(
+  KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINS, 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_RBRC, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_QUOT, \
+  KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_HOME, 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_PGDN, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, \
+  KC_LCTL, KC_LGUI, MO(1),   KC_LALT, KC_SPC,  KC_SPC,  KC_SPC,  KC_SPC,  KC_SPC,  KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_RCTL  \
+ ),
+
+ /* HHKB
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | 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   | PG UP  | H      | J      | K      | L      | ;      | ENTER  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | END    | PG DN  | N      | M      | ,      | .      | /      | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * |        | LCTRL  | FN     | LALT   | LGUI   |      SPACE      |      SPACE      | LEFT   | DOWN  | UP      | RIGHT  |        |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_HHKB] = LAYOUT_ortho_hhkb(
+  KC_ESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, _______, KC_6,   KC_7,    KC_8,    KC_9,    KC_0,    KC_BSLS, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    _______, _______, KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    _______, _______, KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_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, MO(1),   KC_LALT, KC_LGUI,       KC_SPC,         KC_SPC,      KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT           \
+ ),
+
+  /* 7u HHKB
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | 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   | PG UP  | H      | J      | K      | L      | ;      | ENTER  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | END    | PG DN  | N      | M      | ,      | .      | /      | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * |        | LCTRL  | LALT       |                             SPACE                            | RALT        | FN     |        |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_7U] = LAYOUT_ortho_7u(
+  KC_ESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, _______, KC_6,   KC_7,    KC_8,    KC_9,    KC_0,    KC_BSLS, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    _______, _______, KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    _______, _______, KC_H,   KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    _______, _______, KC_N,   KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, \
+           KC_LCTL, KC_LALT,                                KC_SPC,                                 KC_RALT, MO(1)             \
+ ),
+
+ /* 2x2u Space with Arrows
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | 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      | H      | J      | K      | L      | ;      | "      | ENTER  | PG UP  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | SHIFT  | UP     | PG DN  |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL  | LGUI   | FN     | LALT   |      SPACE      |      SPACE      | RALT   | RGUI   | RCTRL  | LEFT   | DOWN   | RIGHT  |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_2UARROW] = LAYOUT_2u_arrow(
+  KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_QUOT, \
+  KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_BSLS, 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, MO(1),   KC_LALT,     KC_SPC,          KC_SPC,        KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+  /* 6.25u Space with Arrows
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * | 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      | H      | J      | K      | L      | ;      | "      | ENTER  | PG UP  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | SHIFT  | UP     | PG DN  |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL  | LGUI   | LALT   |                        SPACE                        | FN     | RCTRL  | LEFT   | DOWN   | RIGHT  |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_625UARROW] = LAYOUT_625u_arrow(
+  KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_QUOT, \
+  KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_BSLS, 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,                      MO(1),   KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* FUNCTION
+ * .-----------------------------------------------------------------------------------------------------------------------------.
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+-----------------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * '-----------------------------------------------------------------------------------------------------------------------------'
+ */
+
+
+ [_FN] = LAYOUT_ortho_5x14(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/boardwalk/keymaps/default/readme.md b/keyboards/boardwalk/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..73cf19b
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for Boardwalk
diff --git a/keyboards/boardwalk/keymaps/mcallaster/keymap.c b/keyboards/boardwalk/keymaps/mcallaster/keymap.c
new file mode 100644 (file)
index 0000000..9ec6f92
--- /dev/null
@@ -0,0 +1,54 @@
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+enum layer {
+  _BASE,
+  _LOWER,
+  _RAISE,
+  _FN
+};
+
+#define LOWER MO(1)
+#define RAISE MO(2)
+#define FN    MO(3)
+
+// Mac sleep
+#define __SLEEP S(LCTL(KC_POWER))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT_ortho_hhkb(
+  KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_SLCK, KC_PSCR, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_GRV,  \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_HOME, KC_PGUP, KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_END,  KC_PGDN, 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_DEL,  KC_INS,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,  \
+           KC_CAPS, KC_LALT, KC_LGUI, RAISE,        KC_SPC,           KC_SPC,      LOWER,   KC_RGUI, KC_RALT, KC_RCTL
+  ),
+
+  [_LOWER] = LAYOUT_ortho_hhkb(
+  _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_PAUS, KC_NLCK, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______, \
+  _______, 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_LBRC, KC_RBRC, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV,  KC_BSLS, _______, _______, _______, \
+           _______, _______, _______, _______,       _______,       _______,       _______, _______, _______, _______
+  ),
+
+  [_RAISE] = LAYOUT_ortho_hhkb(
+  _______, KC_F11,  KC_F12,  _______, _______, _______, KC_PAUS, KC_NLCK, _______, _______, _______, _______, _______, _______, \
+  _______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_PIPE, _______, _______, _______, \
+           _______, _______, _______, _______,       _______,       _______,       _______, _______, _______, _______
+  ),
+
+  [_FN] = LAYOUT_ortho_hhkb(
+  __SLEEP, _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, \
+  _______, RESET,   _______, KC_MPRV, KC_MNXT, _______, RGB_SAI, RGB_HUI, _______, _______, _______, _______, _______, _______, \
+  _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPLY, _______, RGB_SAD, RGB_HUD, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, \
+  _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, \
+           _______, _______, _______, _______,       _______,       _______,       _______, _______, _______, _______
+  )
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _FN);
+}
diff --git a/keyboards/boardwalk/keymaps/nchristus/config.h b/keyboards/boardwalk/keymaps/nchristus/config.h
new file mode 100644 (file)
index 0000000..a253024
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * 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
diff --git a/keyboards/boardwalk/keymaps/nchristus/keymap.c b/keyboards/boardwalk/keymaps/nchristus/keymap.c
new file mode 100644 (file)
index 0000000..57b6736
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * 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
+
+// Layer shorthand
+#define _QW 0
+
+#define LOWER LT(1, KC_SPC)
+#define RAISE LT(2, KC_ENT)
+
+#define CTRLESC CTL_T(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Keymap _QWE: Base Layer (Default Layer) */
+  [_QW] = LAYOUT_ortho_hhkb(
+  KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, _______, KC_6,   KC_7,    KC_8,    KC_9,    KC_0,    KC_BSLS, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    _______, _______, KC_Y,   KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  CTRLESC, 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, \
+           MO(3),   KC_LCTL, KC_LALT, KC_LGUI,       RAISE,         LOWER,        KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT           \
+  ),
+
+  /* Keymap LOWER: Lower Layer */
+  [1] = LAYOUT_ortho_hhkb(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+           _______, _______, _______, _______,       XXXXXXX,       _______,       _______, _______, _______, _______
+  ),
+
+  /* Keymap RAISE: Raise Layer */
+  [2] = LAYOUT_ortho_hhkb(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_EQL,  KC_LCBR, KC_RCBR, KC_PIPE, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+           _______, _______, _______, _______,       _______,       XXXXXXX,       _______, _______, _______, _______
+  ),
+
+  /* Keymap _FL: Function Layer */
+  [3] = LAYOUT_ortho_hhkb(
+  RESET,   _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+           _______, _______, _______, _______,       _______,       _______,       _______, _______, _______, _______
+  )
+};
diff --git a/keyboards/boardwalk/keymaps/nchristus/readme.md b/keyboards/boardwalk/keymaps/nchristus/readme.md
new file mode 100644 (file)
index 0000000..73cf19b
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for Boardwalk
diff --git a/keyboards/boardwalk/keymaps/nchristus/rules.mk b/keyboards/boardwalk/keymaps/nchristus/rules.mk
new file mode 100644 (file)
index 0000000..b07a647
--- /dev/null
@@ -0,0 +1,14 @@
+# 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/>.
+
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/boardwalk/readme.md b/keyboards/boardwalk/readme.md
new file mode 100644 (file)
index 0000000..932e7e9
--- /dev/null
@@ -0,0 +1,16 @@
+# Boardwalk
+
+![Boardwalk](https://i.imgur.com/CQj3b9E.jpg)
+
+The Boardwalk is a 60% ortholinear keyboard, designed around Ergodox keycap sets and to fit into many standard 60% cases. The project was inspired by OLKB’s Atomic keyboard, which used larger 2u mods, but u/shensmobile
+decided to switch to 1.5u keys so that Ergodox sets would provide excellent compatibility. The rest of the board can be covered using standard key sizes from 60% sets.
+
+Keyboard Maintainer: QMK Community  
+Hardware Supported: Boardwalk Ortholinear PCB  
+Hardware Availability: [panc.co](https://www.panc.co/boardwalk-group-buy.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make boardwalk: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/boardwalk/rules.mk b/keyboards/boardwalk/rules.mk
new file mode 100644 (file)
index 0000000..0a02497
--- /dev/null
@@ -0,0 +1,66 @@
+# 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 = atmel-dfu
+
+# 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 = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI support (+2400 to 4200, depending on config)
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = yes        # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes       # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+LAYOUTS = ortho_5x14
index 8893d122e04be2b5675204802a059c4321f8fc73..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index c55f7f9f7d27acdd053d862dd7b2adc36f257bec..ed56340c3914e5e955029f2d8a0a52189cf1201c 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
diff --git a/keyboards/c39/c39.c b/keyboards/c39/c39.c
new file mode 100755 (executable)
index 0000000..78ecae5
--- /dev/null
@@ -0,0 +1 @@
+#include "c39.h"
diff --git a/keyboards/c39/c39.h b/keyboards/c39/c39.h
new file mode 100755 (executable)
index 0000000..797dd1e
--- /dev/null
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "quantum.h"
+
+#define ___ KC_NO
+
+#define LAYOUT( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C  \
+  ) { \
+  { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C }, \
+  { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C }, \
+  { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C }  \
+}
+
+#define LAYOUT_ortho_3x13 LAYOUT
diff --git a/keyboards/c39/config.h b/keyboards/c39/config.h
new file mode 100755 (executable)
index 0000000..3adc796
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+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       0xCA17
+#define PRODUCT_ID      0xCA39
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Maple Computing
+#define PRODUCT         C39
+#define DESCRIPTION     A compact 39 key keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 13
+
+#define MATRIX_ROW_PINS { D1, B4, B5 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D7, E6, C6, D2, D3 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * 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.
+ *
+ */
+
+/*
+ * 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/c39/info.json b/keyboards/c39/info.json
new file mode 100755 (executable)
index 0000000..4ed7f01
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "keyboard_name": "C39", 
+    "url": "", 
+    "maintainer": "Space Cat", 
+    "width": 13.25, 
+    "height": 3, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [{"label":"Q", "x":0, "y":0}, {"label":"W", "x":1, "y":0}, {"label":"E", "x":2, "y":0}, {"label":"R", "x":3, "y":0}, {"label":"T", "x":4, "y":0}, {"label":"Back", "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":"M1", "x":11.25, "y":0}, {"label":"M2", "x":12.25, "y":0}, {"label":"A", "x":0, "y":1}, {"label":"S", "x":1, "y":1}, {"label":"D", "x":2, "y":1}, {"label":"F", "x":3, "y":1}, {"label":"G", "x":4, "y":1}, {"label":"Enter", "x":5, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":";", "x":10, "y":1}, {"label":"M3", "x":11.25, "y":1}, {"label":"M4", "x":12.25, "y":1}, {"label":"Z", "x":0, "y":2}, {"label":"X", "x":1, "y":2}, {"label":"C", "x":2, "y":2}, {"label":"V", "x":3, "y":2}, {"label":"B", "x":4, "y":2}, {"label":"Fn", "x":5, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":"<", "x":8, "y":2}, {"label":">", "x":9, "y":2}, {"label":"?", "x":10, "y":2}, {"label":"M5", "x":11.25, "y":2}, {"label":"M6", "x":12.25, "y":2}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/c39/keymaps/default/config.h b/keyboards/c39/keymaps/default/config.h
new file mode 100755 (executable)
index 0000000..271f48d
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/c39/keymaps/default/keymap.c b/keyboards/c39/keymaps/default/keymap.c
new file mode 100755 (executable)
index 0000000..9de7519
--- /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.
+#define _QWERTY 0
+#define _FN1 1
+
+// Defines for task manager and such
+#define CALTDEL LCTL(LALT(KC_DEL))
+#define TSKMGR LCTL(LSFT(KC_ESC))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,----------------------------------------------------------------------------.  ,-------------.
+ * |   Q  |   W  |   E  |   R  |   T  | Bksp |   Y  |   U  |   I  |   O  |   P  |  |  M1  |  M2  |
+ * |------+------+------+------+------+------+------+------+------+------+------+  |------+------|
+ * |   A  |   S  |   D  |   F  |   G  | Enter|   H  |   J  |   K  |   L  |   ;  |  |  M3  |  M4  |
+ * |------+------+------+------+------+------+------+------+------+------+------+  |------+------|
+ * |   Z  |   X  |   C  |   V  |   B  |  FN1 |   N  |   M  |   ,  |   .  |   /  |  |  M5  |  M6  |
+ * `----------------------------------------------------------------------------'  `-------------'
+ */
+[_QWERTY] = LAYOUT(
+    KC_Q, KC_W, KC_E, KC_R, KC_T, KC_BSPC,                KC_Y, KC_U, KC_I,    KC_O,   KC_P,      KC_1, KC_2,
+    KC_A, KC_S, KC_D, KC_F, KC_G, MT(MOD_LSFT, KC_ENT),   KC_H, KC_J, KC_K,    KC_L,   KC_SCLN,   KC_3, KC_4,
+    KC_Z, KC_X, KC_C, KC_V, KC_B, LT(_FN1, KC_SPC),       KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,   KC_5, KC_6
+),
+
+/* FN1
+ * ,----------------------------------------------------------------------------.  ,-------------.
+ * |   1  |   2  |   3  |   4  |   5  | Bksp |   6  |   7  |   8  |   9  |   0  |  |  M1  |  M2  |
+ * |------+------+------+------+------+------+------+------+------+------+------+  |------+------|
+ * |   4  |   5  |   6  |   +  |      | Enter|      |      |      |      |      |  |  M3  |  M4  |
+ * |------+------+------+------+------+------+------+------+------+------+------+  |------+------|
+ * |   7  |   8  |   9  |   0  |      |  FN1 |      |      |      |      |      |  |  M5  |  M6  |
+ * `----------------------------------------------------------------------------'  `-------------'
+ */
+[_FN1] = LAYOUT(
+    KC_1, KC_2, KC_3, KC_4,    KC_5,    KC_BSPC, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,      KC_1, KC_2,
+    KC_4, KC_5, KC_6, KC_PLUS, _______, KC_ENT,  _______, _______, _______, _______, _______,   KC_3, KC_4,
+    KC_7, KC_8, KC_9, KC_0,    _______, _______, _______, _______, _______, _______, _______,   KC_5, KC_6
+),
+};
diff --git a/keyboards/c39/keymaps/default/readme.md b/keyboards/c39/keymaps/default/readme.md
new file mode 100755 (executable)
index 0000000..f5b1b6a
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for the C39
diff --git a/keyboards/c39/readme.md b/keyboards/c39/readme.md
new file mode 100755 (executable)
index 0000000..0454f1c
--- /dev/null
@@ -0,0 +1,16 @@
+# C39
+=======
+
+![C39](https://i.imgur.com/KuWIIuW.png)
+
+A compact 39 key keyboard.
+
+Keyboard Maintainer: [Maple Computing]()  
+Hardware Supported: C39 PCB  
+Hardware Availability: [SpaceCat.design](https://spacecat.design)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make c39: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/c39/rules.mk b/keyboards/c39/rules.mk
new file mode 100755 (executable)
index 0000000..8fcb089
--- /dev/null
@@ -0,0 +1,66 @@
+# 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
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI controls
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+RGBLIGHT_ENABLE = no        # RGB Enable / Disable
index bf589289a3cba83c76962659a0d8c88e43c1997e..8f4cc08c7467e7f21f1135f336278addf4c5d4b4 100644 (file)
@@ -14,7 +14,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "candybar.h"
+#include QMK_KEYBOARD_H
 
 #define _BL 0
 #define _FL 1
@@ -35,4 +35,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   KC_TAB,KC_A,KC_SLCK,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_QUOT,KC_BSLS,KC_P4,KC_P5,KC_P6,KC_VOLD, \
   KC_LSFT,KC_Z,KC_X,KC_CAPS,KC_V,KC_B,KC_NLCK,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_PGUP,KC_P1,KC_P2,KC_P3,KC_PEQL, \
   KC_LCTL,KC_LGUI,KC_LALT,KC_SPC,KC_SPC,KC_BSPC,KC_APP,MO(_FL),KC_HOME,KC_PGDN,KC_END,KC_P0,KC_PDOT,KC_PENT),
-};
\ No newline at end of file
+};
diff --git a/keyboards/cannonkeys/instant60/boards/ST_STM32F072B_DISCOVERY/board.c b/keyboards/cannonkeys/instant60/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/instant60/boards/ST_STM32F072B_DISCOVERY/board.h b/keyboards/cannonkeys/instant60/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/instant60/boards/ST_STM32F072B_DISCOVERY/board.mk b/keyboards/cannonkeys/instant60/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/instant60/boards/ST_STM32F072B_DISCOVERY/cfg/board.chcfg b/keyboards/cannonkeys/instant60/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/instant60/bootloader_defs.h b/keyboards/cannonkeys/instant60/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/instant60/chconf.h b/keyboards/cannonkeys/instant60/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/instant60/config.h b/keyboards/cannonkeys/instant60/config.h
new file mode 100644 (file)
index 0000000..d7554c1
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+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      0x1600
+#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 Instant60
+#define DESCRIPTION Instant 60 Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_COL_PINS { B2, B10, B11, 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 0x01
+#define EEPROM_VERSION_ADDR 34
+
+#define EEPROM_CUSTOM_BACKLIGHT 804
+
+
+
+/*
+ * 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/instant60/halconf.h b/keyboards/cannonkeys/instant60/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/instant60/instant60.c b/keyboards/cannonkeys/instant60/instant60.c
new file mode 100644 (file)
index 0000000..25b7099
--- /dev/null
@@ -0,0 +1 @@
+#include "instant60.h"
diff --git a/keyboards/cannonkeys/instant60/instant60.h b/keyboards/cannonkeys/instant60/instant60.h
new file mode 100644 (file)
index 0000000..cca1b9a
--- /dev/null
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_default( \
+  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,   KC_NO}, \
+  {  K10,  K11,  K12,  K13,  K14,    K15,    K16,    K17,    K18,    K19,  K1A,  K1B,  K1C,    KC_NO, K1E   }, \
+  {  K20,  K21,  K22,  K23,  K24,    K25,    K26,    K27,    K28,    K29,  K2A,  K2B,  KC_NO,  KC_NO, K2E  }, \
+  {  K30,  K31,  K32,  K33,  K34,    K35,    K36,    K37,    K38,    K39,  K3A,  K3B,  KC_NO,  KC_NO, KC_NO  }, \
+  {  K40,  K41,  K42,  KC_NO,  KC_NO,  K45,  KC_NO,  KC_NO,  KC_NO,  K49,  K4A,  K4B,  KC_NO,  KC_NO, K4E  }  \
+}
diff --git a/keyboards/cannonkeys/instant60/keymaps/default/keymap.c b/keyboards/cannonkeys/instant60/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..e898a3f
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+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
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _FN1 1
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_BASE] = LAYOUT_default(
+    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_default(
+    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/instant60/mcuconf.h b/keyboards/cannonkeys/instant60/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/instant60/readme.md b/keyboards/cannonkeys/instant60/readme.md
new file mode 100644 (file)
index 0000000..9cd91e9
--- /dev/null
@@ -0,0 +1,12 @@
+# Instant60
+
+Instant60 Keyboard
+
+Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan1)  
+Hardware Supported: STM32F072CBT6  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make cannonkeys/instant60: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/instant60/rules.mk b/keyboards/cannonkeys/instant60/rules.mk
new file mode 100644 (file)
index 0000000..cd366c7
--- /dev/null
@@ -0,0 +1,56 @@
+# 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
+
+#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
+
index dd2d9bc574f920577e83c06d546e4ef1b1b837b8..e3d44990efc37f73dea0e5eedeb1f34e904c768c 100644 (file)
@@ -23,7 +23,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #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 QMK
+#define MANUFACTURER CannonKeys
 #define PRODUCT Satisfaction75
 #define DESCRIPTION Satisfaction 75 Keyboard
 
@@ -76,14 +76,27 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // 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 0x0F
 #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*6*16*2)) = (35+768)
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 803
-#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 221
+
+// Dynamic macro starts after dynamic keymaps (35+(4*6*16*2)) = (35+768) = 803
+
+// I'm also putting my custom stuff after that
+// 1 for enabled encoder modes
+// 1 for custom backlighting controls
+// 1 for OLED default mode
+// 6 for 3x custom encoder settings, left, right, and press (18 total)
+
+#define DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES 803
+#define DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT 804
+#define DYNAMIC_KEYMAP_DEFAULT_OLED 805
+#define DYNAMIC_KEYMAP_CUSTOM_ENCODER 806
+
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 824
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 200
 #define DYNAMIC_KEYMAP_MACRO_COUNT 16
 
 
index a19dbcc9f5bff6b97b8f8b30b7c326e74f2ccd4f..d81eb92d49435ac91b9f59fa6de062e415d665f7 100644 (file)
@@ -109,7 +109,7 @@ uint8_t i2c_readReg(uint8_t devaddr, uint8_t* regaddr, uint8_t* data, uint16_t l
 }
 
 // This is usually not needed. It releases the driver to allow pins to become GPIO again.
-uint8_t i2c_stop(uint16_t timeout)
+uint8_t i2c_stop(void)
 {
   i2cStop(&I2C_DRIVER);
   return 0;
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c b/keyboards/cannonkeys/satisfaction75/keymaps/tester/keymap.c
new file mode 100644 (file)
index 0000000..3595c10
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+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
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT_all(
+    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_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_DEL, ENC_PRESS,
+    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_NUHS,  KC_ENTER, KC_PGUP,
+    KC_LSFT,  KC_BSLS,  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_SPC,             KC_SPC,             KC_RALT,  MO(1),    KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT
+  ),
+  [1] = LAYOUT_all(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, OLED_TOGG,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CLOCK_SET,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______,          _______,          _______,          _______, _______, _______, _______, _______, _______
+  )
+};
diff --git a/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk b/keyboards/cannonkeys/satisfaction75/keymaps/tester/rules.mk
new file mode 100644 (file)
index 0000000..3357eb9
--- /dev/null
@@ -0,0 +1 @@
+QWIIC_ENABLE = no
diff --git a/keyboards/cannonkeys/satisfaction75/prototype/prototype.h b/keyboards/cannonkeys/satisfaction75/prototype/prototype.h
new file mode 100644 (file)
index 0000000..42e574f
--- /dev/null
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "satisfaction75.h"
+
+#define LAYOUT_default( \
+       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312,             K315, \
+       K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411,       K413,       K415, \
+       K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \
+) { \
+       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  KC_NO, KC_NO,  K315 }, \
+       { K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  KC_NO, K413,  KC_NO,  K415 }, \
+       { K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \
+}
diff --git a/keyboards/cannonkeys/satisfaction75/prototype/rules.mk b/keyboards/cannonkeys/satisfaction75/prototype/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/rev1.h b/keyboards/cannonkeys/satisfaction75/rev1/rev1.h
new file mode 100644 (file)
index 0000000..302b7e4
--- /dev/null
@@ -0,0 +1,108 @@
+#pragma once
+
+#include "satisfaction75.h"
+
+// This layout is the default - it's what's in VIA
+// ANSI, bottom row 1.25/1.25/1.25/6.25/1/1/1
+#define LAYOUT_default( \
+       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \
+       K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \
+       K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \
+) { \
+       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \
+       { K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \
+       { K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \
+}
+
+// ISO, bottom row 1.25/1.25/1.25/6.25/1/1/1
+#define LAYOUT_iso( \
+       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,       K315, \
+       K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \
+       K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \
+) { \
+       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  KC_NO,  K315 }, \
+       { K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \
+       { K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \
+}
+
+// ANSI, bottom row 1.25/1.25/1.25/6.25/1.5/1.5
+#define LAYOUT_3x2( \
+       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \
+       K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \
+       K500, K501, K502,             K505,                   K509,       K511, K512, K513,       K515  \
+) { \
+       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \
+       { K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \
+       { K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  KC_NO, K511,  K512,  K513,  KC_NO,  K515 } \
+}
+
+// ANSI, WKL bottom row 1.5/1.5/7/1.5/1.5, Split Backspace
+#define LAYOUT_2x2( \
+       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \
+       K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \
+       K500, K501,                   K505,                   K509,       K511, K512, K513,       K515  \
+) { \
+       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114,   K115 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \
+       { K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \
+       { K500,  K501,  KC_NO, KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  KC_NO, K511,  K512,  K513,  KC_NO,  K515 } \
+}
+
+// ANSI, bottom row 1.25/1.25/1.25/2.25/1.25/2.75/1/1/1
+// ANSI, bottom row 1.25/1.25/1.25/2.75/1.25/2.25/1/1/1
+#define LAYOUT_split_space( \
+       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311,       K313,       K315, \
+       K400,       K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \
+       K500, K501, K502, K503,       K505,       K507,       K509, K510, K511, K512, K513,       K515  \
+) { \
+       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  KC_NO, K313,  KC_NO,  K315 }, \
+       { K400,  KC_NO, K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \
+       { K500,  K501,  K502,  K503,  KC_NO, K505,  KC_NO, K507,  KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \
+}
+
+
+// Expose All Keys - Split backspace - ISO Extra keys - Split space bottom row
+#define LAYOUT_all( \
+       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
+       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
+       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,       K315, \
+       K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413,       K415, \
+       K500, K501, K502, K503,       K505,       K507,       K509, K510, K511, K512, K513,       K515  \
+) { \
+       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114,   K115 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
+       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  KC_NO,  K315 }, \
+       { K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  K412,  K413,  KC_NO,  K415 }, \
+       { K500,  K501,  K502,  K503,  KC_NO, K505,  KC_NO, K507,  KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \
+}
diff --git a/keyboards/cannonkeys/satisfaction75/rev1/rules.mk b/keyboards/cannonkeys/satisfaction75/rev1/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
index 88ab459204453b45ef69a7bc650516116d2805dc..3e2877200ed272c49bd56ea56a3024bf4c27c50c 100644 (file)
@@ -54,4 +54,4 @@ QWIIC_ENABLE += MICRO_OLED
 # RAW_ENABLE = yes
 # DYNAMIC_KEYMAP_ENABLE = yes
 
-DEFAULT_FOLDER = cannonkeys/satisfaction75
+DEFAULT_FOLDER = cannonkeys/satisfaction75/rev1
index 1423b11b0525929899cb987e8cf10a0366498473..0e788b29b786c07b9f2edeadcb8c6fe9acbb9300 100644 (file)
@@ -5,9 +5,10 @@
 #include "ch.h"
 #include "hal.h"
 
-// #ifdef QWIIC_MICRO_OLED_ENABLE
+#ifdef QWIIC_MICRO_OLED_ENABLE
 #include "micro_oled.h"
 #include "qwiic.h"
+#endif
 
 #include "timer.h"
 
@@ -93,21 +94,87 @@ void raw_hid_receive( uint8_t *data, uint8_t length )
                }
                case id_get_keyboard_value:
                {
-                       if ( command_data[0] == id_uptime )
-                       {
-                               uint32_t value = timer_read32();
-                               command_data[1] = (value >> 24 ) & 0xFF;
-                               command_data[2] = (value >> 16 ) & 0xFF;
-                               command_data[3] = (value >> 8 ) & 0xFF;
-                               command_data[4] = value & 0xFF;
-                       }
-                       else
-                       {
-                               *command_id = id_unhandled;
-                       }
+      switch( command_data[0])
+      {
+        case id_uptime:
+        {
+          uint32_t value = timer_read32();
+          command_data[1] = (value >> 24 ) & 0xFF;
+          command_data[2] = (value >> 16 ) & 0xFF;
+          command_data[3] = (value >> 8 ) & 0xFF;
+          command_data[4] = value & 0xFF;
+          break;
+        }
+        case id_oled_default_mode:
+        {
+          uint8_t default_oled = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED);
+          command_data[1] = default_oled;
+          break;
+        }
+        case id_oled_mode:
+        {
+          command_data[1] = oled_mode;
+          break;
+
+        }
+        case id_encoder_modes:
+        {
+          command_data[1] = enabled_encoder_modes;
+          break;
+        }
+        case id_encoder_custom:
+        {
+          // uint8_t custom_encoder_idx = command_data[1];
+          // command_data[2] = 0x00;
+          // command_data[3] = 0x00;
+          // command_data[4] = 0x00;
+          // command_data[5] = 0x00;
+          // command_data[6] = 0x00;
+          // command_data[7] = 0x00;
+          break;
+        }
+        default:
+        {
+          *command_id = id_unhandled;
+          break;
+        }
+      }
                        break;
-               }
+    }
 #ifdef DYNAMIC_KEYMAP_ENABLE
+    case id_set_keyboard_value:
+    {
+      switch(command_data[0]){
+        case id_oled_default_mode:
+        {
+          eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED, command_data[1]);
+          break;
+        }
+        case id_oled_mode:
+        {
+          oled_mode = command_data[1];
+          draw_ui();
+          break;
+        }
+        case id_encoder_modes:
+        {
+          enabled_encoder_modes = command_data[1];
+          eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES, enabled_encoder_modes);
+          break;
+        }
+        case id_encoder_custom:
+        {
+          // uint8_t custom_encoder_idx = command_data[1];
+          break;
+        }
+        default:
+        {
+          *command_id = id_unhandled;
+          break;
+        }
+      }
+      break;
+    }
                case id_dynamic_keymap_get_keycode:
                {
                        uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] );
@@ -243,9 +310,11 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
   queue_for_send = true;
   switch (keycode) {
     case OLED_TOGG:
-      if (record->event.pressed) {
-        oled_mode = (oled_mode + 1) % _NUM_OLED_MODES;
-        draw_ui();
+      if(!clock_set_mode){
+        if (record->event.pressed) {
+          oled_mode = (oled_mode + 1) % _NUM_OLED_MODES;
+          draw_ui();
+        }
       }
       return false;
     case CLOCK_SET:
@@ -325,12 +394,34 @@ void encoder_update_kb(uint8_t index, bool clockwise) {
   }
 }
 
+void dynamic_keymap_custom_reset(void){
+  void *p = (void*)(DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT);
+       void *end = (void*)(DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR);
+       while ( p != end ) {
+               eeprom_update_byte(p, 0);
+               ++p;
+       }
+  eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES, 0x1F);
+}
+
+void save_backlight_config_to_eeprom(){
+  eeprom_update_byte((uint8_t*)DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT, kb_backlight_config.raw);
+}
+
+void load_custom_config(){
+  kb_backlight_config.raw = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_CUSTOM_BACKLIGHT);
+#ifdef DYNAMIC_KEYMAP_ENABLE
+  oled_mode = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_DEFAULT_OLED);
+  enabled_encoder_modes = eeprom_read_byte((uint8_t*)DYNAMIC_KEYMAP_ENABLED_ENCODER_MODES);
+#endif
+}
+
 void eeprom_init_kb(void)
 {
        // If the EEPROM has the magic, the data is good.
        // OK to load from EEPROM.
        if (eeprom_is_valid()) {
-               //backlight_config_load();
+               load_custom_config();
        } else  {
                // If the EEPROM has not been saved before, or is out of date,
                // save the default values to the EEPROM. Default values
@@ -341,6 +432,8 @@ void eeprom_init_kb(void)
                dynamic_keymap_reset();
                // This resets the macros in EEPROM to nothing.
                dynamic_keymap_macro_reset();
+    // Reset the custom stuff
+    dynamic_keymap_custom_reset();
 #endif
                // Save the magic number last, in case saving was interrupted
                eeprom_set_valid(true);
@@ -367,7 +460,7 @@ void matrix_scan_kb(void) {
       queue_for_send = true;
     }
   }
-
+#ifdef QWIIC_MICRO_OLED_ENABLE
   if (queue_for_send && oled_mode != OLED_OFF) {
     oled_sleeping = false;
     read_host_led_state();
@@ -378,5 +471,6 @@ void matrix_scan_kb(void) {
     send_command(DISPLAYOFF);      /* 0xAE */
     oled_sleeping = true;
   }
+#endif
 }
 
index 5f9a1e48bad479cbb0c2ae935e7920579dcfb75d..dfab68017f02e951134d862a043459922bc38521 100644 (file)
@@ -2,23 +2,11 @@
 
 #include "quantum.h"
 
-// The first section contains all of the arguements
-// The second converts the arguments into a two-dimensional array
- #define LAYOUT_default( \
-       K000,       K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013,             \
-       K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113,       K115, \
-       K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       K215, \
-       K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312,             K315, \
-       K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411,       K413,       K415, \
-       K500, K501, K502,             K505,                   K509, K510, K511, K512, K513,       K515  \
-) { \
-       { K000,  KC_NO, K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  KC_NO,  KC_NO }, \
-       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  KC_NO,  K115 }, \
-       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO,  K215 }, \
-       { K300,  K301,  K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  KC_NO, KC_NO,  K315 }, \
-       { K400,  K401,  K402,  K403,  K404,  K405,  K406,  K407,  K408,  K409,  K410,  K411,  KC_NO, K413,  KC_NO,  K415 }, \
-       { K500,  K501,  K502,  KC_NO, KC_NO, K505,  KC_NO, KC_NO, KC_NO, K509,  K510,  K511,  K512,  K513,  KC_NO,  K515 } \
-}
+#ifdef KEYBOARD_cannonkeys_satisfaction75_prototype
+    #include "prototype.h"
+#else
+    #include "rev1.h"
+#endif
 
 /* screen off after this many milliseconds */
 #define ScreenOffInterval 60000 /* milliseconds */
@@ -39,6 +27,13 @@ enum my_keycodes {
   OLED_TOGG
 };
 
+enum s75_keyboard_value_id {
+  id_encoder_modes = 0x80,
+  id_oled_default_mode,
+  id_encoder_custom,
+  id_oled_mode
+};
+
 enum encoder_modes {
   ENC_MODE_VOLUME,
   ENC_MODE_MEDIA,
@@ -114,5 +109,5 @@ void backlight_set(uint8_t level);
 bool is_breathing(void);
 void breathing_enable(void);
 void breathing_disable(void);
-// void backlight_save_to_eeprom(uint8_t level);
-// uint8_t backlight_config_load();
+void load_custom_config(void);
+void save_backlight_config_to_eeprom(void);
index 88996f829d94da689db252f31eb164b147253c92..6776816918677ade6c8843a39a26b1f04b863fa7 100644 (file)
@@ -10,6 +10,8 @@ void pre_encoder_mode_change(){
     // timespec.dstflag = last_timespec.dstflag;
     timespec.millisecond = (hour_config * 60 + minute_config) * 60 * 1000;
     rtcSetTime(&RTCD1, &timespec);
+  } else if (encoder_mode == ENC_MODE_BACKLIGHT){
+    save_backlight_config_to_eeprom();
   }
 }
 
@@ -26,6 +28,9 @@ void post_encoder_mode_change(){
 
 void change_encoder_mode(bool negative){
   pre_encoder_mode_change();
+  if(enabled_encoder_modes == 0){
+    enabled_encoder_modes = 0x1F;
+  }
   do {
     if(negative){
       if (encoder_mode == 0){
@@ -94,12 +99,14 @@ uint16_t handle_encoder_clockwise(){
       mapped_code = KC_WH_D;
       break;
     case ENC_MODE_BACKLIGHT:
-      // mapped_code = BL_INC;
       kb_backlight_config.level = kb_backlight_config.level + 1;
       if(kb_backlight_config.level > BACKLIGHT_LEVELS){
         kb_backlight_config.level = BACKLIGHT_LEVELS;
       }
       backlight_set(kb_backlight_config.level);
+      if (kb_backlight_config.level != 0){
+        kb_backlight_config.enable = true;
+      }
       break;
     case ENC_MODE_BRIGHTNESS:
       mapped_code = KC_BRIGHTNESS_UP;
@@ -131,6 +138,9 @@ uint16_t handle_encoder_ccw(){
         kb_backlight_config.level = kb_backlight_config.level - 1;
       }
       backlight_set(kb_backlight_config.level);
+      if (kb_backlight_config.level == 0){
+        kb_backlight_config.enable = false;
+      }
       break;
     case ENC_MODE_BRIGHTNESS:
       mapped_code = KC_BRIGHTNESS_DOWN;
index a92d61c568b81212b4fefc4601b066e021123529..4e22587db85163e90c80987051b4930b8c6119ea 100644 (file)
@@ -3,6 +3,7 @@
 
 __attribute__ ((weak))
 void draw_ui() {
+#ifdef QWIIC_MICRO_OLED_ENABLE
   clear_buffer();
   last_flush = timer_read();
   send_command(DISPLAYON);
@@ -22,6 +23,7 @@ void draw_ui() {
       send_command(DISPLAYOFF);
       break;
   }
+#endif
 }
 
 void draw_encoder(int8_t startX, int8_t startY, bool show_legend){
diff --git a/keyboards/cannonkeys/stm32f072/keyboard.c b/keyboards/cannonkeys/stm32f072/keyboard.c
new file mode 100644 (file)
index 0000000..4316d51
--- /dev/null
@@ -0,0 +1,120 @@
+#include "keyboard.h"
+#include "ch.h"
+#include "hal.h"
+#include "led_custom.h"
+#include "util.h"
+#include "quantum.h"
+
+#include "tmk_core/common/eeprom.h"
+
+#include "ws2812.h"
+
+backlight_config_t kb_backlight_config = {
+  .enable = true,
+  .breathing = true,
+  .level = BACKLIGHT_LEVELS
+};
+
+
+bool eeprom_is_valid(void)
+{
+       return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
+                       eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION);
+}
+
+void eeprom_set_valid(bool valid)
+{
+       eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
+       eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
+}
+
+void eeprom_reset(void)
+{
+       eeprom_set_valid(false);
+       eeconfig_disable();
+}
+
+void save_backlight_config_to_eeprom(){
+  eeprom_update_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT, kb_backlight_config.raw);
+}
+
+void load_custom_config(){
+  kb_backlight_config.raw = eeprom_read_byte((uint8_t*)EEPROM_CUSTOM_BACKLIGHT);
+}
+
+void eeprom_init_kb(void)
+{
+       // If the EEPROM has the magic, the data is good.
+       // OK to load from EEPROM.
+       if (eeprom_is_valid()) {
+               load_custom_config();
+       } else  {
+               // Save the magic number last, in case saving was interrupted
+               eeprom_set_valid(true);
+       }
+}
+
+void matrix_init_kb(void){
+       eeprom_init_kb();
+      /* MOSI pin*/
+    palSetPadMode(PORT_WS2812, PIN_WS2812, PAL_MODE_ALTERNATE(0));
+    wait_ms(500);
+
+#ifdef RGBLIGHT_ENABLE
+    leds_init();
+#endif
+    backlight_init_ports();
+}
+
+void matrix_scan_kb(void)
+{
+  #ifdef RGBLIGHT_ENABLE
+    rgblight_task();
+  #endif
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case BL_INC:
+      if (record->event.pressed) {
+        kb_backlight_config.level = kb_backlight_config.level + 1;
+        if(kb_backlight_config.level > BACKLIGHT_LEVELS){
+          kb_backlight_config.level = BACKLIGHT_LEVELS;
+        }
+        backlight_set(kb_backlight_config.level);
+        save_backlight_config_to_eeprom();
+      }
+      return false;
+    case BL_TOGG:
+      if (record->event.pressed) {
+        kb_backlight_config.enable = !kb_backlight_config.enable;
+        if(kb_backlight_config.enable){
+          backlight_set(kb_backlight_config.level);
+        } else {
+          backlight_set(0);
+        }
+        save_backlight_config_to_eeprom();
+      }
+      return false;
+
+    case BL_DEC:
+      if (record->event.pressed) {
+        if(kb_backlight_config.level <= 1){
+          kb_backlight_config.level = 0;
+        } else {
+          kb_backlight_config.level = kb_backlight_config.level - 1;
+        }
+        backlight_set(kb_backlight_config.level);
+        save_backlight_config_to_eeprom();
+      }
+      return false;
+    case BL_BRTG:
+      if (record->event.pressed) {
+        kb_backlight_config.breathing = !kb_backlight_config.breathing;
+        breathing_toggle();
+        save_backlight_config_to_eeprom();
+      }
+      return false;
+  }
+  return true;
+}
diff --git a/keyboards/cannonkeys/stm32f072/keyboard.h b/keyboards/cannonkeys/stm32f072/keyboard.h
new file mode 100644 (file)
index 0000000..94c973d
--- /dev/null
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "quantum.h"
+
+typedef union {
+    uint8_t raw;
+    struct {
+        bool    enable :1;
+        bool    breathing : 1;
+        uint8_t level  :6;
+    };
+} backlight_config_t;
+
+// Backlighting
+extern backlight_config_t kb_backlight_config;
+extern bool kb_backlight_breathing;
+void backlight_init_ports(void);
+void backlight_set(uint8_t level);
+bool is_breathing(void);
+void breathing_enable(void);
+void breathing_disable(void);
+void load_custom_config(void);
+void save_backlight_config_to_eeprom(void);
diff --git a/keyboards/cannonkeys/stm32f072/led.c b/keyboards/cannonkeys/stm32f072/led.c
new file mode 100644 (file)
index 0000000..d69d946
--- /dev/null
@@ -0,0 +1,252 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+#include "led_custom.h"
+#include "keyboard.h"
+#include "printf.h"
+
+static void breathing_callback(PWMDriver *pwmp);
+
+static PWMConfig pwmCFG = {
+  0xFFFF,                              /* PWM clock frequency  */
+  256,                              /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
+  NULL,                               /* No Callback */
+  {
+      {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 0 */
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL}
+  },
+  0,                                  /* HW dependent part.*/
+  0
+};
+
+static PWMConfig pwmCFG_breathing = {
+  0xFFFF,                              /* 10kHz PWM clock frequency  */
+  256,                              /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
+  breathing_callback,                               /* Breathing Callback */
+  {
+      {PWM_OUTPUT_ACTIVE_HIGH, NULL}, /* Enable Channel 0 */
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL},
+      {PWM_OUTPUT_DISABLED, NULL}
+  },
+  0,                                  /* HW dependent part.*/
+  0
+};
+
+// See http://jared.geek.nz/2013/feb/linear-led-pwm
+static uint16_t cie_lightness(uint16_t v) {
+  if (v <= 5243) // if below 8% of max
+    return v / 9; // same as dividing by 900%
+  else {
+    uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
+    // to get a useful result with integer division, we shift left in the expression above
+    // and revert what we've done again after squaring.
+    y = y * y * y >> 8;
+    if (y > 0xFFFFUL) // prevent overflow
+      return 0xFFFFU;
+    else
+      return (uint16_t) y;
+  }
+}
+
+
+uint8_t get_backlight_level(void){
+  return kb_backlight_config.level;
+}
+
+void backlight_init_ports(void) {
+  printf("backlight_init_ports()\n");
+  palSetPadMode(GPIOA, 6, PAL_MODE_ALTERNATE(1));
+  pwmStart(&PWMD3, &pwmCFG);
+  // pwmEnableChannel(&PWMD3, 0, PWM_FRACTION_TO_WIDTH(&PWMD3, 0xFFFF,cie_lightness(0xFFFF)));
+  if(kb_backlight_config.enable){
+    if(kb_backlight_config.breathing){
+      breathing_enable();
+    } else{
+      backlight_set(kb_backlight_config.level);
+    }
+  } else {
+    backlight_set(0);
+  }
+
+}
+
+void backlight_set(uint8_t level) {
+    printf("backlight_set(%d)\n", level);
+    uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t) level / BACKLIGHT_LEVELS));
+    printf("duty: (%d)\n", duty);
+    if (level == 0) {
+        // Turn backlight off
+        pwmDisableChannel(&PWMD3, 0);
+    } else {
+      // Turn backlight on
+      if(!is_breathing()){
+        pwmEnableChannel(&PWMD3, 0, PWM_FRACTION_TO_WIDTH(&PWMD3,0xFFFF,duty));
+      }
+    }
+}
+
+
+uint8_t backlight_tick = 0;
+
+void backlight_task(void) {
+}
+
+#define BREATHING_NO_HALT  0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON  2
+#define BREATHING_STEPS 128
+
+static uint8_t breathing_period = BREATHING_PERIOD;
+static uint8_t breathing_halt = BREATHING_NO_HALT;
+static uint16_t breathing_counter = 0;
+
+bool is_breathing(void) {
+    return PWMD3.config == &pwmCFG_breathing;
+}
+
+#define breathing_min() do {breathing_counter = 0;} while (0)
+#define breathing_max() do {breathing_counter = breathing_period * 256 / 2;} while (0)
+
+
+void breathing_interrupt_enable(void){
+    pwmStop(&PWMD3);
+    pwmStart(&PWMD3, &pwmCFG_breathing);
+    chSysLockFromISR();
+    pwmEnablePeriodicNotification(&PWMD3);
+    pwmEnableChannelI(
+      &PWMD3,
+      0,
+      PWM_FRACTION_TO_WIDTH(
+        &PWMD3,
+        0xFFFF,
+        0xFFFF
+      )
+    );
+    chSysUnlockFromISR();
+}
+
+void breathing_interrupt_disable(void){
+    pwmStop(&PWMD3);
+    pwmStart(&PWMD3, &pwmCFG);
+}
+
+void breathing_enable(void)
+{
+  breathing_counter = 0;
+  breathing_halt = BREATHING_NO_HALT;
+  breathing_interrupt_enable();
+}
+
+void breathing_pulse(void)
+{
+    if (get_backlight_level() == 0)
+      breathing_min();
+    else
+      breathing_max();
+    breathing_halt = BREATHING_HALT_ON;
+    breathing_interrupt_enable();
+}
+
+void breathing_disable(void)
+{
+    printf("breathing_disable()\n");
+    breathing_interrupt_disable();
+    // Restore backlight level
+    backlight_set(get_backlight_level());
+}
+
+void breathing_self_disable(void)
+{
+  if (get_backlight_level() == 0)
+    breathing_halt = BREATHING_HALT_OFF;
+  else
+    breathing_halt = BREATHING_HALT_ON;
+}
+
+void breathing_toggle(void) {
+  if (is_breathing()){
+    printf("disable breathing\n");
+    breathing_disable();
+  } else {
+    printf("enable breathing\n");
+    breathing_enable();
+  }
+}
+
+void breathing_period_set(uint8_t value)
+{
+  if (!value)
+    value = 1;
+  breathing_period = value;
+}
+
+void breathing_period_default(void) {
+  breathing_period_set(BREATHING_PERIOD);
+}
+
+void breathing_period_inc(void)
+{
+  breathing_period_set(breathing_period+1);
+}
+
+void breathing_period_dec(void)
+{
+  breathing_period_set(breathing_period-1);
+}
+
+/* To generate breathing curve in python:
+ * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
+ */
+static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+// Use this before the cie_lightness function.
+static inline uint16_t scale_backlight(uint16_t v) {
+  return v / BACKLIGHT_LEVELS * get_backlight_level();
+}
+
+static void breathing_callback(PWMDriver *pwmp)
+{
+  (void)pwmp;
+  uint16_t interval = (uint16_t) breathing_period * 256 / BREATHING_STEPS;
+  // resetting after one period to prevent ugly reset at overflow.
+  breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
+  uint8_t index = breathing_counter / interval % BREATHING_STEPS;
+
+  if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
+      ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
+  {
+      breathing_interrupt_disable();
+  }
+
+  uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
+
+  chSysLockFromISR();
+  pwmEnableChannelI(
+    &PWMD3,
+    0,
+    PWM_FRACTION_TO_WIDTH(
+      &PWMD3,
+      0xFFFF,
+      duty
+    )
+  );
+  chSysUnlockFromISR();
+}
diff --git a/keyboards/cannonkeys/stm32f072/led_custom.h b/keyboards/cannonkeys/stm32f072/led_custom.h
new file mode 100644 (file)
index 0000000..28e0f02
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+
+void backlight_task(void);
+void breathing_interrupt_disable(void);
+void breathing_interrupt_enable(void);
+void breathing_toggle(void);
diff --git a/keyboards/cannonkeys/stm32f072/ws2812.c b/keyboards/cannonkeys/stm32f072/ws2812.c
new file mode 100644 (file)
index 0000000..6657639
--- /dev/null
@@ -0,0 +1,150 @@
+#include "ch.h"
+#include "hal.h"
+
+#include "ws2812.h"
+
+#define BYTES_FOR_LED_BYTE 4
+#define NB_COLORS 3
+#define BYTES_FOR_LED BYTES_FOR_LED_BYTE*NB_COLORS
+#define DATA_SIZE BYTES_FOR_LED*NB_LEDS
+#define RESET_SIZE 200
+
+// Define the spi your LEDs are plugged to here
+#define LEDS_SPI WS2812_SPI
+// Define the number of LEDs you wish to control in your LED strip
+#define NB_LEDS RGBLED_NUM
+
+#define LED_SPIRAL 0
+
+static uint8_t txbuf[DATA_SIZE + RESET_SIZE];
+static uint8_t get_protocol_eq(uint8_t data, int pos);
+
+/*
+ * This lib is meant to be used asynchronously, thus the colors contained in
+ * the txbuf will be sent in loop, so that the colors are always the ones you
+ * put in the table (the user thus have less to worry about)
+ *
+ * Since the data are sent via DMA, and the call to spiSend is a blocking one,
+ * the processor ressources are not used to much, if you see your program being
+ * too slow, simply add a:
+ * chThdSleepMilliseconds(x);
+ * after the spiSend, where you increment x untill you are satisfied with your
+ * program speed, another trick may be to lower this thread priority : your call
+ */
+static THD_WORKING_AREA(LEDS_THREAD_WA, 128);
+static THD_FUNCTION(ledsThread, arg) {
+  (void) arg;
+  while(1){
+    spiSend(&LEDS_SPI, DATA_SIZE + RESET_SIZE, txbuf);
+  }
+}
+
+#if LED_SPIRAL
+/*
+ * 'Led spiral' is a simple demo in which we put all the leds to the same
+ * color, where this color does all the hsv circle in loop.
+ * If you want to launch the thread that will chage the led colors to the
+ * appropriate value, simply set LED_SPIRAL to 1.
+ */
+
+static THD_WORKING_AREA(HSVTRANS_WA, 128);
+static THD_FUNCTION(hsv_transThread, arg) {
+  (void) arg;
+  hsv_color color = {0, 255, 255};
+  while(1){
+    color.h += 1;
+    color.h %= 256;
+    set_leds_color_hsv(color);
+    chThdSleepMilliseconds(50);
+  }
+}
+#endif
+
+static const SPIConfig spicfg = {
+  NULL,
+  GPIOB,
+  15,
+  SPI_CR1_BR_1|SPI_CR1_BR_0 // baudrate : fpclk / 8 => 1tick is 0.32us
+};
+
+/*
+ * Function used to initialize the driver.
+ *
+ * Starts by shutting off all the LEDs.
+ * Then gets access on the LED_SPI driver.
+ * May eventually launch an animation on the LEDs (e.g. a thread setting the
+ * txbuff values)
+ */
+void leds_init(void){
+  for(int i = 0; i < RESET_SIZE; i++)
+    txbuf[DATA_SIZE+i] = 0x00;
+  spiAcquireBus(&LEDS_SPI);              /* Acquire ownership of the bus.    */
+  spiStart(&LEDS_SPI, &spicfg);          /* Setup transfer parameters.       */
+  spiSelect(&LEDS_SPI);                  /* Slave Select assertion.          */
+  chThdCreateStatic(LEDS_THREAD_WA, sizeof(LEDS_THREAD_WA),NORMALPRIO, ledsThread, NULL);
+#if LED_SPIRAL
+  chThdCreateStatic(HSVTRANS_WA, sizeof(HSVTRANS_WA),
+      NORMALPRIO, hsv_transThread, NULL);
+#endif
+}
+
+/*
+ * As the trick here is to use the SPI to send a huge pattern of 0 and 1 to
+ * the ws2812b protocol, we use this helper function to translate bytes into
+ * 0s and 1s for the LED (with the appropriate timing).
+ */
+static uint8_t get_protocol_eq(uint8_t data, int pos){
+  uint8_t eq = 0;
+  if (data & (1 << (2*(3-pos))))
+    eq = 0b1110;
+  else
+    eq = 0b1000;
+  if (data & (2 << (2*(3-pos))))
+    eq += 0b11100000;
+  else
+    eq += 0b10000000;
+  return eq;
+}
+
+//
+///*
+// * If you want to set a LED's color in the RGB color space, simply call this
+// * function with a hsv_color containing the desired color and the index of the
+// * led on the LED strip (starting from 0, the first one being the closest the
+// * first plugged to the board)
+// *
+// * Only set the color of the LEDs through the functions given by this API
+// * (unless you really know what you are doing)
+// */
+void set_led_color_rgb(LED_TYPE color, int pos){
+  for(int j = 0; j < 4; j++)
+    txbuf[BYTES_FOR_LED*pos + j] = get_protocol_eq(color.g, j);
+  for(int j = 0; j < 4; j++)
+    txbuf[BYTES_FOR_LED*pos + BYTES_FOR_LED_BYTE+j] = get_protocol_eq(color.r, j);
+  for(int j = 0; j < 4; j++)
+    txbuf[BYTES_FOR_LED*pos + BYTES_FOR_LED_BYTE*2+j] = get_protocol_eq(color.b, j);
+}
+
+
+void WS2812_init(void) {
+ leds_init();
+}
+
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds) {
+ uint8_t i = 0;
+ while (i < number_of_leds) {
+   set_led_color_rgb(ledarray[i], i);
+   i++;
+ }
+}
+
+
+void set_leds_color_rgb(LED_TYPE color){
+ for(int i = 0; i < NB_LEDS; i++)
+   set_led_color_rgb(color, i);
+}
+
+
+void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds) {
+
+}
diff --git a/keyboards/cannonkeys/stm32f072/ws2812.h b/keyboards/cannonkeys/stm32f072/ws2812.h
new file mode 100644 (file)
index 0000000..3b61ddc
--- /dev/null
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "hal.h"
+#include "rgblight_types.h"
+
+
+void set_leds_color_rgb(LED_TYPE color);
+void set_led_color_rgb(LED_TYPE color, int pos);
+void leds_init(void);
+
+
+ // This is what users will use to interface with this
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
+void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
+
+
+void WS2812_init(void);
+void WS2812_set_color( uint8_t index, uint8_t red, uint8_t green, uint8_t blue );
+void WS2812_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
+void WS2812_send_colors(void);
index 11616cf55901b243f921843ed72a8721aca026a4..0edc697bf9f5f03942dbe801c7109c16c5f0503c 100644 (file)
@@ -15,7 +15,7 @@ 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 "chibios_test.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     {{KC_CAPS}}, // test with KC_CAPS, KC_A, RESET
diff --git a/keyboards/chimera_ortho/keymaps/dcompact/README.md b/keyboards/chimera_ortho/keymaps/dcompact/README.md
deleted file mode 100644 (file)
index 18c23d6..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# DCompact Layout
-
-**Dvorak, Layered, Mouse-Enabled, Compact -- Plover coming soon!?!~**
-
-_See [the layout source](keymap.c) for the actual layout_
-
-## Goals
-
-The following are the goals kept in mind when designing the DCompact
-layout:
-
-- Provide minimal travel distance when typing English or coding
-- Consistent muscle memory translation from standard QWERTY
-- Stateless typing experience
-- OS-agnostic features, macros, and key placement
-- Minimize dependence on mouse usage
-
-These are generally all met or balanced within reason. This layout is
-not intended at all to be a familiar layout for much of anyone (except
-maybe those who already type in Dvorak) -- this is meant to amplify the
-best parts of having limited, ortholinear keys with layering.
-
-## As Reference Material
-
-If you're reading this hoping to find reference material to implement
-your own layout, then please feel free to copy over this layout and
-make edits where you see fit. I removed a lot of the features I felt
-extraneous to my usage and simplified style where I felt needed. This
-would hopefully mean that my code should feel like a good base to
-develop from for those new to QMK.
-
-_Remember that settings defined in the layout directory override and
-merge with those in the keyboard folder_
-
-## Relevant Links
-
-- ![Online Dvorak Layout Trainer](https://learn.dvorak.nl/)
-- ![Dvorak Wikipedia Page](https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard)
-- ![QMK Docs](https://docs.qmk.fm/#/)
-- ![QMK KeyCode Reference](https://docs.qmk.fm/#/keycodes)
-
-## Contact
-
-Maintainer: [Dan](https://github.com/loksonarius)
-
diff --git a/keyboards/chimera_ortho/keymaps/dcompact/readme.md b/keyboards/chimera_ortho/keymaps/dcompact/readme.md
new file mode 100644 (file)
index 0000000..bf72567
--- /dev/null
@@ -0,0 +1,45 @@
+# DCompact Layout
+
+**Dvorak, Layered, Mouse-Enabled, Compact -- Plover coming soon!?!~**
+
+_See [the layout source](keymap.c) for the actual layout_
+
+## Goals
+
+The following are the goals kept in mind when designing the DCompact
+layout:
+
+- Provide minimal travel distance when typing English or coding
+- Consistent muscle memory translation from standard QWERTY
+- Stateless typing experience
+- OS-agnostic features, macros, and key placement
+- Minimize dependence on mouse usage
+
+These are generally all met or balanced within reason. This layout is
+not intended at all to be a familiar layout for much of anyone (except
+maybe those who already type in Dvorak) -- this is meant to amplify the
+best parts of having limited, ortholinear keys with layering.
+
+## As Reference Material
+
+If you're reading this hoping to find reference material to implement
+your own layout, then please feel free to copy over this layout and
+make edits where you see fit. I removed a lot of the features I felt
+extraneous to my usage and simplified style where I felt needed. This
+would hopefully mean that my code should feel like a good base to
+develop from for those new to QMK.
+
+_Remember that settings defined in the layout directory override and
+merge with those in the keyboard folder_
+
+## Relevant Links
+
+- [Online Dvorak Layout Trainer](https://learn.dvorak.nl/)
+- [Dvorak Wikipedia Page](https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard)
+- [QMK Docs](https://docs.qmk.fm/#/)
+- [QMK KeyCode Reference](https://docs.qmk.fm/#/keycodes)
+
+## Contact
+
+Maintainer: [Dan](https://github.com/loksonarius)
+
index 4553e621ddfa7ac2c0e45f88fdef8c4d7766fca0..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
-
-#endif
\ No newline at end of file
+// place overrides here
index 04bf9f4a9d323a2a130c0b6dacbc4cd9dce129ce..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
-// Add overrides here 
-#endif
+// place overrides here
index bdad1cacab17cb358ebd638e40e2cff922354a90..f71ac562766dfa03b90bf7619e3df17f7b88e77f 100644 (file)
@@ -1,7 +1,4 @@
 #include QMK_KEYBOARD_H
-#ifdef AUDIO_ENABLE
-  #include "audio.h"
-#endif
 
 extern keymap_config_t keymap_config;
 
index 152e2f1487597265f80eb1a0679c96488c6faa8c..dd48c69e36e2da38786818c26e32b69efc523f0e 100644 (file)
@@ -16,6 +16,4 @@
 
 #pragma once
 
-#include "config_common.h"
-
 // place overrides here
index 6b0cfb60b53cf48c6357dee48403b0d2ded2ea63..795adecd56e037bb98fc2ce8ac46cb027d4beca1 100644 (file)
  */
 //#define FORCE_NKRO
 
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
-       keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
 /*
  * Feature disable options
  *  These options are also useful to firmware size reduction.
index 7873cf5a72a3462bf2ebc2e489212b3e628fb968..ee02a94b7e1ab225f2e71ec3bf1f7c3d92016141 100644 (file)
@@ -18,14 +18,12 @@ 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
+#pragma once
+
+// place overrides here
 
-// #include "../../config.h"
 
 /* Use I2C or Serial */
 
 #define USE_I2C
 #define SSD1306OLED
-
-#endif
index a1635f2bab5fe955fc0f6d82545c4a425a995d54..d61ee2938e96f0eef4a9963faeab917bce983fa2 100644 (file)
@@ -1,7 +1,5 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "config_common.h"
 
 #ifdef AUDIO_ENABLE
     #define STARTUP_SONG SONG(PLANCK_SOUND)
@@ -25,7 +23,7 @@
 /* enable basic MIDI features:
    - MIDI notes can be sent when in Music mode is on
 */
-                                
+
 #define MIDI_BASIC
 
 /* enable advanced MIDI features:
@@ -38,5 +36,3 @@
 
 /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
 //#define MIDI_TONE_KEYCODE_OCTAVES 2
-
-#endif
\ No newline at end of file
diff --git a/keyboards/contra/keymaps/msiu/config.h b/keyboards/contra/keymaps/msiu/config.h
new file mode 100644 (file)
index 0000000..8757eb7
--- /dev/null
@@ -0,0 +1,37 @@
+#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
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * 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
diff --git a/keyboards/contra/keymaps/msiu/keymap.c b/keyboards/contra/keymaps/msiu/keymap.c
new file mode 100644 (file)
index 0000000..c68c2c7
--- /dev/null
@@ -0,0 +1,175 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _NUMB,
+  _FUNC,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  DVORAK,
+  LOWER,
+  RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  /* Qwerty
+   * ,------------------------------------------------------------------------------------------.
+   * | Tab / Numb  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+   * |-------------+------+------+------+------+-------------+------+------+------+------+------|
+   * | Esc / Ctrl  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  '   |
+   * |-------------+------+------+------+------+------|------+------+------+------+------+------|
+   * | Shift       |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+   * |-------------+------+------+------+------+------+------+------+------+------+------+------|
+   * | Ctrl        |Hyper | Alt  | GUI  |Lower | Func |Space |Raise | Left | Down |  Up  |Right |
+   * `------------------------------------------------------------------------------------------'
+   */
+  [_QWERTY] = LAYOUT_ortho_4x12(
+    LT(_NUMB, KC_TAB),   KC_Q,    KC_W,    KC_E,    KC_R,  KC_T,      KC_Y,   KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC,
+    LCTL_T(KC_ESC),      KC_A,    KC_S,    KC_D,    KC_F,  KC_G,      KC_H,   KC_J,  KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT,             KC_Z,    KC_X,    KC_C,    KC_V,  KC_B,      KC_N,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+    KC_LCTL,             KC_HYPR, KC_LALT, KC_LGUI, LOWER, MO(_FUNC), KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+  ),
+
+  /* Dvorak
+   * ,-----------------------------------------------------------------------------------.
+   * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+   * |------+------+------+------+------+-------------+------+------+------+------+------|
+   * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+   * |------+------+------+------+------+------|------+------+------+------+------+------|
+   * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+   * |------+------+------+------+------+------+------+------+------+------+------+------|
+   * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+   * `-----------------------------------------------------------------------------------'
+   */
+  [_DVORAK] = LAYOUT_ortho_4x12(
+    _______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,     KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______,
+    _______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,     KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
+    _______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,     KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______,
+    _______, _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+  ),
+
+  /* Lower
+   * ,-----------------------------------------------------------------------------------.
+   * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+   * |------+------+------+------+------+-------------+------+------+------+------+------|
+   * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+   * |------+------+------+------+------+------|------+------+------+------+------+------|
+   * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home | End  |      |
+   * |------+------+------+------+------+------+------+------+------+------+------+------|
+   * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+   * `-----------------------------------------------------------------------------------'
+   */
+  [_LOWER] = LAYOUT_ortho_4x12(
+    KC_TILD, KC_EXLM,  KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+    _______, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+    _______, KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
+    _______, _______,  _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+  ),
+
+  /* Raise
+   * ,-----------------------------------------------------------------------------------.
+   * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+   * |------+------+------+------+------+-------------+------+------+------+------+------|
+   * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+   * |------+------+------+------+------+------|------+------+------+------+------+------|
+   * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Up |Pg Dn |      |
+   * |------+------+------+------+------+------+------+------+------+------+------+------|
+   * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+   * `-----------------------------------------------------------------------------------'
+   */
+  [_RAISE] = LAYOUT_ortho_4x12(
+    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_4,    KC_5,    KC_6,   KC_PLUS, KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+    _______, KC_7,    KC_8,    KC_9,   KC_MINS, KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
+    _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+  ),
+
+  /* Adjust (Lower + Raise)
+   * ,-----------------------------------------------------------------------------------.
+   * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+   * |------+------+------+------+------+-------------+------+------+------+------+------|
+   * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
+   * |------+------+------+------+------+------|------+------+------+------+------+------|
+   * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+   * |------+------+------+------+------+------+------+------+------+------+------+------|
+   * |      |      |      |      |      |             |      |      |      |      |      |
+   * `-----------------------------------------------------------------------------------'
+   */
+  [_ADJUST] = LAYOUT_ortho_4x12(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, QWERTY,  DVORAK,  _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET
+  ),
+
+  [_FUNC] = LAYOUT_ortho_4x12(
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, KC_PSCR, _______,
+    _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+  ),
+
+  [_NUMB] = LAYOUT_ortho_4x12(
+    _______, _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, KC_BSPC,
+    _______, _______, _______, _______, _______, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, KC_1,    KC_2,    KC_3,    _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    _______, _______, _______
+  )
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        // print("mode just switched to qwerty and this is a huge string\n");
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/contra/keymaps/msiu/readme.md b/keyboards/contra/keymaps/msiu/readme.md
new file mode 100644 (file)
index 0000000..80aba10
--- /dev/null
@@ -0,0 +1,2 @@
+# The Default Contra Layout
+
diff --git a/keyboards/converter/numeric_keypad_IIe/config.h b/keyboards/converter/numeric_keypad_IIe/config.h
new file mode 100644 (file)
index 0000000..8cf0eaa
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+Copyright 2019 Adam Newbold <adam@neatnik.net>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Apple Inc.
+#define PRODUCT         Numeric Keypad IIe
+#define DESCRIPTION     "Numeric Keypad IIe, A2M2003"
+
+/*
+
+Pin Mappings
+============
+
+Dsub-15 Connection
+------------------
+
+          Dsub-15 (female)
+    ,-------------------------.
+    \ 08 07 06 05 04 03 02 01 /
+     \ 15 14 13 12 11 10 09  /
+      `---------------------'
+
+Header Pins
+-----------
+ _____________________________________
+|                                     |
+|  11  10  9  8  7  6  5  4  3  2  1  |
+|_____________________________________|
+
+
+Header / Matrix
+---------------
+
+Pin             Name        Description                                
+--------------------------------------------------------------
+1,2,5,3,4,6     Y0-Y5       Y-direction key-matrix connections
+7               NC                                          
+9,11,10,8       X4-X7       X-direction key-matrix connections
+
+
+Microcontroller Configuration
+-----------------------------
+
+(Pins are for an Arduino Micro)
+
++-----------------------------------+
+| Dsub-15 | Header | Matrix | Micro |
+|---------+--------+--------+-------|
+|   12    |   11   |   X5   |   B0  |
+|   11    |   10   |   X6   |   D3  |
+|   10    |    9   |   X4   |   B2  |
+|    9    |    8   |   X7   |   D2  |
+|   NC    |    7   |   NC   |   --  |
+|    7    |    6   |   Y5   |   E6  |
+|    6    |    5   |   Y2   |   D4  |
+|    5    |    4   |   Y4   |   D7  |
+|    3    |    3   |   Y3   |   C6  |
+|    2    |    2   |   Y1   |   D0  |
+|    1    |    1   |   Y0   |   D1  |
++-----------------------------------+
+
+Note: Dsub-15 pins 4, 8, 13, 14, and 15 are unused
+
+Reference
+---------
+
+https://deskthority.net/wiki/Apple_Numeric_Keypad_IIe
+https://geekhack.org/index.php?topic=78048.0
+http://wiki.apple2.org/index.php?title=Pinouts#Apple_.2F.2Fe_Numeric_Keypad_connector
+
+*/
+
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 6
+#define MATRIX_ROW_PINS { B0, B2, D2, D3 }
+#define MATRIX_COL_PINS { D1, D0, D4, C6, D7, E6 }
+#define UNUSED_PINS
+#define DIODE_DIRECTION COL2ROW
+#define SOFT_SERIAL_PIN D0
+#define DEBOUNCING_DELAY 5
diff --git a/keyboards/converter/numeric_keypad_IIe/info.json b/keyboards/converter/numeric_keypad_IIe/info.json
new file mode 100644 (file)
index 0000000..f199069
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "keyboard_name": "Numeric Keypad IIe", 
+    "url": "", 
+    "maintainer": "qmk", 
+    "width": 7.5, 
+    "height": 4, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"7", "x":2, "y":0}, {"label":"8", "x":3, "y":0}, {"label":"9", "x":4, "y":0}, {"label":"(", "x":5.5, "y":0}, {"label":")", "x":6.5, "y":0}, {"label":"\u2190", "x":0, "y":1}, {"label":"4", "x":2, "y":1}, {"label":"5", "x":3, "y":1}, {"label":"6", "x":4, "y":1}, {"label":"\u2212", "x":5.5, "y":1}, {"label":"\u00f7", "x":6.5, "y":1}, {"label":"\u2192", "x":0, "y":2}, {"label":"1", "x":2, "y":2}, {"label":"2", "x":3, "y":2}, {"label":"3", "x":4, "y":2}, {"label":"+", "x":5.5, "y":2}, {"label":"\u00d7", "x":6.5, "y":2}, {"label":"Space", "x":0, "y":3}, {"label":"0", "x":1.5, "y":3, "w":1.5}, {"label":",", "x":3, "y":3}, {"label":".", "x":4, "y":3}, {"label":"Ret", "x":5.5, "y":3}, {"label":"Print", "x":6.5, "y":3}]
+        }
+    }
+}
diff --git a/keyboards/converter/numeric_keypad_IIe/keymaps/default/config.h b/keyboards/converter/numeric_keypad_IIe/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..6676689
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Adam Newbold <adam@neatnik.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/converter/numeric_keypad_IIe/keymaps/default/keymap.c b/keyboards/converter/numeric_keypad_IIe/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..a8f4553
--- /dev/null
@@ -0,0 +1,62 @@
+/* Copyright 2019 Adam Newbold <adam@neatnik.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  QMKBEST = SAFE_RANGE,
+  QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ +-------+     +-------+-------+-------+  +-------+-------+
+ |  Esc  |     |  7    |  8    |  9    |  |  (    |  )    |
+ +-------+     +-------+-------+-------+  +-------+-------+
+ |  <--  |     |  4    |  5    |  6    |  |  -    |  /    |
+ +-------+     +-------+-------+-------+  +-------+-------+
+ |  -->  |     |  1    |  2    |  3    |  |  +    |  *    |
+ +-------+  +--+-------+-------+-------+  +-------+-------+
+ | Space |  |  0       |  ,    |  .    |  |  Ret  | Print |
+ +-------+  +----------+-------+-------+  +-------+-------+
+*/
+  [0] = LAYOUT(
+    KC_ESCAPE,  KC_KP_7,  KC_KP_8,      KC_KP_9,    KC_LEFT_PAREN,  KC_RIGHT_PAREN, \
+    KC_LEFT,    KC_KP_4,  KC_KP_5,      KC_KP_6,    KC_KP_MINUS,    KC_KP_SLASH, \
+    KC_RIGHT,   KC_KP_1,  KC_KP_2,      KC_KP_3,    KC_KP_PLUS,     KC_KP_ASTERISK, \
+    KC_SPACE,   KC_KP_0,  KC_KP_COMMA,  KC_KP_DOT,  KC_RETURN,      KC_QUESTION  \
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void keyboard_post_init_user(void) {
+
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/converter/numeric_keypad_IIe/keymaps/default/readme.md b/keyboards/converter/numeric_keypad_IIe/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..c58b09d
--- /dev/null
@@ -0,0 +1,3 @@
+# Numeric Keypad //e Default Keymap
+
+All keys perform their default functions displayed on the stock keycaps. Note that the "Print" key presses a question mark (?), which was the default behavior on the Apple //e (with ? the shorthand for the AppleSoft BASIC PRINT command).
diff --git a/keyboards/converter/numeric_keypad_IIe/keymaps/newbold/config.h b/keyboards/converter/numeric_keypad_IIe/keymaps/newbold/config.h
new file mode 100644 (file)
index 0000000..6676689
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Adam Newbold <adam@neatnik.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/converter/numeric_keypad_IIe/keymaps/newbold/keymap.c b/keyboards/converter/numeric_keypad_IIe/keymaps/newbold/keymap.c
new file mode 100644 (file)
index 0000000..e0f0455
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright 2019 Adam Newbold <adam@neatnik.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  QMKBEST = SAFE_RANGE,
+  QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ +-------+     +-------+-------+-------+  +-------+-------+
+ |  Esc  |     |  7    |  8    |  9    |  |  (    |  )    |
+ +-------+     +-------+-------+-------+  +-------+-------+
+ |  <--  |     |  4    |  5    |  6    |  |  -    |  /    |
+ +-------+     +-------+-------+-------+  +-------+-------+
+ |  -->  |     |  1    |  2    |  3    |  |  +    |  *    |
+ +-------+  +--+-------+-------+-------+  +-------+-------+
+ | Space |  |  0       |  ,    |  .    |  |  Ret  | Print |
+ +-------+  +----------+-------+-------+  +-------+-------+
+*/
+  [0] = LAYOUT(
+    KC__MUTE,     KC_KP_7,  KC_KP_8,      KC_KP_9,    KC_LEFT_PAREN,  KC_RIGHT_PAREN, \
+    KC__VOLDOWN,  KC_KP_4,  KC_KP_5,      KC_KP_6,    KC_KP_MINUS,    KC_KP_SLASH, \
+    KC__VOLUP,    KC_KP_1,  KC_KP_2,      KC_KP_3,    KC_KP_PLUS,     KC_KP_ASTERISK, \
+    MO(1),        KC_KP_0,  KC_KP_COMMA,  KC_KP_DOT,  KC_RETURN,      KC_QUESTION  \
+  ),
+  [1] = LAYOUT(
+    KC_TRNS,      KC_TRNS,  KC_TRNS,      KC_TRNS,    KC_TRNS,        KC_TRNS, \
+    KC_BRMD,      KC_TRNS,  KC_TRNS,      KC_TRNS,    KC_TRNS,        KC_TRNS, \
+    KC_BRMU,      KC_TRNS,  KC_TRNS,      KC_TRNS,    KC_TRNS,        KC_TRNS, \
+    KC_TRNS,      KC_TRNS,  KC_TRNS,      KC_TRNS,    KC_TRNS,        RESET  \
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void keyboard_post_init_user(void) {
+
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/converter/numeric_keypad_IIe/keymaps/newbold/readme.md b/keyboards/converter/numeric_keypad_IIe/keymaps/newbold/readme.md
new file mode 100644 (file)
index 0000000..0bccfdb
--- /dev/null
@@ -0,0 +1,28 @@
+# @newbold's layout for the Numeric Keypad IIe
+
+Includes the standard layout for all keys except for the left-most column, which is remapped to these keys:
+
+ +-----------------+
+ |       Mute      |
+ +-----------------+
+ |   Volume Down   |
+ +-----------------+
+ |    Volume Up    |
+ +-----------------+
+ |     Function    |
+ +-----------------+
+ With Function held down:
+ +-----------------+
+ |       Mute      |
+ +-----------------+
+ | Brightness Down |
+ +-----------------+
+ |  Brightness Up  |
+ +-----------------+
+ |     Function    |
+ +-----------------+
+ And also with Function held down, "Print" (the lower right key) will trigger RESET (putting the controller into bootloader mode so it can be flashed).
\ No newline at end of file
diff --git a/keyboards/converter/numeric_keypad_IIe/numeric_keypad_IIe.c b/keyboards/converter/numeric_keypad_IIe/numeric_keypad_IIe.c
new file mode 100644 (file)
index 0000000..c29d85d
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Adam Newbold <adam@neatnik.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "numeric_keypad_IIe.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/converter/numeric_keypad_IIe/numeric_keypad_IIe.h b/keyboards/converter/numeric_keypad_IIe/numeric_keypad_IIe.h
new file mode 100644 (file)
index 0000000..8892b55
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright Adam Newbold <adam@neatnik.net>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+#include "quantum.h"
+
+#define LAYOUT( \
+    K_ESC,   K_7, K_8,     K_9,   K_LEFT_PARENS, K_RIGHT_PARENS, \
+    K_LEFT,  K_4, K_5,     K_6,   K_MINUS,       K_DIVIDE,       \
+    K_RIGHT, K_1, K_2,     K_3,   K_PLUS,        K_MULTIPLY,     \
+    K_SPACE, K_0, K_COMMA, K_DOT, K_RETURN,      K_PRINT         \
+){ \
+    { K_RIGHT_PARENS, K_ESC,   K_4,           K_5,     K_6,      K_7     },\
+    { K_DIVIDE,       K_LEFT,  K_0,           K_1,     K_2,      K_3     },\
+    { K_PRINT,        K_SPACE, K_LEFT_PARENS, K_MINUS, K_RETURN, K_COMMA },\
+    { K_MULTIPLY,     K_RIGHT, K_8,           K_9,     K_DOT,    K_PLUS  },\
+}
diff --git a/keyboards/converter/numeric_keypad_IIe/readme.md b/keyboards/converter/numeric_keypad_IIe/readme.md
new file mode 100644 (file)
index 0000000..9eba416
--- /dev/null
@@ -0,0 +1,16 @@
+# Numeric Keypad IIe
+
+![Numeric Keypad IIe](https://upload.wikimedia.org/wikipedia/commons/3/3b/Apple_Numeric_Keypad_IIe.jpg)
+
+This is a conversion project for the Numeric Keypad IIe, model A2M2003. This was an external keypad that connected to the Apple //e's motherboard (and as such, it lacked any kind of onboard controller).
+
+The reference conversion setup uses the keyboard's DB15 (VGA) fixed cable connected to a DB15 wiring terminal with breakout board ([this one](https://www.amazon.com/gp/product/B07437293Y/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1), specifically) and wired to an [Arduino Micro](https://store.arduino.cc/usa/arduino-micro).
+
+Keyboard Maintainer: [Adam Newbold](https://github.com/newbold)  
+Hardware Supported: Internal Numeric Keypad IIe PCB (Apple part 820.0081.c), ATmega32U4 microcontroller
+
+Make example for this keyboard (after setting up your build environment):
+
+    make converter/numeric_keypad_IIe: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/converter/numeric_keypad_IIe/rules.mk b/keyboards/converter/numeric_keypad_IIe/rules.mk
new file mode 100644 (file)
index 0000000..f61a7d4
--- /dev/null
@@ -0,0 +1,76 @@
+# 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
+
+# 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 fba107c7cbacf716cec60bcf6d5db6b967e9e565..6f381aabf405cffedeeb3d16df21df290b99891a 100644 (file)
@@ -98,6 +98,7 @@ extern "C"
         kbd2.SetReportParser(0, (HIDReportParser*)&kbd_parser2);
         kbd3.SetReportParser(0, (HIDReportParser*)&kbd_parser3);
         kbd4.SetReportParser(0, (HIDReportParser*)&kbd_parser4);
+        matrix_init_quantum();
     }
 
     static void or_report(report_keyboard_t report) {
@@ -115,6 +116,24 @@ extern "C"
         }
     }
 
+    __attribute__ ((weak))
+    void matrix_init_kb(void) {
+        matrix_init_user();
+    }
+
+    __attribute__ ((weak))
+    void matrix_init_user(void) {
+    }
+
+    __attribute__ ((weak))
+    void matrix_scan_kb(void) {
+        matrix_scan_user();
+    }
+
+    __attribute__ ((weak))
+    void matrix_scan_user(void) {
+    }
+
     uint8_t matrix_scan(void) {
         static uint16_t last_time_stamp1 = 0;
         static uint16_t last_time_stamp2 = 0;
@@ -169,6 +188,7 @@ extern "C"
                 keyboard_set_leds(host_keyboard_leds());
             }
         }
+        matrix_scan_quantum();
         return 1;
     }
 
index 7fa3bf328ec94721cdc1626374db562e84209b63..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
-
-#endif
+// place overrides here
index f782349b07c941c80a5d676c4550e1d5296f6c98..345e96996242d45e164df6009647f0fb14a16865 100644 (file)
@@ -1,10 +1,6 @@
 #include QMK_KEYBOARD_H
 #include "led.h"
 
-#ifdef RGBLIGHT_ENABLE
-#include "rgblight.h"
-#endif
-
 // Each layer gets a name for readability, which is then used in the keymap matrix below.
 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 // Layer names don't all need to be of the same length, obviously, and you can also skip them
index 0a9ff24ff8bec2eb3a10e8a66b90306a9c71d55e..91f0ebfa2700e290470ee95ad259f62d4b23af07 100644 (file)
@@ -187,10 +187,10 @@ const char* read_modifier_state(void) {
   uint8_t one_shot = get_oneshot_mods();
 
   snprintf(modifier_state_str, sizeof(modifier_state_str), "Mods:%s %s %s %s",
-    (modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) ? "CTL" : "   ",
-    (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK) ? "GUI" : "   ",
-    (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) ? "ALT" : "   ",
-    (modifiers & MODS_SHIFT_MASK || one_shot & MODS_SHIFT_MASK) ? "SFT" : "   "
+    (modifiers & MOD_MASK_CTRL || one_shot & MOD_MASK_CTRL) ? "CTL" : "   ",
+    (modifiers & MOD_MASK_GUI || one_shot & MOD_MASK_GUI) ? "GUI" : "   ",
+    (modifiers & MOD_MASK_ALT || one_shot & MOD_MASK_ALT) ? "ALT" : "   ",
+    (modifiers & MOD_MASK_SHIFT || one_shot & MOD_MASK_SHIFT) ? "SFT" : "   "
   );
 
   return modifier_state_str;
@@ -252,7 +252,7 @@ void matrix_render_user(struct CharacterMatrix *matrix) {
     // 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(matrix, read_host_led_state());
+    // matrix_write(matrix, read_host_led_state());
     //matrix_write_ln(matrix, read_timelog());
   } else {
     matrix_write(matrix, read_logo());
index 4b70f66f7bb226f485c1f15a533a2902de7929cb..540534978c9176764c694681fef9196b7aade205 100644 (file)
@@ -24,8 +24,8 @@ BOOTLOADER = qmk-dfu
 
 # If you want to change the display of OLED, you need to change here
 SRC +=  ./lib/glcdfont.c \
-        ./lib/rgb_state_reader.c \
         ./lib/logo_reader.c \
+        # ./lib/rgb_state_reader.c \
         # ./lib/keylogger.c \
         # ./lib/host_led_state_reader.c \
         # ./lib/mode_icon_reader.c \
index 515591a4292f203ac451dac0e02e52a70cb93a7d..b8662aca092da35cd6b268e5e6e330ee01cbe7db 100644 (file)
@@ -3,15 +3,16 @@
 
 /* Select hand configuration */
 
-#define MASTER_LEFT
-// #define MASTER_RIGHT
+// #define MASTER_LEFT
+#define MASTER_RIGHT
 // #define EE_HANDS
 
 #define SSD1306OLED
 #define SWAP_SCLN
 
 // #define TAPPING_FORCE_HOLD
-#define TAPPING_TERM 120
+#define TAPPING_TERM 300
+#define IGNORE_MOD_TAP_INTERRUPT
 
 #undef RGBLED_NUM
 #define RGBLIGHT_EFFECT_STATIC_GRADIENT
index ae2f710a03a09779b89c0c2047e1b030f4cb15f5..32001f22daad0b2186d3e6490de6e7246eac0ddb 100644 (file)
 
 #define KC_ KC_TRNS
 
-#define KC_TMB1 LGUI_T(KC_TAB)
-#define KC_TMB2 LSFT_T(KC_SPC)
+#define KC_TMB1 KC_LA(TAB)
+#define KC_TMB2 KC_LS(SPC)
 #define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
 #define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
-#define KC_TMB5 RCTL_T(KC_BSPC)
-#define KC_TMB6 RALT_T(KC_ENT)
-#define KC_TMB7 KC_DEL
-#define KC_TMB8 RALT(KC_ENT)
-#define KC_TMB9 LGUI(KC_TAB)
-
-#define KC_RST  RESET
-#define KC_DBUG DEBUG
-#define KC_RTOG RGB_TOG
-#define KC_EDJP EDVORAK
-#define KC_QWER QWERTY
+#define KC_TMB5 KC_RC(BSPC)
+#define KC_TMB6 KC_RG(ENT)
+#define KC_TMB7 KC_RC(DEL)
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_EDVORAK] = LAYOUT_kc(
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-     ESC ,QUOT,COMM,DOT , Y  , P  ,             F  , G  , R  , W  , Q  ,BSLS,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-     EQL , A  , O  , E  , I  , U  ,             D  , T  , N  , S  , M  ,MINS,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-     GRV ,SCLN, X  , C  , V  , Z  ,             B  , H  , J  , K  , L  ,SLSH,
-  //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
-                         TMB1,TMB2,TMB3,  TMB4,TMB5,TMB6
-  //                    `----+----+----' `----+----+----'
-  ),
-
-  [_EDVORAKJ1] = LAYOUT_kc(
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         , AI , OU , EI ,    ,    ,                ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                ,    ,    , Y  ,    ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,                ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
-                             ,    ,    ,      ,    ,
-  //                    `----+----+----' `----+----+----'
-  ),
-
-  [_EDVORAKJ2] = LAYOUT_kc(
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         , AI , OU , EI ,    ,    ,                ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                , Y  ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,                ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
-                             ,    ,    ,      ,    ,
-  //                    `----+----+----' `----+----+----'
-  ),
-
-  [_QWERTY] = LAYOUT_kc(
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-     TAB , Q  , W  , E  , R  , T  ,             Y  , U  , I  , O  , P  ,MINS,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-     EQL , A  , S  , D  , F  , G  ,             H  , J  , K  , L  ,SCLN,QUOT,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-     GRV , Z  , X  , C  , V  , B  ,             N  , M  ,COMM,DOT ,SLSH,BSLS,
-  //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
-                             ,    ,    ,      ,    ,
-  //                    `----+----+----' `----+----+----'
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     GRV ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     ESC ,SCLN,  X  ,  C  ,  V  , Z  ,             H  ,  J  ,  K  ,  L  , B  ,SLSH,
+  //`----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----'
+                           TMB1 ,TMB2,TMB3,  TMB4,TMB5,TMB6
+  //                      `-----+----+----' `----+----+-----'
   ),
 
   [_LOWER] = LAYOUT_kc(
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    , 2  , 3  , 4  , 5  ,             6  , 7  , 8  , 9  ,    ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         , 1  ,EXLM, AT ,HASH,DLR ,            PERC,CIRC,AMPR,ASTR, 0  ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    , LT ,LCBR,LPRN,LBRC,            RBRC,RPRN,RCBR, GT ,    ,    ,
-  //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
-                             ,    ,    ,      ,TMB7,TMB8
-  //                    `----+----+----' `----+----+----'
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+     PSCR,    , HOME , PGDN , PGUP ,END ,            LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
+  //`----+----+------+------+------+----+----| |----+----+------+------+-------+----+----'
+                                   ,    , NO ,  MAC ,TMB7,
+  //                         `-----+----+----' `----+----+-----'
   ),
 
   [_RAISE] = LAYOUT_kc(
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         , F1 , F2 , F3 , F4 , F5 ,             F6 , F7 , F8 , F9 ,F10 ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,F11 ,F12 ,PSCR,SLCK,PAUS,                ,HOME,PGDN,PGUP,END ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                ,LEFT,DOWN, UP ,RGHT,    ,
-  //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
-                         TMB9,    ,    ,      ,    ,
-  //                    `----+----+----' `----+----+----'
-  ),
-
-  [_ADJUST] = LAYOUT_kc(
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    ,    ,   ,EXTOFF,   ,                ,EXTON,   ,    ,    ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    ,    ,QWER,WIN ,RST ,            RTOG,MAC ,EDJP,    ,    ,    ,
-  //|----+----+----+----+----+----|           |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
-                             ,    ,    ,      ,    ,
-  //                    `----+----+----' `----+----+----'
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     PSCR,    ,HOME ,PGDN ,PGUP ,END ,            LEFT,DOWN , UP  ,RGHT ,    ,    ,
+  //`----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----'
+                                ,    ,WIN ,   NO ,    ,
+  //                      `-----+----+----' `----+----+----'
   )
 };
 
 #ifdef SSD1306OLED
 void matrix_init_keymap(void) {
   //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
-  iota_gfx_init(!has_usb());   // turns on the display
+#ifdef MASTER_RIGHT
+  iota_gfx_init(has_usb()); // turns on the display
+#else
+  iota_gfx_init(!has_usb());
+#endif // MASTER_RIGHT
 }
 
 void matrix_scan_user(void) {
@@ -134,23 +82,15 @@ void matrix_scan_user(void) {
 uint32_t layer_state_set_keymap(uint32_t state) {
   rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
   switch (biton32(state)) {
-    case _EDVORAKJ1:
-    case _EDVORAKJ2:
-      // _EDVORAKJ1 & J2 are same colored
-      rgblight_sethsv_noeeprom_white();
-      break;
     case _LOWER:
       rgblight_sethsv_noeeprom_red();
       break;
     case _RAISE:
-      rgblight_sethsv_noeeprom_blue();
-      break;
-    case _ADJUST:
       rgblight_sethsv_noeeprom_green();
       break;
-    default: //  for any other layers, or the default layer
-      rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
-      rgblight_sethsv_noeeprom_red();
+    default: // for any other layers, or the default layer
+      rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
+      rgblight_sethsv_red();
       break;
   }
   return state;
index e4cccf3e7f837b96dd2b394dae9b41d0040aa304..cbb43d06156d96fb0fc05c03934795f0d75cb36b 100644 (file)
@@ -21,11 +21,7 @@ const char *read_layer_state(void) {
 
   switch (biton32(layer_state)) {
     case L_BASE:
-      strcpy(layer_name, default_layer_state == 1UL<<_EDVORAK ? "EDVORAK" : "QWERTY");
-      break;
-    case _EDVORAKJ1:
-    case _EDVORAKJ2:
-      strcpy(layer_name, "JP_EXT");
+      strcpy(layer_name, "Default");
       break;
     case _RAISE:
       strcpy(layer_name, "Raise");
@@ -33,9 +29,6 @@ const char *read_layer_state(void) {
     case _LOWER:
       strcpy(layer_name, "Lower");
       break;
-    case _ADJUST:
-      strcpy(layer_name, "Adjust");
-      break;
     default:
       snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
   }
@@ -49,10 +42,7 @@ const char *read_layer_state(void) {
 
 const char *read_host_led_state(void) {
   static char led_str[24];
-  bool ext_status = get_enable_jp_extra_layer() && get_japanese_mode();
-  strcpy(led_str, ext_status ? "EXT" : "   ");
-
-  strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? " NMLK" : "     ");
+  strcpy(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : "    ");
   strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : "    ");
   strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : "     ");
   return led_str;
@@ -70,7 +60,11 @@ void iota_gfx_task_user(void) {
   struct CharacterMatrix matrix;
 
   matrix_clear(&matrix);
+#ifdef MASTER_RIGHT
+  if (!is_master) {
+#else
   if (is_master) {
+#endif // MASTER_RIGHT
     matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
     matrix_write(&matrix, " ");
     matrix_write(&matrix, read_layer_state());
diff --git a/keyboards/crkbd/keymaps/jarred/config.h b/keyboards/crkbd/keymaps/jarred/config.h
new file mode 100644 (file)
index 0000000..ac4c1cc
--- /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 100
+
+#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/jarred/keymap.c b/keyboards/crkbd/keymaps/jarred/keymap.c
new file mode 100644 (file)
index 0000000..f00a735
--- /dev/null
@@ -0,0 +1,182 @@
+#include QMK_KEYBOARD_H
+#include "jarred.h"
+
+#ifdef PROTOCOL_LUFA
+  #include "lufa.h"
+  #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+  #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+extern uint8_t is_master;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+#define LAYOUT_crkbd_base( \
+    K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
+    K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+    K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+                   K31, K32, K33, K34, K35, K36 \
+  )
+
+#define LAYOUT_crkbd_wrapper(...) LAYOUT(__VA_ARGS__)
+
+#define QWERTY_4_CRKBD KC_LCTL, MO(_LW), KC_SPC, KC_ENT, MO(_LW), KC_RALT
+
+#define BLANK_4_CRKBD  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QW] = LAYOUT_crkbd_wrapper(
+    QWERTY_1_12,
+    QWERTY_2_12,
+    QWERTY_3_12,
+    QWERTY_4_DOX
+  ),
+  
+  [_LW] = LAYOUT_crkbd_wrapper(
+    LOWER_1_12,
+    LOWER_2_12,
+    LOWER_3_12,
+    LOWER_4_DOX
+  ),
+  
+  [_NV] = LAYOUT_crkbd_wrapper(
+    NAV_1_12,
+    NAV_2_12,
+    NAV_3_12,
+    NAV_4_DOX
+  ),
+  
+  [_NP] = LAYOUT_crkbd_wrapper(
+    NUMPAD_1_12,
+    NUMPAD_2_12,
+    NUMPAD_3_12,
+    NUMPAD_4_DOX
+  ),
+  
+  [_MS] = LAYOUT_crkbd_wrapper(
+    MOUSE_1_12,
+    MOUSE_2_12,
+    MOUSE_3_12,
+    MOUSE_4_DOX
+  )
+};
+
+void matrix_init_user(void) {
+    //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_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+char matrix_line_str[24];
+
+const char *read_layer_state(void) {
+  uint8_t layer = biton32(layer_state);
+  
+  strcpy(matrix_line_str, "Layer: ");
+  
+  switch (layer)
+  {
+    case _QW:
+      strcat(matrix_line_str, "Default");
+      break;
+    case _LW:
+      strcat(matrix_line_str, "Lower");
+      break;
+    case _NV:
+      strcat(matrix_line_str, "Navigation");
+      break;
+    case _NP:
+      strcat(matrix_line_str, "Adjust");
+      break;
+    case _MS:
+      strcat(matrix_line_str, "Mouse");
+      break;
+    default:
+      sprintf(matrix_line_str + strlen(matrix_line_str), "Unknown (%d)", layer);
+  }
+
+  return matrix_line_str;
+}
+
+const char *read_usb_state(void) {
+  
+  strcpy(matrix_line_str, "USB  : ");
+  
+  switch (USB_DeviceState) {
+    case DEVICE_STATE_Unattached:
+      strcat(matrix_line_str, "Unattached");
+      break;
+    case DEVICE_STATE_Suspended:
+      strcat(matrix_line_str, "Suspended");
+      break;
+    case DEVICE_STATE_Configured:
+      strcat(matrix_line_str, "Connected");
+      break;
+    case DEVICE_STATE_Powered:
+      strcat(matrix_line_str, "Powered");
+      break;
+    case DEVICE_STATE_Default:
+      strcat(matrix_line_str, "Default");
+      break;
+    case DEVICE_STATE_Addressed:
+      strcat(matrix_line_str, "Addressed");
+      break;
+    default:
+      strcat(matrix_line_str, "Invalid");
+  }
+
+  return matrix_line_str;
+}
+
+void matrix_scan_user(void) {
+   iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+  if (is_master) {
+    matrix_write_ln(matrix, read_layer_state());
+    matrix_write_ln(matrix, read_usb_state());
+    matrix_write_ln(matrix, read_keylogs());
+  } 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_keymap(uint16_t keycode, keyrecord_t *record) {
+  if (record->event.pressed) {
+    set_keylog(keycode, record);
+  }
+
+  return true;
+}
diff --git a/keyboards/crkbd/keymaps/jarred/readme.md b/keyboards/crkbd/keymaps/jarred/readme.md
new file mode 100644 (file)
index 0000000..15e355b
--- /dev/null
@@ -0,0 +1,9 @@
+# Jarred's CRKBD Layout
+
+Check out [user space readme](../../../../users/jarred/readme.md) for more info
+
+# Build
+
+```
+make crkbd:jarred:avrdude
+```
diff --git a/keyboards/crkbd/keymaps/jarred/rules.mk b/keyboards/crkbd/keymaps/jarred/rules.mk
new file mode 100644 (file)
index 0000000..ab6329f
--- /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/logo_reader.c \
+        ./lib/keylogger.c \
+        #./lib/layer_state_reader.c \
+        # ./lib/mode_icon_reader.c \
+        # ./lib/host_led_state_reader.c \
+        # ./lib/timelogger.c \
diff --git a/keyboards/crkbd/keymaps/thefrey/README.md b/keyboards/crkbd/keymaps/thefrey/README.md
new file mode 100644 (file)
index 0000000..69b20cf
--- /dev/null
@@ -0,0 +1,16 @@
+![the-frey-layout](https://raw.githubusercontent.com/the-frey/the-frey.github.com/master/assets/images/keyboard-layout.jpg)
+
+# Keyboard layout by the-frey
+
+This is a layout that allows access to all the paren keys easily, has a tab on the lower layer (for SUPER-TAB app switching) and some utility features like PGUP/PGDOWN and HOME/END.
+
+In addition, the arrows are on the lower layer and are bound to the vim keys (h,j,k,l). I've found this a productive layout for programming in emacs and hopefully you will too. 
+
+The layout image above shows the keymap, with each key marked with all three layers:
+
+- The top indicates the raise layer
+- The middle indicates the default layer
+- The bottom indicates the lower layer
+
+All the keys respond as you'd expect to the 'shift' key - i.e. on a UK/GB keyboard, `/` becomes `?` and so on.
+
diff --git a/keyboards/crkbd/keymaps/thefrey/config.h b/keyboards/crkbd/keymaps/thefrey/config.h
new file mode 100644 (file)
index 0000000..cee901f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+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
+#define FORCE_NKRO
+
+/* 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 100
+
+#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/thefrey/keymap.c b/keyboards/crkbd/keymaps/thefrey/keymap.c
new file mode 100644 (file)
index 0000000..5077bfc
--- /dev/null
@@ -0,0 +1,244 @@
+#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.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  LOWER,
+  RAISE,
+  ADJUST,
+  BACKLIT,
+  RGBRST
+};
+
+enum macro_keycodes {
+  KC_SAMPLEMACRO,
+};
+
+#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)
+
+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,  RSFT,\
+  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
+                                  GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \
+                              //`--------------------'  `--------------------'
+  ),
+
+  [_LOWER] = LAYOUT_kc( \
+  //,-----------------------------------------.                ,-----------------------------------------.
+        TAB,     1,     2,     3,     4,     5,                      6,     7,     8,     9,     0,  BSPC,\
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+      CTLTB, MUTE,   VOLD,  VOLU,  PGUP,  PGDN,                   LEFT,  DOWN,    UP, RIGHT,  HOME,   END,\
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+       LSFT,    F1,    F2,    F3,    F4,    F5,                     F6,    F7,    F8,    F9,   F10, XXXXX,\
+  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
+                                  GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \
+                              //`--------------------'  `--------------------'
+  ),
+
+  [_RAISE] = LAYOUT_kc( \
+  //,-----------------------------------------.                ,-----------------------------------------.
+        ESC,  EXLM,    AT,  HASH,   DLR,  PERC,                   CIRC,  AMPR,  ASTR,  LPRN,  RPRN,  BSPC,\
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+      CTLTB, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                   MINS,   EQL,  LCBR,  RCBR,  PIPE,   GRV,\
+  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
+       LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                   UNDS,  PLUS,  LBRC,  RBRC,  BSLS,  TILD,\
+  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
+                                  GUIEI, LOWER,   SPC,      ENT, RAISE, ALTKN \
+                              //`--------------------'  `--------------------'
+  ),
+
+  [_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;
+
+// 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) {
+        set_single_persistent_default_layer(_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/thefrey/rules.mk b/keyboards/crkbd/keymaps/thefrey/rules.mk
new file mode 100644 (file)
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 \
index 73427ee8abaca98f934a0c826250f1aaaa37cdcd..bbec2907ad160f5c840695b5657f91ad274df545 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "cu24.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = LAYOUT_grid( /* Base */
index 8893d122e04be2b5675204802a059c4321f8fc73..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index cbe3b3f3d8faa5ac3d88ddb2dfa83da9342b486c..a3db220e4f6e4684da847549ff7aa8973dec69de 100644 (file)
@@ -455,10 +455,10 @@ i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset)
         matrix[MATRIX_ROWS - 1] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end
 
     } else {
-        i2c_stop(10);
+        i2c_stop();
         return 1;
     }
 
-    i2c_stop(10);
+    i2c_stop();
     return 0;
 }
\ No newline at end of file
index f14678a22308e832b776e4fe3efc13156cb72406..307531da667ab68e48713d551379b0a86c5dd369 100644 (file)
@@ -16,16 +16,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 
+#pragma once
+
 #define USE_SERIAL
 
 #define MASTER_LEFT
 // #define MASTER_RIGHT
 // #define EE_HANDS
-
-
-#ifdef SUBPROJECT_v2
-    #include "../../v2/config.h"
-#endif
-#ifdef SUBPROJECT_protosplit
-    #include "../../protosplit/config.h"
-#endif
index 3f034175741b6bcc9b8702e2166e74526b4bdcde..b8c7ef427450a77241a5921987dd2380f7b943c0 100755 (executable)
@@ -1,7 +1,7 @@
 // this is the style you want to emulate.
 // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
 
-#include "dichotomy.h"
+#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.
index 87ce06b3b8d26a119f879bbb72941ea62bda25c9..fc375f08129fe4b33429e0f31057b868889b5b9d 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
 #define MASTER_RIGHT
 #define PERMISSIVE_HOLD
 #define TAPPING_TERM 150
-
-#endif
index 93aeb33b4a3caeb81f2aca0aa7b0bbc2debb7c48..8b9dc547d4ea8e35ed9cf9e3635373db4f4c9461 100644 (file)
@@ -1,5 +1,15 @@
 #include "dk60.h"
 
+extern inline void dk60_caps_led_on(void);
+extern inline void dk60_esc_led_on(void);
+
+extern inline void dk60_caps_led_off(void);
+extern inline void dk60_esc_led_off(void);
+
+extern inline void dk60_led_all_on(void);
+extern inline void dk60_led_all_off(void);
+
+
 void dk60_blink_all_leds(void)
 {
     dk60_led_all_off();
index 75afb7a34098f2512ba76ad0a000d232c06a878e..f8e4a5e92be6af4fbbb816739d85f48cb18c2972 100644 (file)
@@ -1,5 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "action_layer.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
diff --git a/keyboards/dozen0/config.h b/keyboards/dozen0/config.h
new file mode 100644 (file)
index 0000000..6b0f852
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+Copyright 2019 yynmt
+
+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    yynmt
+#define PRODUCT         Dozen0
+#define DESCRIPTION     12 keys macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F4 }
+#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, B5, B4, E6, D7, C6, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#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_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/dozen0/dozen0.c b/keyboards/dozen0/dozen0.c
new file mode 100644 (file)
index 0000000..8b52aa8
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 yynmt
+ *
+ * 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 "dozen0.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/dozen0/dozen0.h b/keyboards/dozen0/dozen0.h
new file mode 100644 (file)
index 0000000..e2ab35b
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright 2019 yynmt
+ *
+ * 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, K02, K03, K04, K05, \
+    K06, K07, K08, K09, K10, K11  \
+) \
+{ \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11 }, \
+}
diff --git a/keyboards/dozen0/info.json b/keyboards/dozen0/info.json
new file mode 100644 (file)
index 0000000..36eb8be
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "keyboard_name": "Dozen0",
+  "url": "http://yynmt.com",
+  "maintainer": "yynmt",
+  "width": 6,
+  "height": 2,
+  "layouts": {
+    "LAYOUT": {
+      "key_count": 12,
+      "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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}
+      ]
+    }
+  }
+}
diff --git a/keyboards/dozen0/keymaps/default/config.h b/keyboards/dozen0/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..bab59c6
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 yynmt
+ *
+ * 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/dozen0/keymaps/default/keymap.c b/keyboards/dozen0/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..da0aae0
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright 2019 yynmt
+ *
+ * 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] = {
+  [0] = LAYOUT(
+    LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_UP, KC_DEL, KC_BSPC, \
+    KC_LCTRL, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT \
+  ),
+};
+
+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/dozen0/keymaps/default/readme.md b/keyboards/dozen0/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..bf63c1f
--- /dev/null
@@ -0,0 +1,8 @@
+# The default keymap for Dozen0
+
+```
+ ,-------------------------------------------------.
+| Ctrl+X | Ctrl+C | Ctrl+V |  Up  | Delete | Bksp  |
+|  Ctrl  | Shift  |  Left  | Down | Right  | Enter |
+`--------------------------------------------------'
+```
diff --git a/keyboards/dozen0/keymaps/f12/config.h b/keyboards/dozen0/keymaps/f12/config.h
new file mode 100644 (file)
index 0000000..bab59c6
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 yynmt
+ *
+ * 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/dozen0/keymaps/f12/keymap.c b/keyboards/dozen0/keymaps/f12/keymap.c
new file mode 100644 (file)
index 0000000..bc8cd41
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright 2019 yynmt
+ *
+ * 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] = {
+  [0] = 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 \
+  ),
+};
+
+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/dozen0/readme.md b/keyboards/dozen0/readme.md
new file mode 100644 (file)
index 0000000..7ef1192
--- /dev/null
@@ -0,0 +1,15 @@
+# Dozen0
+
+![Dozen0](https://raw.githubusercontent.com/yynmt/Dozen0/master/images/main_image_mx.jpg)
+
+Dozen0 is 12 keys macropad.
+
+Keyboard Maintainer: [yynmt](https://github.com/yynmt)  
+Hardware Supported:  Dozen0 PCBs, ProMicro supported  
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+    make dozen0: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/dozen0/rules.mk b/keyboards/dozen0/rules.mk
new file mode 100644 (file)
index 0000000..383a359
--- /dev/null
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# 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)
diff --git a/keyboards/dz60/keymaps/edulpn/README.md b/keyboards/dz60/keymaps/edulpn/README.md
new file mode 100644 (file)
index 0000000..221be72
--- /dev/null
@@ -0,0 +1,10 @@
+# Edulpn Tsangan Keymap for the DZ60 PCB
+
+## Additional Notes
+Tsangan 60% Keymap for DZ60 + Fn layer.
+
+### Layout
+![Edulpn Tsangan Keymap for the DZ60](https://i.imgur.com/z7HHeH7.png)
+
+## Build
+To build the default keymap, simply run `make dz60:edulpn`.
diff --git a/keyboards/dz60/keymaps/edulpn/keymap.c b/keyboards/dz60/keymaps/edulpn/keymap.c
new file mode 100644 (file)
index 0000000..74d7ca4
--- /dev/null
@@ -0,0 +1,18 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = LAYOUT_60_tsangan_hhkb(
+               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_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(1),
+               KC_LCTL,        KC_LGUI,        KC_LALT,                                                                                        KC_SPC,                                                                                                 KC_RALT,    KC_RGUI,    KC_RCTL
+       ),
+       [1] = LAYOUT_60_tsangan_hhkb(
+               KC_ESC,         KC_F1,          KC_F2,          KC_F3,          KC_F4,          KC_F5,          KC_F6,          KC_F7,          KC_F8,          KC_F9,          KC_F10,         KC_F11,         KC_F12,         KC_TRNS,        RESET,
+               KC_TRNS,        RGB_TOG,        RGB_MOD,        RGB_HUI,        RGB_HUD,        RGB_SAI,        RGB_SAD,        RGB_VAI,        RGB_VAD,        KC_TRNS,        KC_TRNS,        KC_UP,          KC_TRNS,        KC_DEL,
+               KC_TRNS,        KC_MPLY,        KC_MPRV,        KC_MNXT,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_LEFT,        KC_RIGHT,                               KC_TRNS,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_DOWN,                                KC_TRNS,        KC_TRNS,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,                                                                                        KC_TRNS,                                                                                                KC_TRNS,    KC_TRNS,    KC_TRNS
+       )
+};
diff --git a/keyboards/dztech/dz40rgb/bootloader_defs.h b/keyboards/dztech/dz40rgb/bootloader_defs.h
new file mode 100644 (file)
index 0000000..3b0e9d2
--- /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:
+ * 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 0x1FFFD800
diff --git a/keyboards/dztech/dz40rgb/chconf.h b/keyboards/dztech/dz40rgb/chconf.h
new file mode 100644 (file)
index 0000000..1d9f12f
--- /dev/null
@@ -0,0 +1,520 @@
+/*
+    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.
+*/
+
+/**
+ * @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                 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
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @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                       TRUE
+
+/**
+ * @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        TRUE
+
+/**
+ * @brief   Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ *          included in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES                TRUE
+
+/**
+ * @brief   Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE                  TRUE
+
+/**
+ * @brief   Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ *          @p CH_CFG_USE_SEMAPHORES.
+ * @note    Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP                     TRUE
+
+/**
+ * @brief   Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS                 TRUE
+
+/**
+ * @brief   Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ *          in the kernel.
+ *
+ * @note    The default is @p TRUE.
+ * @note    Requires @p CH_CFG_USE_WAITEXIT.
+ * @note    Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC                  TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief   Debug option, kernel statistics.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS                   FALSE
+
+/**
+ * @brief   Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ *          at runtime.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK           FALSE
+
+/**
+ * @brief   Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ *          parameters are activated.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS                FALSE
+
+/**
+ * @brief   Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ *          activated. This includes consistency checks inside the kernel,
+ *          runtime anomalies and port-defined checks.
+ *
+ * @note    The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS               FALSE
+
+/**
+ * @brief   Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note    The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK                   CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief   Trace buffer entries.
+ * @note    The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ *          different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE            128
+
+/**
+ * @brief   Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note    The default is @p FALSE.
+ * @note    The stack check is performed in a architecture/port dependent way.
+ *          It may not be implemented or some ports.
+ * @note    The default failure mode is to halt the system with the global
+ *          @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK           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                 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/dztech/dz40rgb/config.h b/keyboards/dztech/dz40rgb/config.h
new file mode 100644 (file)
index 0000000..5b9f6dc
--- /dev/null
@@ -0,0 +1,33 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x1220
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    DZTECH
+#define PRODUCT         DZ40RGB
+#define DESCRIPTION     DZ40 ARM RGB keyboard
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+#define MATRIX_ROW_PINS { B13, B12, A2, A1 }
+#define MATRIX_COL_PINS {A6, A7, B0, B1, C15, C14, C13, B9, B8, A8, B14, B15 }
+
+/* #define UNUSED_PINS {A0,A1,A2, A3,A4,A9,A10,C15,A13,A14,B2}*/
+
+#define DIODE_DIRECTION COL2ROW
+
+#define DEBOUNCE 3
+#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
+#define RGB_MATRIX_SKIP_FRAMES 10
+#define RGB_MATRIX_KEYPRESSES
+#define DISABLE_RGB_MATRIX_SPLASH
+#define DISABLE_RGB_MATRIX_MULTISPLASH
+#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#define DRIVER_ADDR_1 0b1010000
+#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+
+#define DRIVER_COUNT 2
diff --git a/keyboards/dztech/dz40rgb/dz40rgb.c b/keyboards/dztech/dz40rgb/dz40rgb.c
new file mode 100644 (file)
index 0000000..b1a0376
--- /dev/null
@@ -0,0 +1,297 @@
+#include "dz40rgb.h"
+#include "config.h"
+#if defined (split_space)
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+    {0, K_12,   J_12,   L_12},
+    {0, K_11,   J_11,   L_11},
+    {0, K_10,   J_10,   L_10},
+    {0, K_9,    J_9,    L_9},
+    {0, K_8,    J_8,    L_8},
+    {0, K_7,    J_7,    L_7},
+    {0, K_6,    J_6,    L_6},
+    {0, K_5,    J_5,    L_5},
+    {0, K_4,    J_4,    L_4},
+    {0, K_3,    J_3,    L_3},
+    {0, K_2,    J_2,    L_2},
+    {0, K_1,    J_1,    L_1},
+
+    {0, K_13,   J_13,   L_13},
+    {0, K_14,   J_14,   L_14},
+
+    {0, H_12,   G_12,   I_12},
+    {0, H_11,   G_11,   I_11},
+    {0, H_10,   G_10,   I_10},
+    {0, H_9,    G_9,    I_9},
+    {0, H_8,    G_8,    I_8},
+    {0, H_7,    G_7,    I_7},
+    {0, H_6,    G_6,    I_6},
+    {0, H_5,    G_5,    I_5},
+    {0, H_4,    G_4,    I_4},
+    {0, H_3,    G_3,    I_3},
+    {0, H_2,    G_2,    I_2},
+    {0, H_1,    G_1,    I_1},
+
+    {0, H_13,   G_13,   I_13},
+    {0, H_14,   G_14,   I_14},
+
+    {0, E_12,   D_12,   F_12},
+    {0, E_11,   D_11,   F_11},
+    {0, E_10,   D_10,   F_10},
+    {0, E_9,    D_9,    F_9},
+    {0, E_8,    D_8,    F_8},
+    {0, E_7,    D_7,    F_7},
+    {0, E_6,    D_6,    F_6},
+    {0, E_5,    D_5,    F_5},
+    {0, E_4,    D_4,    F_4},
+    {0, E_3,    D_3,    F_3},
+    {0, E_2,    D_2,    F_2},
+    {0, E_1,    D_1,    F_1},
+       
+    {0, E_13,   D_13,   F_13},
+    {0, E_14,   D_14,   F_14},
+
+    {0, B_12,   A_12,   C_12},
+    {0, B_11,   A_11,   C_11},
+    {0, B_10,   A_10,   C_10},
+    {0, B_9,    A_9,    C_9},
+    {0, B_8,    A_8,    C_8},
+    {0, B_7,    A_7,    C_7},
+    {0, B_6,    A_6,    C_6},
+    {0, B_5,    A_5,    C_5},
+    {0, B_4,    A_4,    C_4},
+    {0, B_3,    A_3,    C_3},
+    {0, B_2,    A_2,    C_2},
+    {0, B_1,    A_1,    C_1}
+
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+
+    {{0|(11<<4)},   {20.36*11,  0}, 1},
+    {{0|(10<<4)},   {20.36*10,  0}, 1},
+    {{0|(9<<4)},    {20.36*9,  0}, 1},
+    {{0|(8<<4)},    {20.36*8,  0}, 1},
+    {{0|(7<<4)},    {20.36*7,  0}, 1},
+       {{0|(6<<4)},    { 20.36*6,  0}, 1},
+    {{0|(5<<4)},    { 20.36*5,  0}, 1},
+    {{0|(4<<4)},    { 20.36*4,  0}, 1},
+    {{0|(3<<4)},    { 20.36*3,  0}, 1},
+    {{0|(2<<4)},    { 20.36*2,  0}, 1},
+    {{0|(1<<4)},    { 20.36*1,  0}, 1},
+    {{0|(0<<4)},    { 20.36*0,  0}, 1},
+
+    {{0|(12<<4)},   {20.36*11, 21.33*0.5}, 1},
+    {{0|(13<<4)},  {20.36*0,21.33*0.5}, 1},
+
+    {{1|(11<<4)},   {20.36*11,  21.33}, 1},
+    {{1|(10<<4)},   {20.36*10,  21.33}, 0},
+    {{1|(9<<4)},    {20.36*9,  21.33}, 0},
+    {{1|(8<<4)},    {20.36*8,  21.33}, 0},
+    {{1|(7<<4)},    {20.36*7,  21.33}, 0},
+       {{1|(6<<4)},    { 20.36*6,  21.33}, 0},
+    {{1|(5<<4)},    { 20.36*5,  21.33}, 0},
+    {{1|(4<<4)},    { 20.36*4,  21.33}, 0},
+    {{1|(3<<4)},    { 20.36*3,  21.33}, 0},
+    {{1|(2<<4)},    { 20.36*2,  21.33}, 0},
+    {{1|(1<<4)},    { 20.36*1,  21.33}, 0},
+    {{1|(0<<4)},    { 20.36*0,  21.33}, 1},
+
+    {{1|(12<<4)},   {20.36*11, 21.33*1.5}, 1},
+    {{1|(13<<4)},  {20.36*0,21.33*1.5}, 1},
+
+    {{2|(11<<4)},   {20.36*11,  21.33*2}, 1},
+    {{2|(10<<4)},   {20.36*10,  21.33*2}, 0},
+    {{2|(9<<4)},    {20.36*9,  21.33*2}, 0},
+    {{2|(8<<4)},    {20.36*8,  21.33*2}, 0},
+    {{2|(7<<4)},    {20.36*7,  21.33*2}, 0},
+       {{2|(6<<4)},    { 20.36*6,  21.33*2}, 0},
+    {{2|(5<<4)},    { 20.36*5,  21.33*2}, 0},
+    {{2|(4<<4)},    { 20.36*4,  21.33*2}, 0},
+    {{2|(3<<4)},    { 20.36*3,  21.33*2}, 0},
+    {{2|(2<<4)},    { 20.36*2,  21.33*2}, 0},
+    {{2|(1<<4)},    { 20.36*1,  21.33*2}, 0},
+    {{2|(0<<4)},    { 20.36*0,  21.33*2}, 1},
+
+    {{2|(12<<4)},   {20.36*11, 21.33*2.5}, 1},
+    {{2|(13<<4)},  {20.36*0,21.33*2.5}, 1},
+
+    {{3|(11<<4)},   {20.36*11,  21.33*3}, 1},
+    {{3|(10<<4)},   {20.36*10,  21.33*3}, 1},
+    {{3|(9<<4)},    {20.36*9,  21.33*3}, 1},
+    {{3|(8<<4)},    {20.36*8,  21.33*3}, 1},
+    {{3|(7<<4)},    {20.36*7,  21.33*3}, 1},
+       {{3|(6<<4)},    { 20.36*6,  21.33*3}, 1},
+    {{3|(5<<4)},    { 20.36*5,  21.33*3}, 1},
+    {{3|(4<<4)},    { 20.36*4,  21.33*3}, 1},
+    {{3|(3<<4)},    { 20.36*3,  21.33*3}, 1},
+    {{3|(2<<4)},    { 20.36*2,  21.33*3}, 1},
+    {{3|(1<<4)},    { 20.36*1,  21.33*3}, 1},
+    {{3|(0<<4)},    { 20.36*0,  21.33*3}, 1}
+
+};
+#else
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+    {0, K_12,   J_12,   L_12},
+    {0, K_11,   J_11,   L_11},
+    {0, K_10,   J_10,   L_10},
+    {0, K_9,    J_9,    L_9},
+    {0, K_8,    J_8,    L_8},
+    {0, K_7,    J_7,    L_7},
+    {0, K_6,    J_6,    L_6},
+    {0, K_5,    J_5,    L_5},
+    {0, K_4,    J_4,    L_4},
+    {0, K_3,    J_3,    L_3},
+    {0, K_2,    J_2,    L_2},
+    {0, K_1,    J_1,    L_1},
+
+    {0, K_13,   J_13,   L_13},
+    {0, K_14,   J_14,   L_14},
+
+    {0, H_12,   G_12,   I_12},
+    {0, H_11,   G_11,   I_11},
+    {0, H_10,   G_10,   I_10},
+    {0, H_9,    G_9,    I_9},
+    {0, H_8,    G_8,    I_8},
+    {0, H_7,    G_7,    I_7},
+    {0, H_6,    G_6,    I_6},
+    {0, H_5,    G_5,    I_5},
+    {0, H_4,    G_4,    I_4},
+    {0, H_3,    G_3,    I_3},
+    {0, H_2,    G_2,    I_2},
+    {0, H_1,    G_1,    I_1},
+
+    {0, H_13,   G_13,   I_13},
+    {0, H_14,   G_14,   I_14},
+
+    {0, E_12,   D_12,   F_12},
+    {0, E_11,   D_11,   F_11},
+    {0, E_10,   D_10,   F_10},
+    {0, E_9,    D_9,    F_9},
+    {0, E_8,    D_8,    F_8},
+    {0, E_7,    D_7,    F_7},
+    {0, E_6,    D_6,    F_6},
+    {0, E_5,    D_5,    F_5},
+    {0, E_4,    D_4,    F_4},
+    {0, E_3,    D_3,    F_3},
+    {0, E_2,    D_2,    F_2},
+    {0, E_1,    D_1,    F_1},
+
+    {0, E_13,   D_13,   F_13},
+    {0, E_14,   D_14,   F_14},
+
+    {0, B_12,   A_12,   C_12},
+    {0, B_11,   A_11,   C_11},
+    {0, B_10,   A_10,   C_10},
+    {0, B_9,    A_9,    C_9},
+    {0, B_8,    A_8,    C_8},
+    {0, B_13,   A_13,   C_13},
+    {0, B_5,    A_5,    C_5},
+    {0, B_4,    A_4,    C_4},
+    {0, B_3,    A_3,    C_3},
+    {0, B_2,    A_2,    C_2},
+    {0, B_1,    A_1,    C_1}
+
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+
+    {{0|(11<<4)},   {20.36*11,  0}, 1},
+    {{0|(10<<4)},   {20.36*10,  0}, 1},
+    {{0|(9<<4)},    {20.36*9,  0}, 1},
+    {{0|(8<<4)},    {20.36*8,  0}, 1},
+    {{0|(7<<4)},    {20.36*7,  0}, 1},
+       {{0|(6<<4)},    { 20.36*6,  0}, 1},
+    {{0|(5<<4)},    { 20.36*5,  0}, 1},
+    {{0|(4<<4)},    { 20.36*4,  0}, 1},
+    {{0|(3<<4)},    { 20.36*3,  0}, 1},
+    {{0|(2<<4)},    { 20.36*2,  0}, 1},
+    {{0|(1<<4)},    { 20.36*1,  0}, 1},
+    {{0|(0<<4)},    { 20.36*0,  0}, 1},
+
+    {{0|(12<<4)},   {20.36*11, 21.33*0.5}, 1},
+    {{0|(13<<4)},  {20.36*0,21.33*0.5}, 1},
+
+    {{1|(11<<4)},   {20.36*11,  21.33}, 1},
+    {{1|(10<<4)},   {20.36*10,  21.33}, 0},
+    {{1|(9<<4)},    {20.36*9,  21.33}, 0},
+    {{1|(8<<4)},    {20.36*8,  21.33}, 0},
+    {{1|(7<<4)},    {20.36*7,  21.33}, 0},
+       {{1|(6<<4)},    { 20.36*6,  21.33}, 0},
+    {{1|(5<<4)},    { 20.36*5,  21.33}, 0},
+    {{1|(4<<4)},    { 20.36*4,  21.33}, 0},
+    {{1|(3<<4)},    { 20.36*3,  21.33}, 0},
+    {{1|(2<<4)},    { 20.36*2,  21.33}, 0},
+    {{1|(1<<4)},    { 20.36*1,  21.33}, 0},
+    {{1|(0<<4)},    { 20.36*0,  21.33}, 1},
+
+    {{1|(12<<4)},   {20.36*11, 21.33*1.5}, 1},
+    {{1|(13<<4)},  {20.36*0,21.33*1.5}, 1},
+
+    {{2|(11<<4)},   {20.36*11,  21.33*2}, 1},
+    {{2|(10<<4)},   {20.36*10,  21.33*2}, 0},
+    {{2|(9<<4)},    {20.36*9,  21.33*2}, 0},
+    {{2|(8<<4)},    {20.36*8,  21.33*2}, 0},
+    {{2|(7<<4)},    {20.36*7,  21.33*2}, 0},
+       {{2|(6<<4)},    { 20.36*6,  21.33*2}, 0},
+    {{2|(5<<4)},    { 20.36*5,  21.33*2}, 0},
+    {{2|(4<<4)},    { 20.36*4,  21.33*2}, 0},
+    {{2|(3<<4)},    { 20.36*3,  21.33*2}, 0},
+    {{2|(2<<4)},    { 20.36*2,  21.33*2}, 0},
+    {{2|(1<<4)},    { 20.36*1,  21.33*2}, 0},
+    {{2|(0<<4)},    { 20.36*0,  21.33*2}, 1},
+
+    {{2|(12<<4)},   {20.36*11, 21.33*2.5}, 1},
+    {{2|(13<<4)},  {20.36*0,21.33*2.5}, 1},
+
+    {{3|(11<<4)},   {20.36*11,  21.33*3}, 1},
+    {{3|(10<<4)},   {20.36*10,  21.33*3}, 1},
+    {{3|(9<<4)},    {20.36*9,  21.33*3}, 1},
+    {{3|(8<<4)},    {20.36*8,  21.33*3}, 1},
+    {{3|(7<<4)},    {20.36*7,  21.33*3}, 1},
+       {{3|(6<<4)},    { 20.36*5.5,  21.33*3}, 1},
+    {{3|(4<<4)},    { 20.36*4,  21.33*3}, 1},
+    {{3|(3<<4)},    { 20.36*3,  21.33*3}, 1},
+    {{3|(2<<4)},    { 20.36*2,  21.33*3}, 1},
+    {{3|(1<<4)},    { 20.36*1,  21.33*3}, 1},
+    {{3|(0<<4)},    { 20.36*0,  21.33*3}, 1}
+
+};
+#endif
+
+
+void matrix_init_kb(void) {
+    matrix_init_user();
+}
+
+
+void matrix_scan_kb(void) {
+    matrix_scan_user();
+}
+
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+    return process_record_user(keycode, record);
+}
+
+
+void suspend_power_down_kb(void)
+{
+    rgb_matrix_set_suspend_state(true);
+}
+
+void suspend_wakeup_init_kb(void)
+{
+    rgb_matrix_set_suspend_state(false);
+}
diff --git a/keyboards/dztech/dz40rgb/dz40rgb.h b/keyboards/dztech/dz40rgb/dz40rgb.h
new file mode 100644 (file)
index 0000000..5f88a62
--- /dev/null
@@ -0,0 +1,27 @@
+#pragma once
+#include "quantum.h"
+#define LAYOUT( \
+       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, 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, k36, k37, k38, k39, k3a, k3b } \
+}
+
+#define LAYOUT_SPLIT( \
+       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 } \
+}
diff --git a/keyboards/dztech/dz40rgb/halconf.h b/keyboards/dztech/dz40rgb/halconf.h
new file mode 100644 (file)
index 0000000..eda293c
--- /dev/null
@@ -0,0 +1,388 @@
+/*
+    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.
+*/
+
+/**
+ * @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                 TRUE
+#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                 TRUE
+#endif
+
+/**
+ * @brief   Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C                 TRUE
+#endif
+
+/**
+ * @brief   Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S                 FALSE
+#endif
+
+/**
+ * @brief   Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC                 FALSE
+#endif
+
+/**
+ * @brief   Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI             FALSE
+#endif
+
+/**
+ * @brief   Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM                 FALSE
+#endif
+
+/**
+ * @brief   Enables the QSPI subsystem.
+ */
+#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
+#define HAL_USE_QSPI                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 16 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 256 bytes for both the transmission and receive
+ *          buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE     1
+#endif
+
+/**
+ * @brief   Serial over USB number of buffers.
+ * @note    The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER   2
+#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
+
+/*===========================================================================*/
+/* UART driver related settings.                                             */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT               FALSE
+#endif
+
+/**
+ * @brief   Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION   FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings.                                              */
+/*===========================================================================*/
+
+/**
+ * @brief   Enables synchronous APIs.
+ * @note    Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT                TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/dztech/dz40rgb/keymaps/default/config.h b/keyboards/dztech/dz40rgb/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..30bf11e
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+#define DRIVER_1_LED_TOTAL 53
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz40rgb/keymaps/default/keymap.c b/keyboards/dztech/dz40rgb/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..6ea7421
--- /dev/null
@@ -0,0 +1,75 @@
+#include QMK_KEYBOARD_H
+extern bool g_suspend_state;
+#define _LAYER0 0
+#define _LAYER1 1
+#define _LAYER2 2
+#define _LAYER3 3
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+               [_LAYER0] = LAYOUT( /* Base */
+                           KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+                           KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+                           KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+                               RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1),            KC_SPC,  MO(2),   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+                       ),
+               [_LAYER1] = LAYOUT( /* FN */
+                           KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_BSPC,
+                           KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE,
+                           _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END,  _______,
+                           _______, _______, _______, _______, _______,          _______, TO(3),      KC_MNXT,    KC_VOLD, KC_VOLU, KC_MPLY
+                       ),
+               [_LAYER2] = LAYOUT( /* FN2 */
+                           KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
+                           KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+                           _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+                           RGB_TOG, RGB_MOD, BL_INC,  BL_DEC, _______,           _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+                   ),
+               [_LAYER3] = LAYOUT( /* FN3 */
+                           TO(0), RESET,   DEBUG,   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD,  RGB_VAI, RGB_VAD, KC_DEL ,
+                           _______, _______, _______,  _______,   _______,  _______, _______,  _______, _______, _______, _______, _______,
+                           _______, _______, _______,  _______,   _______,  _______, _______,  _______, _______, _______, _______, _______,
+                           _______, _______, _______,  _______,   _______,           _______,  _______, _______, _______, _______,  _______
+                       ),
+
+};
+void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
+  rgb_led led;
+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+    led = g_rgb_leds[i];
+    if (led.matrix_co.raw < 0xFF) {
+      if (led.modifier) {
+          rgb_matrix_set_color( i, red, green, blue );
+      }
+    }
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+         if (!g_suspend_state) {
+           switch (biton32(layer_state)) {
+             case _LAYER1:
+                   rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+             case _LAYER2:
+               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+             case _LAYER3:
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+                                                                 }
+                               }
+
+}
+
+
+
+
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+       bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+         return true;
+       }
+
diff --git a/keyboards/dztech/dz40rgb/keymaps/split_space/config.h b/keyboards/dztech/dz40rgb/keymaps/split_space/config.h
new file mode 100644 (file)
index 0000000..4f35bef
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma once
+#include "../../config.h"
+#define split_space
+#define DRIVER_1_LED_TOTAL 54
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz40rgb/keymaps/split_space/keymap.c b/keyboards/dztech/dz40rgb/keymaps/split_space/keymap.c
new file mode 100644 (file)
index 0000000..bbbe5a8
--- /dev/null
@@ -0,0 +1,102 @@
+#include QMK_KEYBOARD_H
+extern bool g_suspend_state;
+#define _LAYER0 0
+#define _LAYER1 1
+#define _LAYER2 2
+#define _LAYER3 3
+#define _LAYER4 4
+#define _LAYER5 5
+#define _LAYER6 6
+#define _LAYER7 7
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+               [_LAYER0] = LAYOUT_SPLIT( /* Base */
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1),   KC_SPC,  KC_SPC,  MO(2),   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT),
+               [_LAYER1] = LAYOUT_SPLIT( /* FN */
+    KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_BSPC,
+    KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END,  _______,
+    _______, _______, _______, _______, _______, _______, _______, _______,    KC_MNXT,    KC_VOLD, KC_VOLU, KC_MPLY),
+               [_LAYER2] = LAYOUT_SPLIT( /* LIGHT */
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
+    KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY),
+               [_LAYER3] = LAYOUT_SPLIT( /* NUMPAD */
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1),   KC_SPC,  KC_SPC,  MO(2),   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT),
+               [_LAYER4] = LAYOUT_SPLIT( /* MAC */
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1),   KC_SPC,  KC_SPC,  MO(2),   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT),
+               [_LAYER5] = LAYOUT_SPLIT( /* NEED TO DEFINE */
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1),   KC_SPC,  KC_SPC,  MO(2),   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT),
+               [_LAYER6] = LAYOUT_SPLIT( /* NEED TO DEFINE */
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1),   KC_SPC,  KC_SPC,  MO(2),   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT),
+               [_LAYER7] = LAYOUT_SPLIT( /* NEED TO DEFINE */
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    RGB_MOD, KC_LCTL, KC_LALT, KC_LGUI, MO(1),   KC_SPC,  KC_SPC,  MO(2),   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT),
+               };
+
+
+
+
+void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
+  rgb_led led;
+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+    led = g_rgb_leds[i];
+    if (led.matrix_co.raw < 0xFF) {
+      if (led.modifier) {
+          rgb_matrix_set_color( i, red, green, blue );
+      }
+    }
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+         if (!g_suspend_state) {
+           switch (biton32(layer_state)) {
+             case _LAYER1:
+                   rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+             case _LAYER2:
+               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+             case _LAYER4:
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+             case _LAYER5:
+               rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, false); break;
+             case _LAYER6:
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0xFF, false); break;
+                                                                 }
+                               }
+
+}
+
+
+
+
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+       bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+         return true;
+       }
+
diff --git a/keyboards/dztech/dz40rgb/mcuconf.h b/keyboards/dztech/dz40rgb/mcuconf.h
new file mode 100644 (file)
index 0000000..226da48
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+    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.
+*/
+
+#ifndef MCUCONF_H
+#define MCUCONF_H
+
+/*
+ * STM32F3xx 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.
+ */
+
+#define STM32F3xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT                       FALSE
+#define STM32_PVD_ENABLE                    FALSE
+#define STM32_PLS                           STM32_PLS_LEV0
+#define STM32_HSI_ENABLED                   TRUE
+#define STM32_LSI_ENABLED                   TRUE
+#define STM32_HSE_ENABLED                   TRUE
+#define STM32_LSE_ENABLED                   FALSE
+#define STM32_SW                            STM32_SW_PLL
+#define STM32_PLLSRC                        STM32_PLLSRC_HSE
+#define STM32_PREDIV_VALUE                  1
+#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_MCOSEL                        STM32_MCOSEL_NOCLOCK
+#define STM32_ADC12PRES                     STM32_ADC12PRES_DIV1
+#define STM32_ADC34PRES                     STM32_ADC34PRES_DIV1
+#define STM32_USART1SW                      STM32_USART1SW_PCLK
+#define STM32_USART2SW                      STM32_USART2SW_PCLK
+#define STM32_USART3SW                      STM32_USART3SW_PCLK
+#define STM32_UART4SW                       STM32_UART4SW_PCLK
+#define STM32_UART5SW                       STM32_UART5SW_PCLK
+#define STM32_I2C1SW                        STM32_I2C1SW_SYSCLK
+#define STM32_I2C2SW                        STM32_I2C2SW_SYSCLK
+#define STM32_TIM1SW                        STM32_TIM1SW_PCLK2
+#define STM32_TIM8SW                        STM32_TIM8SW_PCLK2
+#define STM32_RTCSEL                        STM32_RTCSEL_LSI
+#define STM32_USB_CLOCK_REQUIRED            TRUE
+#define STM32_USBPRE                        STM32_USBPRE_DIV1P5
+
+#undef STM32_HSE_BYPASS
+// #error "oh no"
+// #endif
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_DUAL_MODE                 FALSE
+#define STM32_ADC_COMPACT_SAMPLES           FALSE
+#define STM32_ADC_USE_ADC1                  FALSE
+#define STM32_ADC_USE_ADC2                  FALSE
+#define STM32_ADC_USE_ADC3                  FALSE
+#define STM32_ADC_USE_ADC4                  FALSE
+#define STM32_ADC_ADC1_DMA_STREAM           STM32_DMA_STREAM_ID(1, 1)
+#define STM32_ADC_ADC2_DMA_STREAM           STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC3_DMA_STREAM           STM32_DMA_STREAM_ID(2, 5)
+#define STM32_ADC_ADC4_DMA_STREAM           STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC1_DMA_PRIORITY         2
+#define STM32_ADC_ADC2_DMA_PRIORITY         2
+#define STM32_ADC_ADC3_DMA_PRIORITY         2
+#define STM32_ADC_ADC4_DMA_PRIORITY         2
+#define STM32_ADC_ADC12_IRQ_PRIORITY        5
+#define STM32_ADC_ADC3_IRQ_PRIORITY         5
+#define STM32_ADC_ADC4_IRQ_PRIORITY         5
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY     5
+#define STM32_ADC_ADC12_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
+#define STM32_ADC_ADC34_CLOCK_MODE          ADC_CCR_CKMODE_AHB_DIV1
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1                  FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY         11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE                 FALSE
+#define STM32_DAC_USE_DAC1_CH1              TRUE
+#define STM32_DAC_USE_DAC1_CH2              TRUE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY     10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY     10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY     2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY     2
+
+/*
+ * 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
+#define STM32_EXT_EXTI20_IRQ_PRIORITY       6
+#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI30_32_IRQ_PRIORITY    6
+#define STM32_EXT_EXTI33_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_TIM6                  TRUE
+#define STM32_GPT_USE_TIM7                  TRUE
+#define STM32_GPT_USE_TIM8                  TRUE
+#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_TIM6_IRQ_PRIORITY         7
+#define STM32_GPT_TIM7_IRQ_PRIORITY         7
+#define STM32_GPT_TIM8_IRQ_PRIORITY         7
+
+/*
+ * 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         10
+#define STM32_I2C_I2C2_IRQ_PRIORITY         10
+#define STM32_I2C_USE_DMA                   TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY         1
+#define STM32_I2C_I2C2_DMA_PRIORITY         1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp)      osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1                  FALSE
+#define STM32_ICU_USE_TIM2                  FALSE
+#define STM32_ICU_USE_TIM3                  FALSE
+#define STM32_ICU_USE_TIM4                  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_TIM8_IRQ_PRIORITY         7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED              FALSE
+#define STM32_PWM_USE_TIM1                  FALSE
+#define STM32_PWM_USE_TIM2                  FALSE
+#define STM32_PWM_USE_TIM3                  FALSE
+#define STM32_PWM_USE_TIM4                  FALSE
+#define STM32_PWM_USE_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_TIM8_IRQ_PRIORITY         7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1             FALSE
+#define STM32_SERIAL_USE_USART2             FALSE
+#define STM32_SERIAL_USE_USART3             FALSE
+#define STM32_SERIAL_USE_UART4              FALSE
+#define STM32_SERIAL_USE_UART5              FALSE
+#define STM32_SERIAL_USART1_PRIORITY        12
+#define STM32_SERIAL_USART2_PRIORITY        12
+#define STM32_SERIAL_USART3_PRIORITY        12
+#define STM32_SERIAL_UART4_PRIORITY         12
+#define STM32_SERIAL_UART5_PRIORITY         12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1                  FALSE
+#define STM32_SPI_USE_SPI2                  FALSE
+#define STM32_SPI_USE_SPI3                  FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY         1
+#define STM32_SPI_SPI2_DMA_PRIORITY         1
+#define STM32_SPI_SPI3_DMA_PRIORITY         1
+#define STM32_SPI_SPI1_IRQ_PRIORITY         10
+#define STM32_SPI_SPI2_IRQ_PRIORITY         10
+#define STM32_SPI_SPI3_IRQ_PRIORITY         10
+#define STM32_SPI_DMA_ERROR_HOOK(spip)      osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY               8
+#define STM32_ST_USE_TIMER                  2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1               FALSE
+#define STM32_UART_USE_USART2               FALSE
+#define STM32_UART_USE_USART3               FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY      12
+#define STM32_UART_USART2_IRQ_PRIORITY      12
+#define STM32_UART_USART3_IRQ_PRIORITY      12
+#define STM32_UART_USART1_DMA_PRIORITY      0
+#define STM32_UART_USART2_DMA_PRIORITY      0
+#define STM32_UART_USART3_DMA_PRIORITY      0
+#define STM32_UART_DMA_ERROR_HOOK(uartp)    osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1                  TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND      FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY      13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY      14
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG                  FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/dztech/dz40rgb/rules.mk b/keyboards/dztech/dz40rgb/rules.mk
new file mode 100644 (file)
index 0000000..99cbafb
--- /dev/null
@@ -0,0 +1,57 @@
+# project specific files
+
+## chip/board settings
+#   the next two should match the directories in
+#   <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F3xx
+
+# Linker script to use
+#   it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = lite            # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes              # Mouse keys
+EXTRAKEY_ENABLE = yes              # Audio control and System control
+CONSOLE_ENABLE = no                # Console for debug
+COMMAND_ENABLE = no                # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes            # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no                 # USB Nkey Rollover
+AUDIO_ENABLE = no
+RGB_MATRIX_ENABLE = IS31FL3733     # Use RGB matrix
+NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in66666666666666666666666666
index 167b67a87d58a576907820cd190126cdc01fd772..19f32440eaacbf014aeb0ea1492f3173da5ec4cd 100644 (file)
@@ -6,7 +6,8 @@
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0x1219
 #define DEVICE_VER      0x0001
-#define MANUFACTURER    DOU
+#define MANUFACTURER    DZTECH
+
 #define PRODUCT         DZ60RGB
 #define DESCRIPTION     DZ60 ARM RGB keyboard
 #define MATRIX_ROWS 5
 #define DIODE_DIRECTION COL2ROW
 
 #define DEBOUNCE 3
-
 #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
 #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
-#define RGB_MATRIX_SKIP_FRAMES 0
+#define RGB_MATRIX_SKIP_FRAMES 10
 #define RGB_MATRIX_KEYPRESSES
 #define DISABLE_RGB_MATRIX_SPLASH
 #define DISABLE_RGB_MATRIX_MULTISPLASH
 #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
 #define DRIVER_ADDR_1 0b1010000
 #define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
-
 #define DRIVER_COUNT 2
 #define DRIVER_1_LED_TOTAL 63
 #define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
index 4a4893b8e41bf17f8aff1112d6982b062eeaa2b0..99e3b5646fab65db3668a0ca2c0bdda01f0f9fdb 100644 (file)
@@ -1,4 +1,587 @@
 #include "dz60rgb.h"
+#include "config.h"
+#if defined (dzrgb60_iso)
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+    {0, K_14,   J_14,   L_14},
+    {0, K_13,   J_13,   L_13},
+    {0, K_12,   J_12,   L_12},
+    {0, K_11,   J_11,   L_11},
+    {0, K_10,   J_10,   L_10},
+    {0, K_9,    J_9,    L_9},
+    {0, K_8,    J_8,    L_8},
+    {0, K_7,    J_7,    L_7},
+    {0, K_6,    J_6,    L_6},
+    {0, K_5,    J_5,    L_5},
+    {0, K_4,    J_4,    L_4},
+    {0, K_3,    J_3,    L_3},
+    {0, K_2,    J_2,    L_2},
+    {0, K_1,    J_1,    L_1},
+
+    {0, H_15,   G_15,   I_15},
+    {0, H_13,   G_13,   I_13},
+    {0, H_12,   G_12,   I_12},
+    {0, H_11,   G_11,   I_11},
+    {0, H_10,   G_10,   I_10},
+    {0, H_9,    G_9,    I_9},
+    {0, H_8,    G_8,    I_8},
+    {0, H_7,    G_7,    I_7},
+    {0, H_6,    G_6,    I_6},
+    {0, H_5,    G_5,    I_5},
+    {0, H_4,    G_4,    I_4},
+    {0, H_3,    G_3,    I_3},
+    {0, H_2,    G_2,    I_2},
+    {0, H_1,    G_1,    I_1},
+
+    {0, B_14,   A_14,   C_14},
+    {0, E_12,   D_12,   F_12},
+    {0, E_11,   D_11,   F_11},
+    {0, E_10,   D_10,   F_10},
+    {0, E_9,    D_9,    F_9},
+    {0, E_8,    D_8,    F_8},
+    {0, E_7,    D_7,    F_7},
+    {0, E_6,    D_6,    F_6},
+    {0, E_5,    D_5,    F_5},
+    {0, E_4,    D_4,    F_4},
+    {0, E_3,    D_3,    F_3},
+    {0, E_2,    D_2,    F_2},
+    {0, E_1,    D_1,    F_1},
+
+    {0, B_13,   A_13,   C_13},
+    {0, B_11,   A_11,   C_11},
+    {0, B_10,   A_10,   C_10},
+    {0, B_9,    A_9,    C_9},
+    {0, B_8,    A_8,    C_8},
+    {0, B_7,    A_7,    C_7},
+    {0, B_6,    A_6,    C_6},
+    {0, B_5,    A_5,    C_5},
+    {0, B_4,    A_4,    C_4},
+    {0, B_3,    A_3,    C_3},
+    {0, B_2,    A_2,    C_2},
+    {0, B_1,    A_1,    C_1},
+
+    {0, B_15,   A_15,   C_15},
+    {0, E_13,   D_13,   F_13},
+    {0, B_12,   A_12,   C_12},
+    {0, E_15,   D_15,   F_15},
+    {0, B_16,   A_16,   C_16},
+    {0, E_16,   D_16,   F_16},
+    {0, H_16,   G_16,   I_16},
+    {0, K_16,   J_16,   L_16}
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+    {{0|(13<<4)},   {16*13.5,  0}, 1},
+    {{0|(12<<4)},   {16*12,  0}, 1},
+    {{0|(11<<4)},   {16*11,  0}, 1},
+    {{0|(10<<4)},   {16*10,  0}, 1},
+    {{0|(9<<4)},    {16*9,  0}, 1},
+    {{0|(8<<4)},    {16*8,  0}, 1},
+    {{0|(7<<4)},    {16*7,  0}, 1},
+       {{0|(6<<4)},    {16*6,  0}, 1},
+    {{0|(5<<4)},    {16*5,  0}, 1},
+    {{0|(4<<4)},    {16*4,  0}, 1},
+    {{0|(3<<4)},    {16*3,  0}, 1},
+    {{0|(2<<4)},    {16*2,  0}, 1},
+    {{0|(1<<4)},    {16*1,  0}, 1},
+    {{0|(0<<4)},    {16*0,  0}, 1},
+
+       {{2|(13<<4)},   {16*13.75, 24}, 1},
+    {{1|(12<<4)},   {16*12.5,  16}, 0},
+    {{1|(11<<4)},   {16*11.5,  16}, 0},
+    {{1|(10<<4)},   {16*10.5,  16}, 0},
+    {{1|(9<<4)},    { 16*9.5,  16}, 0},
+    {{1|(8<<4)},    { 16*8.5,  16}, 0},
+    {{1|(7<<4)},    { 16*7.5,  16}, 0},
+       {{1|(6<<4)},    { 16*6.5,  16}, 0},
+    {{1|(5<<4)},    { 16*5.5,  16}, 0},
+    {{1|(4<<4)},    { 16*4.5,  16}, 0},
+    {{1|(3<<4)},    { 16*3.5,  16}, 0},
+    {{1|(2<<4)},    { 16*2.5,  16}, 0},
+    {{1|(1<<4)},    { 16*1.5,  16}, 0},
+    {{1|(0<<4)},    { 16*0.25,  16}, 1},
+
+       {{1|(13<<4)},   {16*12.75,  32}, 1},
+    {{2|(11<<4)},   {16*11.75,  32}, 0},
+    {{2|(10<<4)},   {16*10.75,  32}, 0},
+    {{2|(9<<4)},    {16*9.75,  32}, 0},
+    {{2|(8<<4)},    {16*8.75,  32}, 0},
+    {{2|(7<<4)},    {16*7.75,  32}, 0},
+       {{2|(6<<4)},    { 16*6.75,  32}, 0},
+    {{2|(5<<4)},    { 16*5.75,  32}, 0},
+    {{2|(4<<4)},    { 16*4.75,  32}, 0},
+    {{2|(3<<4)},    { 16*3.75,  32}, 0},
+    {{2|(2<<4)},    { 16*2.75,  32}, 0},
+    {{2|(1<<4)},    { 16*1.75,  32}, 0},
+    {{2|(0<<4)},    { 16*0.375,  32}, 1},
+
+    {{3|(11<<4)},   {16*13.125,  48}, 1},
+    {{3|(10<<4)},   {16*11.25,  48}, 0},
+    {{3|(9<<4)},    {16*10.25,  48}, 0},
+    {{3|(8<<4)},    {16*9.25,  48}, 0},
+    {{3|(7<<4)},    {16*8.25,  48}, 0},
+       {{3|(6<<4)},    {16*7.25,  48}, 0},
+    {{3|(5<<4)},    {16*6.25,  48}, 0},
+    {{3|(4<<4)},    {16*5.25,  48}, 0},
+    {{3|(3<<4)},    {16*4.25,  48}, 0},
+    {{3|(2<<4)},    {16*3.25,  48}, 0},
+    {{3|(1<<4)},    {16*1.25,  48}, 0},
+    {{3|(0<<4)},    {16*0.625,  48}, 1},
+
+       {{4|(13<<4)},   {16*13.875,  64}, 1},
+    {{4|(11<<4)},   {16*12.625,  64}, 1},
+    {{4|(10<<4)},   {16*11.375,  64}, 1},
+    {{4|(9<<4)},    {16*10.125,  64}, 1},
+    {{4|(5<<4)},    { 16*6.375,  64}, 0},
+    {{4|(2<<4)},    { 16*2.625,  64}, 1},
+    {{4|(1<<4)},    { 16*1.375,  64}, 1},
+    {{4|(0<<4)},    { 16*0.125,  64}, 1}
+
+};
+
+
+
+#elif defined (dzrgb60_hhkb)
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+       {0, H_15,   G_15,   I_15},
+    {0, K_14,   J_14,   L_14},
+    {0, K_13,   J_13,   L_13},
+    {0, K_12,   J_12,   L_12},
+    {0, K_11,   J_11,   L_11},
+    {0, K_10,   J_10,   L_10},
+    {0, K_9,    J_9,    L_9},
+    {0, K_8,    J_8,    L_8},
+    {0, K_7,    J_7,    L_7},
+    {0, K_6,    J_6,    L_6},
+    {0, K_5,    J_5,    L_5},
+    {0, K_4,    J_4,    L_4},
+    {0, K_3,    J_3,    L_3},
+    {0, K_2,    J_2,    L_2},
+    {0, K_1,    J_1,    L_1},
+
+    {0, H_14,   G_14,   I_14},
+    {0, H_13,   G_13,   I_13},
+    {0, H_12,   G_12,   I_12},
+    {0, H_11,   G_11,   I_11},
+    {0, H_10,   G_10,   I_10},
+    {0, H_9,    G_9,    I_9},
+    {0, H_8,    G_8,    I_8},
+    {0, H_7,    G_7,    I_7},
+    {0, H_6,    G_6,    I_6},
+    {0, H_5,    G_5,    I_5},
+    {0, H_4,    G_4,    I_4},
+    {0, H_3,    G_3,    I_3},
+    {0, H_2,    G_2,    I_2},
+    {0, H_1,    G_1,    I_1},
+
+    {0, E_14,   D_14,   F_14},
+    {0, E_12,   D_12,   F_12},
+    {0, E_11,   D_11,   F_11},
+    {0, E_10,   D_10,   F_10},
+    {0, E_9,    D_9,    F_9},
+    {0, E_8,    D_8,    F_8},
+    {0, E_7,    D_7,    F_7},
+    {0, E_6,    D_6,    F_6},
+    {0, E_5,    D_5,    F_5},
+    {0, E_4,    D_4,    F_4},
+    {0, E_3,    D_3,    F_3},
+    {0, E_2,    D_2,    F_2},
+    {0, E_1,    D_1,    F_1},
+
+    {0, B_14,   A_14,   C_14},
+    {0, B_13,   A_13,   C_13},
+    {0, B_11,   A_11,   C_11},
+    {0, B_10,   A_10,   C_10},
+    {0, B_9,    A_9,    C_9},
+    {0, B_8,    A_8,    C_8},
+    {0, B_7,    A_7,    C_7},
+    {0, B_6,    A_6,    C_6},
+    {0, B_5,    A_5,    C_5},
+    {0, B_4,    A_4,    C_4},
+    {0, B_3,    A_3,    C_3},
+    {0, B_2,    A_2,    C_2},
+    {0, B_1,    A_1,    C_1},
+
+    {0, B_15,   A_15,   C_15},
+    {0, E_13,   D_13,   F_13},
+    {0, B_12,   A_12,   C_12},
+    {0, B_16,   A_16,   C_16},
+    {0, E_16,   D_16,   F_16},
+    {0, H_16,   G_16,   I_16},
+    {0, K_16,   J_16,   L_16}
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+       {{2|(12<<4)},   {16*14,  0}, 1},
+    {{0|(13<<4)},   {16*13,  0}, 1},
+    {{0|(12<<4)},   {16*12,  0}, 1},
+    {{0|(11<<4)},   {16*11,  0}, 1},
+    {{0|(10<<4)},   {16*10,  0}, 1},
+    {{0|(9<<4)},    {16*9,  0}, 1},
+    {{0|(8<<4)},    {16*8,  0}, 1},
+    {{0|(7<<4)},    {16*7,  0}, 1},
+       {{0|(6<<4)},    {16*6,  0}, 1},
+    {{0|(5<<4)},    {16*5,  0}, 1},
+    {{0|(4<<4)},    {16*4,  0}, 1},
+    {{0|(3<<4)},    {16*3,  0}, 1},
+    {{0|(2<<4)},    {16*2,  0}, 1},
+    {{0|(1<<4)},    {16*1,  0}, 1},
+    {{0|(0<<4)},    {16*0,  0}, 1},
+
+       {{1|(13<<4)},   {16*13.75, 16}, 1},
+    {{1|(12<<4)},   {16*12.5,  16}, 0},
+    {{1|(11<<4)},   {16*11.5,  16}, 0},
+    {{1|(10<<4)},   {16*10.5,  16}, 0},
+    {{1|(9<<4)},    { 16*9.5,  16}, 0},
+    {{1|(8<<4)},    { 16*8.5,  16}, 0},
+    {{1|(7<<4)},    { 16*7.5,  16}, 0},
+       {{1|(6<<4)},    { 16*6.5,  16}, 0},
+    {{1|(5<<4)},    { 16*5.5,  16}, 0},
+    {{1|(4<<4)},    { 16*4.5,  16}, 0},
+    {{1|(3<<4)},    { 16*3.5,  16}, 0},
+    {{1|(2<<4)},    { 16*2.5,  16}, 0},
+    {{1|(1<<4)},    { 16*1.5,  16}, 0},
+    {{1|(0<<4)},    { 16*0.25,  16}, 1},
+
+       {{2|(13<<4)},   {16*12.75,  32}, 1},
+    {{2|(11<<4)},   {16*11.75,  32}, 0},
+    {{2|(10<<4)},   {16*10.75,  32}, 0},
+    {{2|(9<<4)},    {16*9.75,  32}, 0},
+    {{2|(8<<4)},    {16*8.75,  32}, 0},
+    {{2|(7<<4)},    {16*7.75,  32}, 0},
+       {{2|(6<<4)},    { 16*6.75,  32}, 0},
+    {{2|(5<<4)},    { 16*5.75,  32}, 0},
+    {{2|(4<<4)},    { 16*4.75,  32}, 0},
+    {{2|(3<<4)},    { 16*3.75,  32}, 0},
+    {{2|(2<<4)},    { 16*2.75,  32}, 0},
+    {{2|(1<<4)},    { 16*1.75,  32}, 0},
+    {{2|(0<<4)},    { 16*0.375,  32}, 1},
+
+    {{3|(13<<4)},   {16*14,     48}, 1},
+    {{3|(11<<4)},   {16*12.625, 48}, 0},
+    {{3|(10<<4)},   {16*11.25,  48}, 0},
+    {{3|(9<<4)},    {16*10.25,  48}, 0},
+    {{3|(8<<4)},    {16*9.25,  48}, 0},
+    {{3|(7<<4)},    {16*8.25,  48}, 0},
+       {{3|(6<<4)},    {16*7.25,  48}, 0},
+    {{3|(5<<4)},    {16*6.25,  48}, 0},
+    {{3|(4<<4)},    {16*5.25,  48}, 0},
+    {{3|(3<<4)},    {16*4.25,  48}, 0},
+    {{3|(2<<4)},    {16*3.25,  48}, 0},
+    {{3|(1<<4)},    {16*1.25,  48}, 0},
+    {{3|(0<<4)},    {16*0.625,  48}, 1},
+
+       {{4|(13<<4)},   {16*13.625,  64}, 1},
+    {{4|(11<<4)},   {16*12.375,  64}, 1},
+    {{4|(10<<4)},   {16*11.125,  64}, 1},
+    {{4|(5<<4)},    { 16*7,      64}, 0},
+    {{4|(2<<4)},    { 16*2.875,  64}, 1},
+    {{4|(1<<4)},    { 16*1.625,  64}, 1},
+    {{4|(0<<4)},    { 16*0.375,  64}, 1}
+
+};
+#elif defined (dzrgb60_hhkb_iso)
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+       {0, H_15,   G_15,   I_15},
+    {0, K_14,   J_14,   L_14},
+    {0, K_13,   J_13,   L_13},
+    {0, K_12,   J_12,   L_12},
+    {0, K_11,   J_11,   L_11},
+    {0, K_10,   J_10,   L_10},
+    {0, K_9,    J_9,    L_9},
+    {0, K_8,    J_8,    L_8},
+    {0, K_7,    J_7,    L_7},
+    {0, K_6,    J_6,    L_6},
+    {0, K_5,    J_5,    L_5},
+    {0, K_4,    J_4,    L_4},
+    {0, K_3,    J_3,    L_3},
+    {0, K_2,    J_2,    L_2},
+    {0, K_1,    J_1,    L_1},
+
+    {0, K_15,   J_15,   L_15},
+    {0, H_13,   G_13,   I_13},
+    {0, H_12,   G_12,   I_12},
+    {0, H_11,   G_11,   I_11},
+    {0, H_10,   G_10,   I_10},
+    {0, H_9,    G_9,    I_9},
+    {0, H_8,    G_8,    I_8},
+    {0, H_7,    G_7,    I_7},
+    {0, H_6,    G_6,    I_6},
+    {0, H_5,    G_5,    I_5},
+    {0, H_4,    G_4,    I_4},
+    {0, H_3,    G_3,    I_3},
+    {0, H_2,    G_2,    I_2},
+    {0, H_1,    G_1,    I_1},
+
+    {0, E_15,   D_15,   F_15},
+    {0, E_12,   D_12,   F_12},
+    {0, E_11,   D_11,   F_11},
+    {0, E_10,   D_10,   F_10},
+    {0, E_9,    D_9,    F_9},
+    {0, E_8,    D_8,    F_8},
+    {0, E_7,    D_7,    F_7},
+    {0, E_6,    D_6,    F_6},
+    {0, E_5,    D_5,    F_5},
+    {0, E_4,    D_4,    F_4},
+    {0, E_3,    D_3,    F_3},
+    {0, E_2,    D_2,    F_2},
+    {0, E_1,    D_1,    F_1},
+
+    {0, B_14,   A_14,   C_14},
+    {0, B_13,   A_13,   C_13},
+    {0, B_11,   A_11,   C_11},
+    {0, B_10,   A_10,   C_10},
+    {0, B_9,    A_9,    C_9},
+    {0, B_8,    A_8,    C_8},
+    {0, B_7,    A_7,    C_7},
+    {0, B_6,    A_6,    C_6},
+    {0, B_5,    A_5,    C_5},
+    {0, B_4,    A_4,    C_4},
+    {0, B_3,    A_3,    C_3},
+    {0, B_2,    A_2,    C_2},
+    {0, B_1,    A_1,    C_1},
+
+    {0, B_15,   A_15,   C_15},
+    {0, E_13,   D_13,   F_13},
+    {0, B_12,   A_12,   C_12},
+    {0, B_16,   A_16,   C_16},
+    {0, E_16,   D_16,   F_16},
+    {0, H_16,   G_16,   I_16},
+    {0, K_16,   J_16,   L_16}
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+       {{2|(12<<4)},   {16*14,  0}, 1},
+    {{0|(13<<4)},   {16*13,  0}, 1},
+    {{0|(12<<4)},   {16*12,  0}, 1},
+    {{0|(11<<4)},   {16*11,  0}, 1},
+    {{0|(10<<4)},   {16*10,  0}, 1},
+    {{0|(9<<4)},    {16*9,  0}, 1},
+    {{0|(8<<4)},    {16*8,  0}, 1},
+    {{0|(7<<4)},    {16*7,  0}, 1},
+       {{0|(6<<4)},    {16*6,  0}, 1},
+    {{0|(5<<4)},    {16*5,  0}, 1},
+    {{0|(4<<4)},    {16*4,  0}, 1},
+    {{0|(3<<4)},    {16*3,  0}, 1},
+    {{0|(2<<4)},    {16*2,  0}, 1},
+    {{0|(1<<4)},    {16*1,  0}, 1},
+    {{0|(0<<4)},    {16*0,  0}, 1},
+
+       {{2|(13<<4)},   {16*13.75, 24}, 1},
+    {{1|(12<<4)},   {16*12.5,  16}, 0},
+    {{1|(11<<4)},   {16*11.5,  16}, 0},
+    {{1|(10<<4)},   {16*10.5,  16}, 0},
+    {{1|(9<<4)},    { 16*9.5,  16}, 0},
+    {{1|(8<<4)},    { 16*8.5,  16}, 0},
+    {{1|(7<<4)},    { 16*7.5,  16}, 0},
+       {{1|(6<<4)},    { 16*6.5,  16}, 0},
+    {{1|(5<<4)},    { 16*5.5,  16}, 0},
+    {{1|(4<<4)},    { 16*4.5,  16}, 0},
+    {{1|(3<<4)},    { 16*3.5,  16}, 0},
+    {{1|(2<<4)},    { 16*2.5,  16}, 0},
+    {{1|(1<<4)},    { 16*1.5,  16}, 0},
+    {{1|(0<<4)},    { 16*0.25,  16}, 1},
+
+       {{1|(13<<4)},   {16*12.75,  32}, 1},
+    {{2|(11<<4)},   {16*11.75,  32}, 0},
+    {{2|(10<<4)},   {16*10.75,  32}, 0},
+    {{2|(9<<4)},    {16*9.75,  32}, 0},
+    {{2|(8<<4)},    {16*8.75,  32}, 0},
+    {{2|(7<<4)},    {16*7.75,  32}, 0},
+       {{2|(6<<4)},    { 16*6.75,  32}, 0},
+    {{2|(5<<4)},    { 16*5.75,  32}, 0},
+    {{2|(4<<4)},    { 16*4.75,  32}, 0},
+    {{2|(3<<4)},    { 16*3.75,  32}, 0},
+    {{2|(2<<4)},    { 16*2.75,  32}, 0},
+    {{2|(1<<4)},    { 16*1.75,  32}, 0},
+    {{2|(0<<4)},    { 16*0.375,  32}, 1},
+
+    {{3|(13<<4)},   {16*14,     48}, 1},
+    {{3|(11<<4)},   {16*12.625, 48}, 0},
+    {{3|(10<<4)},   {16*11.25,  48}, 0},
+    {{3|(9<<4)},    {16*10.25,  48}, 0},
+    {{3|(8<<4)},    {16*9.25,  48}, 0},
+    {{3|(7<<4)},    {16*8.25,  48}, 0},
+       {{3|(6<<4)},    {16*7.25,  48}, 0},
+    {{3|(5<<4)},    {16*6.25,  48}, 0},
+    {{3|(4<<4)},    {16*5.25,  48}, 0},
+    {{3|(3<<4)},    {16*4.25,  48}, 0},
+    {{3|(2<<4)},    {16*3.25,  48}, 0},
+    {{3|(1<<4)},    {16*1.25,  48}, 0},
+    {{3|(0<<4)},    {16*0.625,  48}, 1},
+
+       {{4|(13<<4)},   {16*13.625,  64}, 1},
+    {{4|(11<<4)},   {16*12.375,  64}, 1},
+    {{4|(10<<4)},   {16*11.125,  64}, 1},
+    {{4|(5<<4)},    { 16*7,      64}, 0},
+    {{4|(2<<4)},    { 16*2.875,  64}, 1},
+    {{4|(1<<4)},    { 16*1.625,  64}, 1},
+    {{4|(0<<4)},    { 16*0.375,  64}, 1}
+
+};
+#elif defined (dzrgb60_ansi)
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |       G location
+ *   |  |       |       B location
+ *   |  |       |       | */
+    {0, K_14,   J_14,   L_14},
+    {0, K_13,   J_13,   L_13},
+    {0, K_12,   J_12,   L_12},
+    {0, K_11,   J_11,   L_11},
+    {0, K_10,   J_10,   L_10},
+    {0, K_9,    J_9,    L_9},
+    {0, K_8,    J_8,    L_8},
+    {0, K_7,    J_7,    L_7},
+    {0, K_6,    J_6,    L_6},
+    {0, K_5,    J_5,    L_5},
+    {0, K_4,    J_4,    L_4},
+    {0, K_3,    J_3,    L_3},
+    {0, K_2,    J_2,    L_2},
+    {0, K_1,    J_1,    L_1},
+
+    {0, H_14,   G_14,   I_14},
+    {0, H_13,   G_13,   I_13},
+    {0, H_12,   G_12,   I_12},
+    {0, H_11,   G_11,   I_11},
+    {0, H_10,   G_10,   I_10},
+    {0, H_9,    G_9,    I_9},
+    {0, H_8,    G_8,    I_8},
+    {0, H_7,    G_7,    I_7},
+    {0, H_6,    G_6,    I_6},
+    {0, H_5,    G_5,    I_5},
+    {0, H_4,    G_4,    I_4},
+    {0, H_3,    G_3,    I_3},
+    {0, H_2,    G_2,    I_2},
+    {0, H_1,    G_1,    I_1},
+
+    {0, E_14,   D_14,   F_14},
+    {0, E_12,   D_12,   F_12},
+    {0, E_11,   D_11,   F_11},
+    {0, E_10,   D_10,   F_10},
+    {0, E_9,    D_9,    F_9},
+    {0, E_8,    D_8,    F_8},
+    {0, E_7,    D_7,    F_7},
+    {0, E_6,    D_6,    F_6},
+    {0, E_5,    D_5,    F_5},
+    {0, E_4,    D_4,    F_4},
+    {0, E_3,    D_3,    F_3},
+    {0, E_2,    D_2,    F_2},
+    {0, E_1,    D_1,    F_1},
+
+    {0, B_13,   A_13,   C_13},
+    {0, B_11,   A_11,   C_11},
+    {0, B_10,   A_10,   C_10},
+    {0, B_9,    A_9,    C_9},
+    {0, B_8,    A_8,    C_8},
+    {0, B_7,    A_7,    C_7},
+    {0, B_6,    A_6,    C_6},
+    {0, B_5,    A_5,    C_5},
+    {0, B_4,    A_4,    C_4},
+    {0, B_3,    A_3,    C_3},
+    {0, B_2,    A_2,    C_2},
+    {0, B_1,    A_1,    C_1},
+
+    {0, B_15,   A_15,   C_15},
+    {0, E_13,   D_13,   F_13},
+    {0, B_12,   A_12,   C_12},
+    {0, E_15,   D_15,   F_15},
+    {0, B_16,   A_16,   C_16},
+    {0, E_16,   D_16,   F_16},
+    {0, H_16,   G_16,   I_16},
+    {0, K_16,   J_16,   L_16}
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+    {{0|(13<<4)},   {16*13.5,  0}, 1},
+    {{0|(12<<4)},   {16*12,  0}, 1},
+    {{0|(11<<4)},   {16*11,  0}, 1},
+    {{0|(10<<4)},   {16*10,  0}, 1},
+    {{0|(9<<4)},    {16*9,  0}, 1},
+    {{0|(8<<4)},    {16*8,  0}, 1},
+    {{0|(7<<4)},    {16*7,  0}, 1},
+       {{0|(6<<4)},    {16*6,  0}, 1},
+    {{0|(5<<4)},    {16*5,  0}, 1},
+    {{0|(4<<4)},    {16*4,  0}, 1},
+    {{0|(3<<4)},    {16*3,  0}, 1},
+    {{0|(2<<4)},    {16*2,  0}, 1},
+    {{0|(1<<4)},    {16*1,  0}, 1},
+    {{0|(0<<4)},    {16*0,  0}, 1},
+
+       {{1|(13<<4)},   {16*13.75, 16}, 1},
+    {{1|(12<<4)},   {16*12.5,  16}, 0},
+    {{1|(11<<4)},   {16*11.5,  16}, 0},
+    {{1|(10<<4)},   {16*10.5,  16}, 0},
+    {{1|(9<<4)},    { 16*9.5,  16}, 0},
+    {{1|(8<<4)},    { 16*8.5,  16}, 0},
+    {{1|(7<<4)},    { 16*7.5,  16}, 0},
+       {{1|(6<<4)},    { 16*6.5,  16}, 0},
+    {{1|(5<<4)},    { 16*5.5,  16}, 0},
+    {{1|(4<<4)},    { 16*4.5,  16}, 0},
+    {{1|(3<<4)},    { 16*3.5,  16}, 0},
+    {{1|(2<<4)},    { 16*2.5,  16}, 0},
+    {{1|(1<<4)},    { 16*1.5,  16}, 0},
+    {{1|(0<<4)},    { 16*0.25,  16}, 1},
+
+       {{2|(13<<4)},   {16*13.375,  24}, 1},
+    {{2|(11<<4)},   {16*11.75,  32}, 0},
+    {{2|(10<<4)},   {16*10.75,  32}, 0},
+    {{2|(9<<4)},    {16*9.75,  32}, 0},
+    {{2|(8<<4)},    {16*8.75,  32}, 0},
+    {{2|(7<<4)},    {16*7.75,  32}, 0},
+       {{2|(6<<4)},    { 16*6.75,  32}, 0},
+    {{2|(5<<4)},    { 16*5.75,  32}, 0},
+    {{2|(4<<4)},    { 16*4.75,  32}, 0},
+    {{2|(3<<4)},    { 16*3.75,  32}, 0},
+    {{2|(2<<4)},    { 16*2.75,  32}, 0},
+    {{2|(1<<4)},    { 16*1.75,  32}, 0},
+    {{2|(0<<4)},    { 16*0.375,  32}, 1},
+
+    {{3|(11<<4)},   {16*13.125,  48}, 1},
+    {{3|(10<<4)},   {16*11.25,  48}, 0},
+    {{3|(9<<4)},    {16*10.25,  48}, 0},
+    {{3|(8<<4)},    {16*9.25,  48}, 0},
+    {{3|(7<<4)},    {16*8.25,  48}, 0},
+       {{3|(6<<4)},    {16*7.25,  48}, 0},
+    {{3|(5<<4)},    {16*6.25,  48}, 0},
+    {{3|(4<<4)},    {16*5.25,  48}, 0},
+    {{3|(3<<4)},    {16*4.25,  48}, 0},
+    {{3|(2<<4)},    {16*3.25,  48}, 0},
+    {{3|(1<<4)},    {16*1.25,  48}, 0},
+    {{3|(0<<4)},    {16*0.625,  48}, 1},
+
+       {{4|(13<<4)},   {16*13.875,  64}, 1},
+    {{4|(11<<4)},   {16*12.625,  64}, 1},
+    {{4|(10<<4)},   {16*11.375,  64}, 1},
+    {{4|(9<<4)},    {16*10.125,  64}, 1},
+    {{4|(5<<4)},    { 16*6.375,  64}, 0},
+    {{4|(2<<4)},    { 16*2.625,  64}, 1},
+    {{4|(1<<4)},    { 16*1.375,  64}, 1},
+    {{4|(0<<4)},    { 16*0.125,  64}, 1}
+};
+#else
+
 const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
 /* Refer to IS31 manual for these locations
  *   driver
@@ -72,7 +655,7 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
     {0, B_16,   A_16,   C_16},
     {0, E_16,   D_16,   F_16},
     {0, H_16,   G_16,   I_16},
-    {0, K_16,   J_16,   L_16},
+    {0, K_16,   J_16,   L_16}
 };
 
 const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
@@ -142,9 +725,10 @@ const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
     {{4|(5<<4)},    { 17.23*5,  64}, 0},
     {{4|(2<<4)},    { 17.23*2,  64}, 1},
     {{4|(1<<4)},    { 17.23*1,  64}, 1},
-    {{4|(0<<4)},    { 17.23*0,  64}, 1},
+    {{4|(0<<4)},    { 17.23*0,  64}, 1}
 
 };
+#endif
 
 void matrix_init_kb(void) {
     matrix_init_user();
index a029933f1fffc93344d61753f0784cf2d4d8d439..1884ddfb0b8a848ce0f99912355f40735c867325 100644 (file)
@@ -1,6 +1,7 @@
 #pragma once
 #define XXX KC_NO
 #include "quantum.h"
+
 #define LAYOUT( \
     K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
     K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
     { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D }, \
     { K40, K41, K42, XXX, XXX, K45, XXX, XXX, K48, K49, K4A, K4B, XXX, K4D }  \
 }
+#define LAYOUT_ISO( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,           \
+    K40, K41, K42,           K45,                K49, K4A, K4B,      K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, XXX }, \
+    { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, XXX, K4D }  \
+}
+
+#define LAYOUT_HHKB( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,\
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,\
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,\
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D,\
+    K40, K41, K42,           K45,                     K4A, K4B,      K4D \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D}, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D },     \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D },     \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D },     \
+    { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, XXX, K4A, K4B, XXX, K4D }      \
+}
+
+#define LAYOUT_HHKB_ISO( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,  \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D,  \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,      K3D,  \
+    K40, K41, K42,           K45,                     K4A, K4B,      K4D   \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,}, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D }, \
+    { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, XXX, K4A, K4B, XXX, K4D }  \
+}
+
+#define LAYOUT_ANSI( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,      K2D, \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B,           \
+    K40, K41, K42,           K45,                K49, K4A, K4B,      K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, XXX }, \
+    { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, XXX, K4D }  \
+}
diff --git a/keyboards/dztech/dz60rgb/keymaps/ansi/config.h b/keyboards/dztech/dz60rgb/keymaps/ansi/config.h
new file mode 100644 (file)
index 0000000..3ca582e
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+#define dzrgb60_ansi
+#undef DRIVER_1_LED_TOTAL
+#undef DRIVER_LED_TOTAL
+#define DRIVER_1_LED_TOTAL 61
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz60rgb/keymaps/ansi/keymap.c b/keyboards/dztech/dz60rgb/keymaps/ansi/keymap.c
new file mode 100644 (file)
index 0000000..fcdf29e
--- /dev/null
@@ -0,0 +1,83 @@
+#include QMK_KEYBOARD_H
+extern bool g_suspend_state;
+#define _LAYER0 0
+#define _LAYER1 1
+#define _LAYER2 2
+#define _LAYER3 3
+#define _LAYER4 4
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+               [_LAYER0] = LAYOUT_ANSI( /* Base */
+                       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_BSLASH,\
+                       CTL_T(KC_CAPS),  KC_A,     KC_S,     KC_D,  KC_F,  KC_G,  KC_H,    KC_J,  KC_K,    KC_L,     KC_SCLN,   KC_QUOT,           KC_ENT, \
+                   KC_LSFT,         KC_Z,     KC_X,     KC_C,  KC_V,  KC_B,  KC_N,    KC_M,  KC_COMM, KC_DOT,   KC_SLSH,   KC_RSFT, \
+                   KC_LCTL,         KC_LGUI,  KC_LALT,                KC_SPC,                         KC_RALT,  MO(1),     MO(2),             KC_RCTL),
+               [_LAYER1] = LAYOUT_ANSI( /* FN */
+                               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 ,\
+                           KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_CALC,  KC_TRNS,  KC_INS,   KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  ,\
+                           KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,            KC_TRNS,\
+                               KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT, \
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(3),                                  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER2] = LAYOUT_ANSI( /* FN2 */
+                               KC_TRNS,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL ,\
+                               KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET  ,\
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, \
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER3] = LAYOUT_ANSI( /* FN3 */
+                               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_BSLASH,\
+                               CTL_T(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_LALT,  KC_LGUI,                KC_SPC,                           KC_TRNS,MO(4),   KC_RALT,           KC_RCTL),
+               [_LAYER4] = LAYOUT_ANSI( /* FN4 */
+                               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 ,\
+                           KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  ,\
+                           KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_UP,    KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_HOME,  KC_PGUP,            KC_TRNS,\
+                               KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT, \
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(0),                                  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+               };
+
+void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
+  rgb_led led;
+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+    led = g_rgb_leds[i];
+    if (led.matrix_co.raw < 0xFF) {
+      if (led.modifier) {
+          rgb_matrix_set_color( i, red, green, blue );
+      }
+    }
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+         uint8_t this_led = host_keyboard_leds();
+         if (!g_suspend_state) {
+           switch (biton32(layer_state)) {
+             case _LAYER1:
+                   rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+             case _LAYER2:
+               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+             case _LAYER3:
+               rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
+             case _LAYER4:
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+                                                                 }
+                               }
+         if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
+               rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
+         }
+
+}
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+       bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+         return true;
+       }
index 8de71848d5e3b47450165e0f00c79c698e3681cd..0eff4ca8a3790a02941f986adcbf51fbad708494 100644 (file)
@@ -10,7 +10,7 @@ extern bool g_suspend_state;
 #define _LAYER7 7
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                [_LAYER0] = LAYOUT( /* Base */
-                       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_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_BSLASH,\
                        CTL_T(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,   RSFT_T(KC_SLSH), KC_UP,             LT(2, KC_DEL),\
@@ -60,92 +60,90 @@ void rgb_matrix_indicators_user(void) {
          if (!g_suspend_state) {
            switch (biton32(layer_state)) {
              case _LAYER1:
-                   rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+          rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false);
+          break;
              case _LAYER2:
-               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false);
+          break;
+        case _LAYER3:
+          if ( this_led & (1<<USB_LED_NUM_LOCK)) {
+            rgb_matrix_set_color(13, 0xFF, 0x00, 0x00);
+          } else {
+            rgb_matrix_set_color(13, 0x00, 0x00, 0x00);
+          }
+          rgb_matrix_set_color(0, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(1, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(1, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(2, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(3, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(4, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(5, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(6, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(7, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(8, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(9, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(10, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(11, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(12, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(14, 0x00, 0x00, 0xFF);
+          rgb_matrix_set_color(15, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(16, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(17, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(18, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(19, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(20, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(21, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(22, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(23, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(24, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(25, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(26, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(27, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(28, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(29, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(30, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(31, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(32, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(33, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(34, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(35, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(36, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(37, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(38, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(39, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(40, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(41, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(42, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(43, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(44, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(45, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(46, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(47, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(48, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(49, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(50, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(51, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(52, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(53, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(54, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(55, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(56, 0x00, 0x00, 0x00);
+          rgb_matrix_set_color(57, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(58, 0x00, 0xFF, 0x00);
+          rgb_matrix_set_color(59, 0xFF, 0x00, 0x00);
+          rgb_matrix_set_color(60, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(61, 0xFF, 0xFF, 0x00);
+          rgb_matrix_set_color(62, 0x00, 0x00, 0x00);
+          break;
              case _LAYER4:
-               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
-                                                                 }
-                               }
-         if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
-               rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
-         }
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false);
+          break;
+      }
+    }
+    if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
+      rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
+    }
 
-         switch (biton32(layer_state)) {
-             case _LAYER3:
-                 if ( this_led & (1<<USB_LED_NUM_LOCK))
-                 {
-                         rgb_matrix_set_color(13, 0xFF, 0x00, 0x00);
-                 }
-                 else
-                 {
-                         rgb_matrix_set_color(13, 0x00, 0x00, 0x00);
-                 }
-                   rgb_matrix_set_color(0, 0x00, 0xFF, 0x00);
-                   rgb_matrix_set_color(1, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(1, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(2, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(3, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(4, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(5, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(6, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(7, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(8, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(9, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(10, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(11, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(12, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(14, 0x00, 0x00, 0xFF);
-               rgb_matrix_set_color(15, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(16, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(17, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(18, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(19, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(20, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(21, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(22, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(23, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(24, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(25, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(26, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(27, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(28, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(29, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(30, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(31, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(32, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(33, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(34, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(35, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(36, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(37, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(38, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(39, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(40, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(41, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(42, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(43, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(44, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(45, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(46, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(47, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(48, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(49, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(50, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(51, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(52, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(53, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(54, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(55, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(56, 0x00, 0x00, 0x00);
-               rgb_matrix_set_color(57, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(58, 0x00, 0xFF, 0x00);
-               rgb_matrix_set_color(59, 0xFF, 0x00, 0x00);
-               rgb_matrix_set_color(60, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(61, 0xFF, 0xFF, 0x00);
-               rgb_matrix_set_color(62, 0x00, 0x00, 0x00);
-               break;
-           }
 }
 
 
diff --git a/keyboards/dztech/dz60rgb/keymaps/hhkb/config.h b/keyboards/dztech/dz60rgb/keymaps/hhkb/config.h
new file mode 100644 (file)
index 0000000..70f4bde
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+#define dzrgb60_hhkb
+#undef DRIVER_1_LED_TOTAL
+#undef DRIVER_LED_TOTAL
+#define DRIVER_1_LED_TOTAL 62
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz60rgb/keymaps/hhkb/keymap.c b/keyboards/dztech/dz60rgb/keymaps/hhkb/keymap.c
new file mode 100644 (file)
index 0000000..6ba3ac7
--- /dev/null
@@ -0,0 +1,84 @@
+#include QMK_KEYBOARD_H
+extern bool g_suspend_state;
+#define _LAYER0 0
+#define _LAYER1 1
+#define _LAYER2 2
+#define _LAYER3 3
+#define _LAYER4 4
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+               [_LAYER0] = LAYOUT_HHKB( /* Base */
+                             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_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,
+                                 CTL_T(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_DEL,  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(2),
+                             KC_LCTL,         KC_LGUI, KC_LALT,                   KC_SPACE,                                   KC_RALT, MO(1),            KC_RCTL),
+               [_LAYER1] = LAYOUT_HHKB( /* FN */
+                                 KC_GRAVE, KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,
+                     KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_CALC,  KC_TRNS,  KC_INS,   KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  ,\
+                             KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,  KC_TRNS,  KC_TRNS,\
+                             KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT,            KC_TRNS,\
+                             KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(3),                                            KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER2] = LAYOUT_HHKB( /* FN2 */
+                                 KC_TRNS,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL ,\
+                                 KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET  ,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,                                          KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER3] = LAYOUT_HHKB( /* FN3 */
+                                 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_BSLASH,\
+                                 CTL_T(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_DEL,  KC_ENT, \
+                             KC_LSFT,       KC_Z,     KC_X,     KC_C,  KC_V,  KC_B,  KC_N,    KC_M,    KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,           MO(4),\
+                             KC_LCTL,       KC_LALT,  KC_LGUI,                KC_SPC,                                   MO(4),   KC_RGUI,           KC_RCTL),
+               [_LAYER4] = LAYOUT_HHKB( /* FN4 */
+                                 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 ,\
+                             KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  ,\
+                             KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_UP,    KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_HOME,  KC_PGUP,  KC_TRNS,  KC_TRNS,\
+                                 KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT,            KC_TRNS,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(0),                                            KC_TRNS,  KC_TRNS,            KC_TRNS),
+               };
+
+
+void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
+  rgb_led led;
+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+    led = g_rgb_leds[i];
+    if (led.matrix_co.raw < 0xFF) {
+      if (led.modifier) {
+          rgb_matrix_set_color( i, red, green, blue );
+      }
+    }
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+         uint8_t this_led = host_keyboard_leds();
+         if (!g_suspend_state) {
+           switch (biton32(layer_state)) {
+             case _LAYER1:
+                   rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+             case _LAYER2:
+               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+             case _LAYER3:
+               rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
+             case _LAYER4:
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+                                                                 }
+                               }
+         if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
+               rgb_matrix_set_color(41, 0xFF, 0xFF, 0xFF);
+         }
+
+}
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+       bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+         return true;
+       }
diff --git a/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/config.h b/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/config.h
new file mode 100644 (file)
index 0000000..2bc3519
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+#define dzrgb60_hhkb_iso
+#undef DRIVER_1_LED_TOTAL
+#undef DRIVER_LED_TOTAL
+#define DRIVER_1_LED_TOTAL 62
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/keymap.c b/keyboards/dztech/dz60rgb/keymaps/hhkb_iso/keymap.c
new file mode 100644 (file)
index 0000000..772eddf
--- /dev/null
@@ -0,0 +1,84 @@
+#include QMK_KEYBOARD_H
+extern bool g_suspend_state;
+#define _LAYER0 0
+#define _LAYER1 1
+#define _LAYER2 2
+#define _LAYER3 3
+#define _LAYER4 4
+#define _LAYER5 5
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+               [_LAYER0] = LAYOUT_HHKB_ISO( /* Base */
+                             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_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,
+                                 CTL_T(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_DEL,  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(2),
+                             KC_LCTL,         KC_LGUI, KC_LALT,                   KC_SPACE,                                   KC_RALT, MO(1),            KC_RCTL),
+               [_LAYER1] = LAYOUT_HHKB_ISO( /* FN */
+                                 KC_GRAVE, KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_TRNS,
+                     KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_CALC,  KC_TRNS,  KC_INS,   KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  ,\
+                             KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,  KC_TRNS,  KC_TRNS,\
+                             KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT,            KC_TRNS,\
+                             KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(3),                                            KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER2] = LAYOUT_HHKB_ISO( /* LIGHT */
+                                 KC_TRNS,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL ,\
+                                 KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET  ,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,                                          KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER3] = LAYOUT_HHKB_ISO( /* NUMPAD */
+                                 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_BSLASH,\
+                                 CTL_T(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_DEL,  KC_ENT, \
+                             KC_LSFT,       KC_Z,     KC_X,     KC_C,  KC_V,  KC_B,  KC_N,    KC_M,    KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,           MO(4),\
+                             KC_LCTL,       KC_LALT,  KC_LGUI,                KC_SPC,                                   MO(4),   KC_RGUI,           KC_RCTL),
+               [_LAYER4] = LAYOUT_HHKB_ISO( /* MAC */
+                                 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 ,\
+                             KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  ,\
+                             KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_UP,    KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_HOME,  KC_PGUP,  KC_TRNS,  KC_TRNS,\
+                                 KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT,            KC_TRNS,\
+                                 KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(0),                                            KC_TRNS,  KC_TRNS,            KC_TRNS),
+               };
+
+void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
+  rgb_led led;
+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+    led = g_rgb_leds[i];
+    if (led.matrix_co.raw < 0xFF) {
+      if (led.modifier) {
+          rgb_matrix_set_color( i, red, green, blue );
+      }
+    }
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+         uint8_t this_led = host_keyboard_leds();
+         if (!g_suspend_state) {
+           switch (biton32(layer_state)) {
+             case _LAYER1:
+                   rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+             case _LAYER2:
+               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+             case _LAYER3:
+               rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
+             case _LAYER4:
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+                                                                 }
+                               }
+         if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
+               rgb_matrix_set_color(41, 0xFF, 0xFF, 0xFF);
+         }
+
+}
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+       bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+         return true;
+       }
diff --git a/keyboards/dztech/dz60rgb/keymaps/iso/config.h b/keyboards/dztech/dz60rgb/keymaps/iso/config.h
new file mode 100644 (file)
index 0000000..7ad810a
--- /dev/null
@@ -0,0 +1,6 @@
+#pragma once
+#define dzrgb60_iso
+#undef DRIVER_1_LED_TOTAL
+#undef DRIVER_LED_TOTAL
+#define DRIVER_1_LED_TOTAL 61
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/dztech/dz60rgb/keymaps/iso/keymap.c b/keyboards/dztech/dz60rgb/keymaps/iso/keymap.c
new file mode 100644 (file)
index 0000000..a78e237
--- /dev/null
@@ -0,0 +1,83 @@
+#include QMK_KEYBOARD_H
+extern bool g_suspend_state;
+#define _LAYER0 0
+#define _LAYER1 1
+#define _LAYER2 2
+#define _LAYER3 3
+#define _LAYER4 4
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+               [_LAYER0] = LAYOUT_ANSI( /* Base */
+                       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_BSLASH,\
+                       CTL_T(KC_CAPS),  KC_A,     KC_S,     KC_D,  KC_F,  KC_G,  KC_H,    KC_J,  KC_K,    KC_L,     KC_SCLN,   KC_QUOT,           KC_ENT, \
+                   KC_LSFT,         KC_Z,     KC_X,     KC_C,  KC_V,  KC_B,  KC_N,    KC_M,  KC_COMM, KC_DOT,   KC_SLSH,   KC_RSFT, \
+                   KC_LCTL,         KC_LGUI,  KC_LALT,                KC_SPC,                         KC_RALT,  MO(1),     MO(2),             KC_RCTL),
+               [_LAYER1] = LAYOUT_ANSI( /* FN */
+                           TO(3),    KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL,\
+                           KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_CALC,  KC_TRNS,  KC_INS,   KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET,\
+                           KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,            KC_TRNS,\
+                               KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT, \
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(3),                                  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER2] = LAYOUT_ANSI( /* FN2 */
+                               KC_TRNS,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL,\
+                               KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET,\
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, \
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+               [_LAYER3] = LAYOUT_ANSI( /* FN3 */
+                               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_BSLASH,\
+                               CTL_T(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_LALT,  KC_LGUI,                KC_SPC,                           KC_TRNS,MO(4),   KC_RALT,           KC_RCTL),
+               [_LAYER4] = LAYOUT_ANSI( /* FN4 */
+                               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 ,\
+                           KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET,\
+                           KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_UP,    KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_HOME,  KC_PGUP,            KC_TRNS,\
+                               KC_MPRV,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN,KC_MNXT, \
+                               KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(0),                                  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+               };
+
+void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue, bool default_layer) {
+  rgb_led led;
+  for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+    led = g_rgb_leds[i];
+    if (led.matrix_co.raw < 0xFF) {
+      if (led.modifier) {
+          rgb_matrix_set_color( i, red, green, blue );
+      }
+    }
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+         uint8_t this_led = host_keyboard_leds();
+         if (!g_suspend_state) {
+           switch (biton32(layer_state)) {
+             case _LAYER1:
+                   rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+             case _LAYER2:
+               rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+             case _LAYER3:
+               rgb_matrix_layer_helper(0x00, 0x00, 0xFF, false); break;
+             case _LAYER4:
+               rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+                                                                 }
+                               }
+         if ( this_led & (1<<USB_LED_CAPS_LOCK)) {
+               rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
+         }
+
+}
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+       bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+         return true;
+       }
diff --git a/keyboards/dztech/dz60rgb/keymaps/mekanist/keymap.c b/keyboards/dztech/dz60rgb/keymaps/mekanist/keymap.c
new file mode 100644 (file)
index 0000000..2784f6f
--- /dev/null
@@ -0,0 +1,181 @@
+#include QMK_KEYBOARD_H
+extern bool g_suspend_state;
+#define _LAYER0 0
+#define _LAYER1 1
+#define _LAYER2 2
+#define _LAYER3 3
+#define _LAYER4 4
+#define _LAYER5 5
+#define _LAYER6 6
+#define _LAYER7 7
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [_LAYER0] = LAYOUT( /* Base */
+               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_BSLASH, \
+               CTL_T(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,   RSFT_T(KC_SLSH), KC_UP,             LT(2, KC_DEL), \
+               KC_LCTL,  KC_LALT,  KC_LGUI,                KC_SPC,                KC_RALT,  MO(1)  , KC_LEFT,         KC_DOWN,           KC_RIGHT),
+       [_LAYER1] = LAYOUT( /* FN */
+               TO(3),    KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL , \
+               KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_CALC,  KC_TRNS,  KC_INS,   KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  , \
+               KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,            KC_TRNS, \
+               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN, KC_VOLU,            KC_MUTE, \
+               KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(4),                        KC_TRNS,  KC_TRNS,  KC_MPRV,  KC_VOLD,            KC_MNXT),
+       [_LAYER2] = LAYOUT( /* LIGHT */
+               KC_TRNS,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL , \
+               KC_TRNS,  RGB_TOG,  KC_TRNS,  RGB_HUI,  RGB_HUD,  RGB_SAI,  RGB_SAD,  RGB_VAI,  RGB_VAD,  RGB_MOD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET  , \
+               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_SPI,  RGB_SPD,  KC_TRNS,  KC_TRNS,            KC_TRNS, \
+               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS, \
+               KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,                      KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+       [_LAYER3] = LAYOUT( /* NUMPAD */
+               KC_NLCK,  KC_PSLS,  KC_PAST,  KC_PMNS,  KC_PPLS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSLS,  KC_PAST,  KC_PMNS,  KC_PPLS,  KC_TRNS, \
+               KC_TRNS,  KC_P7,    KC_P8,    KC_P9,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_P7,    KC_P8,    KC_P9,    KC_TRNS,  KC_TRNS,  TO(0), \
+               KC_TRNS,  KC_P4,    KC_P5,    KC_P6,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_P4,    KC_P5,    KC_P6,    KC_TRNS,            KC_PENT, \
+               KC_TRNS,  KC_P1,    KC_P2,    KC_P3,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_P1,    KC_P2,    KC_P3,    KC_TRNS,            KC_TRNS, \
+               KC_TRNS,  KC_P0,    KC_PDOT,                      KC_PENT,                      KC_P0,    KC_PDOT,  KC_TRNS,  KC_TRNS,            KC_TRNS),
+       [_LAYER4] = LAYOUT( /* MAC */
+               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_BSLASH, \
+               CTL_T(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,   RSFT_T(KC_SLSH), KC_UP,             LT(2, KC_DEL), \
+               KC_LCTL,  KC_LGUI,  KC_LALT,                KC_SPC,                KC_RALT,  MO(5)  , KC_LEFT,         KC_DOWN,           KC_RIGHT),
+       [_LAYER5] = LAYOUT( /* FN */
+               TO(3),    KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL , \
+               KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_CALC,  KC_TRNS,  KC_INS,   KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  RESET  , \
+               KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_HOME,  KC_PGUP,            KC_TRNS, \
+               KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_END,   KC_PGDOWN, KC_VOLU,            KC_MUTE, \
+               KC_TRNS,  KC_TRNS,  KC_TRNS,                      TO(0),                        KC_TRNS,  KC_TRNS,  KC_MPRV,  KC_VOLD,            KC_MNXT),
+}
+;
+
+
+
+void rgb_matrix_layer_helper(uint8_t red, uint8_t green, uint8_t blue, bool default_layer)
+{
+       rgb_led led;
+       
+       for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+               led = g_rgb_leds[i];
+               
+               if (led.matrix_co.raw < 0xFF) {
+                       if (led.modifier) {
+                               rgb_matrix_set_color(i, red, green, blue);
+                       }
+               }
+       }
+}
+
+void rgb_matrix_indicators_user(void)
+{
+       uint8_t this_led = host_keyboard_leds();
+       
+       if (!g_suspend_state) {
+               switch (biton32(layer_state)) {
+               case _LAYER1:
+                       rgb_matrix_layer_helper(0xFF, 0x00, 0x00, false); break;
+                       
+               case _LAYER2:
+                       rgb_matrix_layer_helper(0x00, 0xFF, 0x00, false); break;
+                       
+               case _LAYER4:
+                       rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
+               }
+       }
+       
+       if (this_led & (1 << USB_LED_CAPS_LOCK)) {
+               rgb_matrix_set_color(40, 0xFF, 0xFF, 0xFF);
+       }
+       
+       switch (biton32(layer_state)) {
+       case _LAYER3:
+               if (this_led & (1 << USB_LED_NUM_LOCK)) {
+                       rgb_matrix_set_color(13, 0xFF, 0x00, 0x00);
+               } else {
+                       rgb_matrix_set_color(13, 0x00, 0x00, 0x00);
+               }
+               
+               rgb_matrix_set_color(0, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(1, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(1, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(2, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(3, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(4, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(5, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(6, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(7, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(8, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(9, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(10, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(11, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(12, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(14, 0x00, 0x00, 0xFF);
+               rgb_matrix_set_color(15, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(16, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(17, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(18, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(19, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(20, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(21, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(22, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(23, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(24, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(25, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(26, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(27, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(28, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(29, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(30, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(31, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(32, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(33, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(34, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(35, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(36, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(37, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(38, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(39, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(40, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(41, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(42, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(43, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(44, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(45, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(46, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(47, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(48, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(49, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(50, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(51, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(52, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(53, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(54, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(55, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(56, 0x00, 0x00, 0x00);
+               rgb_matrix_set_color(57, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(58, 0x00, 0xFF, 0x00);
+               rgb_matrix_set_color(59, 0xFF, 0x00, 0x00);
+               rgb_matrix_set_color(60, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(61, 0xFF, 0xFF, 0x00);
+               rgb_matrix_set_color(62, 0x00, 0x00, 0x00);
+               break;
+       }
+}
+
+
+
+
+
+void matrix_init_user(void)
+{
+       //user initialization
+}
+
+void matrix_scan_user(void)
+{
+       //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t* record)
+{
+       return true;
+}
diff --git a/keyboards/dztech/dz60rgb/keymaps/mekanist/readme.md b/keyboards/dztech/dz60rgb/keymaps/mekanist/readme.md
new file mode 100644 (file)
index 0000000..e852004
--- /dev/null
@@ -0,0 +1,34 @@
+# mekanist keymap instructions
+
+## Dev Environment setup (macOS)
+
+1. Install Homebrew by copy pasting the following into a terminal:
+    ```
+    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+    ```
+
+2. Refer to the [QMK macOS Instructions](https://github.com/qmk/qmk_firmware/blob/master/docs/getting_started_build_tools.md#macos) and install the list of tools using the `brew` command in terminal. 
+
+3. While in terminal, issue the following command within the directory you wish to clone qmk_firmware in. 
+
+    ```
+    git clone https://github.com/qmk/qmk_firmware.git
+    ```
+
+## Creating the mekanist dz60rgb firmware file
+
+1. While in the `qmk_firmware` directory, issue the following command
+
+    ```
+    make git-submodule
+    ```
+
+    This will download the chibi-os submoduled needed to create firmware for ARM based boards such as the dz60rgb. 
+
+2. While in the `qmk_firmware` directory, issue the followng command
+
+    ```
+    make dztech/dz60rgb:mekanist
+    ```
+
+    This will result in a file called `dztech_dz60rgb_mekanist.bin` that you can flash onto your board using QMK Toolbox. 
index 7e7fe4f69a86dd8e8447bdf26f884de26cb0aa5b..dc00328dcb5fb74d109fd1dc788a2545e02ca233 100644 (file)
@@ -18,10 +18,9 @@ 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
+#pragma once
 
-#include "../../config.h"
+// place overrides here
 
 /* Use I2C or Serial, not both */
 
@@ -34,8 +33,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // #define MASTER_RIGHT
 // #define EE_HANDS
 
-#endif
-
 #undef RGBLED_NUM
 #define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 24
index 6f20908bc7100df7ae8f95220dc562ba7cbcd766..a1bfb226785c6cb01d0b985cf367aed55fefbf3d 100644 (file)
@@ -1,6 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "eeconfig.h"
 
 extern keymap_config_t keymap_config;
 
index 7e7fe4f69a86dd8e8447bdf26f884de26cb0aa5b..90a364811edbba2dfa5bb6220fb3bb9b0c51c816 100644 (file)
@@ -18,10 +18,9 @@ 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
+#pragma once
 
-#include "../../config.h"
+// place overrides here
 
 /* Use I2C or Serial, not both */
 
@@ -34,7 +33,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 // #define MASTER_RIGHT
 // #define EE_HANDS
 
-#endif
 
 #undef RGBLED_NUM
 #define RGBLIGHT_ANIMATIONS
index 399e22f77837d5d3f20829913aae68c04d6daf52..5412eb0c0cbe3f377f1fbfd705d2551011cfd58d 100644 (file)
@@ -1,6 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "eeconfig.h"
 
 extern keymap_config_t keymap_config;
 
@@ -38,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_GRV,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_MINS,                        KC_EQL , KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS, \
     KC_TAB,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_DEL ,                        KC_BSPC, 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_SPC ,                        KC_ENT , KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, \
-    KC_LCTL, KC_LGUI, KC_LALT, EISU,             LOWER,   KC_SPC ,_______,        _______,KC_ENT , RAISE,            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
+    KC_LCTL, KC_LGUI, KC_LALT, EISU,             LOWER,   KC_SPC ,KC_SPC,          KC_SPC,KC_ENT , RAISE,            KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
   ),
 
   /* Lower
@@ -59,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_UNDS,                        KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
     KC_TAB,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_DEL ,                        KC_BSPC, KC_H,    KC_J,    KC_K,    KC_L,    KC_COLN, KC_DQT , \
     KC_LSFT, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_SPC ,                        KC_ENT , KC_N,    KC_M,    KC_LT,   KC_GT,   KC_QUES, KC_RSFT, \
-    KC_LCTL, KC_LGUI, KC_LALT, EISU,             LOWER,   KC_SPC ,_______,        _______,KC_ENT , RAISE,            KC_HOME, KC_PGDN, KC_PGUP, KC_END   \
+    KC_LCTL, KC_LGUI, KC_LALT, EISU,             LOWER,   KC_SPC ,KC_SPC,          KC_SPC,KC_ENT , RAISE,            KC_HOME, KC_PGDN, KC_PGUP, KC_END   \
   ),
 
   /* Raise
@@ -80,7 +78,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_UNDS,                        KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
     KC_TAB,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_DEL ,                        KC_BSPC, KC_H,    KC_J,    KC_K,    KC_L,    KC_COLN, KC_DQT , \
     KC_LSFT, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_SPC ,                        KC_ENT , KC_N,    KC_M,    KC_LT,   KC_GT,   KC_QUES, KC_RSFT, \
-    KC_LCTL, KC_LGUI, KC_LALT, EISU,             LOWER,   KC_SPC ,_______,        _______,KC_ENT , RAISE,            KC_HOME, KC_PGDN, KC_PGUP, KC_END   \
+    KC_LCTL, KC_LGUI, KC_LALT, EISU,             LOWER,   KC_SPC ,KC_SPC,          KC_SPC,KC_ENT , RAISE,            KC_HOME, KC_PGDN, KC_PGUP, KC_END   \
   ),
 
   /* Adjust
diff --git a/keyboards/ergodash/rev2/keymaps/greenshadowmaker/config.h b/keyboards/ergodash/rev2/keymaps/greenshadowmaker/config.h
new file mode 100644 (file)
index 0000000..8ace28f
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+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
+
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 24
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/ergodash/rev2/keymaps/greenshadowmaker/keyboard-layout-editor.json b/keyboards/ergodash/rev2/keymaps/greenshadowmaker/keyboard-layout-editor.json
new file mode 100644 (file)
index 0000000..8f8d308
--- /dev/null
@@ -0,0 +1,460 @@
+[
+  {
+    "name": "gsm-ErgoDash",
+    "notes": "Front Legend = \"Adust\" layer (both lower and Raise)\n\n\nLayout Positions are an aproximation and not exact"
+  },
+  [
+    {
+      "x": 3,
+      "t": "#0000ff\n#ff0000"
+    },
+    "\nF3\n\n\n\n\n\n\n\n3 #",
+    {
+      "x": 11
+    },
+    "\nF8\n\n\n\n\n\n\n\n8 *"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2
+    },
+    "\nF2\n\n\n\n\n\n\n\n2 @",
+    {
+      "x": 1
+    },
+    "\nF4\n\n\n\n\n\n\n\n4 $",
+    {
+      "x": 9
+    },
+    "\nF7\n\n\n\n\n\n\n\n7 &",
+    {
+      "x": 1
+    },
+    "\nF9\n\n\n\n\n\n\n\n9 ("
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5
+    },
+    "\nF5\n\n\n\n\n\n\n\n5 %",
+    {
+      "x": 7
+    },
+    "\nF6\n\n\n\n\n\n\n\n6 &"
+  ],
+  [
+    {
+      "y": -0.875,
+      "t": "#000000",
+      "a": 3
+    },
+    "Esc\n\n\n\nreset",
+    {
+      "t": "#0000ff\n#ff0000",
+      "a": 4
+    },
+    "\nF1\n\n\n\n\n\n\n\n1 !",
+    {
+      "x": 15
+    },
+    "\nF10\n\n\n\n\n\n\n\n0 )",
+    {
+      "t": "#000000",
+      "a": 7,
+      "fa": [
+        2
+      ]
+    },
+    "Bksp"
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6,
+      "f": 3
+    },
+    "= +",
+    {
+      "x": 5,
+      "f": 3
+    },
+    "- _"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3,
+      "f": 3
+    },
+    "E",
+    {
+      "x": 11,
+      "f": 3
+    },
+    "I"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2,
+      "t": "#0000ff\n#ff0000\n\n\n\n\n\n\n\n\n#ff0000",
+      "a": 4,
+      "f": 3
+    },
+    "PgUP\nUP\n\n\n\n\n\n\n\nW",
+    {
+      "x": 1,
+      "t": "#000000",
+      "a": 3,
+      "f": 3
+    },
+    "R\n\n\n\nrgb_tog",
+    {
+      "x": 9,
+      "a": 7,
+      "f": 3
+    },
+    "U",
+    {
+      "x": 1,
+      "f": 3
+    },
+    "O"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5,
+      "a": 3,
+      "f": 3
+    },
+    "T\n\n\n\nbl_tog",
+    {
+      "x": 7,
+      "a": 7,
+      "f": 3
+    },
+    "Y"
+  ],
+  [
+    {
+      "y": -0.875,
+      "f": 3
+    },
+    "Tab",
+    {
+      "f": 3
+    },
+    "Q",
+    {
+      "x": 15,
+      "f": 3
+    },
+    "P",
+    {
+      "f": 3
+    },
+    "] }"
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6
+    },
+    "",
+    {
+      "x": 5,
+      "f": 3
+    },
+    "[ {"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3,
+      "t": "#0000ff\n#ff0000\n\n\n\n\n\n\n\n\n#ff0000",
+      "a": 0,
+      "f": 3
+    },
+    "End\nRIGHT\n\n\nrgb_sai\n\n\n\n\nD",
+    {
+      "x": 11,
+      "t": "#000000",
+      "a": 7,
+      "f": 3
+    },
+    "K"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2,
+      "t": "#0000ff\n#ff0000\n\n\n\n\n\n\n\n\n#ff0000",
+      "a": 0,
+      "f": 3
+    },
+    "PgDwn\nDOWN\n\n\nrgb_hai\n\n\n\n\nS",
+    {
+      "x": 1,
+      "t": "#000000",
+      "a": 3,
+      "f": 3
+    },
+    "F\n\n\n\nrgb_val",
+    {
+      "x": 9,
+      "a": 7,
+      "f": 3
+    },
+    "J",
+    {
+      "x": 1,
+      "f": 3
+    },
+    "L"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5,
+      "a": 3,
+      "f": 3
+    },
+    "G\n\n\n\nbl_inc",
+    {
+      "x": 7,
+      "a": 7,
+      "f": 3
+    },
+    "H"
+  ],
+  [
+    {
+      "y": -0.875,
+      "c": "#0000ff",
+      "t": "#ffffffff",
+      "f": 3
+    },
+    "Raise",
+    {
+      "c": "#cccccc",
+      "t": "#0000ff\n#ff0000\n\n\n\n\n\n\n\n\n#ff0000",
+      "a": 4,
+      "f": 3
+    },
+    "Home\nLEFT\n\n\n\n\n\n\n\nA",
+    {
+      "x": 15,
+      "t": "#000000",
+      "a": 7,
+      "f": 3
+    },
+    ": ;",
+    {
+      "f": 3
+    },
+    "' \""
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6
+    },
+    "",
+    {
+      "x": 5
+    },
+    ""
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3,
+      "a": 3,
+      "f": 3
+    },
+    "C\n\n\n\nrgb_sad",
+    {
+      "x": 11,
+      "a": 7,
+      "f": 3
+    },
+    ", <"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2,
+      "a": 3,
+      "f": 3
+    },
+    "X\n\n\n\nrgb_sad",
+    {
+      "x": 1,
+      "f": 3
+    },
+    "V\n\n\n\nrgb_vad",
+    {
+      "x": 9,
+      "a": 7,
+      "f": 3
+    },
+    "M",
+    {
+      "x": 1,
+      "f": 3
+    },
+    ". >"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5,
+      "a": 3,
+      "f": 3
+    },
+    "B\n\n\n\nbl_dec",
+    {
+      "x": 7,
+      "a": 7,
+      "f": 3
+    },
+    "N"
+  ],
+  [
+    {
+      "y": -0.875,
+      "a": 3,
+      "f": 3
+    },
+    "Shift\n\n\n\neep_rst",
+    {
+      "a": 7,
+      "f": 3
+    },
+    "Z",
+    {
+      "x": 15,
+      "f": 3
+    },
+    "/ ?",
+    {
+      "f": 3
+    },
+    "Shift"
+  ],
+  [
+    {
+      "y": -0.25,
+      "x": 2,
+      "f": 3
+    },
+    "Alt",
+    {
+      "x": 13,
+      "f": 3
+    },
+    "DOWN"
+  ],
+  [
+    {
+      "y": -0.9749999999999996,
+      "x": 3.5,
+      "f": 3
+    },
+    "Ctrl",
+    {
+      "x": 10.15,
+      "f": 3
+    },
+    "LEFT"
+  ],
+  [
+    {
+      "y": -0.7750000000000004,
+      "f": 3
+    },
+    "`~",
+    {
+      "f": 3
+    },
+    "\\|",
+    {
+      "x": 15,
+      "f": 3
+    },
+    "UP",
+    {
+      "f": 3
+    },
+    "RIGHT"
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -0.25,
+      "x": -0.2999999999999998,
+      "c": "#eb7c15",
+      "f": 3,
+      "h": 2
+    },
+    "Space",
+    {
+      "c": "#cccccc",
+      "f": 3
+    },
+    "Del"
+  ],
+  [
+    {
+      "x": -1.2999999999999998,
+      "c": "#ff0000",
+      "f": 3
+    },
+    "Lower",
+    {
+      "x": 1,
+      "c": "#cccccc",
+      "t": "#0000ff\n#ff0000",
+      "a": 4
+    },
+    "\nApp\n\n\n\n\n\n\n\nOS"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -0.5,
+      "x": -2,
+      "t": "#000000",
+      "a": 7,
+      "f": 3
+    },
+    "PrtScr",
+    {
+      "c": "#eb7c15",
+      "f": 3,
+      "h": 2
+    },
+    "Space"
+  ],
+  [
+    {
+      "x": -2,
+      "c": "#cccccc",
+      "f": 3
+    },
+    "Enter",
+    {
+      "x": 1,
+      "c": "#0000ff",
+      "t": "#ffffff",
+      "f": 3
+    },
+    "Raise"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/ergodash/rev2/keymaps/greenshadowmaker/keymap.c b/keyboards/ergodash/rev2/keymaps/greenshadowmaker/keymap.c
new file mode 100644 (file)
index 0000000..7a7985f
--- /dev/null
@@ -0,0 +1,136 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 16
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  LOWER,
+  RAISE,
+  ADJUST,
+};
+
+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  |  ]   |
+   * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+   * | Raise|   A  |   S  |   D  |   F  |   G  |      |                    |      |   H  |   J  |   K  |   L  |   ;  |  "   |
+   * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+   * | Shift|   Z  |   X  |   C  |   V  |   B  ||||||||  Del |      |      ||||||||   N  |   M  |   ,  |   .  |   /  | Shift|
+   * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+   * |  `   |  \   |  ALt | Ctrl |||||||| Lower| Space|  LGui|||||||| Enter| Space| Raise|||||||| Left | Down |  Up  | Right|
+   * ,----------------------------------------------------------------------------------------------------------------------.
+   */
+  [_QWERTY] = LAYOUT( \
+     KC_ESC,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_EQL,                        KC_MINS, KC_6,    KC_7,  KC_8,    KC_9,    KC_0,    KC_BSPC, \
+     KC_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   XXXXXXX,                        KC_LBRC, KC_Y,    KC_U,  KC_I,    KC_O,    KC_P,    KC_RBRC, \
+      RAISE,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   XXXXXXX,                        XXXXXXX, 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_DEL,        KC_PSCR,         KC_N,    KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, \
+     KC_GRV,KC_BSLS, KC_LALT, KC_LCTL,            LOWER,    KC_SPC,KC_LGUI,        KC_ENT ,KC_SPC , RAISE,          KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
+  ),
+
+  /* Lower
+   * ,----------------------------------------------------------------------------------------------------------------------.
+   * |      |  F1  |  F2  |  F3  |  F4  |  F5  |      |                    |      |  F6  |  F7  |  F8  |  F9  |  F10 |      |
+   * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+   * |      |      |  Up  |      |      |      |      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+   * | Raise| Left | Down | Rght |      |      |      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+   * | Shift|      |      |      |      |      ||||||||      |      |      ||||||||      |      |      |      |      | Shift|
+   * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+   * |      |      |      |      |||||||| Lower| Space|      ||||||||      | Space| Raise||||||||      |      |      |      |
+   * ,----------------------------------------------------------------------------------------------------------------------.
+   */
+  [_LOWER] = LAYOUT(
+    XXXXXXX,  KC_F1,   KC_F2,   KC_F3,   KC_F4,    KC_F5, XXXXXXX,                        XXXXXXX, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  XXXXXXX,  \
+    XXXXXXX, XXXXXXX,   KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+      RAISE, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,           XXXXXXX,     XXXXXXX,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RSFT, \
+    XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,             LOWER,   KC_SPC ,XXXXXXX,     XXXXXXX, KC_SPC ,   RAISE,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX   \
+  ),
+
+  /* Raise
+   * ,----------------------------------------------------------------------------------------------------------------------.
+   * |      |      |      |      |      |      |      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+   * |      |      | PgUp |      |      |      |      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+   * | Raise| Home | PgDwn| End  |      |      |      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+   * | Shift|      |      |      |      |      ||||||||      |      |      ||||||||      |      |      |      |      | Shift|
+   * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+   * |      |      |      |      |||||||| Lower| Space|      ||||||||      |Space | Raise||||||||      |      |      |      |
+   * ,----------------------------------------------------------------------------------------------------------------------.
+   */
+  [_RAISE] = LAYOUT(
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  \
+    XXXXXXX, XXXXXXX, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+      RAISE, KC_HOME,KC_PGDOWN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,           XXXXXXX,     XXXXXXX,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RSFT, \
+    XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,             LOWER,   KC_SPC ,XXXXXXX,     XXXXXXX, KC_SPC ,   RAISE,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX   \
+  ),
+
+  /* Adjust  (Both Raise and Lower Together)
+   * ,----------------------------------------------------------------------------------------------------------------------.
+   * | Reset|      |      |      |      |      |      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+   * |      |      |      |      |rgbtog|bl_tog|      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+   * | Raise|      |rgbhui|rgbsai|rgbvai|bl_inc|      |                    |      |      |      |      |      |      |      |
+   * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+   *|EEP_RST|      |rgbhud|rgbdec|rgbvad|bl_dec||||||||      |      |      ||||||||      |      |      |      |      | Shift|
+   * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+   * |      |      |      |      |||||||| Lower| Space|      ||||||||      | Space| Raise||||||||      |      |      |      |
+   * ,----------------------------------------------------------------------------------------------------------------------.
+   */
+  [_ADJUST] = LAYOUT(
+      RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, BL_TOGG, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+      RAISE, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI,  BL_INC, XXXXXXX,                        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    EEP_RST, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD,  BL_DEC,           XXXXXXX,     XXXXXXX,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RSFT, \
+    XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,             LOWER,   KC_SPC ,XXXXXXX,     XXXXXXX,  KC_SPC,   RAISE,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX   \
+  )
+}; 
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/ergodash/rev2/keymaps/greenshadowmaker/rules.mk b/keyboards/ergodash/rev2/keymaps/greenshadowmaker/rules.mk
new file mode 100644 (file)
index 0000000..11b62b9
--- /dev/null
@@ -0,0 +1,3 @@
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
index 92c140f26a840572ca786214ae5866685e8f2f66..7f13f3d6729e22d1246291171001292e3749a2ec 100644 (file)
@@ -1,6 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "debug.h"
-#include "action_layer.h"
 #include "version.h"
 
 #define BASE 0 // default layer
index 3b2c943506f147a5caf0e70ecccbfe686b21cdcb..6f4ae9fed179a693a00aa6d21ee6f6bd7f6eb73b 100644 (file)
@@ -128,7 +128,7 @@ uint8_t init_mcp23018(void) {
     mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT);            if (mcp23018_status) goto out;
     mcp23018_status = i2c_write(0b00000000, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
     mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
-    i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+    i2c_stop();
 
     // set pull-up
     // - unused  : on  : 1
@@ -140,7 +140,7 @@ uint8_t init_mcp23018(void) {
     mcp23018_status = i2c_write(0b00111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
 
 out:
-    i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+    i2c_stop();
 
 #ifdef LEFT_LEDS
     if (!mcp23018_status) mcp23018_status = ergodox_left_leds_update();
@@ -179,7 +179,7 @@ uint8_t ergodox_left_leds_update(void) {
     if (mcp23018_status) goto out;
 
  out:
-    i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+    i2c_stop();
     return mcp23018_status;
 }
 #endif
@@ -269,69 +269,68 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
 };
 
 
-__attribute__ ((weak))
 const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
 
     /*{row | col << 4}
       |             {x=0..224, y=0..64}
       |              |                    modifier
       |              |                    | */
-    {{0|(0<<4)},   {24.9*5, 16*0}, 0}, // LED 1 on right
-    {{0|(1<<4)},   {24.9*6, 16*0}, 0}, // LED 2
-    {{0|(2<<4)},   {24.9*7, 16*0}, 0}, // LED 3
-    {{0|(3<<4)},   {24.9*8, 16*0}, 0}, // LED 4
-    {{0|(4<<4)},   {24.9*9, 16*0}, 0}, // LED 5
-
-    {{1|(5<<4)},   {24.9*5, 16*1}, 0}, // LED 6
-    {{1|(6<<4)},   {24.9*6, 16*1}, 0}, // LED 7
-    {{1|(7<<4)},   {24.9*7, 16*1}, 0}, // LED 8
-    {{1|(8<<4)},   {24.9*8, 16*1}, 0}, // LED 9
-    {{1|(9<<4)},   {24.9*9, 16*1}, 0}, // LED 10
-
-    {{2|(5<<4)},   {24.9*5, 16*2}, 0}, // LED 11
-    {{2|(6<<4)},   {24.9*6, 16*2}, 0}, // LED 12
-    {{2|(7<<4)},   {24.9*7, 16*2}, 0}, // LED 13
-    {{2|(8<<4)},   {24.9*8, 16*2}, 0}, // LED 14
-    {{2|(9<<4)},   {24.9*9, 16*2}, 0}, // LED 15
-
-    {{3|(5<<4)},   {24.9*5, 16*2}, 0}, // LED 16
-    {{3|(6<<4)},   {24.9*6, 16*2}, 0}, // LED 17
-    {{3|(7<<4)},   {24.9*7, 16*2}, 0}, // LED 18
-    {{3|(8<<4)},   {24.9*8, 16*2}, 0}, // LED 19
-    {{3|(9<<4)},   {24.9*9, 16*2}, 0}, // LED 20
-
-    {{4|(6<<4)},   {24.9*6, 16*2}, 0}, // LED 21
-    {{4|(7<<4)},   {24.9*7, 16*2}, 0}, // LED 22
-    {{4|(8<<4)},   {24.9*8, 16*2}, 0}, // LED 23
-    {{4|(9<<4)},   {24.9*9, 16*2}, 0}, // LED 24
-
-    {{0|(0<<4)},   {24.9*4, 16*0}, 0}, // LED 1 on left
-    {{0|(1<<4)},   {24.9*3, 16*0}, 0}, // LED 2
-    {{0|(2<<4)},   {24.9*2, 16*0}, 0}, // LED 3
-    {{0|(3<<4)},   {24.9*1, 16*0}, 0}, // LED 4
-    {{0|(4<<4)},   {24.9*0, 16*0}, 0}, // LED 5
-
-    {{1|(5<<4)},   {24.9*4, 16*1}, 0}, // LED 6
-    {{1|(6<<4)},   {24.9*3, 16*1}, 0}, // LED 7
-    {{1|(7<<4)},   {24.9*2, 16*1}, 0}, // LED 8
-    {{1|(8<<4)},   {24.9*1, 16*1}, 0}, // LED 9
-    {{1|(9<<4)},   {24.9*0, 16*1}, 0}, // LED 10
-
-    {{2|(5<<4)},   {24.9*4, 16*2}, 0}, // LED 11
-    {{2|(6<<4)},   {24.9*3, 16*2}, 0}, // LED 12
-    {{2|(7<<4)},   {24.9*2, 16*2}, 0}, // LED 13
-    {{2|(8<<4)},   {24.9*1, 16*2}, 0}, // LED 14
-    {{2|(9<<4)},   {24.9*0, 16*2}, 0}, // LED 15
-
-    {{3|(5<<4)},   {24.9*4, 16*2}, 0}, // LED 16
-    {{3|(6<<4)},   {24.9*3, 16*2}, 0}, // LED 17
-    {{3|(7<<4)},   {24.9*2, 16*2}, 0}, // LED 18
-    {{3|(8<<4)},   {24.9*1, 16*2}, 0}, // LED 19
-    {{3|(9<<4)},   {24.9*0, 16*2}, 0}, // LED 20
-
-    {{4|(6<<4)},   {24.9*3, 16*2}, 0}, // LED 21
-    {{4|(7<<4)},   {24.9*2, 16*2}, 0}, // LED 22
-    {{4|(8<<4)},   {24.9*1, 16*2}, 0}, // LED 23
-    {{4|(9<<4)},   {24.9*0, 16*2}, 0}, // LED 24
+    {{ 8|(0<<4)},   {17.2* 8, 12.8*0}, 0}, // LED 1 on right > Key 6
+    {{ 9|(0<<4)},   {17.2* 9, 12.8*0}, 0}, // LED 2 > Key 7
+    {{10|(0<<4)},   {17.2*10, 12.8*0}, 0}, // LED 3 > Key 8
+    {{11|(0<<4)},   {17.2*11, 12.8*0}, 0}, // LED 4 > Key 9
+    {{12|(0<<4)},   {17.2*12, 12.8*0}, 0}, // LED 5 > Key 0
+
+    {{ 8|(1<<4)},   {17.2* 8, 12.8*1}, 0}, // LED 6
+    {{ 9|(1<<4)},   {17.2* 9, 12.8*1}, 0}, // LED 7
+    {{10|(1<<4)},   {17.2*10, 12.8*1}, 0}, // LED 8
+    {{11|(1<<4)},   {17.2*11, 12.8*1}, 0}, // LED 9
+    {{12|(1<<4)},   {17.2*12, 12.8*1}, 0}, // LED 10
+
+    {{ 8|(2<<4)},   {17.2* 8, 12.8*2}, 0}, // LED 11
+    {{ 9|(2<<4)},   {17.2* 9, 12.8*2}, 0}, // LED 12
+    {{10|(2<<4)},   {17.2*10, 12.8*2}, 0}, // LED 13
+    {{11|(2<<4)},   {17.2*11, 12.8*2}, 0}, // LED 14
+    {{12|(2<<4)},   {17.2*12, 12.8*2}, 0}, // LED 15
+
+    {{ 8|(3<<4)},   {17.2* 8, 12.8*3}, 0}, // LED 16
+    {{ 9|(3<<4)},   {17.2* 9, 12.8*3}, 0}, // LED 17
+    {{10|(3<<4)},   {17.2*10, 12.8*3}, 0}, // LED 18
+    {{11|(3<<4)},   {17.2*11, 12.8*3}, 0}, // LED 19
+    {{12|(3<<4)},   {17.2*12, 12.8*3}, 0}, // LED 20
+
+    {{ 9|(4<<4)},   {17.2* 9, 12.8*4}, 1}, // LED 21
+    {{10|(4<<4)},   {17.2*10, 12.8*4}, 1}, // LED 22
+    {{11|(4<<4)},   {17.2*11, 12.8*4}, 1}, // LED 23
+    {{12|(4<<4)},   {17.2*12, 12.8*4}, 1}, // LED 24
+
+    {{ 5|(0<<4)},   {17.2* 5, 12.8*0}, 0}, // LED 1 on left > Key 5
+    {{ 4|(0<<4)},   {17.2* 4, 12.8*0}, 0}, // LED 2 > Key 4
+    {{ 3|(0<<4)},   {17.2* 3, 12.8*0}, 0}, // LED 3 > Key 3
+    {{ 2|(0<<4)},   {17.2* 2, 12.8*0}, 0}, // LED 4 > Key 2
+    {{ 1|(0<<4)},   {17.2* 1, 12.8*0}, 0}, // LED 5 > Key 1
+
+    {{ 5|(1<<4)},   {17.2* 5, 12.8*1}, 0}, // LED 6
+    {{ 4|(1<<4)},   {17.2* 4, 12.8*1}, 0}, // LED 7
+    {{ 3|(1<<4)},   {17.2* 3, 12.8*1}, 0}, // LED 8
+    {{ 2|(1<<4)},   {17.2* 2, 12.8*1}, 0}, // LED 9
+    {{ 1|(1<<4)},   {17.2* 1, 12.8*1}, 0}, // LED 10
+
+    {{ 5|(2<<4)},   {17.2* 5, 12.8*2}, 0}, // LED 11
+    {{ 4|(2<<4)},   {17.2* 4, 12.8*2}, 0}, // LED 12
+    {{ 3|(2<<4)},   {17.2* 3, 12.8*2}, 0}, // LED 13
+    {{ 2|(2<<4)},   {17.2* 2, 12.8*2}, 0}, // LED 14
+    {{ 1|(2<<4)},   {17.2* 1, 12.8*2}, 0}, // LED 15
+
+    {{ 5|(3<<4)},   {17.2* 5, 12.8*3}, 0}, // LED 16
+    {{ 4|(3<<4)},   {17.2* 4, 12.8*3}, 0}, // LED 17
+    {{ 3|(3<<4)},   {17.2* 3, 12.8*3}, 0}, // LED 18
+    {{ 2|(3<<4)},   {17.2* 2, 12.8*3}, 0}, // LED 19
+    {{ 1|(3<<4)},   {17.2* 1, 12.8*3}, 0}, // LED 20
+
+    {{ 4|(4<<4)},   {17.2* 4, 12.8*4}, 1}, // LED 21
+    {{ 3|(4<<4)},   {17.2* 3, 12.8*4}, 1}, // LED 22
+    {{ 2|(4<<4)},   {17.2* 2, 12.8*4}, 1}, // LED 23
+    {{ 1|(4<<4)},   {17.2* 1, 12.8*4}, 1}, // LED 24 > Key Hack
 };
 #endif
index 0d48711ed3bb8a82a32e82fab19ba5b0d6aa30b4..c342b9076987df56a545ecea0c4ce802009e6281 100644 (file)
@@ -55,14 +55,16 @@ enum custom_keycodes {
 };
 
 
-#define BASE         0 // base dvorak layer
-#define KEYNAV       1 // arrow navigation (right hand)
-#define KEYSEL       2 // arrow navigation + shift (allow text selection)
-#define SHELL_NAV    3 // bash shortcuts
-#define SHELL_SCREEN 4 // linux screen shortcuts
-#define SCREEN_NAV   5 // navigate between linux screen tabs 
-#define BROWSER_CONTROL 6 // control browser and mouse
-#define COMBINED       7 // combined numbers and symbols layer
+#define BASE             0 // base dvorak layer
+#define BASE_ALTERNATE   1 // base dvorak layer, with different layer toggling
+#define KEYNAV           2 // arrow navigation (right hand)
+#define KEYSEL           3 // arrow navigation + shift (allow text selection)
+#define SHELL_NAV        4 // bash shortcuts
+#define SHELL_SCREEN     5 // linux screen shortcuts
+#define SCREEN_NAV       6 // navigate between linux screen tabs 
+#define BROWSER_CONTROL  7 // control browser and mouse
+#define COMBINED         8 // combined numbers and symbols layer
+#define ANDROID_STUDIO   9
 
 
 // macros
@@ -94,7 +96,17 @@ enum custom_keycodes {
 #define SCREEN_PASTEREG_3 30
 #define DEL_TO_HOME 36
 
-
+// Android Studio shortcuts
+#define AS_TABLEFT LALT(KC_LEFT)
+#define AS_TABRIGHT LALT(KC_RIGHT)
+#define AS_SYMBOL LCTL(LALT(KC_N))
+#define AS_CLASS LCTL(KC_N)
+#define AS_FINDUSAGE LALT(KC_F7)
+#define AS_BACK LCTL(LALT(KC_LEFT))
+#define AS_GO_DECLARATION LCTL(KC_B)
+#define AS_GO_IMPLEMENTATION LCTL(LALT(KC_B))
+#define AS_CLOSETAB LCTL(KC_F4)
+#define AS_CLOSETOOLWINDOW LCTL(LSFT(KC_F4))
 
 
 #define MACRO_SCREEN_NUM(MACRO_NAME,NUM) \
@@ -164,6 +176,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
       MEH(KC_F5),MEH(KC_F6),MEH(KC_F7),MEH(KC_F8),KC_ENTER,KC_SPACE
 
   ),
+  
+    // alternate base layout
+  [BASE_ALTERNATE] = LAYOUT_ergodox(
+       // left hand
+       KC_TRNS,            KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,   KC_TRNS,
+       KC_TRNS,            KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,   KC_TRNS,
+       KC_TRNS,            KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,
+       OSL(ANDROID_STUDIO),KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,   KC_TRNS,
+               // bottom row
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       // thumb cluster
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,          KC_TRNS,                   KC_TRNS,             KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,          KC_TRNS,                   KC_TRNS,             KC_TRNS,
+                KC_TRNS, KC_TRNS,       KC_TRNS,          KC_TRNS,                   KC_TRNS,             KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,          KC_TRNS,                   KC_TRNS,             KC_TRNS,
+                         // bottom row
+                         KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,             KC_TRNS,
+       // thumb cluster
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+  ),  
 
   [KEYNAV] = LAYOUT_ergodox(
     // left hand
@@ -195,7 +233,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
            KC_TRNS,MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P),
            KC_TRNS,MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS,
                    // bottom row
-                   RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                   RESET,DF(BASE),DF(BASE_ALTERNATE),KC_TRNS,KC_TRNS,
                                            // thumb cluster
                                            KC_TRNS,KC_TRNS,
                                                    KC_TRNS,
@@ -294,7 +332,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   ),
 
 
-
+    // android studio shortcuts
+  [ANDROID_STUDIO] = LAYOUT_ergodox(
+       // left hand
+       KC_NO,  KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,   KC_TRNS,
+       KC_TRNS,KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,   KC_TRNS,
+       KC_TRNS,KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,
+       KC_TRNS,KC_TRNS,    KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,   KC_TRNS,
+               // bottom row
+               KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       // thumb cluster
+                                       KC_TRNS,KC_TRNS,
+                                               KC_TRNS,
+                               KC_TRNS,KC_TRNS,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,          KC_TRNS,                   KC_TRNS,              KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS,       AS_FINDUSAGE,     AS_GO_DECLARATION,         AS_GO_IMPLEMENTATION, KC_TRNS,
+                KC_TRNS, AS_TABLEFT,    AS_TABRIGHT,      AS_SYMBOL,                 AS_CLASS,             AS_BACK,
+       KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,          AS_CLOSETAB,               AS_CLOSETOOLWINDOW,   KC_TRNS,
+                         // bottom row
+                         KC_TRNS,     KC_TRNS,     KC_TRNS,     KC_TRNS,             KC_TRNS,
+       // thumb cluster
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS
+  ),
 
   [COMBINED] = LAYOUT_ergodox(
 
index d23b4447514f9a7458676217d1f95ace8669946c..45fc9f8ba99cc0b9e0349a61ffc537a0cb2456b1 100644 (file)
@@ -1,8 +1,7 @@
 #include QMK_KEYBOARD_H
 #include "debug.h"
 #include "action_layer.h"
-#include "sendchar.h"
-#include "virtser.h"
+#include "keymap_steno.h"
 
 #define BASE 0 // default layer
 #define SYMB 1 // symbols
@@ -137,35 +136,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        KC_TRNS,
        KC_TRNS, KC_TRNS, KC_WBAK
 ),
-// TxBolt Codes
-#define Sl 0b00000001
-#define Tl 0b00000010
-#define Kl 0b00000100
-#define Pl 0b00001000
-#define Wl 0b00010000
-#define Hl 0b00100000
-#define Rl 0b01000001
-#define Al 0b01000010
-#define Ol 0b01000100
-#define X  0b01001000
-#define Er 0b01010000
-#define Ur 0b01100000
-#define Fr 0b10000001
-#define Rr 0b10000010
-#define Pr 0b10000100
-#define Br 0b10001000
-#define Lr 0b10010000
-#define Gr 0b10100000
-#define Tr 0b11000001
-#define Sr 0b11000010
-#define Dr 0b11000100
-#define Zr 0b11001000
-#define NM 0b11010000
-#define GRPMASK 0b11000000
-#define GRP0 0b00000000
-#define GRP1 0b01000000
-#define GRP2 0b10000000
-#define GRP3 0b11000000
 /* Keymap 3: TxBolt (Serial)
  *
  * ,--------------------------------------------------.           ,--------------------------------------------------.
@@ -190,22 +160,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // TxBolt over Serial
 [TXBOLT] = LAYOUT_ergodox(
        KC_BSPC, KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_NO,   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),  KC_NO,
-       KC_NO,   M(Sl),   M(Tl),   M(Pl),   M(Hl),   M(X),
-       KC_NO,   M(Sl),   M(Kl),   M(Wl),   M(Rl),   M(X),   KC_NO,
+       KC_NO,   STN_N1,  STN_N2,  STN_N3,  STN_N4,  STN_N5,  KC_NO,
+       KC_NO,   STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1,
+       KC_NO,   STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2, KC_NO,
        KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
                                            KC_NO,   KC_NO,
                                                     KC_NO,
-                                  M(Al),   M(Ol),   KC_NO,
+                                  STN_A,   STN_O,   KC_NO,
     // right hand
        KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_TRNS,  M(NM),   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),
-                 M(X),    M(Fr),   M(Pr),   M(Lr),   M(Tr),   M(Dr),
-       KC_NO,    M(X),    M(Rr),   M(Br),   M(Gr),   M(Sr),   M(Zr),
+       KC_TRNS,  STN_N6,  STN_N7,  STN_N8,  STN_N9,  STN_NA,  STN_NB,
+                 STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR,
+       KC_NO,    STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR,
                           KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
        KC_NO,   KC_NO,
        KC_NO,
-       KC_NO,   M(Er),   M(Ur)
+       KC_NO,   STN_E,   STN_U
 ),
 /* Keymap 4: TxBolt (Serial) Alternative
  *
@@ -230,69 +200,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 // TxBolt over Serial
 [TXBOLT2] = LAYOUT_ergodox(
-       KC_NO,   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),  KC_NO,
-       KC_NO,   M(Sl),   M(Tl),   M(Pl),   M(Hl),   M(X),   KC_NO,
-       KC_NO,   M(Sl),   M(Kl),   M(Wl),   M(Rl),   M(X),
+       KC_NO,   STN_N1,  STN_N2,  STN_N3,  STN_N4,  STN_N5,  KC_NO,
+       KC_NO,   STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1, KC_NO,
+       KC_NO,   STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2,
        KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-       KC_NO,   KC_NO,   KC_NO,   M(Al),   M(Ol),
+       KC_NO,   KC_NO,   KC_NO,   STN_A,   STN_O,
                                            KC_NO,   KC_NO,
                                                     KC_NO,
                                   KC_NO,   KC_NO,   KC_NO,
     // right hand
-       KC_NO,    M(NM),   M(NM),   M(NM),   M(NM),   M(NM),   M(NM),
-       KC_TRNS,  M(X),    M(Fr),   M(Pr),   M(Lr),   M(Tr),   M(Dr),
-                 M(X),    M(Rr),   M(Br),   M(Gr),   M(Sr),   M(Zr),
+       KC_NO,    STN_N6,  STN_N7,  STN_N8,  STN_N9,  STN_NA,  STN_NB,
+       KC_TRNS,  STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR,
+                 STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR,
        KC_NO,    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,
-                          M(Er),   M(Ur),   KC_NO,   KC_NO,   KC_NO,
+                          STN_E,   STN_U,   KC_NO,   KC_NO,   KC_NO,
        KC_NO,   KC_NO,
        KC_NO,
        KC_NO,   KC_NO,   KC_NO
 ),
 };
 
-uint8_t chord[4] = {0,0,0,0};
-uint8_t pressed_count = 0;
-
-void send_chord(void)
-{
-  for(uint8_t i = 0; i < 4; i++)
-  {
-    if(chord[i])
-      virtser_send(chord[i]);
-  }
-  virtser_send(0);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record)
-{
-  // We need to track keypresses in all modes, in case the user
-  // changes mode whilst pressing other keys.
-  if (record->event.pressed)
-    pressed_count++;
-  else
-    pressed_count--;
-  return true;
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-
-  if (record->event.pressed) {
-    uint8_t grp = (id & GRPMASK) >> 6;
-    chord[grp] |= id;
-  }
-  else {
-    if (pressed_count == 0) {
-      send_chord();
-      chord[0] = chord[1] = chord[2] = chord[3] = 0;
-    }
-  }
-  return MACRO_NONE;
-};
-
 // Runs just one time when the keyboard initializes.
 void matrix_init_user(void) {
+    steno_set_mode(STENO_MODE_BOLT); // or STENO_MODE_GEMINI
 };
 
 // Runs constantly in the background, in a loop.
index b6fb9b1a800bd41523acaa122a6ed5f6b1295855..4b64fd22de6ab4ff3c0a507cbbf5abf92e32d559 100644 (file)
@@ -1,3 +1,3 @@
-VIRTSER_ENABLE = yes
+STENO_ENABLE = yes          # Additional protocols for Stenography(+1700), requires VIRTSER
 # Not enough interupts, so something has to go
 MOUSEKEY_ENABLE = no
index 22837d312a2f3908e1648678298d7743c9fee61b..860cf7b229a4c6f77c8849a38d34e39816dbb3b9 100644 (file)
@@ -309,7 +309,7 @@ static matrix_row_t read_cols(uint8_t row)
             data = ~((uint8_t)mcp23018_status);
             mcp23018_status = I2C_STATUS_SUCCESS;
         out:
-            i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+            i2c_stop();
             return data;
         }
     } else {
@@ -362,7 +362,7 @@ static void select_row(uint8_t row)
             mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT);                 if (mcp23018_status) goto out;
             mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT);      if (mcp23018_status) goto out;
         out:
-            i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+            i2c_stop();
         }
     } else {
         // select on teensy
index 92c140f26a840572ca786214ae5866685e8f2f66..7f13f3d6729e22d1246291171001292e3749a2ec 100644 (file)
@@ -1,6 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "debug.h"
-#include "action_layer.h"
 #include "version.h"
 
 #define BASE 0 // default layer
diff --git a/keyboards/ergotravel/keymaps/jarred/config.h b/keyboards/ergotravel/keymaps/jarred/config.h
new file mode 100644 (file)
index 0000000..d64187b
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+Copyright 2017 Pierre Constantineau <jpconstantineau@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
+
+/* Use I2C or Serial, not both */
+
+// #define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
diff --git a/keyboards/ergotravel/keymaps/jarred/keymap.c b/keyboards/ergotravel/keymaps/jarred/keymap.c
new file mode 100644 (file)
index 0000000..33031f9
--- /dev/null
@@ -0,0 +1,50 @@
+/* Copyright 2018 Jarred Steenvoorden
+ *
+ * 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
+#include "jarred.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_QW] = LAYOUT_ergotravel_grid_wrapper(
+      QWERTY_L1, KC_NO, KC_NO, QWERTY_R1,
+      QWERTY_L2, KC_NO, KC_NO, QWERTY_R2,
+      QWERTY_L3, KC_NO, KC_NO, QWERTY_R3,
+      QWERTY_4_12),
+    
+    [_LW] = LAYOUT_ergotravel_grid_wrapper(
+      LOWER_L1, KC_NO, KC_NO, LOWER_R1,
+      LOWER_L2, KC_NO, KC_NO, LOWER_R2,
+      LOWER_L3, KC_NO, KC_NO, LOWER_R3,
+      LOWER_4_12),
+      
+    [_NV] = LAYOUT_ergotravel_grid_wrapper(
+      NAV_L1, KC_NO, KC_NO, NAV_R1,
+      NAV_L2, KC_NO, KC_NO, NAV_R2,
+      NAV_L3, KC_NO, KC_NO, NAV_R3,
+      NAV_4_12),
+    
+    [_NP] = LAYOUT_ergotravel_grid_wrapper(
+      NUMPAD_L1, KC_NO, KC_NO, NUMPAD_R1,
+      NUMPAD_L2, KC_NO, KC_NO, NUMPAD_R2,
+      NUMPAD_L3, KC_NO, KC_NO, NUMPAD_R3,
+      NUMPAD_4_12),
+      
+    [_MS] = LAYOUT_ergotravel_grid_wrapper(
+      MOUSE_L1, KC_NO, KC_NO, MOUSE_R1,
+      MOUSE_L2, KC_NO, KC_NO, MOUSE_R2,
+      MOUSE_L3, KC_NO, KC_NO, MOUSE_R3,
+      MOUSE_4_12)
+};
diff --git a/keyboards/exclusive/e6v2/bmc/bmc.c b/keyboards/exclusive/e6v2/bmc/bmc.c
new file mode 100644 (file)
index 0000000..257b68b
--- /dev/null
@@ -0,0 +1,96 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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 "bmc.h"
+#include "rgblight.h"
+#include "i2c_master.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);
+}
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+void rgblight_set(void) {
+    if (!rgblight_config.enable) {
+        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+            led[i].r = 0;
+            led[i].g = 0;
+            led[i].b = 0;
+        }
+    }
+
+    i2c_init();
+    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
+}
+#endif
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void backlight_init_ports(void) {
+    // initialize pins D0, D1, D4 and D6 as output
+    setPinOutput(D0);
+    setPinOutput(D1);
+    setPinOutput(D4);
+    setPinOutput(D6);
+
+    // turn RGB LEDs on
+    writePinHigh(D0);
+    writePinHigh(D1);
+    writePinHigh(D4);
+    writePinHigh(D6);
+}
+
+void backlight_set(uint8_t level) {
+       if (level == 0) {
+        // turn RGB LEDs off
+        writePinLow(D0);
+        writePinLow(D1);
+        writePinLow(D4);
+        writePinLow(D6);
+       } else {
+        // turn RGB LEDs on
+        writePinHigh(D0);
+        writePinHigh(D1);
+        writePinHigh(D4);
+        writePinHigh(D6);
+       }
+}
diff --git a/keyboards/exclusive/e6v2/bmc/bmc.h b/keyboards/exclusive/e6v2/bmc/bmc.h
new file mode 100644 (file)
index 0000000..06d23fb
--- /dev/null
@@ -0,0 +1,101 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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.
+ */
+
+// LAYOUT_all ignores the key often coded as ~# to the left of Enter on ISO layouts. 
+// This is done as it shares the same row AND col as the pipe key. 
+#define LAYOUT_all( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k52, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36,      \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,           \
+    k10, k53, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18, k54,      \
+    k00, k01, k02, k75, k04, k08, k09, k05                                     \
+) \
+{ \
+    { k00,   k01,   k02,   KC_NO, k04, k05,   KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14, k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24, k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34, k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44, k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, k52,   k53,   k54, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64, KC_NO, k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74, k75,   k76,   k77,   k78,   KC_NO, k7A   }, \
+}
+
+#define LAYOUT_60_ansi( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36, \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,      \
+    k10, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18,           \
+    k00, k01, k02, k75, k04, k08, k09, k05                                \
+) \
+{ \
+    { k00,   k01,   k02,   KC_NO, k04,   k05,   KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14,   k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24,   k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44,   k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64,   KC_NO, k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74,   k75,   k76,   k77,   k78,   KC_NO, k7A   }, \
+}
+
+#define LAYOUT_60_hhkb( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k52, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36,      \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,           \
+    k10, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18, k54,           \
+    k01, k02, k75, k08, k09                                                    \
+) \
+{ \
+    { KC_NO, k01,   k02,   KC_NO, KC_NO, k05,   KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14,   k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24,   k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44,   k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, k52,   KC_NO, k54,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64,   KC_NO, k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74,   k75,   k76,   k77,   k78,   KC_NO, k7A   }, \
+}
+
+#define LAYOUT_60_tsangan( \
+    k50, k41, k42, k43, k44, k45, k61, k68, k78, k71, k49, k48, k47, k52, k4A, \
+    k30, k31, k32, k33, k34, k35, k62, k67, k77, k72, k39, k38, k37, k36,      \
+    k20, k21, k22, k23, k24, k25, k63, k66, k76, k73, k29, k28, k26,           \
+    k10, k11, k12, k13, k14, k15, k64, k6A, k7A, k74, k19, k18, k54,           \
+    k00, k01, k02, k75, k08, k09, k05                                          \
+) \
+{ \
+    { k00,   k01,   k02,   KC_NO, KC_NO, k05,   KC_NO, KC_NO, k08,   k09,   KC_NO }, \
+    { k10,   k11,   k12,   k13,   k14,   k15,   KC_NO, KC_NO, k18,   k19,   KC_NO }, \
+    { k20,   k21,   k22,   k23,   k24,   k25,   k26,   KC_NO, k28,   k29,   KC_NO }, \
+    { k30,   k31,   k32,   k33,   k34,   k35,   k36,   k37,   k38,   k39,   KC_NO }, \
+    { KC_NO, k41,   k42,   k43,   k44,   k45,   KC_NO, k47,   k48,   k49,   k4A   }, \
+    { k50,   KC_NO, k52,   KC_NO, k54,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+    { KC_NO, k61,   k62,   k63,   k64,   KC_NO, k66,   k67,   k68,   KC_NO, k6A   }, \
+    { KC_NO, k71,   k72,   k73,   k74,   k75,   k76,   k77,   k78,   KC_NO, k7A   }, \
+}
diff --git a/keyboards/exclusive/e6v2/bmc/config.h b/keyboards/exclusive/e6v2/bmc/config.h
new file mode 100644 (file)
index 0000000..aae4d56
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+Copyright 2019 MechMerlin
+
+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      0x0000
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    exclusive
+#define PRODUCT         e6v2 bmc
+#define DESCRIPTION     A custom 60% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#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)
+ *
+*/
+
+//                        0   1   2   3   4   5   6   7   8   9   A
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, C2, C3, C4, C5, D7 }
+#define DIODE_DIRECTION COL2ROW
+
+
+#define RGBLED_NUM 6
+#define RGBLIGHT_ANIMATIONS
+
+#define NO_UART 1
+#define BOOTLOADHID_BOOTLOADER 1
+
+// Set bootmagic lite key to the key commonly programmed as Esc. 
+#define BOOTMAGIC_LITE_ROW 5
+#define BOOTMAGIC_LITE_COLUMN 0
\ No newline at end of file
diff --git a/keyboards/exclusive/e6v2/bmc/info.json b/keyboards/exclusive/e6v2/bmc/info.json
new file mode 100644 (file)
index 0000000..aa6d171
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "keyboard_name": "", 
+    "url": "", 
+    "maintainer": "qmk", 
+    "width": 15, 
+    "height": 5, 
+    "layouts": {
+        "LAYOUT_all": {
+            "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":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.26}, {"x":10.0, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+        },
+
+        "LAYOUT_60_ansi": {
+            "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":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+        },
+
+        "LAYOUT_60_hhkb": {
+            "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":"~", "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":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "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}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "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":"Os", "x":12.5, "y":4}]
+        },
+
+        "LAYOUT_60_tsangan": {
+            "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":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.5}, {"x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"x":11, "y":4, "w":1.5}, {"x":12.5, "y":4}, {"x":13.5, "y":4, "w":1.5}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/exclusive/e6v2/bmc/keymaps/default/config.h b/keyboards/exclusive/e6v2/bmc/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..26c6d6a
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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/exclusive/e6v2/bmc/keymaps/default/keymap.c b/keyboards/exclusive/e6v2/bmc/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..7300419
--- /dev/null
@@ -0,0 +1,74 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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 {
+  QMKBEST = SAFE_RANGE,
+  QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = 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, KC_RCTL, MO(1)
+    ),
+
+[1] = LAYOUT_60_ansi(
+       KC_GRV,  KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+            BL_TOGG, BL_INC,   BL_DEC,  BL_STEP, RESET,   EEP_RST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+       RGB_TOG, RGB_MOD,  RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          \
+       KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,                   \
+       KC_TRNS, KC_TRNS,  KC_TRNS,       KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QMKBEST:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        SEND_STRING("QMK is the best thing ever!");
+      } else {
+        // when keycode QMKBEST is released
+      }
+      break;
+    case QMKURL:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+      } else {
+        // when keycode QMKURL is released
+      }
+      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/exclusive/e6v2/bmc/keymaps/default/readme.md b/keyboards/exclusive/e6v2/bmc/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..4a1b6ef
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for bmc
diff --git a/keyboards/exclusive/e6v2/bmc/readme.md b/keyboards/exclusive/e6v2/bmc/readme.md
new file mode 100644 (file)
index 0000000..3e2d197
--- /dev/null
@@ -0,0 +1,44 @@
+# E6-V2 Bootmapper Client (ps2avrgb)
+
+These docs are for the BMC version of the E6-V2 PCB which has an atmega32a microcontroller. Please do not flash this `.hex` file on your atmega32u4 equipped E6-V2. 
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)  
+Hardware Supported: ps2avrgb E6-V2 with atmega32a microcontroller  
+Hardware Availability: [geekhack.org/index.php?topic=90787.0](https://geekhack.org/index.php?topic=90787.0)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make exclusive/e6v2/bmc:default
+
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods. 
+
+**Reset Key:**  Hold down the key located at `K00`, commonly programmed as left control while plugging in the keyboard. You may also hold down the key located at `K50`, commonly programmed as the escape key. 
+
+Windows: 
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset. 
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete. 
+
+macOS:
+1. Install homebrew by typing the following:   
+    ```
+    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+    ```
+2. Install `crosspack-avr`.  
+    ```
+    brew cask install crosspack-avr
+    ```
+3. Install the following packages:
+    ```
+    brew install python
+    pip3 install pyusb
+    brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset. 
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file. 
+
+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/exclusive/e6v2/bmc/rules.mk b/keyboards/exclusive/e6v2/bmc/rules.mk
new file mode 100644 (file)
index 0000000..59f98e6
--- /dev/null
@@ -0,0 +1,90 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32a
+PROTOCOL = VUSB
+
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# 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 = 12000000
+
+
+#
+# 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 = -DDEBUG_LEVEL=0
+
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+BOOTLOADER = bootloadHID
+
+
+# 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 = lite     # 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_CUSTOM_DRIVER = yes
+RGBLIGHT_ENABLE = yes        # 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)
+
+SRC += i2c_master.c
+
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/exclusive/e6v2/bmc/usbconfig.h b/keyboards/exclusive/e6v2/bmc/usbconfig.h
new file mode 100644 (file)
index 0000000..c52c90c
--- /dev/null
@@ -0,0 +1,393 @@
+/* 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 $
+ */
+
+#pragma once
+
+#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.
+ */
+#define USB_CFG_MAX_BUS_POWER           500
+/* 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                   1
+/* 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, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME     'G', 'r', 'a', 'y', ' ', 'S', 't', 'u', 'd', 'i', 'o'
+#define USB_CFG_VENDOR_NAME_LEN 11
+/* 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', 'B', '8', '5'
+#define USB_CFG_DEVICE_NAME_LEN 4
+/* 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   'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN   0 */
+/* 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
index 7d949de98e36537f4b85a01fb42d205cb9dfffbe..215e06090cc06d8ef5079d7457a40413455e660a 100644 (file)
@@ -23,7 +23,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define LAYOUT_all( \
   K61, K71, K72, K73, K74, K64, K65, K75, K76, K77, K78, K68, K66, K10, K60,\
    K11, K01, K02, K03, K04, K14, K15, K05, K06, K07, K08, K18, K16,  K20,   \
-    K12, K21, K22, K23, K24, K34, K35, K25, K26, K27, K28, K38,   K40,      \
+    K12, K21, K22, K23, K24, K34, K35, K25, K26, K27, K28, K38, K48,  K40,  \
   K19, K13, K41, K42, K43, K44, K54, K55, K45, K46, K47, K58,   K49,    K50,\
   K09,   K00,   K39,           K30,                 K59,   K69,   K57,   K29\
 ){ \
@@ -31,7 +31,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   { KC_NO, K11,   K12,   K13,   K14, K15, K16,   KC_NO, K18,   K19,   K10},   \
   { KC_NO, K21,   K22,   K23,   K24, K25, K26,   K27,   K28,   K29,   K20},   \
   { KC_NO, KC_NO, KC_NO, KC_NO, K34, K35, KC_NO, KC_NO, K38,   K39,   K30},   \
-  { KC_NO, K41,   K42,   K43,   K44, K45, K46,   K47,   KC_NO, K49,   K40},   \
+  { KC_NO, K41,   K42,   K43,   K44, K45, K46,   K47,   K48,   K49,   K40},   \
   { KC_NO, KC_NO, KC_NO, KC_NO, K54, K55, KC_NO, K57,   K58,   K59,   K50},   \
   { KC_NO, K61,   KC_NO, KC_NO, K64, K65, K66,   KC_NO, K68,   K69,   K60},   \
   { KC_NO, K71,   K72,   K73,   K74, K75, K76,   K77,   K78,   KC_NO, KC_NO}, \
index 3f94985b2dd25c5ae2849abd31518c77e6e10ce9..b7b6acca7856709de160e4f5e06c398555a35c85 100644 (file)
@@ -6,7 +6,7 @@
   "height": 5,
   "layouts": {
       "LAYOUT_all": {
-          "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":1.25}, {"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}, {"x":14, "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}, {"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": [{"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}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"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}, {"x":14, "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}, {"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_ansi": {
index a237f8489e764fc88e27873749457d9a7a180cda..6e91fba238b80e650656da4570203c910c072539 100644 (file)
@@ -21,21 +21,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [0] = 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_BSLS, KC_GRV,
       KC_TAB,  KC_Q,  KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
-      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,
+      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_BSLS, KC_ENT,
       KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
       KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL
       ),
   [1] = 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_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_DEL,
-      MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS,
+      MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_TRNS, KC_TRNS, MO(2),
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
       ),
   [2] = LAYOUT_all(
       KC_TRNS, KC_TRNS, 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,
-      MO(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,
+      MO(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
       ),
index 35b59e6a42f3539245916f85b6d4be9b398db2ff..d7fb7a7aed3f23cc7ead47d5e4bab0a1fae882c1 100644 (file)
@@ -21,21 +21,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [0] = 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_NO, KC_BSPC,
       KC_TAB,  KC_Q,    KC_W,    KC_E,     KC_R,  KC_T,    KC_Y,    KC_U, KC_I, KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
-      KC_LCTL, KC_A,    KC_S,    KC_D,     KC_F,  KC_G,    KC_H,    KC_J, KC_K, KC_L,    KC_SCLN, KC_QUOT, KC_ENT,
+      KC_LCTL, KC_A,    KC_S,    KC_D,     KC_F,  KC_G,    KC_H,    KC_J, KC_K, KC_L,    KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
       KC_LSFT, KC_NO,   KC_Z,    KC_X,     KC_C,  KC_V,    KC_B,    KC_N, KC_M, KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, TG(2),
       KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL
       ),
   [1] = 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_NO, KC_DEL,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+      KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       MO(3),   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
       ),
   [2] = LAYOUT_all(
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
       ),
@@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   [3] = LAYOUT_all(
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
       ),
index 596198be1048bd80716e82e85d6751204145f0ba..b89b05009a64629aacca0666b25d9c86cda8325f 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 596198be1048bd80716e82e85d6751204145f0ba..20fd511474e8581d5c628e6541ffacab8fb8a0e9 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "config_common.h"
 
 // place overrides here
-
-#endif
index 17483734816ce508bff017da6b716ce9f562548c..b6c6273d927ce6bbcb2015ba93776e7671833f81 100644 (file)
@@ -15,10 +15,7 @@ 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_common.h"
+#pragma once
 
 #define USE_SERIAL
 
@@ -34,5 +31,3 @@ 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 */
-
-#endif
index 5c3508b3d451ae8b145c8c839bab45e6c4dbe9c8..d20ca40fbbad263d20cf94420d109bf6685612e9 100644 (file)
@@ -1,5 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "eeconfig.h"
 
 extern keymap_config_t keymap_config;
 
index 3fea0afd4fa37e75e008e7cb655ec85c1c060530..fc04e0fb1bcec99b9c0573d7844deaccd32a0d76 100644 (file)
@@ -1,4 +1,4 @@
-#include "four_banger.h"
+#include QMK_KEYBOARD_H
 
 enum custom_keycodes {
   UP_URL = SAFE_RANGE
diff --git a/keyboards/georgi/config.h b/keyboards/georgi/config.h
new file mode 100644 (file)
index 0000000..b35762f
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Copy and worked on with love from the EZ team
+
+#pragma once
+#include "config_common.h"
+
+/* Defaults */
+
+#define VERSION "Alpha 01: Ted "
+#define VERBOSE
+
+#define FORCE_NKRO
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+#define NO_DEBUG
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_FUNCTION
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x1337
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    g Heavy Industries 
+#define PRODUCT         Georgi
+#define DESCRIPTION     QMK keyboard firmware for Georgi
+
+/* key matrix size */
+#define MATRIX_ROWS 14
+#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2)
+#define MATRIX_COLS 4
+
+#define MOUSEKEY_INTERVAL       20
+#define MOUSEKEY_DELAY          0
+#define MOUSEKEY_TIME_TO_MAX    60
+#define MOUSEKEY_MAX_SPEED      7
+#define MOUSEKEY_WHEEL_DELAY 0
+#define TAPPING_TOGGLE  2
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM    200
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    get_mods() == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+    get_mods() == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+#define DEBOUNCE    5
+#define USB_MAX_POWER_CONSUMPTION 500
diff --git a/keyboards/georgi/georgi.c b/keyboards/georgi/georgi.c
new file mode 100644 (file)
index 0000000..8866886
--- /dev/null
@@ -0,0 +1,68 @@
+#include QMK_KEYBOARD_H
+
+bool i2c_initialized = 0;
+i2c_status_t mcp23018_status = 0x20;
+
+void matrix_init_kb(void) {
+       steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
+
+    // (tied to Vcc for hardware convenience)
+    //DDRB  &= ~(1<<4);  // set B(4) as input
+    //PORTB &= ~(1<<4);  // set B(4) internal pull-up disabled
+
+    // unused pins - C7, D4, D5, D7, E6
+    // set as input with internal pull-up enabled
+    DDRC  &= ~(1<<7);
+    DDRD  &= ~(1<<5 | 1<<4 | 1<<6 | 1<<7);
+    DDRE  &= ~(1<<6);
+    PORTC |=  (1<<7);
+    PORTD |=  (1<<5 | 1<<4 | 1<<6 | 1<<7);
+    PORTE |=  (1<<6);
+
+    matrix_init_user();
+}
+
+
+uint8_t init_mcp23018(void) {
+    print("starting init");
+    mcp23018_status = 0x20;
+
+    // I2C subsystem
+
+    // uint8_t sreg_prev;
+    // sreg_prev=SREG;
+    // cli();
+
+    if (i2c_initialized == 0) {
+        i2c_init();  // on pins D(1,0)
+        i2c_initialized = true;
+        _delay_ms(1000);
+    }
+    // i2c_init(); // on pins D(1,0)
+    // _delay_ms(1000);
+
+    // set pin direction
+    // - unused  : input  : 1
+    // - input   : input  : 1
+    // - driving : output : 0
+    mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);    if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT);            if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
+    i2c_stop();
+
+    // set pull-up
+    // - unused  : on  : 1
+    // - input   : on  : 1
+    // - driving : off : 0
+    mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);    if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(GPPUA, ERGODOX_EZ_I2C_TIMEOUT);             if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
+    mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
+
+out:
+    i2c_stop();
+    // SREG=sreg_prev;
+    //uprintf("Init %x\n", mcp23018_status);
+    return mcp23018_status;
+}
diff --git a/keyboards/georgi/georgi.h b/keyboards/georgi/georgi.h
new file mode 100644 (file)
index 0000000..df6bb6e
--- /dev/null
@@ -0,0 +1,82 @@
+#pragma once
+#include <util/delay.h>
+#include <stdint.h>
+#include <stdbool.h>
+#include "quantum.h"
+#include "i2c_master.h"
+#include "matrix.h"
+
+
+extern i2c_status_t mcp23018_status;
+#define ERGODOX_EZ_I2C_TIMEOUT 1000
+#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
+#define CPU_16MHz       0x00
+
+// I2C aliases and register addresses (see "mcp23018.md")
+//#define I2C_ADDR        0b0100000
+#define I2C_ADDR        0x20
+#define I2C_ADDR_WRITE  ( (I2C_ADDR<<1) | I2C_WRITE )
+#define I2C_ADDR_READ   ( (I2C_ADDR<<1) | I2C_READ  )
+#define IODIRA          0x00            // i/o direction register
+#define IODIRB          0x01
+#define GPPUA           0x0C            // GPIO pull-up resistor register
+#define GPPUB           0x0D
+#define GPIOA           0x12            // general purpose i/o port register (write modifies OLAT)
+#define GPIOB           0x13
+#define OLATA           0x14            // output latch register
+#define OLATB           0x15
+
+void init_ergodox(void);
+uint8_t init_mcp23018(void);
+
+/*  ---------- LEFT HAND -----------   ---------- RIGHT HAND ---------- */
+#define LAYOUT_georgi(                                            \
+    L00,L01,L02,L03,L04,L05,            R00,R01,R02,R03,R04,R05,  \
+    L10,L11,L12,L13,L14,L15,            R10,R11,R12,R13,R14,R15,  \
+                       L20,L21,L22,            R20,R21,R22)              \
+                                                                  \
+    {                         \
+    { KC_NO,  R00,   R10,   R21},     \
+    { KC_NO,  R01,   R11,   R20},     \
+    { KC_NO,  R02,   R12,   R22},     \
+    { KC_NO,  R03,   R13,   KC_NO},   \
+    { KC_NO,  R04,   R14,   KC_NO},   \
+    { KC_NO,  R05,   R15,   KC_NO},   \
+    { KC_NO,  KC_NO, KC_NO, KC_NO},     \
+                                                         \
+    { KC_NO,  L05,   L15,   L22},     \
+    { KC_NO,  L04,   L14,   L21},     \
+    { KC_NO,  L03,   L13,   L20},     \
+    { KC_NO,  L02,   L12,   KC_NO},   \
+    { KC_NO,  L01,   L11,   KC_NO},   \
+    { KC_NO,  L00,   L10,   KC_NO},   \
+    { KC_NO,  KC_NO, KC_NO, KC_NO},     \
+                              \
+}
+
+/*  ---------- LEFT HAND -----------   ---------- RIGHT HAND ---------- 
+#define LAYOUT_GERGO(                                                    \
+    L00,L01,L02,L03,L04,L05,                   R00,R01,R02,R03,R04,R05,  \
+    L10,L11,L12,L13,L14,L15,L16,           R10,R11,R12,R13,R14,R15,R16,  \
+    L20,L21,L22,L23,L24,L25,L26,           R20,R21,R22,R23,R24,R25,R26,  \
+                L31,L32,                           R33,R34,              \
+                            L30,           R30,                          \
+                        L33,L34,           R31,R32)                      \
+                                                                         \
+    {                               \
+    { KC_NO, L16,   L26,  L30},     \
+    { L05,   L15,   L25,  L34},     \
+    { L04,   L14,   L24,  L33},     \
+    { L03,   L13,   L23,  L32},     \
+    { L02,   L12,   L22,  L31},     \
+    { L01,   L11,   L21,  KC_NO},   \
+    { L00,   L10,   L20,  KC_NO},   \
+                                    \
+    { KC_NO, R10, R20, R30},      \
+    { R00,   R11,   R21, R31},      \
+    { R01,   R12,   R22, R32},      \
+    { R02,   R13,   R23, R33},      \
+    { R03,   R14,   R24, R34},      \
+    { R04,   R15,   R25, KC_NO},    \
+    { R05,   R16,   R26, KC_NO},    \
+} */
diff --git a/keyboards/georgi/info.json b/keyboards/georgi/info.json
new file mode 100644 (file)
index 0000000..d0752e2
--- /dev/null
@@ -0,0 +1,133 @@
+{
+    "keyboard_name": "Georgi",
+    "url": "http://gboards.ca",
+    "maintainer": "germ",
+    "width": 13.2,
+    "height": 3.68,
+    "layouts": {
+        "LAYOUT_georgi": {
+            "layout": [
+                {
+                    "x": 0.05,
+                    "y": 0.54
+                },
+                {
+                    "x": 1.06,
+                    "y": 0.55
+                },
+                {
+                    "x": 2.06,
+                    "y": 0.29
+                },
+                {
+                    "x": 3.05,
+                    "y": 0.16
+                },
+                {
+                    "x": 4.06,
+                    "y": 0.41
+                },
+                {
+                    "x": 5.06,
+                    "y": 0.54
+                },
+                {
+                    "x": 7.1899999999999995,
+                    "y": 0.41
+                },
+                {
+                    "x": 8.2,
+                    "y": 0.3
+                },
+                {
+                    "x": 9.2,
+                    "y": 0.05
+                },
+                {
+                    "x": 10.2,
+                    "y": 0.29
+                },
+                {
+                    "x": 11.2,
+                    "y": 0.43
+                },
+                {
+                    "x": 12.2,
+                    "y": 0.42
+                },
+                {
+                    "x": 0.05,
+                    "y": 1.54
+                },
+                {
+                    "x": 1.06,
+                    "y": 1.54
+                },
+                {
+                    "x": 2.06,
+                    "y": 1.28
+                },
+                {
+                    "x": 3.05,
+                    "y": 1.16
+                },
+                {
+                    "x": 4.06,
+                    "y": 1.4
+                },
+                {
+                    "x": 5.06,
+                    "y": 1.54
+                },
+                {
+                    "x": 7.1899999999999995,
+                    "y": 1.4
+                },
+                {
+                    "x": 8.2,
+                    "y": 1.28
+                },
+                {
+                    "x": 9.2,
+                    "y": 1.04
+                },
+                {
+                    "x": 10.2,
+                    "y": 1.28
+                },
+                {
+                    "x": 11.2,
+                    "y": 1.42
+                },
+                {
+                    "x": 12.2,
+                    "y": 1.42
+                },
+                {
+                    "x": 3.05,
+                    "y": 2.67
+                },
+                {
+                    "x": 4.06,
+                    "y": 2.68
+                },
+                {
+                    "x": 5.06,
+                    "y": 2.68
+                },
+                {
+                    "x": 7.19,
+                    "y": 2.67
+                },
+                {
+                    "x": 8.2,
+                    "y": 2.67
+                },
+                {
+                    "x": 9.2,
+                    "y": 2.66
+                }
+            ]
+        }
+    }
+}
diff --git a/keyboards/georgi/keymaps/default/keymap.c b/keyboards/georgi/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..c3d69eb
--- /dev/null
@@ -0,0 +1,229 @@
+/* 
+ * Good on you for modifying your layout, this is the most nonQMK layout you will come across
+ * There are three modes, Steno (the default), QWERTY (Toggleable) and a Momentary symbol layer
+ *
+ * Don't modify the steno layer directly, instead add chords using the keycodes and macros
+ * from sten.h to the layout you want to modify.
+ *
+ * Observe the comment above processQWERTY!
+ *
+ * http://docs.gboards.ca
+ */
+
+#include QMK_KEYBOARD_H
+#include "sten.h"
+#include "keymap_steno.h"
+#define IGNORE_MOD_TAP_INTERRUPT
+
+int getKeymapCount(void);
+
+// Proper Layers
+#define FUNCT   (LSD | LK | LP | LH)
+#define MEDIA   (LSD | LK | LW | LR)
+#define MOVE    (ST1 | ST2)
+
+/* Keyboard Layout
+ * ,---------------------------------.    ,------------------------------.
+ * | FN  | LSU | LFT | LP | LH | ST1 |    | ST3 | RF | RP | RL | RT | RD |
+ * |-----+-----+-----+----+----|-----|    |-----|----+----+----+----+----|
+ * | PWR | LSD | LK  | LW | LR | ST2 |    | ST4 | RR | RG | RB | RS | RZ |
+ * `---------------------------------'    `------------------------------'
+ *                   ,---------------,    .---------------.
+ *                   | NUM | LA | LO |    | RE | RU | NUM |
+ *                   `---------------'    `---------------'
+ */
+
+// YOU MUST ORDER THIS!
+// P   Will return from processing on the first match it finds. Therefore
+// PJ  Will run the requested action, remove the matched chord and continue 
+//
+// First any chords that would conflict with PJs need to be checked, then PJs, lastly Ps.
+// For all chords should be ordered by length in their section!
+//
+// http://docs.gboards.ca
+bool processQwerty(void) {
+       // Place P's that would be trashed by PJ's here
+       P( RT  | RS  | RD  | RZ | NUM,          SEND_STRING(VERSION); SEND_STRING(__DATE__));
+       P( NUM | LA  | LO  | RE | RU,           SEND(KC_MPLY));
+       P( ST1 | ST2 | ST3 | ST4,                       SEND(KC_BSPC));
+
+       // Thumb Chords
+       P(  LA  | LO  | RE  | RU,                       SEND(KC_CAPS));
+       P(  LA  | RU,                                           SEND(KC_ESC));
+       PJ( LO  | RE,                                           SEND(KC_LCTL));
+       PJ( NUM | LA | RU,                                      SEND(KC_LCTL); SEND(KC_LSFT));
+       PJ( NUM | LA | RE,                                      SEND(KC_LCTL); SEND(KC_LSFT); SEND(KC_LALT));
+       
+       // Mods 
+       PJ( RT | RD | RS | RZ,                          SEND(KC_LGUI));
+       PJ( RT | RD,                                            SEND(KC_LCTL));
+       PJ( RS | RZ,                                            SEND(KC_LALT));
+       PJ( LA | NUM,                                           SEND(KC_LCTL));
+       PJ( LA | LO,                                            SEND(KC_LALT));
+       PJ( LO,                                                         SEND(KC_LSFT));
+
+       // Function Layer 
+       P( FUNCT | RF | RR,                                     SEND(KC_F5));
+       P( FUNCT | RP | RB,                                     SEND(KC_F6));
+       P( FUNCT | RL | RG,                                     SEND(KC_F7));
+       P( FUNCT | RT | RS,                                     SEND(KC_F8));
+       P( FUNCT | RF,                                          SEND(KC_F1));
+       P( FUNCT | RP,                                          SEND(KC_F2));
+       P( FUNCT | RL,                                          SEND(KC_F3));
+       P( FUNCT | RT,                                          SEND(KC_F4));
+       P( FUNCT | RR,                                          SEND(KC_F9));
+       P( FUNCT | RG,                                          SEND(KC_F10));
+       P( FUNCT | RB,                                          SEND(KC_F11));
+       P( FUNCT | RS,                                          SEND(KC_F12));
+
+       // Movement Layer
+       P( MOVE | RF,                                           SEND(KC_LEFT));
+       P( MOVE | RP,                                           SEND(KC_DOWN));
+       P( MOVE | RL,                                           SEND(KC_UP));
+       P( MOVE | RT,                                           SEND(KC_RIGHT));
+       P( MOVE | ST3,                                          SEND(KC_PGUP));
+       P( MOVE | ST4,                                          SEND(KC_PGDN));
+
+       // Media Layer
+       P( MEDIA | RF,                                          SEND(KC_MPRV));
+       P( MEDIA | RP,                                          SEND(KC_MPLY));
+       P( MEDIA | RL,                                          SEND(KC_MPLY));
+       P( MEDIA | RT,                                          SEND(KC_MNXT));
+       P( MEDIA | RD,                                          SEND(KC_VOLU));
+       P( MEDIA | RZ,                                          SEND(KC_VOLD));
+       P( MEDIA | RS,                                          SEND(KC_MUTE));
+
+       // Mouse Keys
+       P( LP | LH,                                                     clickMouse(KC_MS_BTN1));
+       P( LW | LR,                                                     clickMouse(KC_MS_BTN2));
+       
+       // Number Row
+       P( NUM | LSU,                                           SEND(KC_1));
+       P( NUM | LFT,                                           SEND(KC_2));
+       P( NUM | LP,                                            SEND(KC_3));
+       P( NUM | LH,                                            SEND(KC_4));
+       P( NUM | ST1,                                           SEND(KC_5));
+       P( NUM | ST3,                                           SEND(KC_6));
+       P( NUM | RF,                                            SEND(KC_7));
+       P( NUM | RP,                                            SEND(KC_8));
+       P( NUM | RL,                                            SEND(KC_9));
+       P( NUM | RT,                                            SEND(KC_0));
+       P( NUM | LA,                                            SEND(KC_5));
+       P( NUM | RT,                                            SEND(KC_0));
+       
+       // Specials
+       P( LA | NUM,                                            SEND(KC_ESC));
+       P( RU | NUM,                                            SEND(KC_TAB));
+       P( RE | RU,                                                     SEND(KC_BSPC));
+       P( RD | RZ,                                                     SEND(KC_ENT));
+       P( RE,                                                          SEND(KC_ENT));
+       P( RD,                                                          SEND(KC_BSPC)); 
+       P( NUM,                                                         SEND(KC_BSPC));
+       P( LA,                                                          SEND(KC_SPC));
+       P( RU,                                                          SEND(KC_SPC));
+       P( RZ,                                                          SEND(KC_ESC));
+
+       // Letters
+       P( LSU | LSD,                                           SEND(KC_A));
+       P( LFT | LK,                                            SEND(KC_S));
+       P( LP  | LW,                                            SEND(KC_D));
+       P( LH  | LR,                                            SEND(KC_F));
+       P( ST1 | ST2,                                           SEND(KC_G));
+       P( ST3 | ST4,                                           SEND(KC_H));
+       P( RF  | RR,                                            SEND(KC_J));
+       P( RT  | RS,                                            SEND(KC_SCLN))
+       P( RG  | RL,                                            SEND(KC_L));
+       P( RP  | RB,                                            SEND(KC_K));
+       P( LSU,                                                         SEND(KC_Q));
+       P( LSD,                                                         SEND(KC_Z));
+       P( LFT,                                                         SEND(KC_W));
+       P( LK,                                                          SEND(KC_X));
+       P( LP,                                                          SEND(KC_E));
+       P( LW,                                                          SEND(KC_C));
+       P( LH,                                                          SEND(KC_R));
+       P( LR,                                                          SEND(KC_V));
+       P( ST1,                                                         SEND(KC_T));
+       P( ST2,                                                         SEND(KC_B));
+       P( ST3,                                                         SEND(KC_Y));
+       P( ST4,                                                         SEND(KC_N));
+       P( RF,                                                          SEND(KC_U));
+       P( RR,                                                          SEND(KC_M));
+       P( RP,                                                          SEND(KC_I));
+       P( RB,                                                          SEND(KC_COMM));
+       P( RL,                                                          SEND(KC_O));
+       P( RG,                                                          SEND(KC_DOT));
+       P( RT,                                                          SEND(KC_P));
+       P( RS,                                                          SEND(KC_SLSH));
+
+       // Symbols and Numbers
+       P( PWR | RE | RU,                                       SEND(KC_ENT));
+       P( PWR | LA | LO,                                       SEND(KC_SPC));
+       P( PWR | LP | LW,                                       SEND(KC_LSFT); SEND(KC_9));                     // (
+       P( PWR | LH | LR,                                       SEND(KC_LSFT); SEND(KC_0));                     // )
+       P( PWR | ST1 | ST2,                                     SEND(KC_GRV));                                          // `
+       P( PWR | RD | RZ,                                       SEND(KC_ESC));                                                  
+       P( PWR | LSU | LSD,                                     SEND(KC_LSFT); SEND(KC_3));                     // #
+       P( PWR | LFT | LK,                                      SEND(KC_LSFT); SEND(KC_4));                     // $
+       P( PWR | LSU,                                           SEND(KC_LSFT); SEND(KC_1));                     // !
+       P( PWR | LSD,                                           SEND(KC_LSFT); SEND(KC_5));                     // %
+       P( PWR | LFT,                                           SEND(KC_LSFT); SEND(KC_2));                     // @
+       P( PWR | LK,                                            SEND(KC_LSFT); SEND(KC_6));                     // ^
+       P( PWR | LP,                                            SEND(KC_LSFT); SEND(KC_LBRC));          // {
+       P( PWR | LW,                                            SEND(KC_LBRC));
+       P( PWR | LH,                                            SEND(KC_LSFT); SEND(KC_RBRC));          // }
+       P( PWR | LR,                                            SEND(KC_RBRC));
+       P( PWR | ST1,                                           SEND(KC_LSFT); SEND(KC_BSLS));          // |
+       P( PWR | ST2,                                           SEND(KC_LSFT); SEND(KC_GRV));           // ~
+       P( PWR | ST3,                                           SEND(KC_QUOT));
+       P( PWR | ST4,                                           SEND(KC_LSFT); SEND(KC_QUOT));          // "
+       P( PWR | RF,                                            SEND(KC_KP_PLUS));
+       P( PWR | RR,                                            SEND(KC_LSFT); SEND(KC_7));                     // &
+       P( PWR | RP,                                            SEND(KC_MINS));
+       P( PWR | RB,                                            SEND(KC_EQL));
+       P( PWR | RL,                                            SEND(KC_SLSH));
+       P( PWR | RG,                                            SEND(KC_COMM));
+       P( PWR | RT,                                            SEND(KC_PAST));
+       P( PWR | RS,                                            SEND(KC_DOT));
+       P( PWR | RD,                                            SEND(KC_TAB));
+       P( PWR | LA,                                            SEND(KC_SCLN));
+       P( PWR | LO,                                            SEND(KC_SLSH));
+       P( PWR | RE,                                            SEND(KC_SCLN));
+       P( PWR | RU,                                            SEND(KC_SLSH));
+
+
+       // If we make here, send as a steno chord
+       // If plover is running we can hook that host side
+       return false;
+}
+
+#define STENO_LAYER    0
+#define GAMING                 1
+#define GAMING_2               2
+
+// "Layers"
+// Steno layer should be first in your map.
+// When PWR | FN | RR | RG | RB | RS is pressed, the layer is increased to the next map. You must return to STENO_LAYER at the end.
+// If you have only a single layer, you must set SINGLELAYER = yes in your rules.mk, otherwise you may experince undefined behaviour
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// Main layer, everything goes through here
+[STENO_LAYER] = LAYOUT_georgi(  
+STN_FN,  STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1,       STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+STN_PWR, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2,       STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+                                                STN_N1, STN_A,  STN_O,                 STN_E,   STN_U,  STN_N1)
+,
+// Gaming layer with Numpad, Very limited
+[GAMING] = LAYOUT_georgi(  
+KC_LSFT, KC_Q, KC_W, KC_E, KC_R, KC_T,       KC_Y,   KC_U, KC_I, KC_O, KC_P,    KC_ENT,
+KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,       KC_H,   KC_J, KC_K, KC_L, KC_SCLN, KC_DQUO,
+KC_LALT, KC_SPC, LT(GAMING_2, KC_ENT),      KC_DEL, KC_ASTR,  TO(STENO_LAYER)), 
+
+[GAMING_2] = LAYOUT_georgi(  
+KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5,       KC_6, KC_7, KC_8,  KC_9,  KC_0, KC_MINS,
+KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B,       KC_N, KC_M, KC_LT, KC_GT, KC_QUES, KC_RSFT,
+                         KC_LALT, KC_SPC, KC_ENT,           KC_DEL, KC_ASTR,  TO(STENO_LAYER))
+}; 
+
+int getKeymapCount(void) {
+       return sizeof(keymaps)/sizeof(keymaps[0]);
+}
diff --git a/keyboards/georgi/keymaps/default/readme.md b/keyboards/georgi/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..f9da34b
--- /dev/null
@@ -0,0 +1,11 @@
+# Georgi QWERTY/Steno firmware
+
+This is the default keymap for Georgi, it's based heavily off of the naps62 ErgoDox and the Gergo layout. 
+It is both a ergonomic and programmer friendly keymap.
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
+
+## Space issues
+If you find yourself running out of space for dictionary entries, disabling mousekeys in rules.mk will save
+you about 4k for entries!
+Get a free 1k by deleting the Gaming layers from the keymap!
diff --git a/keyboards/georgi/keymaps/default/rules.mk b/keyboards/georgi/keymaps/default/rules.mk
new file mode 100644 (file)
index 0000000..2973c45
--- /dev/null
@@ -0,0 +1,27 @@
+#----------------------------------------------------------------------------
+# make georgi:extrakey:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+
+#Debug options
+VERBOSE                                         = yes
+CONSOLE_ENABLE                  = yes
+DEBUG_MATRIX_SCAN_RATE   = no
+DEBUG_MATRIX                    = no
+KEYBOARD_SHARED_EP       = yes
+CUSTOM_MATRIX                   = yes
+MOUSEKEY_ENABLE                         = yes
+SINGLE_LAYER                    = no
+
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+SRC += matrix.c i2c_master.c
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+    OPT_DEFS += -DDEBUG_MATRIX
+endif
+ifeq ($(strip $(SINGLE_LAYER)), yes)
+    OPT_DEFS += -DSINGLE_LAYER
+endif
diff --git a/keyboards/georgi/keymaps/template/keymap.c b/keyboards/georgi/keymaps/template/keymap.c
new file mode 100644 (file)
index 0000000..b17d7ed
--- /dev/null
@@ -0,0 +1,216 @@
+/* 
+ * Good on you for modifying your layout, this is the most nonQMK layout you will come across
+ * There are three modes, Steno (the default), QWERTY (Toggleable) and a Momentary symbol layer
+ *
+ * Don't modify the steno layer directly, instead add chords using the keycodes and macros
+ * from sten.h to the layout you want to modify.
+ *
+ * Observe the comment above processQWERTY!
+ *
+ * http://docs.gboards.ca
+ */
+
+#include QMK_KEYBOARD_H
+#include "sten.h"
+#include "keymap_steno.h"
+#define IGNORE_MOD_TAP_INTERRUPT
+
+int getKeymapCount(void);
+
+// Proper Layers
+#define FUNCT   (LSD | LK | LP | LH)
+#define MEDIA   (LSD | LK | LW | LR)
+#define MOVE    (ST1 | ST2)
+
+/* Keyboard Layout
+ * ,---------------------------------.    ,------------------------------.
+ * | FN  | LSU | LFT | LP | LH | ST1 |    | ST3 | RF | RP | RL | RT | RD |
+ * |-----+-----+-----+----+----|-----|    |-----|----+----+----+----+----|
+ * | PWR | LSD | LK  | LW | LR | ST2 |    | ST4 | RR | RG | RB | RS | RZ |
+ * `---------------------------------'    `------------------------------'
+ *                   ,---------------,    .---------------.
+ *                   | NUM | LA | LO |    | RE | RU | NUM |
+ *                   `---------------'    `---------------'
+ */
+
+// YOU MUST ORDER THIS!
+// P   Will return from processing on the first match it finds. Therefore
+// PJ  Will run the requested action, remove the matched chord and continue 
+//
+// First any chords that would conflict with PJs need to be checked, then PJs, lastly Ps.
+// For all chords should be ordered by length in their section!
+//
+// http://docs.gboards.ca
+bool processQwerty(void) {
+       // Place P's that would be trashed by PJ's here
+       P( RT  | RS  | RD  | RZ | NUM,          SEND_STRING(VERSION); SEND_STRING(__DATE__));
+       P( NUM | LA  | LO  | RE | RU,           SEND(KC_MPLY));
+       P( ST1 | ST2 | ST3 | ST4,                       SEND(KC_BSPC));
+
+       // Thumb Chords
+       P(  LA  | LO  | RE  | RU,                       SEND(KC_CAPS));
+       P(  LA  | RU,                                           SEND(KC_ESC));
+       PJ( LO  | RE,                                           SEND(KC_LCTL));
+       PJ( NUM | LA | RU,                                      SEND(KC_LCTL); SEND(KC_LSFT));
+       PJ( NUM | LA | RE,                                      SEND(KC_LCTL); SEND(KC_LSFT); SEND(KC_LALT));
+       
+       // Mods 
+       PJ( RT | RD | RS | RZ,                          SEND(KC_LGUI));
+       PJ( RT | RD,                                            SEND(KC_LCTL));
+       PJ( RS | RZ,                                            SEND(KC_LALT));
+       PJ( LA | NUM,                                           SEND(KC_LCTL));
+       PJ( LA | LO,                                            SEND(KC_LALT));
+       PJ( LO,                                                         SEND(KC_LSFT));
+
+       // Function Layer 
+       P( FUNCT | RF | RR,                                     SEND(KC_F5));
+       P( FUNCT | RP | RB,                                     SEND(KC_F6));
+       P( FUNCT | RL | RG,                                     SEND(KC_F7));
+       P( FUNCT | RT | RS,                                     SEND(KC_F8));
+       P( FUNCT | RF,                                          SEND(KC_F1));
+       P( FUNCT | RP,                                          SEND(KC_F2));
+       P( FUNCT | RL,                                          SEND(KC_F3));
+       P( FUNCT | RT,                                          SEND(KC_F4));
+       P( FUNCT | RR,                                          SEND(KC_F9));
+       P( FUNCT | RG,                                          SEND(KC_F10));
+       P( FUNCT | RB,                                          SEND(KC_F11));
+       P( FUNCT | RS,                                          SEND(KC_F12));
+
+       // Movement Layer
+       P( MOVE | RF,                                           SEND(KC_LEFT));
+       P( MOVE | RP,                                           SEND(KC_DOWN));
+       P( MOVE | RL,                                           SEND(KC_UP));
+       P( MOVE | RT,                                           SEND(KC_RIGHT));
+       P( MOVE | ST3,                                          SEND(KC_PGUP));
+       P( MOVE | ST4,                                          SEND(KC_PGDN));
+
+       // Media Layer
+       P( MEDIA | RF,                                          SEND(KC_MPRV));
+       P( MEDIA | RP,                                          SEND(KC_MPLY));
+       P( MEDIA | RL,                                          SEND(KC_MPLY));
+       P( MEDIA | RT,                                          SEND(KC_MNXT));
+       P( MEDIA | RD,                                          SEND(KC_VOLU));
+       P( MEDIA | RZ,                                          SEND(KC_VOLD));
+       P( MEDIA | RS,                                          SEND(KC_MUTE));
+
+       // Mouse Keys
+       P( LP | LH,                                                     clickMouse(KC_MS_BTN1));
+       P( LW | LR,                                                     clickMouse(KC_MS_BTN2));
+       
+       // Number Row
+       P( NUM | LSU,                                           SEND(KC_1));
+       P( NUM | LFT,                                           SEND(KC_2));
+       P( NUM | LP,                                            SEND(KC_3));
+       P( NUM | LH,                                            SEND(KC_4));
+       P( NUM | ST1,                                           SEND(KC_5));
+       P( NUM | ST3,                                           SEND(KC_6));
+       P( NUM | RF,                                            SEND(KC_7));
+       P( NUM | RP,                                            SEND(KC_8));
+       P( NUM | RL,                                            SEND(KC_9));
+       P( NUM | RT,                                            SEND(KC_0));
+       P( NUM | LA,                                            SEND(KC_5));
+       P( NUM | RT,                                            SEND(KC_0));
+       
+       // Specials
+       P( LA | NUM,                                            SEND(KC_ESC));
+       P( RU | NUM,                                            SEND(KC_TAB));
+       P( RE | RU,                                                     SEND(KC_BSPC));
+       P( RD | RZ,                                                     SEND(KC_ENT));
+       P( RE,                                                          SEND(KC_ENT));
+       P( RD,                                                          SEND(KC_BSPC)); 
+       P( NUM,                                                         SEND(KC_BSPC));
+       P( LA,                                                          SEND(KC_SPC));
+       P( RU,                                                          SEND(KC_SPC));
+       P( RZ,                                                          SEND(KC_ESC));
+
+       // Letters
+       P( LSU | LSD,                                           SEND(KC_A));
+       P( LFT | LK,                                            SEND(KC_S));
+       P( LP  | LW,                                            SEND(KC_D));
+       P( LH  | LR,                                            SEND(KC_F));
+       P( ST1 | ST2,                                           SEND(KC_G));
+       P( ST3 | ST4,                                           SEND(KC_H));
+       P( RF  | RR,                                            SEND(KC_J));
+       P( RT  | RS,                                            SEND(KC_SCLN))
+       P( RG  | RL,                                            SEND(KC_L));
+       P( RP  | RB,                                            SEND(KC_K));
+       P( LSU,                                                         SEND(KC_Q));
+       P( LSD,                                                         SEND(KC_Z));
+       P( LFT,                                                         SEND(KC_W));
+       P( LK,                                                          SEND(KC_X));
+       P( LP,                                                          SEND(KC_E));
+       P( LW,                                                          SEND(KC_C));
+       P( LH,                                                          SEND(KC_R));
+       P( LR,                                                          SEND(KC_V));
+       P( ST1,                                                         SEND(KC_T));
+       P( ST2,                                                         SEND(KC_B));
+       P( ST3,                                                         SEND(KC_Y));
+       P( ST4,                                                         SEND(KC_N));
+       P( RF,                                                          SEND(KC_U));
+       P( RR,                                                          SEND(KC_M));
+       P( RP,                                                          SEND(KC_I));
+       P( RB,                                                          SEND(KC_COMM));
+       P( RL,                                                          SEND(KC_O));
+       P( RG,                                                          SEND(KC_DOT));
+       P( RT,                                                          SEND(KC_P));
+       P( RS,                                                          SEND(KC_SLSH));
+
+       // Symbols and Numbers
+       P( PWR | RE | RU,                                       SEND(KC_ENT));
+       P( PWR | LA | LO,                                       SEND(KC_SPC));
+       P( PWR | LP | LW,                                       SEND(KC_LSFT); SEND(KC_9));                     // (
+       P( PWR | LH | LR,                                       SEND(KC_LSFT); SEND(KC_0));                     // )
+       P( PWR | ST1 | ST2,                                     SEND(KC_GRV));                                          // `
+       P( PWR | RD | RZ,                                       SEND(KC_ESC));                                                  
+       P( PWR | LSU | LSD,                                     SEND(KC_LSFT); SEND(KC_3));                     // #
+       P( PWR | LFT | LK,                                      SEND(KC_LSFT); SEND(KC_4));                     // $
+       P( PWR | LSU,                                           SEND(KC_LSFT); SEND(KC_1));                     // !
+       P( PWR | LSD,                                           SEND(KC_LSFT); SEND(KC_5));                     // %
+       P( PWR | LFT,                                           SEND(KC_LSFT); SEND(KC_2));                     // @
+       P( PWR | LK,                                            SEND(KC_LSFT); SEND(KC_6));                     // ^
+       P( PWR | LP,                                            SEND(KC_LSFT); SEND(KC_LBRC));          // {
+       P( PWR | LW,                                            SEND(KC_LBRC));
+       P( PWR | LH,                                            SEND(KC_LSFT); SEND(KC_RBRC));          // }
+       P( PWR | LR,                                            SEND(KC_RBRC));
+       P( PWR | ST1,                                           SEND(KC_LSFT); SEND(KC_BSLS));          // |
+       P( PWR | ST2,                                           SEND(KC_LSFT); SEND(KC_GRV));           // ~
+       P( PWR | ST3,                                           SEND(KC_QUOT));
+       P( PWR | ST4,                                           SEND(KC_LSFT); SEND(KC_QUOT));          // "
+       P( PWR | RF,                                            SEND(KC_KP_PLUS));
+       P( PWR | RR,                                            SEND(KC_LSFT); SEND(KC_7));                     // &
+       P( PWR | RP,                                            SEND(KC_MINS));
+       P( PWR | RB,                                            SEND(KC_EQL));
+       P( PWR | RL,                                            SEND(KC_SLSH));
+       P( PWR | RG,                                            SEND(KC_COMM));
+       P( PWR | RT,                                            SEND(KC_PAST));
+       P( PWR | RS,                                            SEND(KC_DOT));
+       P( PWR | RD,                                            SEND(KC_TAB));
+       P( PWR | LA,                                            SEND(KC_SCLN));
+       P( PWR | LO,                                            SEND(KC_SLSH));
+       P( PWR | RE,                                            SEND(KC_SCLN));
+       P( PWR | RU,                                            SEND(KC_SLSH));
+
+
+       // If we make here, send as a steno chord
+       // If plover is running we can hook that host side
+       return false;
+}
+
+#define STENO_LAYER    0
+
+// "Layers"
+// Steno layer should be first in your map.
+// When PWR | FN | RR | RG | RB | RS is pressed, the layer is increased to the next map. You must return to STENO_LAYER at the end.
+// If you have only a single layer, you must set SINGLELAYER = yes in your rules.mk, otherwise you may experince undefined behaviour
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// Main layer, everything goes through here
+[STENO_LAYER] = LAYOUT_georgi(  
+STN_FN,  STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1,       STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+STN_PWR, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2,       STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+                                                STN_N1, STN_A,  STN_O,                 STN_E,   STN_U,  STN_N1)
+}; 
+
+int getKeymapCount(void) {
+       return sizeof(keymaps)/sizeof(keymaps[0]);
+}
diff --git a/keyboards/georgi/keymaps/template/readme.md b/keyboards/georgi/keymaps/template/readme.md
new file mode 100644 (file)
index 0000000..7c6fc35
--- /dev/null
@@ -0,0 +1,6 @@
+# Georgi QWERTY/Steno firmware
+
+This is a blank template configured with 5K of free space for your onboard dictionary!  
+Read the docs over at [gBoards](http://docs.gboards.ca)
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/georgi/keymaps/template/rules.mk b/keyboards/georgi/keymaps/template/rules.mk
new file mode 100644 (file)
index 0000000..1178fd8
--- /dev/null
@@ -0,0 +1,27 @@
+#----------------------------------------------------------------------------
+# make georgi:extrakey:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+
+#Debug options
+VERBOSE                                         = yes
+CONSOLE_ENABLE                  = yes
+DEBUG_MATRIX_SCAN_RATE   = no
+DEBUG_MATRIX                    = no
+KEYBOARD_SHARED_EP       = yes
+CUSTOM_MATRIX                   = yes
+MOUSEKEY_ENABLE                         = no
+SINGLE_LAYER                    = no
+
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+SRC += matrix.c i2c_master.c
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+    OPT_DEFS += -DDEBUG_MATRIX
+endif
+ifeq ($(strip $(SINGLE_LAYER)), yes)
+    OPT_DEFS += -DSINGLE_LAYER
+endif
diff --git a/keyboards/georgi/matrix.c b/keyboards/georgi/matrix.c
new file mode 100644 (file)
index 0000000..22079ac
--- /dev/null
@@ -0,0 +1,402 @@
+/*
+Note for ErgoDox EZ customizers: Here be dragons!
+This is not a file you want to be messing with.
+All of the interesting stuff for you is under keymaps/ :)
+Love, Erez
+
+Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "matrix.h"
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "keymap_steno.h"
+#include QMK_KEYBOARD_H
+#ifdef DEBUG_MATRIX_SCAN_RATE
+#include  "timer.h"
+#endif
+
+
+#ifndef DEBOUNCE
+#   define DEBOUNCE    5
+#endif
+
+// MCP Pin Defs
+#define RROW1 (1<<3)
+#define RROW2 (1<<2)
+#define RROW3 (1<<1)
+#define RROW4 (1<<0)
+#define COL0 (1<<0)
+#define COL1 (1<<1)
+#define COL2 (1<<2)
+#define COL3 (1<<3)
+#define COL4 (1<<4)
+#define COL5 (1<<5)
+#define COL6 (1<<6)
+
+// ATmega pin defs
+#define ROW1  (1<<6)
+#define ROW2  (1<<5)
+#define ROW3  (1<<4)
+#define ROW4  (1<<1)
+#define COL7 (1<<0)
+#define COL8 (1<<1)
+#define COL9 (1<<2)
+#define COL10 (1<<3)
+#define COL11 (1<<2)
+#define COL12 (1<<3)
+#define COL13 (1<<6)
+
+
+// bit masks
+#define BMASK     (COL7 | COL8 | COL9 | COL10)
+#define CMASK     (COL13)
+#define DMASK     (COL11 | COL12)
+#define FMASK     (ROW1 | ROW2 | ROW3 | ROW4)
+#define RROWMASK  (RROW1 | RROW2 | RROW3 | RROW4)
+#define MCPMASK   (COL0 | COL1 | COL2 | COL3 | COL4 | COL5 | COL6)
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+/*
+ * matrix state(1:on, 0:off)
+ * contains the raw values without debounce filtering of the last read cycle.
+ */
+static matrix_row_t raw_matrix[MATRIX_ROWS];
+
+// Debouncing: store for each key the number of scans until it's eligible to
+// change.  When scanning the matrix, ignore any changes in keys that have
+// already changed in the last DEBOUNCE scans.
+static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+static uint8_t mcp23018_reset_loop;
+// static uint16_t mcp23018_reset_loop;
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+uint32_t matrix_timer;
+uint32_t matrix_scan_count;
+#endif
+
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+  matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+  matrix_scan_user();
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+    return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+    return MATRIX_COLS;
+}
+
+
+void matrix_init(void)
+{
+    // initialize row and col
+    mcp23018_status = init_mcp23018();
+    unselect_rows();
+    init_cols();
+
+    // initialize matrix state: all keys off
+    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+        matrix[i] = 0;
+        raw_matrix[i] = 0;
+        for (uint8_t j=0; j < MATRIX_COLS; ++j) {
+            debounce_matrix[i * MATRIX_COLS + j] = 0;
+        }
+    }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+    matrix_timer = timer_read32();
+    matrix_scan_count = 0;
+#endif
+    matrix_init_quantum();
+}
+
+void matrix_power_up(void) {
+    mcp23018_status = init_mcp23018();
+
+    unselect_rows();
+    init_cols();
+
+    // initialize matrix state: all keys off
+    for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+        matrix[i] = 0;
+    }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+    matrix_timer = timer_read32();
+    matrix_scan_count = 0;
+#endif
+
+}
+
+// Returns a matrix_row_t whose bits are set if the corresponding key should be
+// eligible to change in this scan.
+matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
+  matrix_row_t result = 0;
+  matrix_row_t change = rawcols ^ raw_matrix[row];
+  raw_matrix[row] = rawcols;
+  for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
+    if (debounce_matrix[row * MATRIX_COLS + i]) {
+      --debounce_matrix[row * MATRIX_COLS + i];
+    } else {
+      result |= (1 << i);
+    }
+    if (change & (1 << i)) {
+      debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
+    }
+  }
+  return result;
+}
+
+matrix_row_t debounce_read_cols(uint8_t row) {
+  // Read the row without debouncing filtering and store it for later usage.
+  matrix_row_t cols = read_cols(row);
+  // Get the Debounce mask.
+  matrix_row_t mask = debounce_mask(cols, row);
+  // debounce the row and return the result.
+  return (cols & mask) | (matrix[row] & ~mask);;
+}
+
+uint8_t matrix_scan(void)
+{
+  // Then the keyboard
+  if (mcp23018_status) { // if there was an error
+      if (++mcp23018_reset_loop == 0) {
+      // if (++mcp23018_reset_loop >= 1300) {
+          // since mcp23018_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+          // this will be approx bit more frequent than once per second
+          print("trying to reset mcp23018\n");
+          mcp23018_status = init_mcp23018();
+          if (mcp23018_status) {
+              print("left side not responding\n");
+          } else {
+              print("left side attached\n");
+          }
+      }
+  }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+    matrix_scan_count++;
+    uint32_t timer_now = timer_read32();
+    if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) {
+        print("matrix scan frequency: ");
+        pdec(matrix_scan_count);
+        print("\n");
+
+        matrix_timer = timer_now;
+        matrix_scan_count = 0;
+    }
+#endif
+    for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
+        select_row(i);
+        // and select on left hand
+        select_row(i + MATRIX_ROWS_PER_SIDE);
+        // we don't need a 30us delay anymore, because selecting a
+        // left-hand row requires more than 30us for i2c.
+
+        // grab cols from left hand
+        matrix[i] = debounce_read_cols(i);
+        // grab cols from right hand
+        matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
+
+        unselect_rows();
+    }
+
+    matrix_scan_quantum();
+
+#ifdef DEBUG_MATRIX
+    for (uint8_t c = 0; c < MATRIX_COLS; c++) 
+               for (uint8_t r = 0; r < MATRIX_ROWS; r++) 
+                 if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
+#endif
+
+    return 1;
+}
+
+bool matrix_is_modified(void) // deprecated and evidently not called.
+{
+    return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+    return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+    return matrix[row];
+}
+
+void matrix_print(void)
+{
+    print("\nr/c 0123456789ABCDEF\n");
+    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+        phex(row); print(": ");
+        pbin_reverse16(matrix_get_row(row));
+        print("\n");
+    }
+}
+
+uint8_t matrix_key_count(void)
+{
+    uint8_t count = 0;
+    for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+        count += bitpop16(matrix[i]);
+    }
+    return count;
+}
+
+// Remember this means ROWS
+static void  init_cols(void)
+{
+    // init on mcp23018
+    // not needed, already done as part of init_mcp23018()
+
+    // Input with pull-up(DDR:0, PORT:1)
+    DDRF  &= ~FMASK;
+    PORTF |=  FMASK;
+}
+
+static matrix_row_t read_cols(uint8_t row)
+{
+    if (row < 7) {
+        if (mcp23018_status) { // if there was an error
+            return 0;
+        } else {
+            uint8_t data = 0;
+            mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);    if (mcp23018_status) goto out;
+            mcp23018_status = i2c_write(GPIOB, ERGODOX_EZ_I2C_TIMEOUT);             if (mcp23018_status) goto out;
+            mcp23018_status = i2c_start(I2C_ADDR_READ, ERGODOX_EZ_I2C_TIMEOUT);     if (mcp23018_status) goto out;
+            mcp23018_status = i2c_read_nack(ERGODOX_EZ_I2C_TIMEOUT);                if (mcp23018_status < 0) goto out;
+            data = ~((uint8_t)mcp23018_status);
+            mcp23018_status = I2C_STATUS_SUCCESS;
+        out:
+            i2c_stop();
+
+#ifdef DEBUG_MATRIX
+            if (data != 0x00) xprintf("I2C: %d\n", data);
+#endif
+            return data;
+        }
+    } else {
+         /* read from teensy
+               * bitmask is 0b0111001, but we want the lower four
+               * we'll return 1s for the top two, but that's harmless.
+               */
+        // So I need to confuckulate all this
+        //return ~(((PIND & DMASK) >> 1  | ((PINC & CMASK) >> 6) | (PIN)));
+        //return ~((PINF & 0x03) | ((PINF & 0xF0) >> 2));
+        return ~(
+           (((PINF & ROW4) >> 1)
+          | ((PINF & (ROW1 | ROW2 | ROW3)) >> 3))
+        & 0xF);
+    }
+}
+
+// Row pin configuration
+static void unselect_rows(void)
+{
+    // no need to unselect on mcp23018, because the select step sets all
+    // the other row bits high, and it's not changing to a different
+    // direction
+    // Hi-Z(DDR:0, PORT:0) to unselect
+    DDRB  &= ~(BMASK);
+    PORTB &= ~(BMASK);
+    DDRC  &= ~CMASK;
+    PORTC &= ~CMASK;
+    DDRD  &= ~DMASK;
+    PORTD &= ~DMASK;
+}
+
+static void select_row(uint8_t row)
+{
+    if (row < 7) {
+        // select on mcp23018
+        if (mcp23018_status) { // do nothing on error
+        } else { // set active row low  : 0 // set other rows hi-Z : 1 
+            mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
+            mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT);                 if (mcp23018_status) goto out;
+            mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT);      if (mcp23018_status) goto out;
+        out:
+            i2c_stop();
+        }
+    } else {
+        // Output low(DDR:1, PORT:0) to select
+        switch (row) {
+            case 7:
+                DDRB  |= COL7;
+                PORTB &= ~COL7;
+                break;
+            case 8:
+                DDRB  |= COL8;
+                PORTB &= ~COL8;
+                break;
+            case 9:
+                DDRB  |= COL9;
+                PORTB &= ~COL9;
+                break;
+            case 10:
+                DDRB  |= COL10;
+                PORTB &= ~COL10;
+                break;
+            case 11:
+                DDRD  |= COL11;
+                PORTD &= ~COL11;
+                break;
+            case 12:
+                DDRD  |= COL12;
+                PORTD &= ~COL12;
+                break;
+            case 13:
+                DDRC  |= COL13;
+                PORTC &= ~COL13;
+                break;
+        }
+    }
+}
diff --git a/keyboards/georgi/readme.md b/keyboards/georgi/readme.md
new file mode 100644 (file)
index 0000000..03e2e3d
--- /dev/null
@@ -0,0 +1,29 @@
+# Georgi
+
+![Georgi](https://i.imgur.com/3kUpRrj.jpg)
+
+A compact 20% (12x2) Split Keyboard for steno and QWERTY. 
+
+[More info on qmk.fm](http://qmk.fm/georgi/)
+
+Keyboard Maintainer: [Jeremy Bernhardt](https://github.com/germ)  
+Hardware Supported: Georgi   
+Hardware Availability: [gboards.ca](http://gboards.ca)  
+
+## Firmware building
+After cloning the QMK repo and installing dfu-programmer build and flash with. Be sure to reset your keyboard!
+
+    make georgi:default:dfu
+
+To just test your build with the default keymap
+   
+    make georgi:default
+
+Build options can be enabled/disabled in keyboards/georgi/keymaps/default/rules.mk . Copy the default directory and make any changes to your layout, if you think they're worth sharing submit a PR!
+
+# Space
+The stock firmware uses nearly all of the flash avalible. For custom dictionary modifications, disable mousekeys in your keymaps rules.mk (4K of space) and remove the Gaming layers. I've done this already in the provided keymap 'template'.
+
+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).
+
+## Have an idea?  [Reach out to me!](mailto:bernhardtjeremy@gmail.com)
diff --git a/keyboards/georgi/rules.mk b/keyboards/georgi/rules.mk
new file mode 100644 (file)
index 0000000..0f730f3
--- /dev/null
@@ -0,0 +1,22 @@
+#----------------------------------------------------------------------------
+# make georgi:default:dfu
+# Make sure you have dfu-programmer installed!
+# Do not edit this file! Make a copy of keymaps/default and modify that!
+#----------------------------------------------------------------------------
+# Source includes
+SRC += matrix.c i2c_master.c
+
+# Hardware info
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+BOOTLOADER = atmel-dfu
+F_USB = $(F_CPU)
+EXTRAFLAGS += -flto
+
+CUSTOM_MATRIX          = yes
+STENO_ENABLE           = yes
+EXTRAKEY_ENABLE     = yes
+CONSOLE_ENABLE      = no
+COMMAND_ENABLE      = no
+NKRO_ENABLE                    = yes
diff --git a/keyboards/georgi/sten.c b/keyboards/georgi/sten.c
new file mode 100644 (file)
index 0000000..3b33b11
--- /dev/null
@@ -0,0 +1,2 @@
+#include "sten.h" 
+
diff --git a/keyboards/georgi/sten.h b/keyboards/georgi/sten.h
new file mode 100644 (file)
index 0000000..fee05de
--- /dev/null
@@ -0,0 +1,290 @@
+// 2019, g Heavy Industries
+
+#include QMK_KEYBOARD_H
+#include "mousekey.h"
+#include "keymap.h"
+#include "keymap_steno.h"
+
+// Bitfield representing the current chord
+uint32_t cChord = 0;
+
+// See if a given chord is pressed. 
+// P will return 
+// PJ will continue processing, removing the found chord 
+#define P(chord, act)  if (cChord == (chord)) { act; return true; }
+#define PJ(chord, act) if ((cChord & (chord)) == (chord)) { cChord ^= chord; act; }
+
+// All Steno Codes
+// Shift to internal representation
+#define STN(n) (1L<<n)
+
+//i.e) S(teno)R(ight)F
+enum ORDER { 
+               SFN = 0, SPWR, SST1, SST2, SST3, SST4, SNUM,
+               SLSU, SLSD, SLT, SLK, SLP, SLW, SLH, SLR, SLA, SLO, 
+               SRE, SRU, SRF, SRR, SRP, SRB, SRL, SRG, SRT, SRS, SRD, SRZ
+};
+
+// Break it all out
+#define FN     STN(SFN)
+#define PWR    STN(SPWR)
+#define ST1 STN(SST1)
+#define ST2 STN(SST2)
+#define ST3 STN(SST3)
+#define ST4 STN(SST4)
+#define NUM STN(SNUM) // No distinction between left and right
+
+#define LSU STN(SLSU)
+#define LSD STN(SLSD)
+#define LFT STN(SLT)  // (L)e(F)t (T), preprocessor conflict
+#define LK  STN(SLK)
+#define LP  STN(SLP)
+#define LW  STN(SLW)
+#define LH  STN(SLH)
+#define LR  STN(SLR)
+#define LA  STN(SLA)
+#define LO  STN(SLO)
+
+#define RE  STN(SRE)
+#define RU  STN(SRU)
+#define RF  STN(SRF)
+#define RR  STN(SRR)
+#define RP  STN(SRP)
+#define RB  STN(SRB)
+#define RL  STN(SRL)
+#define RG  STN(SRG)
+#define RT  STN(SRT)
+#define RS  STN(SRS)
+#define RD  STN(SRD)
+#define RZ  STN(SRZ)
+
+bool           processQwerty(void);
+bool           processFakeSteno(void);
+void           clickMouse(uint8_t kc);
+void           SEND(uint8_t kc);
+extern int     getKeymapCount(void);
+
+// Mode state
+enum MODE { STENO = 0, QWERTY, COMMAND };
+enum MODE cMode = STENO;
+enum MODE pMode;
+bool QWERSTENO = false;
+
+// Command State
+#define MAX_CMD_BUF 20
+uint8_t CMDBUF[MAX_CMD_BUF];
+uint8_t CMDLEN = 0;
+
+// Key Repeat state
+bool     inChord  = false;
+uint16_t repTimer = 0;
+#define  REP_DELAY 300
+
+// Mousekeys state
+bool   inMouse = false;
+int8_t mousePress;
+
+// All processing done at chordUp goes through here
+bool send_steno_chord_user(steno_mode_t mode, uint8_t chord[6]) { 
+       // Check for mousekeys, this is release
+#ifdef MOUSEKEY_ENABLE
+       if (inMouse) {
+               inMouse = false;
+               mousekey_off(mousePress);
+               mousekey_send();
+       }
+#endif
+
+       // Toggle Serial/QWERTY steno
+       if (cChord == (PWR | FN | ST1 | ST2)) {
+               uprintf("Fallback Toggle\n");
+               QWERSTENO = !QWERSTENO;
+               
+               goto out;
+       }
+
+       // handle command mode
+       if (cChord == (PWR | FN | RD | RZ)) {
+               uprintf("COMMAND Toggle\n");
+               if (cMode != COMMAND) {   // Entering Command Mode
+                       CMDLEN = 0;
+                       pMode = cMode;
+                       cMode = COMMAND;
+               } else {                  // Exiting Command Mode
+                       cMode = pMode;
+
+                       // Press all and release all
+                       for (int i = 0; i < CMDLEN; i++) {
+                               register_code(CMDBUF[i]);
+                       }
+                       clear_keyboard();
+               }
+
+               goto out;
+       }
+
+       // Handle Gaming Toggle,
+       if (cChord == (PWR | FN | ST2 | ST3) && getKeymapCount() > 1) {
+               uprintf("Switching to QMK\n");
+               layer_on(1);
+               goto out;
+       }
+
+       // Lone FN press, toggle QWERTY
+       if (cChord == FN) {
+               (cMode == STENO) ? (cMode = QWERTY) : (cMode = STENO);
+               goto out;
+       }
+
+       // Check for Plover momentary
+       if (cMode == QWERTY && (cChord & FN)) {
+               cChord ^= FN;
+               goto steno;
+       }
+
+       // Do QWERTY and Momentary QWERTY
+       if (cMode == QWERTY || (cMode == COMMAND) || (cChord & (FN | PWR))) {
+               if (cChord & FN)  cChord ^= FN;
+               processQwerty();
+               goto out;
+       }
+
+       // Fallback NKRO Steno
+       if (cMode == STENO && QWERSTENO) {
+               processFakeSteno();
+               goto out;
+       }
+
+steno:
+       // Hey that's a steno chord!
+       inChord = false;
+       cChord = 0;
+       return true; 
+
+out:
+       inChord = false;
+       clear_keyboard();
+       cChord = 0;
+       return false;
+}
+
+// Update Chord State 
+bool process_steno_user(uint16_t keycode, keyrecord_t *record) { 
+       // Everything happens in here when steno keys come in.
+       // Bail on keyup
+       if (!record->event.pressed) return true;
+
+       // Update key repeat timers
+       repTimer = timer_read();
+       inChord  = true;
+
+       // Switch on the press adding to chord
+       bool pr = record->event.pressed;
+       switch (keycode) {
+                       // Mods and stuff
+                       case STN_ST1:                   pr ? (cChord |= (ST1)): (cChord &= ~(ST1)); break;
+                       case STN_ST2:                   pr ? (cChord |= (ST2)): (cChord &= ~(ST2)); break;
+                       case STN_ST3:                   pr ? (cChord |= (ST3)): (cChord &= ~(ST3)); break;
+                       case STN_ST4:                   pr ? (cChord |= (ST4)): (cChord &= ~(ST4)); break;
+                       case STN_FN:                    pr ? (cChord |= (FN)) : (cChord &= ~(FN)); break;
+                       case STN_PWR:                   pr ? (cChord |= (PWR)): (cChord &= ~(PWR)); break;
+                       case STN_N1...STN_N6: 
+                       case STN_N7...STN_NC:   pr ? (cChord |= (NUM)): (cChord &= ~(NUM)); break;
+
+                       // All the letter keys
+                       case STN_S1:                    pr ? (cChord |= (LSU)) : (cChord &= ~(LSU));  break;
+                       case STN_S2:                    pr ? (cChord |= (LSD)) : (cChord &= ~(LSD));  break;
+                       case STN_TL:                    pr ? (cChord |= (LFT)) : (cChord &= ~(LFT)); break;
+                       case STN_KL:                    pr ? (cChord |= (LK)) : (cChord &= ~(LK)); break;
+                       case STN_PL:                    pr ? (cChord |= (LP)) : (cChord &= ~(LP)); break;
+                       case STN_WL:                    pr ? (cChord |= (LW)) : (cChord &= ~(LW)); break;
+                       case STN_HL:                    pr ? (cChord |= (LH)) : (cChord &= ~(LH)); break;
+                       case STN_RL:                    pr ? (cChord |= (LR)) : (cChord &= ~(LR)); break;
+                       case STN_A:                             pr ? (cChord |= (LA)) : (cChord &= ~(LA)); break;
+                       case STN_O:                             pr ? (cChord |= (LO)) : (cChord &= ~(LO)); break;
+                       case STN_E:                             pr ? (cChord |= (RE)) : (cChord &= ~(RE)); break;
+                       case STN_U:                             pr ? (cChord |= (RU)) : (cChord &= ~(RU)); break;
+                       case STN_FR:                    pr ? (cChord |= (RF)) : (cChord &= ~(RF)); break;
+                       case STN_RR:                    pr ? (cChord |= (RR)) : (cChord &= ~(RR)); break;
+                       case STN_PR:                    pr ? (cChord |= (RP)) : (cChord &= ~(RP)); break;
+                       case STN_BR:                    pr ? (cChord |= (RB)) : (cChord &= ~(RB)); break;
+                       case STN_LR:                    pr ? (cChord |= (RL)) : (cChord &= ~(RL)); break;
+                       case STN_GR:                    pr ? (cChord |= (RG)) : (cChord &= ~(RG)); break;
+                       case STN_TR:                    pr ? (cChord |= (RT)) : (cChord &= ~(RT)); break;
+                       case STN_SR:                    pr ? (cChord |= (RS)) : (cChord &= ~(RS)); break;
+                       case STN_DR:                    pr ? (cChord |= (RD)) : (cChord &= ~(RD)); break;
+                       case STN_ZR:                    pr ? (cChord |= (RZ)) : (cChord &= ~(RZ)); break;
+       }
+
+       // Check for key repeat in QWERTY mode
+       return true; 
+}
+void matrix_scan_user(void) {
+       // We abuse this for early sending of key
+       // Key repeat only on QWER/SYMB layers
+       if (cMode != QWERTY) return;
+
+       // Check timers
+       if (timer_elapsed(repTimer) > REP_DELAY) {
+               // Process Key for report
+               processQwerty();
+
+               // Send report to host
+               send_keyboard_report();
+               repTimer = timer_read();
+       }
+};
+
+// Helpers
+bool processFakeSteno(void) {
+       PJ( LSU,                        SEND(KC_Q););
+       PJ( LSD,                        SEND(KC_A););
+       PJ( LFT,                        SEND(KC_W););
+       PJ( LP,                         SEND(KC_E););
+       PJ( LH,                         SEND(KC_R););
+       PJ( LK,                         SEND(KC_S););
+       PJ( LW,                         SEND(KC_D););
+       PJ( LR,                         SEND(KC_F););
+       PJ( ST1,                        SEND(KC_T););
+       PJ( ST2,                        SEND(KC_G););
+       PJ( LA,                         SEND(KC_C););
+       PJ( LO,                         SEND(KC_V););
+       PJ( RE,                         SEND(KC_N););
+       PJ( RU,                         SEND(KC_M););
+       PJ( ST3,                        SEND(KC_Y););
+       PJ( ST4,                        SEND(KC_H););
+       PJ( RF,                         SEND(KC_U););
+       PJ( RP,                         SEND(KC_I););
+       PJ( RL,                         SEND(KC_O););
+       PJ( RT,                         SEND(KC_P););
+       PJ( RD,                         SEND(KC_LBRC););
+       PJ( RR,                         SEND(KC_J););
+       PJ( RB,                         SEND(KC_K););
+       PJ( RG,                         SEND(KC_L););
+       PJ( RS,                         SEND(KC_SCLN););
+       PJ( RZ,                         SEND(KC_COMM););
+       PJ( NUM,                        SEND(KC_1););
+
+       return false;
+}
+void clickMouse(uint8_t kc) {
+#ifdef MOUSEKEY_ENABLE
+       mousekey_on(kc);
+       mousekey_send();
+
+       // Store state for later use
+       inMouse = true;
+       mousePress = kc;
+#endif
+}
+void SEND(uint8_t kc) {
+       // Send Keycode, Does not work for Quantum Codes
+       if (cMode == COMMAND && CMDLEN < MAX_CMD_BUF) {
+               uprintf("CMD LEN: %d BUF: %d\n", CMDLEN, MAX_CMD_BUF);
+               CMDBUF[CMDLEN] = kc;
+               CMDLEN++;
+       } 
+
+       if (cMode != COMMAND) register_code(kc);
+       return;
+}
index d32792e2a8c9400c42f53d8a9eb6570166a91992..cc0bef391d9711ef11788a9cc6538354369b253f 100644 (file)
@@ -47,7 +47,7 @@ uint8_t init_mcp23018(void) {
     mcp23018_status = i2c_write(IODIRA, ERGODOX_EZ_I2C_TIMEOUT);            if (mcp23018_status) goto out;
     mcp23018_status = i2c_write(0b10000000, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
     mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
-    i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+    i2c_stop();
 
     // set pull-up
     // - unused  : on  : 1
@@ -59,7 +59,7 @@ uint8_t init_mcp23018(void) {
     mcp23018_status = i2c_write(0b11111111, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
 
 out:
-    i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+    i2c_stop();
     // SREG=sreg_prev;
     //uprintf("Init %x\n", mcp23018_status);
     return mcp23018_status;
index 29fe48ccb3173caa7b6e6fa6fde61e462dbf24c6..9886ecf153609e5e63978cfc08225dc2f3b9eec4 100644 (file)
@@ -72,14 +72,14 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //Trackball pin defs
 #define TRKUP (1<<4)
 #define TRKDN (1<<5)
-#define TRKLT (1<<6) 
+#define TRKLT (1<<6)
 #define TRKRT (1<<7)
 #define TRKBTN (1<<6)
 
 
 // Multiple for mouse moves
 #ifndef TRKSTEP
-#define TRKSTEP 20 
+#define TRKSTEP 20
 #endif
 
 // multiple for mouse scroll
@@ -98,13 +98,13 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 // Trackball interrupts accumulate over here. Processed on scan
 // Stores prev state of mouse, high bits store direction
-uint8_t trkState    = 0; 
-uint8_t trkBtnState = 0; 
+uint8_t trkState    = 0;
+uint8_t trkBtnState = 0;
 
-volatile uint8_t tbUpCnt  = 0; 
-volatile uint8_t tbDnCnt  = 0; 
-volatile uint8_t tbLtCnt  = 0; 
-volatile uint8_t tbRtCnt  = 0; 
+volatile uint8_t tbUpCnt  = 0;
+volatile uint8_t tbDnCnt  = 0;
+volatile uint8_t tbLtCnt  = 0;
+volatile uint8_t tbRtCnt  = 0;
 
 /* matrix state(1:on, 0:off) */
 static matrix_row_t matrix[MATRIX_ROWS];
@@ -240,14 +240,14 @@ uint8_t matrix_scan(void)
   // First we handle the mouse inputs
   #ifdef BALLER
   uint8_t pBtn   = PINE & TRKBTN;
-  
+
   #ifdef DEBUG_BALLER
-  // Compare to previous, mod report 
+  // Compare to previous, mod report
   if (tbUpCnt + tbDnCnt + tbLtCnt + tbRtCnt != 0)
     xprintf("U: %d D: %d L: %d R: %d B: %d\n", tbUpCnt, tbDnCnt, tbLtCnt, tbRtCnt, (trkBtnState >> 6));
   #endif
 
-  // Modify the report 
+  // Modify the report
   report_mouse_t pRprt = pointing_device_get_report();
 
   // Scroll by default, move on layer
@@ -264,7 +264,7 @@ uint8_t matrix_scan(void)
   }
 
   #ifdef DEBUG_BALLER
-  if (pRprt.x != 0 || pRprt.y != 0) 
+  if (pRprt.x != 0 || pRprt.y != 0)
        xprintf("X: %d Y: %d\n", pRprt.x, pRprt.y);
   #endif
 
@@ -272,7 +272,7 @@ uint8_t matrix_scan(void)
   if ((pBtn != trkBtnState) && ((pBtn >> 6) == 1))  pRprt.buttons &= ~MOUSE_BTN1;
 
   // Save state, push update
-  if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn)) 
+  if (pRprt.x != 0 || pRprt.y != 0 || pRprt.h != 0 || pRprt.v != 0 || (trkBtnState != pBtn))
     pointing_device_set_report(pRprt);
 
   trkBtnState = pBtn;
@@ -325,8 +325,8 @@ uint8_t matrix_scan(void)
     enableInterrupts();
 
 #ifdef DEBUG_MATRIX
-    for (uint8_t c = 0; c < MATRIX_COLS; c++) 
-               for (uint8_t r = 0; r < MATRIX_ROWS; r++) 
+    for (uint8_t c = 0; c < MATRIX_COLS; c++)
+               for (uint8_t r = 0; r < MATRIX_ROWS; r++)
                  if (matrix_is_on(r, c)) xprintf("r:%d c:%d \n", r, c);
 #endif
 
@@ -394,7 +394,7 @@ static matrix_row_t read_cols(uint8_t row)
             data = ~((uint8_t)mcp23018_status);
             mcp23018_status = I2C_STATUS_SUCCESS;
         out:
-            i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+            i2c_stop();
 
 #ifdef DEBUG_MATRIX
             if (data != 0x00) xprintf("I2C: %d\n", data);
@@ -439,12 +439,12 @@ static void select_row(uint8_t row)
     if (row < 7) {
         // select on mcp23018
         if (mcp23018_status) { // do nothing on error
-        } else { // set active row low  : 0 // set other rows hi-Z : 1 
+        } else { // set active row low  : 0 // set other rows hi-Z : 1
             mcp23018_status = i2c_start(I2C_ADDR_WRITE, ERGODOX_EZ_I2C_TIMEOUT);        if (mcp23018_status) goto out;
             mcp23018_status = i2c_write(GPIOA, ERGODOX_EZ_I2C_TIMEOUT);                 if (mcp23018_status) goto out;
             mcp23018_status = i2c_write(0xFF & ~(1<<row), ERGODOX_EZ_I2C_TIMEOUT);      if (mcp23018_status) goto out;
         out:
-            i2c_stop(ERGODOX_EZ_I2C_TIMEOUT);
+            i2c_stop();
         }
     } else {
         // Output low(DDR:1, PORT:0) to select
diff --git a/keyboards/gray_studio/hb85/config.h b/keyboards/gray_studio/hb85/config.h
new file mode 100644 (file)
index 0000000..d68860d
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@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
+
+#define VENDOR_ID       0x20A0
+#define PRODUCT_ID      0x422F
+// TODO: share these strings with usbconfig.h
+// Edit usbconfig.h to change these.
+#define MANUFACTURER    Gray Studio
+#define PRODUCT         HB85
+
+/* matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+#define DIODE_DIRECTION COL2ROW
+
+#define RGBLED_NUM 5
+#define RGBLIGHT_ANIMATIONS
+
+#define NO_UART 1
+#define BOOTLOADHID_BOOTLOADER 1
diff --git a/keyboards/gray_studio/hb85/hb85.c b/keyboards/gray_studio/hb85/hb85.c
new file mode 100644 (file)
index 0000000..620a181
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, 
+          2019 fcoury <felipe.coury@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 <string.h>
+
+#include "rgblight.h"
+
+#include "i2c.h"
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+void rgblight_set(void) {
+    if (!rgblight_config.enable) {
+        for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+            led[i].r = 0;
+            led[i].g = 0;
+            led[i].b = 0;
+        }
+    }
+
+    i2c_init();
+    i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+}
+#endif
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void backlight_init_ports(void) {
+    // initialize pins D0, D1, D4 and D6 as output
+    setPinOutput(D0);
+    setPinOutput(D1);
+    setPinOutput(D4);
+    setPinOutput(D6);
+
+    // turn RGB LEDs on
+    writePinHigh(D0);
+    writePinHigh(D1);
+    writePinHigh(D4);
+    writePinHigh(D6);
+}
+
+void backlight_set(uint8_t level) {
+       if (level == 0) {
+        // turn RGB LEDs off
+        writePinLow(D0);
+        writePinLow(D1);
+        writePinLow(D4);
+        writePinLow(D6);
+       } else {
+        // turn RGB LEDs on
+        writePinHigh(D0);
+        writePinHigh(D1);
+        writePinHigh(D4);
+        writePinHigh(D6);
+       }
+}
diff --git a/keyboards/gray_studio/hb85/hb85.h b/keyboards/gray_studio/hb85/hb85.h
new file mode 100644 (file)
index 0000000..4880810
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+Copyright 2019 fcoury <felipe.coury@gmail.com>, MechMerlin <mechmerlin@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"
+
+// Generic layout enabling splits, and all positions available in STT, Basic, and AOP. 
+
+#define LAYOUT_all( \
+  K0C, K0B, K0A, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0E,                     \
+  K1E, K1D, K1C, K1B, K1A, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K59, K58, K57, \
+  K2E, K2D, K2C, K2B, K2A, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K56, K55,      \
+  K3E, K3D, K3C, K3B, K3A, K30, K31, K32, K33, K34, K35, K36, K37, K39, K76, K75,           \
+  K4E, K4D, K4C, K4B, K4A, K40, K41, K42, K43, K44, K45, K48, K46, K47, K49, K78, K77,      \
+  K6D, K6C, K61, K64, K65, K66, K67, K68, K69, K79                                          \
+) \
+{ \
+  { K00,   K01,   K02,   K03,   K04,   K05, K06, K07, K08,   K09, K0A,   K0B,   K0C,   KC_NO, 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, KC_NO, K39, K3A,   K3B,   K3C,   K3D,   K3E   }, \
+  { K40,   K41,   K42,   K43,   K44,   K45, K46, K47, K48,   K49, K4A,   K4B,   K4C,   K4D,   K4E   }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K55, K56, K57, K58,   K59, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+  { KC_NO, K61,   KC_NO, KC_NO, K64,   K65, K66, K67, K68,   K69, KC_NO, KC_NO, K6C,   K6D,   KC_NO }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K75, K76, K77, K78,   K79, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }  \
+}
+
+// Layout with blocker
+
+#define LAYOUT_stt( \
+  K0C, K0B, K0A, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0E,                \
+  K1E, K1D, K1C, K1B, K1A, K10, K11, K12, K13, K14, K15, K16, K17, K18, K59, K58, K57, \
+  K2E, K2D, K2C, K2B, K2A, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K56, K55, \
+  K3E, K3D, K3C, K3B, K3A, K30, K31, K32, K33, K34, K35, K36, K37, K39, K76, K75,      \
+  K4E, K4C, K4B, K4A, K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K78, K77,      \
+  K6D, K6C, K61, K64, K65, K67, K68, K69, K79                                          \
+) \
+{ \
+  { K00,   K01,   K02,   K03,   K04,   K05, K06,   K07, K08,   K09,   K0A,   K0B,   K0C,   KC_NO, K0E   }, \
+  { K10,   K11,   K12,   K13,   K14,   K15, K16,   K17, K18,   KC_NO, 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, KC_NO, K39,   K3A,   K3B,   K3C,   K3D,   K3E   }, \
+  { K40,   K41,   K42,   K43,   K44,   K45, K46,   K47, K48,   K49,   K4A,   K4B,   K4C,   KC_NO, K4E   }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K55, K56,   K57, K58,   K59,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+  { KC_NO, K61,   KC_NO, KC_NO, K64,   K65, KC_NO, K67, K68,   K69,   KC_NO, KC_NO, K6C,   K6D,   KC_NO }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K75, K76,   K77, K78,   K79,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+}
+
+#define LAYOUT_basic( \
+  K0C, K0B, K0A, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0E,                \
+  K1E, K1D, K1C, K1B, K1A, K10, K11, K12, K13, K14, K15, K16, K17, K18, K59, K58, K57, \
+  K2E, K2D, K2C, K2B, K2A, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K56, K55, \
+  K3E, K3D, K3C, K3B, K3A, K30, K31, K32, K33, K34, K35, K36, K37, K39, K76, K75,      \
+  K4E, K4C, K4B, K4A, K40, K41, K42, K43, K44, K45, K46, K47, K49, K77,                \
+  K6D, K6C, K61, K64, K65                                                              \
+) \
+{ \
+  { K00,   K01,   K02,   K03,   K04,   K05, K06,   K07,   K08,   K09,   K0A,   K0B,   K0C,   KC_NO, K0E   }, \
+  { K10,   K11,   K12,   K13,   K14,   K15, K16,   K17,   K18,   KC_NO, 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,   KC_NO, K39,   K3A,   K3B,   K3C,   K3D,   K3E   }, \
+  { K40,   K41,   K42,   K43,   K44,   K45, K46,   K47,   KC_NO, K49,   K4A,   K4B,   K4C,   KC_NO, K4E   }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K55, K56,   K57,   K58,   K59,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+  { KC_NO, K61,   KC_NO, KC_NO, K64,   K65, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K6C,   K6D,   KC_NO }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K75, K76,   K77,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+}
+
+#define LAYOUT_aop( \
+  K0C, K0B, K0A, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0E,                \
+  K1E, K1D, K1C, K1B, K1A, K10, K11, K12, K13, K14, K15, K16, K17, K18, K59, K58, K57, \
+  K2E, K2D, K2C, K2B, K2A, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K56, K55, \
+  K3E, K3D, K3C, K3B, K3A, K30, K31, K32, K33, K34, K35, K36, K37, K39, K76, K75,      \
+  K4E, K4C, K4B, K4A, K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K78, K77,      \
+  K6D, K6C, K61, K64, K65, K66, K67, K68, K69, K79                                     \
+) \
+{ \
+  { K00,   K01,   K02,   K03,   K04,   K05, K06, K07, K08,   K09,   K0A,   K0B,   K0C,   KC_NO, K0E   }, \
+  { K10,   K11,   K12,   K13,   K14,   K15, K16, K17, K18,   KC_NO, 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, KC_NO, K39,   K3A,   K3B,   K3C,   K3D,   K3E   }, \
+  { K40,   K41,   K42,   K43,   K44,   K45, K46, K47, K48,   K49,   K4A,   K4B,   K4C,   KC_NO, K4E   }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K55, K56, K57, K58,   K59,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+  { KC_NO, K61,   KC_NO, KC_NO, K64,   K65, K66, K67, K68,   K69,   KC_NO, KC_NO, K6C,   K6D,   KC_NO }, \
+  { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K75, K76, K77, K78,   K79,   KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+}
diff --git a/keyboards/gray_studio/hb85/i2c.c b/keyboards/gray_studio/hb85/i2c.c
new file mode 100644 (file)
index 0000000..a4f9521
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@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/>.
+*/
+
+// Please do not modify this file 
+
+#include <avr/io.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+
+void i2c_set_bitrate(uint16_t bitrate_khz) {
+    uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
+    if (bitrate_div >= 16) {
+        bitrate_div = (bitrate_div - 16) / 2;
+    }
+    TWBR = bitrate_div;
+}
+
+void i2c_init(void) {
+    // set pull-up resistors on I2C bus pins
+    PORTC |= 0b11;
+
+    i2c_set_bitrate(400);
+
+    // enable TWI (two-wire interface)
+    TWCR |= (1 << TWEN);
+
+    // enable TWI interrupt and slave address ACK
+    TWCR |= (1 << TWIE);
+    TWCR |= (1 << TWEA);
+}
+
+uint8_t i2c_start(uint8_t address) {
+    // reset TWI control register
+    TWCR = 0;
+
+    // begin transmission and wait for it to end
+    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+    while (!(TWCR & (1<<TWINT)));
+
+    // check if the start condition was successfully transmitted
+    if ((TWSR & 0xF8) != TW_START) {
+        return 1;
+    }
+
+    // transmit address and wait
+    TWDR = address;
+    TWCR = (1<<TWINT) | (1<<TWEN);
+    while (!(TWCR & (1<<TWINT)));
+
+    // check if the device has acknowledged the READ / WRITE mode
+    uint8_t twst = TW_STATUS & 0xF8;
+    if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+        return 1;
+    }
+
+    return 0;
+}
+
+void i2c_stop(void) {
+    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+}
+
+uint8_t i2c_write(uint8_t data) {
+    TWDR = data;
+
+    // transmit data and wait
+    TWCR = (1<<TWINT) | (1<<TWEN);
+    while (!(TWCR & (1<<TWINT)));
+
+    if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
+        return 1;
+    }
+
+    return 0;
+}
+
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
+    if (i2c_start(address)) {
+        return 1;
+    }
+
+    for (uint16_t i = 0; i < length; i++) {
+        if (i2c_write(data[i])) {
+            return 1;
+        }
+    }
+
+    i2c_stop();
+
+    return 0;
+}
diff --git a/keyboards/gray_studio/hb85/i2c.h b/keyboards/gray_studio/hb85/i2c.h
new file mode 100644 (file)
index 0000000..93a69c9
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@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/>.
+*/
+
+// Please do not modify this file 
+
+#ifndef __I2C_H__
+#define __I2C_H__
+
+void i2c_init(void);
+void i2c_set_bitrate(uint16_t bitrate_khz);
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+
+#endif
diff --git a/keyboards/gray_studio/hb85/info.json b/keyboards/gray_studio/hb85/info.json
new file mode 100644 (file)
index 0000000..3c7ac9c
--- /dev/null
@@ -0,0 +1,24 @@
+{
+    "keyboard_name": "Gray Studio HB85", 
+    "url": "", 
+    "maintainer": "qmk", 
+    "width": 18, 
+    "height": 6.25, 
+    "layouts": {
+        "LAYOUT_all": {
+            "layout": [{"x":1.5, "y":0}, {"x":2.75, "y":0}, {"x":3.75, "y":0}, {"x":4.75, "y":0}, {"x":5.75, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.5, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2, "y":1.25}, {"x":3, "y":1.25}, {"x":4, "y":1.25}, {"x":5, "y":1.25}, {"x":6, "y":1.25}, {"x":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25}, {"x":14, "y":1.25}, {"x":15, "y":1.25}, {"x":16, "y":1.25}, {"x":17, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15, "y":2.25}, {"x":16, "y":2.25}, {"x":17, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":15, "y":3.25}, {"x":16, "y":3.25}, {"x":17, "y":3.25}, {"x":0, "y":4.25, "w":1.25}, {"x":1.25, "y":4.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":1.75}, {"x":14, "y":4.25}, {"x":15, "y":4.25}, {"x":16, "y":4.25}, {"x":17, "y":4.25}, {"x":1.25, "y":5.25, "w":1.25}, {"x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"x":10, "y":5.25}, {"x":11, "y":5.25}, {"x":12, "y":5.25}, {"x":13, "y":5.25}, {"x":14, "y":5.25}, {"x":15, "y":5.25}, {"x":16, "y":5.25}]
+        },
+
+        "LAYOUT_stt": {
+            "layout": [{"x":1.5, "y":0}, {"x":2.75, "y":0}, {"x":3.75, "y":0}, {"x":4.75, "y":0}, {"x":5.75, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.5, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2, "y":1.25}, {"x":3, "y":1.25}, {"x":4, "y":1.25}, {"x":5, "y":1.25}, {"x":6, "y":1.25}, {"x":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25, "w":2}, {"x":15, "y":1.25}, {"x":16, "y":1.25}, {"x":17, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15, "y":2.25}, {"x":16, "y":2.25}, {"x":17, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":15, "y":3.25}, {"x":16, "y":3.25}, {"x":17, "y":3.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":1.75}, {"x":14, "y":4.25}, {"x":15, "y":4.25}, {"x":16, "y":4.25}, {"x":17, "y":4.25}, {"x":1.25, "y":5.25, "w":1.25}, {"x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"x":10, "y":5.25, "w":1.25}, {"x":11.25, "y":5.25, "w":1.25}, {"x":13, "y":5.25}, {"x":14, "y":5.25}, {"x":15, "y":5.25}, {"x":16, "y":5.25}]
+        },
+
+        "LAYOUT_basic": {
+            "layout": [{"x":1.5, "y":0}, {"x":2.75, "y":0}, {"x":3.75, "y":0}, {"x":4.75, "y":0}, {"x":5.75, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.5, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2, "y":1.25}, {"x":3, "y":1.25}, {"x":4, "y":1.25}, {"x":5, "y":1.25}, {"x":6, "y":1.25}, {"x":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25, "w":2}, {"x":15, "y":1.25}, {"x":16, "y":1.25}, {"x":17, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15, "y":2.25}, {"x":16, "y":2.25}, {"x":17, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":15, "y":3.25}, {"x":16, "y":3.25}, {"x":17, "y":3.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":2.75}, {"x":15, "y":4.25, "w":2}, {"x":17, "y":4.25}, {"x":1.25, "y":5.25, "w":1.25}, {"x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"x":10, "y":5.25, "w":1.25}, {"x":11.25, "y":5.25, "w":1.25}]
+        },
+
+        "LAYOUT_aop": {
+            "layout": [{"x":1.5, "y":0}, {"x":2.75, "y":0}, {"x":3.75, "y":0}, {"x":4.75, "y":0}, {"x":5.75, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.5, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2, "y":1.25}, {"x":3, "y":1.25}, {"x":4, "y":1.25}, {"x":5, "y":1.25}, {"x":6, "y":1.25}, {"x":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25, "w":2}, {"x":15, "y":1.25}, {"x":16, "y":1.25}, {"x":17, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15, "y":2.25}, {"x":16, "y":2.25}, {"x":17, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":15, "y":3.25}, {"x":16, "y":3.25}, {"x":17, "y":3.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":1.75}, {"x":14, "y":4.25}, {"x":15, "y":4.25}, {"x":16, "y":4.25}, {"x":17, "y":4.25}, {"x":1.25, "y":5.25, "w":1.25}, {"x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"x":10, "y":5.25}, {"x":11, "y":5.25}, {"x":12, "y":5.25}, {"x":13, "y":5.25}, {"x":14, "y":5.25}, {"x":15, "y":5.25}, {"x":16, "y":5.25}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/gray_studio/hb85/keymaps/default/keymap.c b/keyboards/gray_studio/hb85/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..be89cbb
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+Copyright 2019 Felipe Coury <felipe.coury@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
+
+// Layer shorthand
+enum layers {
+    _BASE  = 0, // Base
+    _CTRL       // Multimedia and RGB
+};
+
+#define KC_TGCT MO(_CTRL) // Toggles CTRL layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_BASE] = LAYOUT_all(
+        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_TGCT,                           \
+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_BSPC, KC_PSLS, KC_PAST, KC_PMNS,     \
+KC_TAB ,     KC_Q   , KC_W   , KC_E   , KC_R   , KC_T   , KC_Y   , KC_U   , KC_I   , KC_O   , KC_P   , KC_LBRC, KC_RBRC,      KC_BSLS, KC_P7  , KC_P8  , KC_P9  ,     \
+KC_CAPS,        KC_A   , KC_S   , KC_D   , KC_F   , KC_G   , KC_H   , KC_J   , KC_K   , KC_L   , KC_SCLN, KC_QUOT,            KC_ENT , KC_P4  , KC_P5  , KC_P6  ,     \
+KC_LSFT, KC_NO  , KC_Z  , KC_Z   , KC_X   , KC_V   , KC_B   , KC_N   , KC_M   , KC_COMM, KC_DOT , KC_SLSH,           KC_RSFT, KC_UP  , KC_P1  , KC_P2  , KC_P3  ,     \
+    KC_LCTL, KC_LALT,                                  KC_SPC ,                               KC_RALT, KC_RGUI,      KC_LEFT, KC_DOWN, KC_RGHT, KC_P0  , KC_PDOT      \
+    ),
+
+    [_CTRL] = LAYOUT_all(
+        RESET ,    _______, _______, _______, _______,  _______, _______, _______, _______,  _______, _______, _______, _______,  _______,                            \
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,     \
+_______,     RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______,      _______, _______, _______, _______,     \
+_______,        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,            _______, _______, _______, _______,     \
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______, _______, _______,     \
+    _______, _______,                                  _______,                               _______, _______,      _______, _______, _______, _______, _______      \
+    ),
+};
diff --git a/keyboards/gray_studio/hb85/keymaps/stt/keymap.c b/keyboards/gray_studio/hb85/keymaps/stt/keymap.c
new file mode 100644 (file)
index 0000000..5665e2f
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+Copyright 2019 MechMerlin <mechmerlin@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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT_stt(
+        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,  MO(1),                              \
+        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_PSLS, KC_PAST, KC_PMNS, \
+        KC_TAB,  KC_Q,  KC_W,  KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,    KC_O,   KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_P7,   KC_P8,   KC_P9,   \
+        KC_CAPS, KC_A,  KC_S,  KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,    KC_L,   KC_SCLN, KC_QUOT,          KC_ENT,  KC_P4,   KC_P5,   KC_P6,   \
+        KC_LSFT, KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT, KC_SLSH,          KC_RSFT, KC_UP,   KC_P1,   KC_P2,   KC_P3,   \
+        KC_LCTL, KC_LALT,                                  KC_SPC,                          KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0    \
+    ),
+
+    [1] = LAYOUT_stt(
+        RESET,   RGB_M_P,  RGB_M_B,  RGB_M_R,  RGB_M_SW, RGB_M_SN, RGB_M_K,  RGB_M_X,  RGB_M_G,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,                            \
+        EEP_RST, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+        BL_TOGG, BL_STEP,  BL_INC,   BL_DEC,   BL_BRTG,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+        RGB_TOG, RGB_MOD,  RGB_HUI,  RGB_SAI,  RGB_VAI,  RGB_SPI,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          \
+        KC_TRNS, RGB_RMOD, RGB_HUD,  RGB_SAD,  RGB_VAD,  RGB_SPD,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          \
+        KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS                                                                             \
+    ),
+};
diff --git a/keyboards/gray_studio/hb85/readme.md b/keyboards/gray_studio/hb85/readme.md
new file mode 100644 (file)
index 0000000..90b4e95
--- /dev/null
@@ -0,0 +1,48 @@
+# Gray Studio HB85
+
+![Gray Studio HB85](https://i.imgur.com/Sk3cupR.jpg)
+
+A Sony HitBit MSX Computer inspired Keyboard.
+
+Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)  
+Hardware Supported: Gray Studio HB85  
+Hardware Availability: [Group buy](https://en.zfrontier.com/products/gray-hb85) finished  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make gray_studio/hb85:default
+
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods. 
+
+**Reset Key:** To put the HB85 into reset, hold F3 (`K00`) while plugging in. 
+
+Windows: 
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset. 
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete. 
+
+macOS:
+1. Install homebrew by typing the following:   
+    ```
+    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+    ```
+2. Install `crosspack-avr`.  
+    ```
+    brew cask install crosspack-avr
+    ```
+3. Install the following packages:
+    ```
+    brew install python
+    pip3 install pyusb
+    brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset. 
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file. 
+
+**Please Note:** You will need to use the `EEP_RST` keycode first, followed by unplugging/replugging the board to get RGB underglow effects to work.
+
+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/gray_studio/hb85/rules.mk b/keyboards/gray_studio/hb85/rules.mk
new file mode 100644 (file)
index 0000000..682b9cb
--- /dev/null
@@ -0,0 +1,48 @@
+# Copyright 2019 fcoury <felipe.coury@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/>.
+
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# processor frequency
+F_CPU = 12000000
+
+# 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 = bootloadHID
+
+# build options
+BOOTMAGIC_ENABLE = lite
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+SRC += i2c.c
+
+# programming options
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/gray_studio/hb85/usbconfig.h b/keyboards/gray_studio/hb85/usbconfig.h
new file mode 100644 (file)
index 0000000..3d5aaa7
--- /dev/null
@@ -0,0 +1,396 @@
+/* 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.
+ */
+#define USB_CFG_MAX_BUS_POWER           500
+/* 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                   1
+/* 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, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME     'G', 'r', 'a', 'y', ' ', 'S', 't', 'u', 'd', 'i', 'o'
+#define USB_CFG_VENDOR_NAME_LEN 11
+/* 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', 'B', '8', '5'
+#define USB_CFG_DEVICE_NAME_LEN 4
+/* 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   'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN   0 */
+/* 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__ */
index 9b50abd401d4f8999c00d6ce4690bece606af904..9d96abd8db5c3cfaa790272b01d1541f23e5af99 100644 (file)
@@ -1,7 +1,4 @@
 #include QMK_KEYBOARD_H
-#ifdef AUDIO_ENABLE
-  #include "audio.h"
-#endif
 #ifdef USE_I2C
 #include "i2c.h"
 #endif
index 54fb5f6d9e07f78e8837401d53afd9c6efb6bbc7..2f7641d185f51e0a02facd4bff4e88ef0aadb615 100644 (file)
@@ -20,4 +20,3 @@ When adding your keymap to this list, keep it organised alphabetically (select l
 # List of Planck keymaps
 
 * **default** default Planck layout
-* **cbbrowne** cbbrowne's Planck layout
\ No newline at end of file
diff --git a/keyboards/handwired/412_64/412_64.c b/keyboards/handwired/412_64/412_64.c
new file mode 100644 (file)
index 0000000..eaec54a
--- /dev/null
@@ -0,0 +1,29 @@
+
+#include "412_64.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/412_64/412_64.h b/keyboards/handwired/412_64/412_64.h
new file mode 100644 (file)
index 0000000..27a32f1
--- /dev/null
@@ -0,0 +1,29 @@
+
+#ifndef FOURx16_H
+#define FOURx16_H
+
+#include "quantum.h"
+#define ___ KC_NO
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_ortho_4x16( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \
+    K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, K31, \
+    K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, \
+    K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, K61, K62, K63 \
+) \
+{ \
+    { K00, K02, K04, K06, K08, K10, K12, K14 }, \
+    { K01, K03, K05, K07, K09, K11, K13, K15 }, \
+    { K16, K18, K20, K22, K24, K26, K28, K30 }, \
+    { K17, K19, K21, K23, K25, K27, K29, K31 }, \
+    { K32, K34, K36, K38, K40, K42, K44, K46 }, \
+    { K33, K35, K37, K39, K41, K43, K45, K47 }, \
+    { K48, K50, K52, K54, K56, K58, K60, K62 }, \
+    { K49, K51, K53, K55, K57, K59, K61, K63 } \
+}
+
+#endif
diff --git a/keyboards/handwired/412_64/config.h b/keyboards/handwired/412_64/config.h
new file mode 100644 (file)
index 0000000..9cdb3fa
--- /dev/null
@@ -0,0 +1,194 @@
+
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xF7E0
+#define PRODUCT_ID      0x0412
+#define DEVICE_VER      0x0000
+#define MANUFACTURER    EDI/SCI
+#define PRODUCT         412 64 Model 00
+#define DESCRIPTION     A compact 60% keyboard inspired by the 4x4x4x4x4
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D3, F4, F5, F6, F7, B1, B3, B2 }
+#define MATRIX_COL_PINS { B0, D2, D0, D1, D4, C6, D7, E6 }
+#define UNUSED_PINS { B4, B5, B6, B7, C7, F0, F1 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN C7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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/412_64/keymaps/default/config.h b/keyboards/handwired/412_64/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..d533d80
--- /dev/null
@@ -0,0 +1,5 @@
+
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/handwired/412_64/keymaps/default/keymap.c b/keyboards/handwired/412_64/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..405c563
--- /dev/null
@@ -0,0 +1,99 @@
+
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+#define _RAISE 1
+#define _LOWER 2
+
+// Readability keycodes
+#define LOWER   MO(_LOWER)
+#define RAISE   MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* MAIN
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | Backsp | Delete |   7    |   8    |   9    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ESC    | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      |  PgUp  |   4    |   5    |   6    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SHIFT  | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | ENTER  |  PgDn  |   1    |   2    |   3    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL  |  PAUS  | GUI    | ALT    | Lower  | Space  |  Space | Raise  | Left   | Down   | Up     | Right  |  Shift |   0    |   .    |  ENTER |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_MAIN] = LAYOUT_ortho_4x16(
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, KC_DEL, KC_KP_7, KC_KP_8, KC_KP_9,
+  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_PGUP, KC_KP_4, KC_KP_5, KC_KP_6,
+  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_PGDN, KC_KP_1, KC_KP_2, KC_KP_3,
+  KC_LCTL, KC_PAUS, KC_LGUI, KC_LALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_RSFT, KC_KP_0, KC_KP_DOT, KC_PENT
+  ),
+
+/* RAISE
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * |    `   |  1     |  2     |  3     |  4     |  5     |  6     |  7     |  8     |  9     |  0     |        | Insert |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        | -      | =      | [      | ]      |   \    |  Home  |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |  ISO # |  ISO / |        |        |  PScr  |  End   |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |                 |        |  Next  |  Vol-  |  Vol+  |  Play  |        |        |        |        |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_RAISE] = LAYOUT_ortho_4x16(
+  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, KC_INS, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, KC_NUHS, KC_NUBS, _______, _______, KC_PSCR, KC_END, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, _______
+  ),
+
+/* LOWER
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * |    ~   |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |    (   |    )   |        |        |        |        | Reset  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    _   |    +   |    {   |    }   |   |    |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |   F7   |   F8   |   F9   |  F10   |  F11   |  F12   | ISO ~  | ISO |  |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |                 |        |        |        |        |  Mute  |        |        |        |        |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_LOWER] = LAYOUT_ortho_4x16(
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,  _______, _______, _______, RESET,
+  _______,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS,  KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______,
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS), _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______
+  ),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+  keyevent_t event = record->event;
+    (void)event;
+
+  switch (id) {
+
+  }
+  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/handwired/412_64/keymaps/default/rules.mk b/keyboards/handwired/412_64/keymaps/default/rules.mk
new file mode 100644 (file)
index 0000000..08fdcc0
--- /dev/null
@@ -0,0 +1 @@
+KEY_LOCK_ENABLE = yes       # Enable the universal locking key, which lets you do any locking you require.
\ No newline at end of file
diff --git a/keyboards/handwired/412_64/readme.md b/keyboards/handwired/412_64/readme.md
new file mode 100644 (file)
index 0000000..042bacf
--- /dev/null
@@ -0,0 +1,15 @@
+# 412-64
+
+![412-64](https://i.imgur.com/ixuv3OM.jpg)
+
+A compact 60% keyboard designed by Fate Everywhere and sold on a limited basis. Born out of the desire for a Planck with a numpad for technical work.
+
+Keyboard Maintainer: [Fate Everywhere](https://github.com/fateeverywhere)  
+Hardware Supported: 4x16 T&E Prototype, Mark Zero Stand Aside.  
+Hardware Availability: No longer available, was a tester for Stand Aside. Build definitions are in handwired because two units are in the wild.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/412_64: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/handwired/412_64/rules.mk b/keyboards/handwired/412_64/rules.mk
new file mode 100644 (file)
index 0000000..9e74da5
--- /dev/null
@@ -0,0 +1,73 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# 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
+
+# Build Options
+#   change yes to no to disable
+#
+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 = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI 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)
+
+LAYOUTS = ortho_4x16 
index 682c7a868b074c52a2289383700ec37d47e7506a..6b0ddbfe8e3963e89facac8aaec3d8fb664a95ae 100644 (file)
@@ -20,8 +20,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #pragma once
 
-#include "../../config.h"
-
 /* Use I2C or Serial, not both */
 
 #define USE_SERIAL
index 24c02215ee50ac83bc4165abed003b27ad502b19..2e5cfd7cedd85d91fb2d942cc01fc2573ec0d06f 100644 (file)
@@ -1,6 +1,4 @@
-#include "dactyl_manuform.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
 
 extern keymap_config_t keymap_config;
 
@@ -126,4 +124,3 @@ void persistent_default_layer_set(uint16_t default_layer) {
   eeconfig_update_default_layer(default_layer);
   default_layer_set(default_layer);
 }
-
index 72045cc29189aa62df5607d59082625423ccda3d..5292ca0972ee7c28eb9f034b60c01f4dbcfbbec7 100644 (file)
@@ -6,35 +6,33 @@
 #ifdef USE_I2C
 #include <stddef.h>
 #ifdef __AVR__
-       #include <avr/io.h>
-       #include <avr/interrupt.h>
+  #include <avr/io.h>
+  #include <avr/interrupt.h>
 #endif
 #endif
 
 #define LAYOUT_5x6(\
-       L00, L01, L02, L03, L04, L05,                    R00, R01, R02, R03, R04, R05, \
-       L10, L11, L12, L13, L14, L15,                    R10, R11, R12, R13, R14, R15, \
-       L20, L21, L22, L23, L24, L25,                    R20, R21, R22, R23, R24, R25, \
-       L30, L31, L32, L33, L34, L35,                    R30, R31, R32, R33, R34, R35, \
-                 L42, L43,                                        R42, R43,      \
-                        L44, L45,                    R40, R41,                \
-                        L54, L55,                    R50, R51,                          \
-              L52, L53,                                        R52, R53       \
-       ) \
-       { \
-               { L00, L01, L02, L03, L04, L05 }, \
-               { L10, L11, L12, L13, L14, L15 }, \
-               { L20, L21, L22, L23, L24, L25 }, \
-               { L30, L31, L32, L33, L34, L35 }, \
-               { KC_NO, KC_NO, L42, L43, L44, L45 }, \
-               { KC_NO, KC_NO, L52, L53, L54, L55 }, \
-\
-               { R00, R01, R02, R03, R04, R05 },    \
-               { R10, R11, R12, R13, R14, R15 },    \
-               { R20, R21, R22, R23, R24, R25 },    \
-               { R30, R31, R32, R33, R34, R35 },    \
-               { R40, R41, R42, R43, KC_NO, KC_NO },\
-               { R50, R51, R52, R53, KC_NO, KC_NO }, \
-   }
-
-
+  L00, L01, L02, L03, L04, L05,                          R00, R01, R02, R03, R04, R05, \
+  L10, L11, L12, L13, L14, L15,                          R10, R11, R12, R13, R14, R15, \
+  L20, L21, L22, L23, L24, L25,                          R20, R21, R22, R23, R24, R25, \
+  L30, L31, L32, L33, L34, L35,                          R30, R31, R32, R33, R34, R35, \
+            L42, L43,                                              R42, R43,           \
+                      L44, L45,                          R40, R41,                     \
+                                L54, L55,      R50, R51,                               \
+                                L52, L53,      R52, R53                                \
+  ) \
+  { \
+    { L00,   L01,   L02, L03, L04, L05 }, \
+    { L10,   L11,   L12, L13, L14, L15 }, \
+    { L20,   L21,   L22, L23, L24, L25 }, \
+    { L30,   L31,   L32, L33, L34, L35 }, \
+    { KC_NO, KC_NO, L42, L43, L44, L45 }, \
+    { KC_NO, KC_NO, L52, L53, L54, L55 }, \
+                                          \
+    { R00, R01, R02, R03, R04,   R05   }, \
+    { R10, R11, R12, R13, R14,   R15   }, \
+    { R20, R21, R22, R23, R24,   R25   }, \
+    { R30, R31, R32, R33, R34,   R35   }, \
+    { R40, R41, R42, R43, KC_NO, KC_NO }, \
+    { R50, R51, R52, R53, KC_NO, KC_NO }  \
+}
index d7aa3acee3991a56b6d56941518d0f356e78273c..14afc704cd2ebf60083fd65da6e5fafe78c2a6c6 100644 (file)
@@ -5,7 +5,7 @@
     "width": 17,
     "height": 8,
     "layouts": {
-        "LAYOUT": {
+        "LAYOUT_5x6": {
             "layout": [
                 {"label":"L00", "x":0, "y":0},
                 {"label":"L01", "x":1, "y":0},
index 95fd5bb1024447627e1916a222dbac6d6df89cab..88b68b31e660bd050ce341649a977f1b3327a021 100644 (file)
@@ -6,40 +6,40 @@
 #ifdef USE_I2C
 #include <stddef.h>
 #ifdef __AVR__
-       #include <avR/io.h>
-       #include <avR/inteRRupt.h>
+  #include <avR/io.h>
+  #include <avR/inteRRupt.h>
 #endif
 #endif
 
 #define LAYOUT_5x7( \
-               L11, L12, L13, L14, L15, L16, L17, \
-               L21, L22, L23, L24, L25, L26, L27, \
-               L31, L32, L33, L34, L35, L36, L37, \
-               L41, L42, L43, L44, L45, L46, \
-               L51, L52, L53, L54,           \
-                            L55, L56, \
-                            L65, L66, \
-                                   L63, L64, \
-               R11, R12, R13, R14, R15, R16, R17, \
-               R21, R22, R23, R24, R25, R26, R27, \
-               R31, R32, R33, R34, R35, R36, R37, \
-                    R42, R43, R44, R45, R46, R47, \
-                              R54, R55, R56, R57, \
-        R52, R53, \
-        R62, R63, \
-               R64, R65  \
-       ) \
-       { \
-               { L11, L12, L13, L14, L15, L16, L17 }, \
-               { L21, L22, L23, L24, L25, L26, L27 }, \
-               { L31, L32, L33, L34, L35, L36, L37 }, \
-               { L41, L42, L43, L44, L45, L46, KC_NO }, \
-               { L51, L52, L53, L54, L55, L56, KC_NO }, \
-               { KC_NO, KC_NO, L63, L64, L65, L66, KC_NO }, \
-               { R11, R12, R13, R14, R15, R16, R17 }, \
-               { R21, R22, R23, R24, R25, R26, R27 }, \
-               { R31, R32, R33, R34, R35, R36, R37 }, \
-               { KC_NO, R42, R43, R44, R45, R46, R47 }, \
-               { KC_NO, R52, R53, R54, R55, R56, R57 }, \
-               { KC_NO, R62, R63, R64, R65, KC_NO, KC_NO } \
-       }
+    L11, L12, L13, L14, L15, L16, L17,      \
+    L21, L22, L23, L24, L25, L26, L27,      \
+    L31, L32, L33, L34, L35, L36, L37,      \
+    L41, L42, L43, L44, L45, L46,           \
+    L51, L52, L53, L54,                     \
+                        L55, L56,           \
+                                  L65, L66, \
+                                  L63, L64, \
+         R11, R12, R13, R14, R15, R16, R17, \
+         R21, R22, R23, R24, R25, R26, R27, \
+         R31, R32, R33, R34, R35, R36, R37, \
+              R42, R43, R44, R45, R46, R47, \
+                        R54, R55, R56, R57, \
+              R52, R53,                     \
+    R62, R63,                               \
+    R64, R65                                \
+  ) \
+  { \
+    { L11,   L12,   L13, L14, L15, L16,   L17   }, \
+    { L21,   L22,   L23, L24, L25, L26,   L27   }, \
+    { L31,   L32,   L33, L34, L35, L36,   L37   }, \
+    { L41,   L42,   L43, L44, L45, L46,   KC_NO }, \
+    { L51,   L52,   L53, L54, L55, L56,   KC_NO }, \
+    { KC_NO, KC_NO, L63, L64, L65, L66,   KC_NO }, \
+    { R11,   R12,   R13, R14, R15, R16,   R17   }, \
+    { R21,   R22,   R23, R24, R25, R26,   R27   }, \
+    { R31,   R32,   R33, R34, R35, R36,   R37   }, \
+    { KC_NO, R42,   R43, R44, R45, R46,   R47   }, \
+    { KC_NO, R52,   R53, R54, R55, R56,   R57   }, \
+    { KC_NO, R62,   R63, R64, R65, KC_NO, KC_NO }  \
+}
index b4b2c7b797f9440291e182d2a54e815613c78b47..33ba1b0e796ba6d4632fff88972cbc2a3fabcd15 100644 (file)
@@ -3,9 +3,9 @@
     "url": "",
     "maintainer": "qmk",
     "width": 17,
-    "height": 16,
+    "height": 8,
     "layouts": {
-        "LAYOUT": {
+        "LAYOUT_5x7": {
             "layout": [
                 {"label":"L11", "x":0, "y":0},
                 {"label":"L12", "x":1, "y":0},
index c2980b3d318cf6c69fbe875effef053046e862ab..039e6b40dfb0da6f051037b15c96e537a6b8f88e 100644 (file)
@@ -7,38 +7,36 @@
 #ifdef USE_I2C
 #include <stddef.h>
 #ifdef __AVR__
-       #include <avr/io.h>
-       #include <avr/interrupt.h>
+  #include <avr/io.h>
+  #include <avr/interrupt.h>
 #endif
 #endif
 
 #define LAYOUT_6x6(\
-       L00, L01, L02, L03, L04, L05,                    R00, R01, R02, R03, R04, R05, \
-       L10, L11, L12, L13, L14, L15,                    R10, R11, R12, R13, R14, R15, \
-       L20, L21, L22, L23, L24, L25,                    R20, R21, R22, R23, R24, R25, \
-       L30, L31, L32, L33, L34, L35,                    R30, R31, R32, R33, R34, R35, \
-       L40, L41, L42, L43, L44, L45,                    R40, R41, R42, R43, R44, R45, \
-                         L52, L53,                                        R52, R53,       \
-                        L54, L55,                    R50, R51,                \
-                        L64, L65,                    R60, R61,                \
-              L62, L63,                                        R62, R63       \
-       ) \
-       { \
-               { L00, L01, L02, L03, L04, L05 }, \
-               { L10, L11, L12, L13, L14, L15 }, \
-               { L20, L21, L22, L23, L24, L25 }, \
-               { L30, L31, L32, L33, L34, L35 }, \
-               { L40, L41, L42, L43, L44, L45 }, \
-               { KC_NO, KC_NO, L52, L53, L54, L55 }, \
-               { KC_NO, KC_NO, L62, L63, L64, L65 }, \
-\
-               { R00, R01, R02, R03, R04, R05 },    \
-               { R10, R11, R12, R13, R14, R15 },    \
-               { R20, R21, R22, R23, R24, R25 },    \
-               { R30, R31, R32, R33, R34, R35 },    \
-               { R40, R41, R42, R43, R44, R45 },    \
-               { R50, R51, R52, R53, KC_NO, KC_NO },\
-               { R60, R61, R62, R63, KC_NO, KC_NO }, \
-   }
-
-
+  L00, L01, L02, L03, L04, L05,                          R00, R01, R02, R03, R04, R05, \
+  L10, L11, L12, L13, L14, L15,                          R10, R11, R12, R13, R14, R15, \
+  L20, L21, L22, L23, L24, L25,                          R20, R21, R22, R23, R24, R25, \
+  L30, L31, L32, L33, L34, L35,                          R30, R31, R32, R33, R34, R35, \
+  L40, L41, L42, L43, L44, L45,                          R40, R41, R42, R43, R44, R45, \
+            L52, L53,                                              R52, R53,           \
+                      L54, L55,                          R50, R51,                     \
+                                L64, L65,      R60, R61,                               \
+                                L62, L63,      R62, R63                                \
+  ) \
+  { \
+    { L00,   L01,   L02, L03, L04, L05 }, \
+    { L10,   L11,   L12, L13, L14, L15 }, \
+    { L20,   L21,   L22, L23, L24, L25 }, \
+    { L30,   L31,   L32, L33, L34, L35 }, \
+    { L40,   L41,   L42, L43, L44, L45 }, \
+    { KC_NO, KC_NO, L52, L53, L54, L55 }, \
+    { KC_NO, KC_NO, L62, L63, L64, L65 }, \
+                                          \
+    { R00, R01, R02, R03, R04,   R05   }, \
+    { R10, R11, R12, R13, R14,   R15   }, \
+    { R20, R21, R22, R23, R24,   R25   }, \
+    { R30, R31, R32, R33, R34,   R35   }, \
+    { R40, R41, R42, R43, R44,   R45   }, \
+    { R50, R51, R52, R53, KC_NO, KC_NO }, \
+    { R60, R61, R62, R63, KC_NO, KC_NO }  \
+}
index 2ae91d4694bd907dd89b323b192896d506ab2eeb..e617b39a82db214df25eec987d12607b094cf5a2 100644 (file)
@@ -5,7 +5,7 @@
     "width": 17,
     "height": 9,
     "layouts": {
-        "LAYOUT": {
+        "LAYOUT_6x6": {
             "layout": [
                 {"label":"L00", "x":0, "y":0},
                 {"label":"L01", "x":1, "y":0},
index 3d0f1fbfb864f98cba268cbc27d7fcec5bafca14..506383a1bbafa19466f3d6681847d6f47a6ea67c 100644 (file)
@@ -394,5 +394,3 @@ void led_set_user(uint8_t usb_led) {
   }
   return ;
 }
-
-
index c3805991f0f0592714ae7ae6813b329488ffcd1c..65dfb4ca04ff439912bbc847b389427ace5ace20 100644 (file)
@@ -1,6 +1,6 @@
 // see https://github.com/pepaslabs/hexon38
 
-#include "hexon38.h"
+#include QMK_KEYBOARD_H
 
 #define A_ KC_A
 #define B_ KC_B
diff --git a/keyboards/handwired/jot50/config.h b/keyboards/handwired/jot50/config.h
new file mode 100644 (file)
index 0000000..2dfcfd2
--- /dev/null
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Jotix
+#define PRODUCT         Jot50
+#define DESCRIPTION     A 5x12 compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* pro_micro pin-out */
+#define MATRIX_ROW_PINS { D7, E6, B4, B6, B2 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, D3, D2, D1, D0, D4, C6 }
+#define UNUSED_PINS
+
+/* leds */
+#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 5
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/handwired/jot50/jot50.c b/keyboards/handwired/jot50/jot50.c
new file mode 100644 (file)
index 0000000..a1d2258
--- /dev/null
@@ -0,0 +1,6 @@
+#include "jot50.h"
+
+void matrix_init_kb(void) {
+
+       matrix_init_user();
+}
diff --git a/keyboards/handwired/jot50/jot50.h b/keyboards/handwired/jot50/jot50.h
new file mode 100644 (file)
index 0000000..b7e67ae
--- /dev/null
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "quantum.h"
+
+
+#define LAYOUT_ortho_5x12( \
+       k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+       k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+       k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+       k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+       k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+) \
+{ \
+       { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+       { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+       { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+       { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+       { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
+}
diff --git a/keyboards/handwired/jot50/keymaps/default/keymap.c b/keyboards/handwired/jot50/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..4ec535c
--- /dev/null
@@ -0,0 +1,84 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _QWERTY   0
+#define _LOWER    1
+#define _RAISE    2
+#define _ADJUST   3
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+/* Funct
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |        |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |   F7   |   F8   |   F9   |  F10   |        |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |  caps  |   F11  |   F12  |        |        |        |        |    -   |    =   |    [   |   ]    |    \   |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |        |  vol-  |  mute  |  vol+  |        |        |        |    _   |    +   |    {   |   }    |    |   |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |        |  prev  |  play  |  next  |        |        |        |        |        |        |        |        |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |        |        |        |        |        |        |        |        |  home  |  pgdn  |  pgup  |   end  | 
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ */
+#define _FUNCT LAYOUT_ortho_5x12 (\
+    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______,\
+    KC_CAPS, KC_F11,  KC_F12,  _______, _______, _______, _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,\
+    _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,\
+    _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______,\
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END\
+)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |   esc  |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |  bspc  |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |    `   |    Q   |    W   |    E   |    R   |    T   |    Y   |    U   |    I   |    O   |    P   |   del  |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |   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 |  left  |  down  |   up   |  right | 
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ */
+[_QWERTY] = LAYOUT_ortho_5x12 (
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, 
+    KC_GRV,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL,
+    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
+),
+
+[_LOWER] = _FUNCT,
+
+[_RAISE] = _FUNCT,
+
+[_ADJUST] = LAYOUT_ortho_5x12 (
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, RESET,   _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+void matrix_init_user(void) {
+}
+
diff --git a/keyboards/handwired/jot50/readme.md b/keyboards/handwired/jot50/readme.md
new file mode 100644 (file)
index 0000000..2dcbc29
--- /dev/null
@@ -0,0 +1,37 @@
+# Jotanck
+
+![Jotanck]
+
+A compact 50% (12x5) ortholinear keyboard kit inspired in the Preonic made by jotix.
+
+Keyboard Maintainer: [jotix](https://github.com/jotix)  
+Hardware Supported: Arduino Pro Micro  
+
+### Arduino Pro Micro Pinout
+
+| Rows        | 0  | 1  | 2  | 3  | 4  |
+|-------------|----|----|----|----|----|
+| Arduino pin | 6  | 7  | 8  | 10 | 16 |
+| QMK pin     | D7 | E6 | B4 | B6 | B2 |
+
+| Columns     | 0  | 1  | 2  | 3  | 4  | 5  | 6   | 7   | 8  | 9  | 10 | 11 |
+|-------------|----|----|----|----|----|----|-----|-----|----|----|----|----|
+| Arduino pin | A3 | A2 | A1 | A0 | 15 | 14 | TX0 | RXI | 2  | 3  | 4  | 5  |
+| QMK pin     | F4 | F5 | F6 | F7 | B1 | B3 | D3  | D2  | D1 | D0 | D4 | C6 |
+
+|             | Backlight |
+|-------------|-----------|
+| Arduino pin | 9         |
+| QMK pin     | B5        |
+
+### Compiling the Firmware
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/jot50:default
+
+### The Defaukt Keymap
+
+![Default Keymap](https://i.imgur.com/g85V8K6.png)
+
+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/jot50/rules.mk b/keyboards/handwired/jot50/rules.mk
new file mode 100644 (file)
index 0000000..36a100c
--- /dev/null
@@ -0,0 +1,66 @@
+# 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
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes         # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = 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
+
+# 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 = ortho_5x12 
index 7e022eeb02574a0be3c9373ac033ccd431ddd518..38b77586ecd4948e70bb754eab27a894438c8fb0 100644 (file)
 #define MATRIX_COLS 12
 
 /* pro_micro pin-out */
-#define MATRIX_ROW_PINS { B4, B5, B6, B2 }
+#define MATRIX_ROW_PINS { D7, E6, B6, B2 }
 #define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, D3, D2, D1, D0, D4, C6 }
 #define UNUSED_PINS
 
 /* leds */
-#define QMK_LED E6
+#define QMK_LED B4
 #define BACKLIGHT_LEVELS 3
-#define BACKLIGHT_PIN B7
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 5
 
 /* COL2ROW or ROW2COL */
 #define DIODE_DIRECTION COL2ROW
index e8dd93edafa17eb716a9de412216f06133e8798e..e253940ddc938c662a0c80dfa9d250e7153f9ef6 100644 (file)
@@ -13,5 +13,5 @@
        { 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 } \
+       { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \
 }
index 77c144890beea1f79b68b1e4171e2b3fe2534061..2e9f4a39f2a4c0f1dcc625ed7a6427a766c3f9bb 100644 (file)
@@ -15,10 +15,6 @@ extern keymap_config_t keymap_config;
 #define _RAISE    2
 #define _ADJUST   3
 
-enum planck_keycodes {
-  BACKLIT = SAFE_RANGE
-};
-
 #define LOWER MO(_LOWER)
 #define RAISE MO(_RAISE)
 
@@ -32,21 +28,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * | lshift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |    /   |  enter |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |backlit |  lctrl |  lgui  |  lalt  |  lower |  space |  space |  raise |  left  |  down  |   up   |  right | 
+ * |  lctrl |  lgui  |  lalt  |  ralt  |  lower |  space |  space |  raise |  left  |  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,
-    BACKLIT, KC_LCTL, KC_LGUI, KC_LALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+    KC_LCTL, KC_LGUI, KC_LALT, KC_RALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
 ),
 
 /* Lower
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * |    `   |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |        |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    -   |    =   |    [   |    ]   |    \   |
+ * |  caps  |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    -   |    =   |    [   |    ]   |    \   |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * |        |   F7   |   F8   |   F9   |   F10  |   F11  |   F12  |        |        |        |        |        |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
@@ -55,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [_LOWER] = LAYOUT_ortho_4x12 (
      KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______,
-     _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+     KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
      _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
 ),
@@ -78,12 +74,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
 ),
 
+/* Adjust */
 [_ADJUST] = LAYOUT_ortho_4x12 (
-    _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, RESET,   _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-),
+),    
 };
 
 uint32_t layer_state_set_user(uint32_t state) {
@@ -93,23 +90,3 @@ uint32_t layer_state_set_user(uint32_t state) {
 void matrix_init_user(void) {
 }
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-    switch (keycode) {
-
-        case BACKLIT:
-            if (record->event.pressed) {
-                register_code(KC_RSFT);
-                #ifdef BACKLIGHT_ENABLE
-                backlight_step();
-                #endif
-            } else {
-                unregister_code(KC_RSFT);
-            }
-            return false;
-           break;
-
-       default:
-           return true;
-
-    }
-}
index 41b0ea401e00b773e7df60ab7a7a10a20af3612e..28bbab86bdfd24b160f954f1b5d7dda2d1529eab 100644 (file)
@@ -12,8 +12,8 @@ Hardware Availability: [Mercado Libre](https://articulo.mercadolibre.com.ar/MLA-
 
 | Rows        | 0  | 1  | 2  | 3  |
 |-------------|----|----|----|----|
-| Arduino pin | 8  | 9  | 10 | 16 |
-| QMK pin     | B4 | B5 | B6 | B2 |
+| Arduino pin | 6  | 7  | 10 | 16 |
+| QMK pin     | D7 | E6 | B6 | B2 |
 
 | Columns     | 0  | 1  | 2  | 3  | 4  | 5  | 6   | 7   | 8  | 9  | 10 | 11 |
 |-------------|----|----|----|----|----|----|-----|-----|----|----|----|----|
@@ -22,8 +22,8 @@ Hardware Availability: [Mercado Libre](https://articulo.mercadolibre.com.ar/MLA-
 
 |             | QMK led   | Backlight |
 |-------------|-----------|-----------|
-| Arduino pin | 7         | 6         |
-| QMK pin     | E6        | D7        |
+| Arduino pin | 8         | 9         |
+| QMK pin     | B4        | B5        |
 
 ### Compiling the Firmware
 
@@ -33,6 +33,6 @@ Make example for this keyboard (after setting up your build environment):
 
 ### The Defaukt Keymap
 
-![Default Keymap](https://i.imgur.com/Fh7g1AQ.jpg)
+![Default Keymap](https://i.imgur.com/xh7Dmd7.png)
 
 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 6c3263446137ce02d4a574a8964f834c04d5b2f3..6b39b7cc1abe1ce1a261c268f03807d09a530f71 100644 (file)
@@ -48,7 +48,7 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 #
 
 BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
 EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
 CONSOLE_ENABLE = yes         # Console for debug(+400)
 COMMAND_ENABLE = no        # Commands for debug and configuration
diff --git a/keyboards/handwired/lovelive9/config.h b/keyboards/handwired/lovelive9/config.h
new file mode 100644 (file)
index 0000000..c11a25d
--- /dev/null
@@ -0,0 +1,39 @@
+
+
+#pragma once
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0007
+#define DEVICE_VER         0x0001
+#define MANUFACTURER    numazu Keyboards
+#define PRODUCT         lovelive9
+#define DESCRIPTION     lovelive sunshine Keyboards 9Key
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 9
+
+/* default pin-out */
+#define MATRIX_ROW_PINS { NO_PIN }
+#define MATRIX_COL_PINS { B4, B6, B2, D7, B1, F7, F6, F5, F4 }
+
+#define UNUSED_PINS
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 9    // Number of LEDs
+
+#define RGBLIGHT_ANIMATIONS
+#define BACKLIGHT_LEVELS 5
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4
+#define BREATHING_PERIOD 2
+#define RGBLIGHT_LIMIT_VAL 255
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+#define USB_MAX_POWER_CONSUMPTION 400
+
+#define TAPPING_TERM 200
diff --git a/keyboards/handwired/lovelive9/info.json b/keyboards/handwired/lovelive9/info.json
new file mode 100644 (file)
index 0000000..4f81d32
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "keyboard_name": "lovelive9",
+  "url": "https://github.com/ginjake",
+  "maintainer": "ginjake",
+  "width": 9,
+  "height": 1,
+  "layouts": {
+    "LAYOUT": {
+      "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":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"k07", "x":7, "y":0}, {"label":"k08", "x":8, "y":0}]
+    }
+  }
+}
diff --git a/keyboards/handwired/lovelive9/keymaps/default/keymap.c b/keyboards/handwired/lovelive9/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..605f722
--- /dev/null
@@ -0,0 +1,338 @@
+#include QMK_KEYBOARD_H
+
+//#include "v1.h"
+
+//Following line allows macro to read current RGB settings
+
+rgblight_config_t RGB_current_config;
+
+#define KC_KANJI KC_GRV
+
+
+enum Layer
+{
+  _QWERTY,
+  _DIA,
+  _YOU,
+  _CHIKA,
+  _ZURA,
+  _RUBY,
+  _YOHANE,
+  _RIKO,
+  _MARI,
+  _KANAN,
+  _RUBY_SUB1,
+  _RUBY_SUB2,
+  _RUBY_SUB3,
+  _SCHOOL_IDOL_FESTIVAL
+};
+
+#define SEND_DIA 100
+#define SEND_YOU 101
+#define SEND_CHIKA 102
+#define SEND_ZURA 103
+#define SEND_RUBY 104
+#define SEND_YOHANE 105
+#define SEND_RIKO 106
+#define SEND_MARI 107
+#define SEND_KANAN 108
+
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  DIA,
+  YOU,
+  CHIKA,
+  ZURA,
+  RUBY,
+  RUBY_SUB1,
+  RUBY_SUB2,
+  RUBY_SUB3,
+  YOHANE,
+  RIKO,
+  MARI,
+  KANAN,
+  TO_SCHOOL_IDOL_FESTIVAL,
+  RETURN_SCHOOL_IDOL_FESTIVAL
+};
+
+
+int long_tap_timer;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = LAYOUT(
+    DIA, YOU, CHIKA, ZURA, RUBY, YOHANE, RIKO, MARI, KANAN
+  ),
+  [_DIA] = LAYOUT(
+    DIA, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_LSFT
+  ),
+
+  [_YOU] = LAYOUT(
+    KC_H, YOU, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_LSFT
+  ),
+
+  [_CHIKA] = LAYOUT(
+    KC_O, KC_P, CHIKA, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_LSFT
+  ),
+
+  [_ZURA] = LAYOUT(
+    KC_V, KC_W, KC_X, ZURA, KC_Y, KC_Z, KC_M, KC_N, KC_LSFT
+  ),
+
+  //推しをたくさん押せるようにルビーちゃんには複数のレイヤー設定
+  [_RUBY] = LAYOUT(
+    KC_CIRC, KC_LPRN, KC_QUOT, RUBY_SUB1, RUBY, RUBY_SUB2, KC_LCBR, KC_EXLM, KC_LSFT
+  ),
+  [_RUBY_SUB1] = LAYOUT(
+    KC_RCBR, KC_AT, KC_PIPE, RUBY_SUB1, RUBY, RUBY_SUB2, KC_HASH, KC_EQL, KC_LSFT
+  ),
+  [_RUBY_SUB2] = LAYOUT(
+    KC_TILD, KC_DLR, KC_LBRC, RUBY_SUB1, RUBY, RUBY_SUB2, KC_PERC, KC_RBRC, KC_LSFT
+  ),
+  [_RUBY_SUB3] = LAYOUT(
+    TO_SCHOOL_IDOL_FESTIVAL, KC_DLR, KC_LBRC, RUBY_SUB1, RUBY, RUBY_SUB2, KC_PERC, KC_RBRC, RETURN_SCHOOL_IDOL_FESTIVAL
+  ),
+
+  [_YOHANE] = LAYOUT(
+    KC_0, KC_1, KC_2, KC_3, KC_4, YOHANE, KC_5, KC_6, KC_LSFT
+  ),
+
+  [_RIKO] = LAYOUT(
+    KC_7, KC_8, KC_9, KC_PLUS, KC_MINS, KC_ASTR, RIKO, KC_SLSH, KC_LSFT
+  ),
+
+  [_MARI] = LAYOUT(
+    KC_TAB, KC_DEL, KC_COMM, KC_SPC, KC_ENT, KC_BSPC, KC_DOT, MARI, KC_LSFT
+  ),
+
+  [_KANAN] = LAYOUT(
+    KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ENT, KC_BSPC, KC_AMPR, KC_KANJI, KANAN
+  ),
+  [_SCHOOL_IDOL_FESTIVAL] = LAYOUT(
+    KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9
+  ),
+};
+
+void check_tap_and_send_key(int MEMBER) {
+  if (long_tap_timer < 500) {
+    switch (MEMBER) {
+      case SEND_DIA:
+        SEND_STRING("KUROSAWA DIA");
+      break;
+      case SEND_YOU:
+        SEND_STRING("WATANABE YOU");
+      break;
+      case SEND_CHIKA:
+        SEND_STRING("TAKAMI CHIKA");
+      break;
+      case SEND_ZURA:
+        SEND_STRING("KUNIKIDA HANAMARU");
+      break;
+      case SEND_RUBY:
+        SEND_STRING("KUROSAWA RUBY");
+      break;
+      case SEND_YOHANE:
+        SEND_STRING("TSUSHIMA YOSHIKO");
+      break;
+      case SEND_RIKO:
+        SEND_STRING("SAKURAUCHI RIKO");
+      break;
+      case SEND_MARI:
+        SEND_STRING("OHARA MARI");
+      break;
+      case SEND_KANAN:
+        SEND_STRING("MATSUURA KANAN");
+      break;
+      }
+  }
+  long_tap_timer = 0;
+}
+
+int aqours_color_h[] = { 26, 340, 150,   0, 199, 220, 53, 265, 322};
+int aqours_color_s[] = {255, 165, 255, 255, 255, 350, 255, 255, 255};
+int aqours_color_v[] = {255, 255, 255, 255, 255, 255, 200, 255, 255};
+
+void LED_default_set(void) {
+
+  sethsv(aqours_color_h[2], aqours_color_s[2], aqours_color_v[2], (LED_TYPE *)&led[0]);
+  sethsv(aqours_color_h[7], aqours_color_s[7], aqours_color_v[7], (LED_TYPE *)&led[1]);
+  sethsv(aqours_color_h[1], aqours_color_s[1], aqours_color_v[1], (LED_TYPE *)&led[2]);
+  sethsv(aqours_color_h[5], aqours_color_s[5], aqours_color_v[5], (LED_TYPE *)&led[3]);
+  sethsv(aqours_color_h[8], aqours_color_s[8], aqours_color_v[8], (LED_TYPE *)&led[4]);
+  sethsv(aqours_color_h[6], aqours_color_s[6], aqours_color_v[6], (LED_TYPE *)&led[5]);
+  sethsv(aqours_color_h[0], aqours_color_s[0], aqours_color_v[0], (LED_TYPE *)&led[6]);
+  sethsv(aqours_color_h[4], aqours_color_s[4], aqours_color_v[4], (LED_TYPE *)&led[7]);
+  sethsv(aqours_color_h[3], aqours_color_s[3], aqours_color_v[3], (LED_TYPE *)&led[8]);
+
+  rgblight_set();
+
+}
+
+
+void LED_layer_set(int aqours_index) {
+  for (int c = 0; c < 9; c++) {
+    sethsv(aqours_color_h[aqours_index], aqours_color_s[aqours_index], aqours_color_v[aqours_index], (LED_TYPE *)&led[c]);
+  }
+  rgblight_set();
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+  switch (keycode) {
+
+    case DIA:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_DIA);
+        LED_layer_set(3);
+      } else {
+        check_tap_and_send_key(SEND_DIA);
+        layer_off(_DIA);
+        LED_default_set();
+      }
+      break;
+
+    case YOU:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_YOU);
+        LED_layer_set(4);
+      } else {
+        check_tap_and_send_key(SEND_YOU);
+        layer_off(_YOU);
+        LED_default_set();
+      }
+      break;
+
+    case CHIKA:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_CHIKA);
+        LED_layer_set(0);
+      } else {
+        check_tap_and_send_key(SEND_CHIKA);
+        layer_off(_CHIKA);
+        LED_default_set();
+      }
+      break;
+
+    case ZURA:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_ZURA);
+        LED_layer_set(6);
+      } else {
+        check_tap_and_send_key(SEND_ZURA);
+        layer_off(_ZURA);
+        LED_default_set();
+      }
+      break;
+
+    case RUBY:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_RUBY);
+        LED_layer_set(8);
+      } else {
+        check_tap_and_send_key(SEND_RUBY);
+        layer_off(_RUBY);
+        LED_default_set();
+      }
+      break;
+    case RUBY_SUB1:
+      if (record->event.pressed) {
+        layer_on(_RUBY_SUB1);
+        if (IS_LAYER_ON(_RUBY_SUB1) && IS_LAYER_ON(_RUBY_SUB2)) {
+          layer_on(_RUBY_SUB3);
+        } else {
+          layer_off(_RUBY_SUB3);
+        }
+      } else {
+        layer_off(_RUBY_SUB1);
+      }
+      break;
+    case RUBY_SUB2:
+      if (record->event.pressed) {
+        layer_on(_RUBY_SUB2);
+        if (IS_LAYER_ON(_RUBY_SUB1) && IS_LAYER_ON(_RUBY_SUB2)) {
+          layer_on(_RUBY_SUB3);
+        } else {
+          layer_off(_RUBY_SUB3);
+        }
+      } else {
+        layer_off(_RUBY_SUB2);
+      }
+      break;
+
+    case YOHANE:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_YOHANE);
+        LED_layer_set(5);
+      } else {
+        check_tap_and_send_key(SEND_YOHANE);
+        layer_off(_YOHANE);
+        LED_default_set();
+      }
+      break;
+
+    case RIKO:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_RIKO);
+        LED_layer_set(1);
+      } else {
+        check_tap_and_send_key(SEND_RIKO);
+        layer_off(_RIKO);
+        LED_default_set();
+      }
+      break;
+
+    case MARI:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_MARI);
+        LED_layer_set(7);
+      } else {
+        check_tap_and_send_key(SEND_MARI);
+        layer_off(_MARI);
+        LED_default_set();
+      }
+      break;
+
+    case KANAN:
+      if (record->event.pressed) {
+        long_tap_timer = 1;
+        layer_on(_KANAN);
+        LED_layer_set(2);
+      } else {
+        check_tap_and_send_key(SEND_KANAN);
+        layer_off(_KANAN);
+        LED_default_set();
+      }
+      break;
+
+    case TO_SCHOOL_IDOL_FESTIVAL:
+      if (record->event.pressed) {
+        LED_default_set();
+        layer_on(_SCHOOL_IDOL_FESTIVAL);
+      }
+      break;
+    case RETURN_SCHOOL_IDOL_FESTIVAL:
+      if (record->event.pressed) {
+        layer_off(_SCHOOL_IDOL_FESTIVAL);
+      }
+      break;
+  }
+
+  return true;
+}
+
+
+void matrix_scan_user(void) {
+
+  if (long_tap_timer > 0) {
+    long_tap_timer++;
+  }
+}
diff --git a/keyboards/handwired/lovelive9/lovelive9.c b/keyboards/handwired/lovelive9/lovelive9.c
new file mode 100644 (file)
index 0000000..1ec8ae0
--- /dev/null
@@ -0,0 +1,7 @@
+#include "lovelive9.h"
+
+
+
+void matrix_init_kb(void) {
+       matrix_init_user();
+}
diff --git a/keyboards/handwired/lovelive9/lovelive9.h b/keyboards/handwired/lovelive9/lovelive9.h
new file mode 100644 (file)
index 0000000..f6fb1f9
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#include "quantum.h"
+#define LAYOUT( \
+       k00, k01, k02, k03, k04, k05, k06, k07, k08 \
+) \
+{ \
+       { k00, k01, k02, k03, k04, k05, k06, k07, k08 } \
+}
diff --git a/keyboards/handwired/lovelive9/readme.md b/keyboards/handwired/lovelive9/readme.md
new file mode 100644 (file)
index 0000000..2046472
--- /dev/null
@@ -0,0 +1,14 @@
+# lovelive9
+
+lovelive9 is 9keys keyboard.
+
+![lovelive9](https://user-images.githubusercontent.com/16838187/53496102-a6fc0700-3ae4-11e9-85e4-1e6cd981b410.jpg)
+
+Keyboard Maintainer: [ginjake](https://github.com/ginjake) [Twitter:@sirojake](https://twitter.com/sirojake)  
+Hardware Supported: Pro Micro, handwired (LED used [CherryMXLEDBitBoard](https://github.com/swanmatch/MxLEDBitPCB) with handwired)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/lovelive9: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/#/n
diff --git a/keyboards/handwired/lovelive9/rules.mk b/keyboards/handwired/lovelive9/rules.mk
new file mode 100644 (file)
index 0000000..99a531a
--- /dev/null
@@ -0,0 +1,67 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+BOOTLOADER = caterina
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes        # 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
index d318b04233bfc50497445e1d08d6115a94fabfdd..54276d4b20d0b408c7d1f1d0677947c96a88a45a 100755 (executable)
@@ -1,4 +1,4 @@
-#include "maartenwut.h"
+#include QMK_KEYBOARD_H
 
 #define _MA 0
 #define _NU 1
diff --git a/keyboards/handwired/magicforce61/README.md b/keyboards/handwired/magicforce61/README.md
deleted file mode 100644 (file)
index cc86732..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Magicforce "61" Handwired
-=======================
-
-Basically I cut 7 keys off the magicforce68 and handwired everything to a
-teensy++ 2.0 to make it a ~60% board.
-
-## Wiring Layout
-
-![Wiring Layout](https://imgur.com/gallery/RxYyA)
-
-## Pinout
-
-The following pins are used:
-
-  ```
-  #define MATRIX_ROW_PINS { D0, D1, D2, D3, D4 }
-  #define MATRIX_COL_PINS { B5, B4, B3, B2, B1, B0, E7, E6, F0, F1, F2, F3, F4, F5 } 
-  ```
-
-## Compiling and loading the firmware
-
-To build the firmware, run `make handwired/magicforce61`.
-
-Flash the firmware using the teensy loader or avrdude.
index c6c689ab6c5d0da4ac6eacdb1911f05b25a96165..3dc74f83e7dd5d4d85a3d5053efd81d16655ab8b 100644 (file)
@@ -15,8 +15,7 @@ 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"
 
@@ -43,7 +42,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
 */
 #define MATRIX_ROW_PINS { D0, D1, D2, D3, D4 }
-#define MATRIX_COL_PINS { B5, B4, B3, B2, B1, B0, E7, E6, F0, F1, F2, F3, F4, F5 } 
+#define MATRIX_COL_PINS { B5, B4, B3, B2, B1, B0, E7, E6, F0, F1, F2, F3, F4, F5 }
 #define UNUSED_PINS
 
 /* COL2ROW or ROW2COL */
@@ -152,5 +151,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/magicforce61/info.json b/keyboards/handwired/magicforce61/info.json
new file mode 100644 (file)
index 0000000..22ffccd
--- /dev/null
@@ -0,0 +1,74 @@
+{
+  "keyboard_name": "Magicforce \"61\"",
+  "url": "",
+  "maintainer": "qmk",
+  "width": 15,
+  "height": 5,
+  "layouts": {
+    "LAYOUT": {
+      "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":"-", "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":"GUI", "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, "w":1.25},
+        {"label":"GUI", "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}
+      ]
+    }
+  }
+}
index 9559be5d21b5e6a732be7a0bb7485fd02357e057..12252c978ab1425f10d715c9ce5cfa6dc5ec5066 100644 (file)
@@ -1,69 +1,54 @@
-#include "magicforce61.h"
+#include QMK_KEYBOARD_H
 
 #define _QWERTY 0
 #define _FN1 1
 #define _FN2 2
-#define KC_ KC_TRNS
+
 #define KC_X0 LT(_FN2, KC_GRV)
 #define KC_X1 MO(_FN1)
-#define KC_NAV_ESC LT(_FN1, KC_ESC)
+#define NAV_ESC LT(_FN1, KC_ESC)
 #define KC_GUI MAGIC_UNNO_GUI
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_QWERTY] = KEYMAP(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. */
-    GRV , 1  , 2  , 3  , 4  , 5  , 6  , 7  , 8  , 9  , 0  ,MINS,EQL ,  BSPC  ,
- /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| */
-    TAB   , Q  , W  , E  , R  , T  , Y  , U  , I  , O  , P  ,LBRC,RBRC, BSLS ,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| */
-    NAV_ESC    , A  , S  , D  , F  , G  , H  , J  , K  , L  ,SCLN,QUOT,  ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| */
-    LSPO   , Z  , X  , C  , V  , B  , N  , M  ,COMM,DOT ,SLSH,     RSPC  ,
- /*|---------`----`----`----`----`----`----`----`----`----`----`-------------. */
-    LCTL , RGUI ,LALT ,            SPACE             ,  X1  ,RALT ,RCTL ,    X1
- /*`-----+-----+-----+------------------------------+------+-----+-----' ANY   */
+  [_QWERTY] = LAYOUT(
+ /*,--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------. */
+    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, \
+ /*|esc-----`-1------`-2------`-3------`-4------`-5------`-6------`-7------`-8------`-9------`-0------`mnus----`plus----`--bksp--| */
+    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, \
+ /*|tab-----`-q------`-w------`-e------`-r------`-t------`-y------`-u------`-i------`-o------`-p------`-{------`-}------`--|-----| */
+    NAV_ESC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  \
+ /*|caps----`-a------`-s------`-d------`-f------`-g------`-h------`-j------`-k------`-l------`-;------`-'------`-----------enter-| */
+    KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,                   KC_RSPC, \
+ /*|shift---`-z------`-x------`-c------`-v------`-b------`-n------`-m------`-,------`-.------`-/------`--------------------shift-| */
+    KC_LCTL, KC_RGUI, KC_LALT,                            KC_SPC,                             KC_X1,   KC_RALT, KC_RCTL, KC_X1    \
+ /*`ctrl----`-gui----`-alt----`------------------space---------------------------------------`-fn-----`-alt----`ctrl----' ANY      */
   ),
 
-  [_FN1] = KEYMAP(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| */
-          ,    , UP ,    ,    ,    ,    ,    ,INS ,PSCR,    ,    ,    ,      ,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| */
-           ,LEFT,DOWN,RGHT,    ,    ,    , PGDN , PGUP ,    ,    ,    ,      ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| */
-             ,    ,    ,    ,    ,    ,VOLD,VOLU,MUTE,    ,    ,             ,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-. */
-         ,     ,     ,                              ,      ,     ,     , MPLY
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' ANY   */
+  [_FN1] = 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_BSPC, \
+ /*|esc-----`-1------`-2------`-3------`-4------`-5------`-6------`-7------`-8------`-9------`-0------`mnus----`plus----`--bksp--| */
+    _______, _______, KC_UP,   _______, _______, _______, _______, _______, KC_INS,  KC_PSCR, _______, _______, _______, _______, \
+ /*|tab-----`-q------`-w------`-e------`-r------`-t------`-y------`-u------`-i------`-o------`-p------`-{------`-}------`--|-----| */
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_PGDN, KC_PGUP, _______, _______, _______,          _______, \
+ /*|caps----`-a------`-s------`-d------`-f------`-g------`-h------`-j------`-k------`-l------`-;------`-'------`-----------enter-| */
+    _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______,                   _______, \
+ /*|shift---`-z------`-x------`-c------`-v------`-b------`-n------`-m------`-,------`-.------`-/------`--------------------shift-| */
+    _______, _______, _______,                            _______,                            _______, _______, _______, KC_MPLY  \
+ /*`ctrl----`-gui----`-alt----`------------------space---------------------------------------`-fn-----`-alt----`ctrl----' ANY      */
   ),
 
-  [_FN2] = KEYMAP(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| */
-          ,    ,    ,    ,    ,    ,    , 7  , 8  , 9  ,    ,    ,    ,      ,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| */
-           ,    ,    ,    ,    ,    ,    , 4  , 5  , 6  ,    ,    ,          ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| */
-             ,    ,    ,    ,    ,    , 0  , 1  , 2  , 3  ,    ,             ,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-. */
-         ,     ,     ,                              ,      ,     ,     ,
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' ANY   */
+  [_FN2] = 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_BSPC, \
+ /*|esc-----`-1------`-2------`-3------`-4------`-5------`-6------`-7------`-8------`-9------`-0------`mnus----`plus----`--bksp--| */
+    _______, _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, _______, _______, _______, \
+ /*|tab-----`-q------`-w------`-e------`-r------`-t------`-y------`-u------`-i------`-o------`-p------`-{------`-}------`--|-----| */
+    _______, _______, _______, _______, _______, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______,          _______, \
+ /*|caps----`-a------`-s------`-d------`-f------`-g------`-h------`-j------`-k------`-l------`-;------`-'------`-----------enter-| */
+    _______, _______, _______, _______, _______, _______, KC_0,    KC_1,    KC_2,    KC_3,    _______,                   _______, \
+ /*|shift---`-z------`-x------`-c------`-v------`-b------`-n------`-m------`-,------`-.------`-/------`--------------------shift-| */
+    _______, _______, _______,                            _______,                            _______, _______, _______, _______  \
+ /*`ctrl----`-gui----`-alt----`------------------space---------------------------------------`-fn-----`-alt----`ctrl----' ANY      */
   )
 };
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-          if (record->event.pressed) {
-            register_code(KC_RSFT);
-          } else {
-            unregister_code(KC_RSFT);
-          }
-        break;
-      }
-    return MACRO_NONE;
-};
index 784f2b2c8023c34bf16aed4cf98712bd155cfacf..37a32ed7839c4a05fc036b899504c9b1763b0a3b 100644 (file)
@@ -1,20 +1,17 @@
-#ifndef MAGICFORCE61_H
-#define MAGICFORCE61_H
+#pragma once
 
 #include "quantum.h"
 
-#define KEYMAP( \
+#define LAYOUT( \
     K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
     K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
     K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,   K2D, \
     K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A,        K3D, \
     K40, K41, K42,           K45,                 K49,  K4A,  K4C,   K4D \
     ) { \
-  {  KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D  },  \
-  {  KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D  },  \
-  {  KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_NO,    KC_##K2D  },  \
-  {  KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_NO,    KC_NO,    KC_##K3D  },  \
-  {  KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_NO,    KC_##K45, KC_NO,    KC_NO,    KC_NO,    KC_##K49, KC_##K4A, KC_NO,    KC_##K4C, KC_##K4D  },  \
+  {  K00, K01, K02, K03,   K04,   K05, K06,   K07,   K08,   K09, K0A, K0B,   K0C,   K0D  },  \
+  {  K10, K11, K12, K13,   K14,   K15, K16,   K17,   K18,   K19, K1A, K1B,   K1C,   K1D  },  \
+  {  K20, K21, K22, K23,   K24,   K25, K26,   K27,   K28,   K29, K2A, K2B,   KC_NO, K2D  },  \
+  {  K30, K31, K32, K33,   K34,   K35, K36,   K37,   K38,   K39, K3A, KC_NO, KC_NO, K3D  },  \
+  {  K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, KC_NO, K4C,   K4D  },  \
 }
-
-#endif
diff --git a/keyboards/handwired/magicforce61/readme.md b/keyboards/handwired/magicforce61/readme.md
new file mode 100644 (file)
index 0000000..081992a
--- /dev/null
@@ -0,0 +1,31 @@
+# Magicforce "61" Handwired
+
+Basically I cut 7 keys off the magicforce68 and handwired everything to a teensy++ 2.0 to make it a ~60% board.
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)  
+Hardware Supported: magicforce61, teensy++ 2.0  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/magicforce61:default
+
+Flash the firmware using the teensy loader or avrdude.
+
+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).
+
+## Wiring Layout / Pinout
+
+|        |  B5  |  B4  |  B3  |  B2  |  B1  |  B0  |  E7  |  E6  |  F0  |  F1  |  F2  |  F3  |  F4  |  F5  |
+| -----: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: |
+| **D0** | Esc  | 1!   | 2@   | 3#   | 4$   | 5%   | 6^   | 7&   | 8*   | 9(   | 0)   | -_   | =+   | Bspc |
+| **D1** | Tab  | Q    | W    | E    | R    | T    | Y    | U    | I    | O    | P    | [{   | ]}   | \\\| |
+| **D2** | Caps | A    | S    | D    | F    | G    | H    | J    | K    | L    | ;:   | '"   |      | Ent  |
+| **D3** | LSft | Z    | X    | C    | V    | B    | N    | M    | ,    | .    | /    |      |      | RSft |
+| **D4** | LCtl | LGUI | LAlt |      |      | Spc  |      |      |      | RAlt | RGUI |      | App  | RCtl |
+
+The following pins are used:
+
+```
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D4 }
+#define MATRIX_COL_PINS { B5, B4, B3, B2, B1, B0, E7, E6, F0, F1, F2, F3, F4, F5 }
+```
diff --git a/keyboards/handwired/magicforce68/README.md b/keyboards/handwired/magicforce68/README.md
deleted file mode 100644 (file)
index a0de660..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Magicforce 68 Handwired
-=======================
-
-This firmware is for a Magicforce 68 that's had its PCB removed and is handwired with an Arduino Micro. NOTE: The Arduino Micro is different than the Arduino *Pro* Micro.
-
-## Wiring Layout
-
-![Wiring Layout](http://i.imgur.com/NmTCv5u.png)
-
-## Pinout
-
-The following pins are used:
-- Columns 1-15: B2, B0, D3, D2, D1, D0, D4, C6, D7, E6, B4, B5, B6, B7, D6
-- Rows 1-5: F0, F1, F4, F5, F6
-
-## Compiling and loading the firmware
-
-To build the firmware, run `make`.
-
-To flash the firemware onto the microcontroller, run `make avrdude`, and press the reset button.
diff --git a/keyboards/handwired/magicforce68/info.json b/keyboards/handwired/magicforce68/info.json
new file mode 100644 (file)
index 0000000..a390533
--- /dev/null
@@ -0,0 +1,81 @@
+{
+    "keyboard_name": "Magicforce 68 Handwired",
+    "url": "",
+    "maintainer": "qmk",
+    "width": 17.25,
+    "height": 5,
+    "layouts": {
+        "LAYOUT": {
+            "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":"-", "x":11, "y":0},
+                {"label":"=", "x":12, "y":0},
+                {"label":"Backspace", "x":13, "y":0, "w":2},
+                {"label":"Insert", "x":15.25, "y":0},
+                {"label":"Page Up", "x":16.25, "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.25, "y":1},
+                {"label":"Page Down", "x":16.25, "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":"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":"Up", "x":15.25, "y":3},
+                {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+                {"label":"GUI", "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":"Fn", "x":10, "y":4, "w":1.25},
+                {"label":"Alt", "x":11.25, "y":4, "w":1.25},
+                {"label":"Ctrl", "x":12.5, "y":4, "w":1.25},
+                {"label":"Left", "x":14.25, "y":4},
+                {"label":"Down", "x":15.25, "y":4},
+                {"label":"Right", "x":16.25, "y":4}
+            ]
+        }
+    }
+}
index 22553f714c30bc3f96f38f84a420693c82c281c2..e44cfefdb156c7d61a9d41f94379ab01696cd642 100644 (file)
@@ -1,67 +1,34 @@
-#include "magicforce68.h"
+#include QMK_KEYBOARD_H
 
 #define _QWERTY 0
 #define _FN1 1
 #define _FN2 2
-#define KC_ KC_TRNS
+
 #define KC_X0 LT(_FN2, KC_GRV)
 #define KC_X1 MO(_FN1)
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [_QWERTY] = KEYMAP(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    ESC , 1  , 2  , 3  , 4  , 5  , 6  , 7  , 8  , 9  , 0  ,MINS,EQL ,  BSPC  ,   INS ,PGUP,
- /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------|  |----`----| */
-    TAB   , Q  , W  , E  , R  , T  , Y  , U  , I  , O  , P  ,LBRC,RBRC, BSLS ,   DEL ,PGDN,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------|  `----`----' */
-    X0     , A  , S  , D  , F  , G  , H  , J  , K  , L  ,SCLN,QUOT,    ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------|  ,----. */
-    LSFT     , Z  , X  , C  , V  , B  , N  , M  ,COMM,DOT ,SLSH,       RSFT  ,    UP ,
- /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
-    LCTL ,LGUI ,LALT ,            SPACE             ,  X1  ,RALT ,RCTL ,    LEFT,DOWN,RGHT
- /*`-----+-----+-----+------------------------------+------+-----+-----'   `----+----+----' */
+  [_QWERTY] = 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_INS,  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_PGDN, \
+    KC_X0,   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_X1,   KC_RALT, KC_RCTL,          KC_LEFT, KC_DOWN, KC_RGHT  \
   ),
 
-  [_FN1] = KEYMAP(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
-          ,    ,    , UP ,    ,    ,    ,    ,    ,    ,    ,    ,    ,      ,   VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
-           ,    ,LEFT,DOWN,RGHT,    ,    ,    ,    ,    ,    ,    ,          ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
-             ,    ,    ,    ,    ,    ,    ,MUTE,    ,    ,    ,             ,   MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
-         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
+  [_FN1] = 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_BSPC,          KC_VOLU, KC_HOME, \
+    _______, _______, _______, KC_UP,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          KC_VOLD, KC_END,  \
+    _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______,          _______,                            \
+    _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______,                   _______,          KC_MUTE,          \
+    _______, _______, _______,                            _______,                            _______, _______, _______,          KC_MPRV, KC_MPLY, KC_MNXT  \
   ),
 
-  [_FN2] = KEYMAP(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------.  ,----+----. */
-    GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 ,   BSPC ,   VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--|  |ins-`pgup| */
-          ,    ,    , UP ,    ,    ,    , 7  , 8  , 9  ,    ,    ,    ,      ,   VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---|  `del-`pgdn' */
-           ,    ,LEFT,DOWN,RGHT,    ,    , 4  , 5  , 6  ,    ,    ,          ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-|  ,----. */
-             ,    ,    ,    ,    ,    , 0  , 1  , 2  , 3  ,    ,             ,   MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
-         ,     ,     ,                              ,      ,     ,     ,    MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-'   `left+down+rght' */
+  [_FN2] = 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_BSPC,          KC_VOLU, KC_HOME, \
+    _______, _______, _______, KC_UP,   _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, _______, _______, _______,          KC_VOLD, KC_END,  \
+    _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______,          _______,                            \
+    _______, _______, _______, _______, _______, _______, KC_0,    KC_1,    KC_2,    KC_3,    _______,                   _______,          KC_MUTE,          \
+    _______, _______, _______,                            _______,                            _______, _______, _______,          KC_MPRV, KC_MPLY, KC_MNXT  \
   )
 };
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-          if (record->event.pressed) {
-            register_code(KC_RSFT);
-          } else {
-            unregister_code(KC_RSFT);
-          }
-        break;
-      }
-    return MACRO_NONE;
-};
index cfcdce38d5727aa9875fac27ffbc3c8fed3216a2..949507fef7911f0a673796eaddf667b93c2dc495 100644 (file)
@@ -3,18 +3,18 @@
 
 #include "quantum.h"
 
-#define KEYMAP( \
+#define LAYOUT( \
     K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K2E, \
     K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K3E, \
     K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B,   K2C, \
     K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A,        K3C,    K3D, \
     K40, K41, K42,           K45,                K49, K4A, K4B,      K4C, K4D, K4E  \
     ) { \
-  {  KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E  },  \
-  {  KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E  },  \
-  {  KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_NO,    KC_##K2E  },  \
-  {  KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_NO,    KC_##K3C, KC_##K3D, KC_##K3E  },  \
-  {  KC_##K40, KC_##K41, KC_##K42, KC_NO,    KC_NO,    KC_##K45, KC_NO,    KC_NO,    KC_NO,    KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##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, KC_NO, K2E  },  \
+  {  K30, K31, K32, K33,   K34,   K35, K36,   K37,   K38,   K39, K3A, KC_NO, K3C, K3D,   K3E  },  \
+  {  K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B,   K4C, K4D,   K4E  }   \
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/keyboards/handwired/magicforce68/readme.md b/keyboards/handwired/magicforce68/readme.md
new file mode 100644 (file)
index 0000000..5b5ade3
--- /dev/null
@@ -0,0 +1,24 @@
+# Magicforce 68 Handwired
+
+This firmware is for a Magicforce 68 that's had its PCB removed and is handwired with an Arduino Micro. NOTE: The Arduino Micro is different than the Arduino *Pro* Micro.
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)  
+Hardware Supported: magicforce68, Arduino Micro  
+
+## Wiring Layout
+
+![Wiring Layout](http://i.imgur.com/NmTCv5u.png)
+
+## Pinout
+
+The following pins are used:
+- Columns 1-15: B2, B0, D3, D2, D1, D0, D4, C6, D7, E6, B4, B5, B6, B7, D6
+- Rows 1-5: F0, F1, F4, F5, F6
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/magicforce68:default
+
+To flash the firmware onto the microcontroller, run `make handwired/magicforce68:default:avrdude`, and press the reset button.
+
+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/mechboards_micropad/config.h b/keyboards/handwired/mechboards_micropad/config.h
new file mode 100644 (file)
index 0000000..01a0bdd
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+Copyright 2019 Yiancar
+
+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       0x8968
+#define PRODUCT_ID      0x0001
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Yiancar
+#define PRODUCT         Mechboards Micropad
+#define DESCRIPTION     Enjoy your freebie!
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 4
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B6 }
+#define MATRIX_COL_PINS { B2, B3, B1, F7 }
+#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
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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/handwired/mechboards_micropad/info.json b/keyboards/handwired/mechboards_micropad/info.json
new file mode 100644 (file)
index 0000000..f8908d9
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "keyboard_name": "Mechboards Micropad", 
+    "url": "", 
+    "maintainer": "yiancar", 
+    "width": 4, 
+    "height": 1, 
+    "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}]
+        }
+    }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/mechboards_micropad/keymaps/default/keymap.c b/keyboards/handwired/mechboards_micropad/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..41784c5
--- /dev/null
@@ -0,0 +1,84 @@
+/* Copyright 2019 Yiancar
+ *
+ * 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
+
+uint8_t led_state = 1;
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  MECHBOARDURL = SAFE_RANGE,
+  QMKURL,
+  MKUK,
+  LEDCHANGE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT( /* Base */
+    MECHBOARDURL,  QMKURL,  MKUK,  LEDCHANGE \
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case MECHBOARDURL:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        SEND_STRING("https://mechboards.co.uk/" SS_TAP(X_ENTER));
+      } else {
+        // when keycode QMKBEST is released
+      }
+      break;
+    case QMKURL:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+      } else {
+        // when keycode QMKURL is released
+      }
+      break;
+    case MKUK:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        SEND_STRING("MKUK4 was amazing!");
+      } else {
+        // when keycode QMKURL is released
+      }
+      break;
+    case LEDCHANGE:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        led_state = !led_state;
+        writePin(F6, led_state);
+      } else {
+        // when keycode QMKURL is released
+      }
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+  setPinOutput(F6);
+  writePinLow(F6);
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/mechboards_micropad/keymaps/default/readme.md b/keyboards/handwired/mechboards_micropad/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..92d37ad
--- /dev/null
@@ -0,0 +1,4 @@
+# The default keymap for mechboards_micropad
+
+This is a 4 key micropad freebie from Mechboards and Yiancar-Designs.
+Press the keys to find out the secrets:)
\ No newline at end of file
diff --git a/keyboards/handwired/mechboards_micropad/mechboards_micropad.c b/keyboards/handwired/mechboards_micropad/mechboards_micropad.c
new file mode 100644 (file)
index 0000000..d4c8fa9
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Yiancar
+ *
+ * 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 "mechboards_micropad.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/mechboards_micropad/mechboards_micropad.h b/keyboards/handwired/mechboards_micropad/mechboards_micropad.h
new file mode 100644 (file)
index 0000000..9839084
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright 2019 Yiancar
+ *
+ * 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, k02, k03 \
+) \
+{ \
+    { k00, k01, k02, k03 } \
+}
diff --git a/keyboards/handwired/mechboards_micropad/readme.md b/keyboards/handwired/mechboards_micropad/readme.md
new file mode 100644 (file)
index 0000000..36230b1
--- /dev/null
@@ -0,0 +1,14 @@
+Mechboards Micropad
+===================
+
+This was a freebie, use me and find out more about me :)
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)  
+Hardware Supported: ATMega32u4  
+Hardware Availability: Random mechboards.co.uk order and UK meetups!
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/mechboards_micropad: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/mechboards_micropad/rules.mk b/keyboards/handwired/mechboards_micropad/rules.mk
new file mode 100644 (file)
index 0000000..8ac2297
--- /dev/null
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# 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
+
+
+# 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)
index bf40376c19bf457193801cd1b049460b9b2997cd..c19ad7372418825b115a3b2bf56e4e8f9420a2c9 100644 (file)
@@ -1,12 +1,10 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
+
+// place overrides here
 
-#include "../../config.h"
 
 /* bootmagic salt key */
 #define BOOTMAGIC_KEY_SALT              KC_ESC
 
 /* skip bootmagic and eeconfig */
 #define BOOTMAGIC_KEY_SKIP              KC_SPACE
-
-#endif
index 948d6312becc6734615e33b049e31cb7855a3e6a..3201a8247ae21d787a21fe28836779da5bbd2c52 100644 (file)
@@ -20,8 +20,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "config_common.h"
 
 /* USB Device descriptor parameter */
-#define VENDOR_ID       0xFEED
-#define PRODUCT_ID      0x4024
+#define VENDOR_ID       0x5052
+#define PRODUCT_ID      0x6578
 #define DEVICE_VER      0x0001
 #define MANUFACTURER    PrimeKB
 #define PRODUCT         Prime_EXL
@@ -49,3 +49,23 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define LOCKING_SUPPORT_ENABLE
 /* Locking resynchronize hack */
 #define LOCKING_RESYNC_ENABLE
+
+#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*9*2)) = (35+720)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 755
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 269    // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
\ No newline at end of file
index 0e1c60d4aafb9da15c281eff5fde87b345aca1c5..1dac7825e4be970089cb0157f365969198906969 100644 (file)
@@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                        KC_TRNS,                                                                                                KC_TRNS,                        KC_VOLD,                KC_VOLU,        KC_MUTE,        KC_TRNS,
                BL_TOGG,        BL_STEP,                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS
     ),
-       
+
                [2] = LAYOUT(
                KC_ESC,                 KC_1,                   KC_2,                   KC_3,                   KC_4,                   KC_F9,                          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_Q,                   KC_W,           KC_E,                   KC_R,                   KC_T,                                   KC_TAB,                 KC_A,                   KC_S,                   KC_D,                   KC_F,           KC_G,                                           KC_H,                   KC_J,                   KC_K,                   KC_L,                           KC_QUOT,        KC_ENT,
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                KC_LSFT,                KC_Z,                   KC_X,                   KC_C,                   KC_V,                   KC_B,                                   KC_LCTL,        KC_LALT,        KC_LBRC,        KC_RBRC,                        MO(5),                                                                  KC_SPC,                                         KC_MINS,        KC_EQL,                 KC_LGUI,        MO(4),
                KC_LCTL,                KC_LALT,        TO(0),                  KC_P,                   KC_H,                   KC_SPC
     ),
-       
+
                [3] = LAYOUT(
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_1,                           KC_2,                           KC_3,                           KC_4,                           KC_5,                                                           KC_6,                   KC_7,                   KC_8,                   KC_9,                   KC_0,                   KC_TRNS,
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,
@@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                        KC_TRNS,                                                                                                KC_TRNS,                        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS
     ),
-       
+
                [4] = LAYOUT(
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        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_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,
@@ -61,7 +61,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                        KC_TRNS,                                                                                                KC_TRNS,                        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS
     ),
-       
+
                [5] = LAYOUT(
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_GRV,                 KC_1,                           KC_2,                           KC_3,                           KC_4,                           KC_5,                                                           KC_TRNS,        KC_TRNS,        KC_UP,                  KC_TRNS,        KC_TRNS,        KC_DEL,
                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_CAPS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                                KC_TRNS,        KC_LEFT,        KC_DOWN,        KC_RGHT,        KC_SCLN,        KC_BSLS,
@@ -96,14 +96,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
 void matrix_init_user(void) {
   // set CapsLock LED to output and low
-  DDRC |= (1 << 6);
-  PORTC &= ~(1 << 6);
+  setPinOutput(C6);
+  writePinHigh(C6);
   // set NumLock LED to output and low
-  DDRB |= (1 << 6);
-  PORTB &= ~(1 << 6);
+  setPinOutput(B6);
+  writePinHigh(B6);
   // set ScrollLock LED to output and low
-  DDRB |= (1 << 5);
-  PORTB &= ~(1 << 5);
+  setPinOutput(B5);
+  writePinHigh(B5);
 }
 
 void matrix_scan_user(void) {
@@ -112,21 +112,21 @@ void matrix_scan_user(void) {
 
 
 void led_set_user(uint8_t usb_led) {
-  if (usb_led & (1<<USB_LED_NUM_LOCK)) {
-    PORTB |= (1<<6);
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    writePinHigh(B6);
   } else {
-    PORTB &= ~(1<<6);
+    writePinLow(B6);
   }
-  if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
-    PORTB |= (1<<5);
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinHigh(B5);
   } else {
-    PORTB &= ~(1<<5);
+    writePinLow(B5);
   }
   /*
-  if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
-    PORTC |= (1<<6);
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinHigh(C6);
   } else {
-    PORTC &= ~(1<<6);
+    writePinLow(C6);
   }
   */
 }
@@ -135,9 +135,9 @@ void led_set_user(uint8_t usb_led) {
 uint32_t layer_state_set_user(uint32_t state)
 {
     if (biton32(state) == 2) {
-        PORTC |= (1<<6);
+    writePinHigh(C6);
        } else {
-               PORTC &= ~(1<<6);
+               writePinLow(C6);
     }
     return state;
 }
diff --git a/keyboards/handwired/prime_exl/keymaps/via/keymap.c b/keyboards/handwired/prime_exl/keymaps/via/keymap.c
new file mode 100644 (file)
index 0000000..c01c247
--- /dev/null
@@ -0,0 +1,101 @@
+/* Copyright 2018 Holten Campbell
+ *
+ * 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] = {
+    LAYOUT(
+               KC_NLCK,        KC_LPRN,        KC_RPRN,        KC_PSLS,        KC_PAST,        KC_BSPC,                                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_F1,          KC_F2,          KC_P7,          KC_P8,          KC_P9,          KC_DEL,                                 KC_TAB,                 KC_A,                   KC_S,                   KC_D,                   KC_F,           KC_G,                                           KC_H,                   KC_J,                   KC_K,                   KC_L,                           KC_QUOT,        KC_ENT,
+               KC_F3,          KC_F4,          KC_P4,          KC_P5,          KC_P6,          KC_PMNS,                                KC_LSFT,        KC_Z,                   KC_X,                   KC_C,                   KC_V,           KC_B,                                           MO(3),          KC_N,                   KC_M,           KC_COMM,        KC_DOT,         KC_SLSH,        KC_LSFT,
+               KC_F5,          KC_F6,          KC_P1,          KC_P2,          KC_P3,          KC_PPLS,                                KC_LCTL,        KC_LALT,        KC_LBRC,        KC_RBRC,                        MO(2),                                                                  KC_SPC,                                         KC_MINS,        KC_EQL,                         KC_LGUI,        MO(3),
+               KC_F7,          KC_F8,          MO(1),          KC_PDOT,        KC_P0,          KC_PENT
+    ),
+
+       LAYOUT(
+               KC_ESC,         KC_1,           KC_2,           KC_3,           KC_4,           KC_F9,                                  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_Q,           KC_W,           KC_E,           KC_R,           KC_T,                                   KC_TAB,         KC_A,           KC_S,           KC_D,                   KC_F,           KC_G,                                           KC_H,           KC_J,           KC_K,           KC_L,           KC_QUOT,        KC_ENT,
+               KC_TAB,         KC_A,           KC_S,           KC_D,           KC_F,           KC_G,                                   KC_LSFT,        KC_Z,           KC_X,           KC_C,                   KC_V,           KC_B,                                           MO(3),          KC_N,           KC_M,           KC_COMM,        KC_DOT,         KC_SLSH,        KC_LSFT,
+               KC_LSFT,        KC_Z,           KC_X,           KC_C,           KC_V,           KC_B,                                   KC_LCTL,        KC_LALT,        KC_LBRC,        KC_RBRC,                MO(2),                                                                  KC_SPC,                                 KC_MINS,        KC_EQL,         KC_LGUI,        MO(3),
+               KC_LCTL,        KC_LALT,        TO(0),          KC_P,           KC_H,           KC_SPC
+    ),
+
+       LAYOUT(
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_GRV,                 KC_1,                           KC_2,                           KC_3,                           KC_4,                           KC_5,                                                           KC_TRNS,        KC_TRNS,        KC_UP,                  KC_TRNS,        KC_TRNS,        KC_DEL,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_CAPS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                                KC_TRNS,        KC_LEFT,        KC_DOWN,        KC_RGHT,        KC_SCLN,        KC_BSLS,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                                KC_TRNS,        KC_TRNS,        KC_TRNS,                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                        KC_TRNS,                                                                                                KC_TRNS,                        KC_VOLD,                KC_VOLU,        KC_MUTE,        KC_TRNS,
+               BL_TOGG,        BL_STEP,                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS
+    ),
+
+       LAYOUT(
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_1,                           KC_2,                           KC_3,                           KC_4,                           KC_5,                                                           KC_6,                   KC_7,                   KC_8,                   KC_9,                   KC_0,                   KC_TRNS,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                                KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,
+               KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,        KC_TRNS,                                KC_TRNS,                KC_TRNS,                KC_TRNS,                KC_TRNS,                                        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 matrix_init_user(void) {
+  // set CapsLock LED to output and low
+  setPinOutput(C6);
+  writePinHigh(C6);
+  // set NumLock LED to output and low
+  setPinOutput(B6);
+  writePinHigh(B6);
+  // set ScrollLock LED to output and low
+  setPinOutput(B5);
+  writePinHigh(B5);
+}
+
+void matrix_scan_user(void) {
+
+}
+
+
+void led_set_user(uint8_t usb_led) {
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    writePinHigh(B6);
+  } else {
+    writePinLow(B6);
+  }
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinHigh(B5);
+  } else {
+    writePinLow(B5);
+  }
+  /*
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinHigh(C6);
+  } else {
+    writePinLow(C6);
+  }
+  */
+}
+
+//function for layer indicator LED
+uint32_t layer_state_set_user(uint32_t state)
+{
+    if (biton32(state) == 2) {
+    writePinHigh(C6);
+       } else {
+               writePinLow(C6);
+    }
+    return state;
+}
diff --git a/keyboards/handwired/prime_exl/keymaps/via/readme.md b/keyboards/handwired/prime_exl/keymaps/via/readme.md
new file mode 100644 (file)
index 0000000..c2278bd
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for prime_exl
\ No newline at end of file
diff --git a/keyboards/handwired/prime_exl/keymaps/via/rules.mk b/keyboards/handwired/prime_exl/keymaps/via/rules.mk
new file mode 100644 (file)
index 0000000..e726a8a
--- /dev/null
@@ -0,0 +1,86 @@
+# 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 = 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 = yes       # 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)
+
+# This is the VIA magic
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+SRC += keyboards/wilba_tech/wt_main.c
+
index d088f6ad11ea1cdadc9d9f7aebd40c54b2f72ef5..bae606ffbf5ecba82a18f6e2dacf71da24978baf 100644 (file)
@@ -14,7 +14,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include "prime_exl.h"
-
+/*
 void matrix_init_kb(void) {
        // put your keyboard start-up code here
        // runs once when the firmware starts up
@@ -41,3 +41,4 @@ void led_set_kb(uint8_t usb_led) {
 
        led_set_user(usb_led);
 }
+*/
\ No newline at end of file
index 727db5db8da7c765436c194cee7d7b291d1a4321..03524da3c2a6d79903083ec1876eed2ef0ca6da3 100644 (file)
@@ -13,8 +13,8 @@
  * 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 PRIME_EXL_H
-#define PRIME_EXL_H
+//#ifndef PRIME_EXL_H
+//#define PRIME_EXL_H
 
 #include "quantum.h"
 
@@ -37,4 +37,4 @@
        { K090,  K091,  K092,  KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }  \
 }
 
-#endif
\ No newline at end of file
+//#endif
\ No newline at end of file
diff --git a/keyboards/handwired/splittest/config.h b/keyboards/handwired/splittest/config.h
new file mode 100644 (file)
index 0000000..9e4fb38
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xCB10
+#define PRODUCT_ID      0x1111
+#define DEVICE_VER      0x0100
+#define MANUFACTURER    Keebio
+#define PRODUCT         Split Tester
+#define DESCRIPTION     Split keyboard testing unit
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 1
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B3 }
+#define MATRIX_COL_PINS { B6 }
+#define SPLIT_HAND_PIN F6
+#define SOFT_SERIAL_PIN D1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLED_SPLIT { 6, 6 }
+
+/*
+ * 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/splittest/keymaps/default/config.h b/keyboards/handwired/splittest/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..ecebd36
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+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_I2C
diff --git a/keyboards/handwired/splittest/keymaps/default/keymap.c b/keyboards/handwired/splittest/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..1c15f6f
--- /dev/null
@@ -0,0 +1,5 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [0] = LAYOUT(RGB_MOD, RESET)
+};
diff --git a/keyboards/handwired/splittest/readme.md b/keyboards/handwired/splittest/readme.md
new file mode 100644 (file)
index 0000000..3dbff32
--- /dev/null
@@ -0,0 +1,26 @@
+Split Tester
+============
+
+A two-switch tester built using two Pro Micros, mainly intended to test RGB on split keyboards. Seen here: https://www.instagram.com/p/BvCPNzynwrV/
+
+Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)  
+Hardware Supported: Pro Micro   
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/splittest:default
+
+Example of flashing this keyboard:
+
+    make handwired/splittest:default:avrdude
+
+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).
+
+Wiring
+------
+- Add switches to both Pro Micros across B3 and B6 pins
+- Add pull-up resistor to left side between VCC and F6
+- Add pull-down resistors to right side between GND and F6
+- Connect the following pins on both sides together: D0, D1, GND, VCC
+- Add I2C 4.7kOhm resistors between D0 and VCC, and D1 and VCC
+- Wire Di of RGB strip for each half to D2
diff --git a/keyboards/handwired/splittest/rules.mk b/keyboards/handwired/splittest/rules.mk
new file mode 100644 (file)
index 0000000..9512c0f
--- /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)
+
+# 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
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = 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.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/handwired/splittest/splittest.c b/keyboards/handwired/splittest/splittest.c
new file mode 100644 (file)
index 0000000..3c919a5
--- /dev/null
@@ -0,0 +1 @@
+#include "splittest.h"
diff --git a/keyboards/handwired/splittest/splittest.h b/keyboards/handwired/splittest/splittest.h
new file mode 100644 (file)
index 0000000..17b7081
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT(L1, R1) {{L1}, {R1}}
diff --git a/keyboards/handwired/terminus_mini/info.json b/keyboards/handwired/terminus_mini/info.json
new file mode 100644 (file)
index 0000000..9271b41
--- /dev/null
@@ -0,0 +1,59 @@
+{
+  "keyboard_name": "handwired/terminus_mini",
+  "url": "",
+  "maintainer": "qmk",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT": {
+      "layout": [
+        {"label":"Tab", "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":"Del", "x":11, "y":0},
+        {"label":"Backspace", "x":0, "y":1},
+        {"label":"A", "x":1, "y":1},
+        {"label":"S", "x":2, "y":1},
+        {"label":"D", "x":3, "y":1},
+        {"label":"F", "x":4, "y":1},
+        {"label":"G", "x":5, "y":1},
+        {"label":"H", "x":6, "y":1},
+        {"label":"J", "x":7, "y":1},
+        {"label":"K", "x":8, "y":1},
+        {"label":"L", "x":9, "y":1},
+        {"label":";", "x":10, "y":1},
+        {"label":"'", "x":11, "y":1},
+        {"label":"Left Shift / (", "x":0, "y":2},
+        {"label":"Z", "x":1, "y":2},
+        {"label":"X", "x":2, "y":2},
+        {"label":"C", "x":3, "y":2},
+        {"label":"V", "x":4, "y":2},
+        {"label":"B", "x":5, "y":2},
+        {"label":"N", "x":6, "y":2},
+        {"label":"M", "x":7, "y":2},
+        {"label":",", "x":8, "y":2},
+        {"label":".", "x":9, "y":2},
+        {"label":"/", "x":10, "y":2},
+        {"label":"Right Shift / )", "x":11, "y":2},
+        {"label":"LCtrl", "x":0, "y":3},
+        {"label":"GUI", "x":1, "y":3},
+        {"label":"Lower", "x":2, "y":3},
+        {"label":"LAlt", "x":3, "y":3},
+        {"label":"Space / Lower", "x":4, "y":3, "w":2},
+        {"label":"Enter / Raise", "x":6, "y":3, "w":2},
+        {"label":"MO(_FUNCTION)", "x":8, "y":3},
+        {"label":"MO(_MOUSE)", "x":9, "y":3},
+        {"label":"App", "x":10, "y":3},
+        {"label":"RCtrl", "x":11, "y":3}
+      ]
+    }
+  }
+}
index 34ef6720746d0d204825ff78b05baa63c2b4e498..4817be2527560e5dbd7b2aaf149c9eec44085baf 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#define TAPPING_TERM 150 //reduce time required to register a held key
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
 
-#endif
+#define TAPPING_TERM 150 //reduce time required to register a held key
index 8d9cc1b0082b215b8ccbf0d64e56262f82c8cfb8..276475873ae860c6ba92bbe5dac82dbea05d9c3c 100644 (file)
  * 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 "terminus_mini.h"
-#include "action_layer.h"
-#ifdef AUDIO_ENABLE
-  #include "audio.h"
-#endif
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
 
 extern keymap_config_t keymap_config;
 
@@ -45,20 +40,14 @@ enum terminus_mini_keycodes {
   LOWER,
   RAISE,
   FUNCTION,
-  MOUSE
-};
-
-enum custom_macros {
+  MOUSE,
+  // Custom Macros
   R_PIPE,
   R_POINT
 };
 
 #define SPC_LW LT(_LOWER, KC_SPC)
 #define ENT_RS LT(_RAISE, KC_ENT)
-#define FNC MO(_FUNCTION)
-#define MSE MO(_MOUSE)
-#define PIPE M(R_PIPE)
-#define POINT M(R_POINT)
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* Colemak -
@@ -73,10 +62,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `----------------------------------------------------------------------------------'
  */
 [_COLEMAK] = LAYOUT(
-  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,      KC_Y,    KC_SCLN, KC_DEL , \
-  KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,      KC_I,    KC_O,    KC_QUOT, \
-  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM,   KC_DOT,  KC_SLSH, KC_RSPC, \
-  KC_LCTL, KC_LGUI, LOWER,   KC_LALT,     SPC_LW,           ENT_RS,       FNC,       MSE,     KC_APP,  KC_RCTL \
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_DEL,  \
+  KC_BSPC, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
+  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC, \
+  KC_LCTL, KC_LGUI, LOWER,   KC_LALT,     SPC_LW,           ENT_RS,       MO(5),   MO(6),   KC_APP,  KC_RCTL  \
   ),
 
 /* QWERTY -
@@ -91,10 +80,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `----------------------------------------------------------------------------------'
  */
 [_QWERTY] = LAYOUT(
-  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_BSPC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,      KC_L,    KC_SCLN, KC_QUOT, \
-  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM,   KC_DOT,  KC_SLSH, KC_RSPC, \
-  KC_LCTL, KC_LGUI, LOWER,   KC_LALT,     SPC_LW,           ENT_RS,       FNC,       MSE,     KC_APP,  KC_RCTL \
+  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_BSPC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSPO, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSPC, \
+  KC_LCTL, KC_LGUI, LOWER,   KC_LALT,     SPC_LW,           ENT_RS,       MO(5),   MO(6),   KC_APP,  KC_RCTL  \
   ),
 
 /* Dvorak
@@ -109,10 +98,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 [_DVORAK] = LAYOUT(
-  KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL, \
+  KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL,  \
   KC_BSPC, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
   KC_LSPO, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSPC, \
-  KC_LCTL, KC_LGUI, LOWER,   KC_LALT,      SPC_LW,          ENT_RS,       FNC,     MSE,     KC_APP,  KC_RCTL \
+  KC_LCTL, KC_LGUI, LOWER,   KC_LALT,     SPC_LW,           ENT_RS,       MO(5),   MO(6),   KC_APP,  KC_RCTL  \
 ),
 
 /* Lower
@@ -129,10 +118,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 
 [_LOWER] = LAYOUT(
-  KC_TAB,  KC_PGUP,  KC_HOME,  KC_UP,    KC_END,   KC_PSLS,  KC_7,  KC_8,  KC_9,   KC_PAST,  XXXXXXX, _______, \
-  _______, KC_PGDN,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_MINS,  KC_4,  KC_5,  KC_6,   KC_PPLS,  XXXXXXX, _______, \
-  _______, _______,  _______,  _______,  _______,  KC_EQL,   KC_1,  KC_2,  KC_3,   KC_PENT,  XXXXXXX, _______, \
-  _______, _______,  _______,  _______,       _______,       KC_0,       KC_DOT,   FNC,      RAISE,   _______ \
+  KC_TAB,  KC_PGUP, KC_HOME, KC_UP,   KC_END,  KC_PSLS, KC_7,    KC_8,    KC_9,    KC_PAST, XXXXXXX, _______, \
+  _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_MINS, KC_4,    KC_5,    KC_6,    KC_PPLS, XXXXXXX, _______, \
+  _______, _______, _______, _______, _______, KC_EQL,  KC_1,    KC_2,    KC_3,    KC_PENT, XXXXXXX, _______, \
+  _______, _______, _______, _______,     _______,          KC_0,         KC_DOT,  MO(5),   RAISE,   _______  \
 ),
 
 /* Raise
@@ -148,10 +137,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   */
 
 [_RAISE] = LAYOUT(
-   KC_ESC,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,   KC_PERC, KC_CIRC,  KC_AMPR, KC_ASTR, KC_MINS, KC_EQL,  _______, \
-   _______, KC_1,    KC_2,    KC_3,    KC_4,     KC_5,    KC_6,     KC_7,    KC_8,    KC_9,    KC_0,    _______, \
-   _______, POINT,   PIPE,    KC_LCBR, KC_LBRC,  KC_GRV,  KC_BSLS,  KC_RBRC, KC_RCBR, KC_DOT,  KC_SLSH, _______, \
-   _______, _______, XXXXXXX, _______,        SPC_LW,            ENT_RS,     FNC,     MSE,     _______, _______ \
+  KC_ESC,  KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_EQL,  _______, \
+  _______, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, \
+  _______, R_POINT, R_PIPE,  KC_LCBR, KC_LBRC, KC_GRV,  KC_BSLS, KC_RBRC, KC_RCBR, KC_DOT,  KC_SLSH, _______, \
+  _______, _______, XXXXXXX, _______,     SPC_LW,           ENT_RS,       MO(5),   MO(6),   _______, _______  \
    ),
 
 /*Function
@@ -166,11 +155,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 
-[_FUNCTION] = LAYOUT( 
-  _______, KC_MUTE, KC_VOLD, KC_VOLU,  XXXXXXX, XXXXXXX, XXXXXXX,  KC_F1,  KC_F2,   KC_F3,   KC_F4,   KC_INS , \
-  KC_CAPS, KC_MSTP, KC_MPRV, KC_MPLY,  KC_MNXT, XXXXXXX, XXXXXXX,  KC_F5,  KC_F6,   KC_F7,   KC_F8,   KC_PSCR, \
-  _______, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX,  KC_F9,  KC_F10,  KC_F11,  KC_F12,  KC_SLCK, \
-  _______, _______, XXXXXXX, _______,         _______,        _______,     _______, XXXXXXX, XXXXXXX, KC_PAUS \
+[_FUNCTION] = LAYOUT(
+  _______, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_INS,  \
+  KC_CAPS, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_PSCR, \
+  _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_SLCK, \
+  _______, _______, XXXXXXX, _______,     _______,          _______,      _______, XXXXXXX, XXXXXXX, KC_PAUS  \
   ),
 
 /* MOUSE
@@ -186,10 +175,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 
 [_MOUSE] = LAYOUT(
-   KC_ESC,  KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R,  XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4,  KC_BTN5, XXXXXXX, XXXXXXX, \
-   KC_BSPC, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R,  XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2,  XXXXXXX, XXXXXXX, XXXXXXX, \
-   _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, KC_RSPC, \
-   _______, XXXXXXX, XXXXXXX, XXXXXXX,      KC_ACL2,           KC_ACL0,     XXXXXXX,  MSE,     XXXXXXX, KC_RCTL \
+  KC_ESC,  KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX, XXXXXXX, \
+  KC_BSPC, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, \
+  _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RSPC, \
+  _______, XXXXXXX, XXXXXXX, XXXXXXX,     KC_ACL2,          KC_ACL0,      XXXXXXX, MO(6),   XXXXXXX, KC_RCTL  \
   ),
 
 /* Adjust (Lower + Raise)
@@ -205,10 +194,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 
 [_ADJUST] = LAYOUT(
-  _______, _______, _______, _______, _______, RESET,   _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, \
-  _______, _______, _______, _______, _______, _______, _______, QWERTY,  COLEMAK, DVORAK, _______,  _______, \
-  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-  _______, _______, _______, _______,      _______,          _______,     _______, _______, _______, _______ \
+  _______, _______, _______, _______, _______, RESET,   _______, TERM_ON, TERM_OFF, _______, _______, KC_DEL,  \
+  _______, _______, _______, _______, _______, _______, _______, QWERTY,  COLEMAK,  DVORAK,  _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______, \
+  _______, _______, _______, _______,     _______,          _______,      _______, _______, _______,  _______  \
 )
 
 };
@@ -218,27 +207,6 @@ void persistant_default_layer_set(uint16_t default_layer) {
   default_layer_set(default_layer);
 }
 
-// Macros to send R pointer & dplyr pipe
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-    switch(id) {
-      //R Pointer: <-
-        case R_POINT:
-            if (record->event.pressed) { // pointer
-                SEND_STRING("<- ");
-//                return MACRO(D(LSFT), T(COMM), U(LSFT), T(MINS), END);
-            }
-            break;
-      //dplyr pipe: %>%
-        case R_PIPE:
-            if (record->event.pressed) { // dplyr pipe
-                SEND_STRING("%>% ");
-//                return MACRO(D(LSFT), T(5), T(DOT), T(5), U(LSFT), END);
-            }
-            break;
-    }
-    return MACRO_NONE;
-}
-
 // Cases to switch default layer to QWERTY, COLEMAK or DVORAK and to access ADJUST layer
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   switch (keycode) {
@@ -253,13 +221,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
         set_single_persistent_default_layer(_COLEMAK);
       }
       return false;
-      break; 
+      break;
     case DVORAK:
       if (record->event.pressed) {
         set_single_persistent_default_layer(_DVORAK);
       }
       return false;
-      break; 
+      break;
     case LOWER:
       if (record->event.pressed) {
         layer_on(_LOWER);
@@ -280,6 +248,21 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
       }
       return false;
       break;
+    // Macros to send R pointer & dplyr pipe
+    //R Pointer: <-
+    case R_POINT:
+      if (record->event.pressed) { // pointer
+        SEND_STRING("<- ");
+        //return MACRO(D(LSFT), T(COMM), U(LSFT), T(MINS), END);
+      }
+      break;
+    //dplyr pipe: %>%
+    case R_PIPE:
+      if (record->event.pressed) { // dplyr pipe
+        SEND_STRING("%>% ");
+        //return MACRO(D(LSFT), T(5), T(DOT), T(5), U(LSFT), END);
+      }
+      break;
   }
   return true;
 }
index 5f0271bb40b186675fcf76f851506076202e5c74..a5fc8eee61f085b9555a6f574f5a1e5bbd1c5175 100644 (file)
@@ -1,13 +1,12 @@
 # terminus_mini handwired
 
-Custom handwired keyboard.
+Custom handwired keyboard inspired by the UniKeyboard Terminus Mini 2.
 
 Keyboard Maintainer: [James Morgan](https://github.com/mogranjm)  
-Hardware Supported: Custom handwired keyboard    
-Hardware Availability: 
+Hardware Supported: Custom handwired keyboard  
 
 Make example for this keyboard (after setting up your build environment):
 
     make handwired/terminus_mini: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.
\ No newline at end of file
+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 846c98e2c08776b4f30289a2761f47655923e271..27fb45098150b1ab0ffafc8e15d35f7d8d3486ff 100644 (file)
 // 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, 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, 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, k06,       k07, k08, k09, k0a, k0b }, \
-       { k10, k11, k12, k13, k14,       k15, k16,       k17, k18, k19, k1a, k1b }, \
-       { k20, k21, k22, k23, k24,       k25, k26,       k27, k28, k29, k2a, k2b }, \
-       { k30, k31, k32, k33, KC_NO, k35, KC_NO, k37, k38, k39, k3a, k3b } \
+  { k00, k01, k02, k03, k04,   k05, k06,   k07, k08, k09, k0a, k0b }, \
+  { k10, k11, k12, k13, k14,   k15, k16,   k17, k18, k19, k1a, k1b }, \
+  { k20, k21, k22, k23, k24,   k25, k26,   k27, k28, k29, k2a, k2b }, \
+  { k30, k31, k32, k33, KC_NO, k35, KC_NO, k37, k38, k39, k3a, k3b }  \
 }
 
 #define KC_ KC_TRNS
diff --git a/keyboards/handwired/trackpoint/README.md b/keyboards/handwired/trackpoint/README.md
deleted file mode 100644 (file)
index bbfcaab..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# IBM Trackpoint demonstration
-
-This is just a simple demo to show how to integrate IBM Trackpoint in QMK.
-
-Wiring used in the demonstration:
-![Wiring example](http://imgur.com/8ghG2U8)
-
-Some documentation:
-* [How to wire IBM Trackpoint](https://github.com/alonswartz/trackpoint)
-* [QMK documentation](https://docs.qmk.fm/)
index 22ec75f761d4c1de4fefdd728c2ed984544f1d99..cecb6a50945951b692c581d86692be99d0e6c404 100644 (file)
@@ -1,70 +1,67 @@
-#ifndef CONFIG_H
-    #define CONFIG_H
+#pragma once
 
-    #include "config_common.h"
+#include "config_common.h"
 
-    #define VENDOR_ID       0x1234
-    #define PRODUCT_ID      0x5678
-    #define DEVICE_VER      0x0001
-    #define MANUFACTURER    QMK
-    #define PRODUCT         TRACKPOINT-DEMO
-    #define DESCRIPTION     Simple demonstration for IBM Trackpoint integration
+#define VENDOR_ID       0x1234
+#define PRODUCT_ID      0x5678
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    QMK
+#define PRODUCT         TRACKPOINT-DEMO
+#define DESCRIPTION     Simple demonstration for IBM Trackpoint integration
 
-    #define MATRIX_ROWS 1
-    #define MATRIX_COLS 3
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 3
 
-    #ifdef PS2_USE_USART
-        #define PS2_CLOCK_PORT  PORTD
-        #define PS2_CLOCK_PIN   PIND
-        #define PS2_CLOCK_DDR   DDRD
-        #define PS2_CLOCK_BIT   5
-        #define PS2_DATA_PORT   PORTD
-        #define PS2_DATA_PIN    PIND
-        #define PS2_DATA_DDR    DDRD
-        #define PS2_DATA_BIT    2
+#ifdef PS2_USE_USART
+    #define PS2_CLOCK_PORT  PORTD
+    #define PS2_CLOCK_PIN   PIND
+    #define PS2_CLOCK_DDR   DDRD
+    #define PS2_CLOCK_BIT   5
+    #define PS2_DATA_PORT   PORTD
+    #define PS2_DATA_PIN    PIND
+    #define PS2_DATA_DDR    DDRD
+    #define PS2_DATA_BIT    2
 
-        /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
-        /* set DDR of CLOCK as input to be slave */
-        #define PS2_USART_INIT() do {   \
-            PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);   \
-            PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);     \
-            UCSR1C = ((1 << UMSEL10) |  \
-                      (3 << UPM10)   |  \
-                      (0 << USBS1)   |  \
-                      (3 << UCSZ10)  |  \
-                      (0 << UCPOL1));   \
-            UCSR1A = 0;                 \
-            UBRR1H = 0;                 \
-            UBRR1L = 0;                 \
-        } while (0)
-        #define PS2_USART_RX_INT_ON() do {  \
-            UCSR1B = ((1 << RXCIE1) |       \
-                      (1 << RXEN1));        \
-        } while (0)
-        #define PS2_USART_RX_POLL_ON() do { \
-            UCSR1B = (1 << RXEN1);          \
-        } while (0)
-        #define PS2_USART_OFF() do {    \
-            UCSR1C = 0;                 \
-            UCSR1B &= ~((1 << RXEN1) |  \
-                        (1 << TXEN1));  \
-        } while (0)
-        #define PS2_USART_RX_READY      (UCSR1A & (1<<RXC1))
-        #define PS2_USART_RX_DATA       UDR1
-        #define PS2_USART_ERROR         (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
-        #define PS2_USART_RX_VECT       USART1_RX_vect
-    #endif
-
-    #define MATRIX_COL_PINS { F1, F4, F5 }
-    #define MATRIX_ROW_PINS { F0 }
-    #define UNUSED_PINS
+    /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
+    /* set DDR of CLOCK as input to be slave */
+    #define PS2_USART_INIT() do {   \
+        PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT);   \
+        PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT);     \
+        UCSR1C = ((1 << UMSEL10) |  \
+                  (3 << UPM10)   |  \
+                  (0 << USBS1)   |  \
+                  (3 << UCSZ10)  |  \
+                  (0 << UCPOL1));   \
+        UCSR1A = 0;                 \
+        UBRR1H = 0;                 \
+        UBRR1L = 0;                 \
+    } while (0)
+    #define PS2_USART_RX_INT_ON() do {  \
+        UCSR1B = ((1 << RXCIE1) |       \
+                  (1 << RXEN1));        \
+    } while (0)
+    #define PS2_USART_RX_POLL_ON() do { \
+        UCSR1B = (1 << RXEN1);          \
+    } while (0)
+    #define PS2_USART_OFF() do {    \
+        UCSR1C = 0;                 \
+        UCSR1B &= ~((1 << RXEN1) |  \
+                    (1 << TXEN1));  \
+    } while (0)
+    #define PS2_USART_RX_READY      (UCSR1A & (1<<RXC1))
+    #define PS2_USART_RX_DATA       UDR1
+    #define PS2_USART_ERROR         (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
+    #define PS2_USART_RX_VECT       USART1_RX_vect
+#endif
 
-    /* COL2ROW or ROW2COL */
-    #define DIODE_DIRECTION COL2ROW
+#define MATRIX_COL_PINS { F1, F4, F5 }
+#define MATRIX_ROW_PINS { F0 }
+#define UNUSED_PINS
 
-    #define DEBOUNCING_DELAY 5
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
 
-    #define LOCKING_SUPPORT_ENABLE
-    #define LOCKING_RESYNC_ENABLE
+#define DEBOUNCING_DELAY 5
 
-#endif
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
index 22e46d98a7c3ff39ee1dab671b08cce84d086139..60da300924eda249c38a0353e0d50762dc70b27c 100644 (file)
@@ -1,7 +1,7 @@
-#include "trackpoint.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-    [0] = KEYMAP(
+    [0] = LAYOUT(
         KC_BTN1,    KC_BTN3,    KC_BTN2 \
     )
 };
diff --git a/keyboards/handwired/trackpoint/readme.md b/keyboards/handwired/trackpoint/readme.md
new file mode 100644 (file)
index 0000000..e1302fb
--- /dev/null
@@ -0,0 +1,19 @@
+# IBM Trackpoint demonstration
+
+This is just a simple demo to show how to integrate IBM Trackpoint in QMK.
+
+Wiring used in the demonstration:  
+![Wiring example](https://i.imgur.com/8ghG2U8.png)
+
+Some documentation:
+
+- [How to wire IBM Trackpoint](https://github.com/alonswartz/trackpoint)
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)  
+Hardware Supported: Teensy  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/trackpoint: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 b5d73d7db5f0bc05137c1fd23655becba148481f..a26000d521ad63610000205f44f8ea5c12a27b52 100644 (file)
@@ -1,13 +1,10 @@
-#ifndef TRACKPOINT_H
-#define TRACKPOINT_H
+#pragma once
 
 #include "quantum.h"
 
-#define KEYMAP( \
-       k00, k01, k02  \
+#define LAYOUT( \
+  k00, k01, k02  \
 ) \
 { \
-       { k00, k01, k02} \
+  { k00, k01, k02} \
 }
-
-#endif
index 1b1038fd79fdd8cb1615ba55f8847925f16d2bb0..44f65f4b81216750bbdc056dfd568b0a5c77fc05 100644 (file)
@@ -1,6 +1,5 @@
-#include "traveller.h"
+#include QMK_KEYBOARD_H
 #include "mousekey.h"
-#include "action_layer.h"
 
 // Each layer gets a name for readability, which is then used in the keymap matrix below.
 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -9,7 +8,7 @@
 #define _HI 2
 #define _NAV 4
 #define _CUR 5
-#define _FKEYS 6 
+#define _FKEYS 6
 #define _TRNS 8
 
 // We do the same trick for functions
@@ -20,7 +19,7 @@
 #define  MDL 4
 #define  MDR 5
 #define  MUR 6
-#define  MUL 3 
+#define  MUL 3
 
 
 
@@ -35,9 +34,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
  * | Shift|   Z  | Del  | GUI  | Low  | Bspc |/Enter| Spc  | Hi   | GUI  | Alt  |  /   |Shift |
  * `------------------------------------------------------------------------------------------'
- * 
+ *
  */
-[_QW] = KEYMAP( 
+[_QW] = KEYMAP(
   TG(_NAV),         KC_GRV, KC_W,    KC_E,    KC_R,    KC_T,             KC_Y,    KC_U,    KC_I,    KC_O,    KC_MINS,  KC_EQL,
   KC_TAB,           KC_Q,    KC_S,    KC_D,    KC_F,    KC_G,            KC_H,    KC_J,    KC_K,    KC_L,    KC_P,  KC_BSLS,
   CTL_T(KC_ESC),    KC_A,    KC_X,    KC_C,    KC_V,    KC_B,    KC_RCTL,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SCLN,   KC_QUOT,
@@ -45,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  ),
 
 /* LOW  - numbers, missing or awkward programming keys
- Doubled 1 key allows lazy reach with ring finger. 
+ Doubled 1 key allows lazy reach with ring finger.
  * ,-----------------------------------------.      .-----------------------------------------.
  * | FKeys|   1  |   2  |  3   |   4  |   5  |      |  6   |  7   |   8  |   9  |   0  |Ctrl-alt-del|
  * |------+------+------+------+------+------|      +------+------+------+------+------+------|
@@ -55,18 +54,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
  * | Shift|      |      |      | Low  |      |/     |      |  Hi  |      |      |      |Shift |
  * `------------------------------------------------------------------------------------------'
- * 
+ *
  */
 
-[_LW] = KEYMAP( 
+[_LW] = KEYMAP(
   TG(_FKEYS),  KC_1,     KC_2,      KC_3,     KC_4,    KC_5,             KC_6,    KC_7,       KC_8,      KC_9,    KC_0,  LCTL(LALT(KC_DEL)) ,
   KC_TRNS,  KC_1,     KC_RBRC,   KC_LPRN,  KC_RPRN, KC_NO,               KC_ASTR, KC_LPRN,    KC_RPRN,    KC_LBRC,    KC_NO, KC_NO,
   KC_CAPS,   KC_LBRC,  KC_NO,     KC_LCBR,  KC_RCBR, KC_TILD,   KC_TRNS,  KC_HASH, KC_LCBR,    KC_RCBR,   KC_NO,    KC_RBRC,   KC_NO,
   KC_TRNS,  KC_TRNS,  KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS,    KC_TRNS,   KC_TRNS,  KC_TRNS,  KC_TRNS
 ),
 
-/* HI - Punctuation, shell and 
-url ://@.com  row on bottom,    && is opposite ||       ^$ are in regex order: ^.*$    
+/* HI - Punctuation, shell and
+url ://@.com  row on bottom,    && is opposite ||       ^$ are in regex order: ^.*$
 Right hand nav keys work pretty well chorded with the Right hand Hi Key
  * ,-----------------------------------------.      .-----------------------------------------.
  * |FKEYS |   !  |   @  |   #  |   $  |   %  |      |  ^   |   &  |   *  |   (  |   )  |   +  |
@@ -77,19 +76,19 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
  * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
  * |      |   /  |      |      | Low  |      |/     |      |  Hi  | PgDn | Left| Down | Right |
  * `------------------------------------------------------------------------------------------'
- * 
+ *
  */
 
-[_HI] = KEYMAP( 
+[_HI] = KEYMAP(
  TG(_FKEYS),KC_EXLM,  KC_AT,   KC_HASH,  KC_DLR,   KC_PERC,           KC_CIRC,  KC_AMPR,    KC_ASTR,   KC_LPRN,  KC_RPRN,  KC_PLUS,
- KC_TRNS, KC_EXLM,  KC_AMPR, KC_PIPE,  KC_DLR,   KC_PERC,             KC_VOLU, KC_MUTE,    KC_NO,     KC_NO,    KC_NO,    KC_NO, 
+ KC_TRNS, KC_EXLM,  KC_AMPR, KC_PIPE,  KC_DLR,   KC_PERC,             KC_VOLU, KC_MUTE,    KC_NO,     KC_NO,    KC_NO,    KC_NO,
  KC_CAPS, KC_CIRC,  KC_COLN,  KC_DOT,  KC_ASTR,  KC_MINS,   KC_TRNS,  KC_VOLD, KC_PPLS,    KC_PGUP,   KC_HOME,  KC_UP,    KC_END,
- KC_TRNS, KC_SLSH,  KC_TRNS,  KC_TRNS, TT(_LW),  KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,    KC_PGDN,   KC_LEFT,  KC_DOWN,  KC_RIGHT 
-),  
+ KC_TRNS, KC_SLSH,  KC_TRNS,  KC_TRNS, TT(_LW),  KC_TRNS,   KC_TRNS,  KC_TRNS, KC_TRNS,    KC_PGDN,   KC_LEFT,  KC_DOWN,  KC_RIGHT
+),
 
 /* NAV - mouse &  navigation
 //gui left and right are line home/end, or fore & back in browser
-// Mouse buttons are reversed for comfort - bigger stretch is to the right button. 
+// Mouse buttons are reversed for comfort - bigger stretch is to the right button.
 
  * ,-----------------------------------------.      .-----------------------------------------.
 * | NAV  |      |      | Up   |      |Gui-> |      | MwU  | MS_UL| MS_U |MS_UR |      |Ms Norm|
@@ -102,7 +101,7 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
 * `------------------------------------------------------------------------------------------'
 */
 
-[_NAV] = KEYMAP( 
+[_NAV] = KEYMAP(
   TG(_NAV), KC_NO,         KC_NO,    KC_UP,       KC_NO,     RGUI(KC_RIGHT),            KC_WH_U,  M(MUL), KC_MS_U,   M(MUR), KC_NO, KC_ACL2,
   KC_TRNS, RGUI(KC_LEFT),  KC_LEFT,  KC_DOWN,     KC_RIGHT,  LCTL(KC_E),                KC_BTN3,  KC_MS_L,  KC_MS_U,   KC_MS_R,  KC_NO, KC_ACL1,
   KC_TRNS, LCTL(KC_A),     LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO,         KC_ENTER,   KC_WH_D,  M(MDL), KC_MS_D,  M(MDR),  KC_UP, KC_ACL0,
@@ -111,7 +110,7 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
 
 /* FKEYS - Funtion keys & mac stuff
  * ,-----------------------------------------.      .-----------------------------------------.
- * | FKEYS| F1   | F2   | F3   |  F4  | F5   |      | F6   | F7   | F8   | F9   | F10  | Ctrl | 
+ * | FKEYS| F1   | F2   | F3   |  F4  | F5   |      | F6   | F7   | F8   | F9   | F10  | Ctrl |
  * |------+------+------+------+------+------|      |------+------+------+------+------+------|
  * |      |      |      |      |      |      |      |  F11 | F12  |  F13 | F14  |  F15 | Alt  |
  * |------+------+------+------+------+------|------+------+------+------+------+------+------|
@@ -120,9 +119,9 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
  * |    . |RGBTog|  .   |      | LO   | Bspc |/     |      | HI   |      |      |      |      |
  * `------------------------------------------------------------------------------------------'
  *
- */ 
-[_FKEYS] = KEYMAP( 
+ */
+
+[_FKEYS] = KEYMAP(
   TG(_FKEYS),KC_F1,    KC_F2,   KC_F3,      KC_F4,     KC_F5,               KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,    KC_RCTL,
   KC_TRNS,   KC_NO,    KC_NO,   KC_NO,      KC_NO,     KC_NO,               KC_F11,   KC_F12,   KC_F13,    KC_F14,  KC_F15,    KC_LALT ,
   TO(_QW),  KC_NO,     KC_NO,   KC_NO,      KC_NO,     KC_NO,    KC_TRNS,   KC_NO,    KC_NO,    KC_NO,      KC_NO,   KC_NO,    KC_DEL,
@@ -140,7 +139,7 @@ Right hand nav keys work pretty well chorded with the Right hand Hi Key
  * |------+------+------+------+------+------+  //  +------+------+------+------+------+------|
  * |    . |   .  |  .   | GUI  |  LO  |   .  |/     | Spc  |  HI  | GUI  |  M0  |  /   |LSFT |
  * `------------------------------------------------------------------------------------------'
- * 
+ *
  */
 
 [_TRNS] = {
@@ -226,12 +225,12 @@ void LayerLEDSet(uint8_t layr) {
         break;
         case _LW:
             // deep purple
-            rgblight_setrgb(20,0,35); 
-            break;  
+            rgblight_setrgb(20,0,35);
+            break;
         case _HI:
             // light blue
-           rgblight_setrgb(0,20,20); 
-            break;    
+           rgblight_setrgb(0,20,20);
+            break;
         case _NAV:
             // Yellowy orange
             rgblight_setrgb(25,20,0); // brighter
@@ -239,14 +238,14 @@ void LayerLEDSet(uint8_t layr) {
         case _FKEYS:
          // RED
            rgblight_setrgb(20,0,0); // brighter
-            break;  
+            break;
         default:
             rgblight_setrgb(20,2,20);//error
             break;
     }
+
  return;
-  
+
 }
 
 void matrix_init_user(void) {
@@ -271,5 +270,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 void led_set_user(uint8_t usb_led) {
 
 }
-
-
index f52a97bbc8653a337e8c17f4e292273151f5bbec..a72596783dd10f3b70864252c12d69f59e8cc0ef 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 724230e45033a16d79fb3f5ad551641fa958f9ba..838c14ead553bf30d334a150d1558b5a6f7c75c7 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "woodpad.h"
+#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.
@@ -86,7 +86,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
                        layer_off(_ADJUST);
                }
                numlock_down = false;
-         } 
+         }
       return false;
       break;
          case KC_LALT:
diff --git a/keyboards/hecomi/alpha/info.json b/keyboards/hecomi/alpha/info.json
new file mode 100644 (file)
index 0000000..49c8d4c
--- /dev/null
@@ -0,0 +1,364 @@
+{
+  "keyboard_name": "hecomi/alpha",
+  "url": "https://skyhigh-works.hatenablog.com/entry/2019/02/25/221959",
+  "maintainer": "takashiski",
+  "width": 16.25,
+  "height": 5,
+  "key_count": 69,
+  "layouts": {
+    "LAYOUT": {
+      "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": 8.25,
+          "y": 0
+        },
+        {
+          "label": "*",
+          "x": 9.25,
+          "y": 0
+        },
+        {
+          "label": "(",
+          "x": 10.25,
+          "y": 0
+        },
+        {
+          "label": ")",
+          "x": 11.25,
+          "y": 0
+        },
+        {
+          "label": "_",
+          "x": 12.25,
+          "y": 0
+        },
+        {
+          "label": "+",
+          "x": 13.25,
+          "y": 0
+        },
+        {
+          "label": "|",
+          "x": 14.25,
+          "y": 0
+        },
+        {
+          "label": "~",
+          "x": 15.25,
+          "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": "Y",
+          "x": 7.75,
+          "y": 1
+        },
+        {
+          "label": "U",
+          "x": 8.75,
+          "y": 1
+        },
+        {
+          "label": "I",
+          "x": 9.75,
+          "y": 1
+        },
+        {
+          "label": "O",
+          "x": 10.75,
+          "y": 1
+        },
+        {
+          "label": "P",
+          "x": 11.75,
+          "y": 1
+        },
+        {
+          "label": "{",
+          "x": 12.75,
+          "y": 1
+        },
+        {
+          "label": "}",
+          "x": 13.75,
+          "y": 1
+        },
+        {
+          "label": "Delete",
+          "x": 14.75,
+          "y": 1,
+          "w": 1.5
+        },
+        {
+          "label": "Control",
+          "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": 8,
+          "y": 2
+        },
+        {
+          "label": "J",
+          "x": 9,
+          "y": 2
+        },
+        {
+          "label": "K",
+          "x": 10,
+          "y": 2
+        },
+        {
+          "label": "L",
+          "x": 11,
+          "y": 2
+        },
+        {
+          "label": ":",
+          "x": 12,
+          "y": 2
+        },
+        {
+          "label": "\"",
+          "x": 13,
+          "y": 2
+        },
+        {
+          "label": "Return",
+          "x": 14,
+          "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": "B",
+          "x": 7.5,
+          "y": 3
+        },
+        {
+          "label": "N",
+          "x": 8.5,
+          "y": 3
+        },
+        {
+          "label": "M",
+          "x": 9.5,
+          "y": 3
+        },
+        {
+          "label": "<",
+          "x": 10.5,
+          "y": 3
+        },
+        {
+          "label": ">",
+          "x": 11.5,
+          "y": 3
+        },
+        {
+          "label": "?",
+          "x": 12.5,
+          "y": 3
+        },
+        {
+          "label": "Shift",
+          "x": 13.5,
+          "y": 3,
+          "w": 1.75
+        },
+        {
+          "label": "Fn",
+          "x": 15.25,
+          "y": 3
+        },
+        {
+          "x": 0,
+          "y": 4,
+          "w": 1.5
+        },
+        {
+          "label": "",
+          "x": 1.5,
+          "y": 4
+        },
+        {
+          "label": "GUI",
+          "x": 2.5,
+          "y": 4
+        },
+        {
+          "label": "無変換",
+          "x": 3.5,
+          "y": 4
+        },
+        {
+          "label": "tab",
+          "x": 4.5,
+          "y": 4
+        },
+        {
+          "x": 5.5,
+          "y": 4
+        },
+        {
+          "label": "Enter",
+          "x": 7.75,
+          "y": 4
+        },
+        {
+          "label": "BS",
+          "x": 8.75,
+          "y": 4
+        },
+        {
+          "label": "変換",
+          "x": 9.75,
+          "y": 4
+        },
+        {
+          "label": "GUI",
+          "x": 10.75,
+          "y": 4
+        },
+        {
+          "label": "Menu",
+          "x": 11.75,
+          "y": 4
+        },
+        {
+          "label": "",
+          "x": 12.75,
+          "y": 4
+        }
+      ]
+    }
+  }
+}
index 7ac7569f8475ce8217270b5b2d2aba03e2556ed4..5b316245c304251dfeafdb44102db2ec873705eb 100644 (file)
@@ -1,6 +1,6 @@
 # hecomi_alpha
 
-![hecomi_alpha](imgur.com image replace me!)
+![hecomi_alpha](https://imgur.com/a/5AwQw0r)
 
 This keyboard based on HHKB pro 2 and physical layout designed by @hecomi and @takashiski.
 
@@ -12,6 +12,10 @@ Hardware Availability: booth(@skyhigh_works)
 
 Make example for this keyboard (after setting up your build environment):
 
-    make hecomi_alpha:default
+    make hecomi/alpha: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).
+
+and build guide is here.
+
+[build guide](https://skyhigh-works.hatenablog.com/entry/2019/02/25/221959)
diff --git a/keyboards/hecomi/info.json b/keyboards/hecomi/info.json
deleted file mode 100644 (file)
index e69de29..0000000
index 299d9037a8a8a04256b62f8d968b4ab58c9f8fef..25bddb7df27e277567e17a3694f954872092bf94 100644 (file)
@@ -14,7 +14,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include QMK_KEYBOARD_H
-#include "hecomi.h"
 
 // Defines the keycodes used by our macros in process_record_user
 enum custom_keycodes {
index 20dfc9f9858cd40607f289a771722c2b8b3c2f4b..7653185198bc08968f7de5d0de2c79cc42141299 100644 (file)
@@ -18,8 +18,7 @@ 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
+#pragma once
 
 // place overrides here
 
@@ -42,5 +41,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
    //#define RGBLIGHT_EFFECT_RGB_TEST
    //#define RGBLIGHT_EFFECT_ALTERNATING
 #endif
-
-#endif /* CONFIG_USER_H */
index d95925d4e45a50cf25f55ace29ca62153bfcb829..0f81f5f7bea3000b6325bd6002f84596a8a4be9c 100644 (file)
@@ -18,8 +18,9 @@ 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
+#pragma once
+
+// place overrides here
 
 /* Use I2C or Serial, not both */
 
@@ -31,5 +32,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MASTER_LEFT
 // #define _MASTER_RIGHT
 // #define EE_HANDS
-
-#endif
index ed376757942f8e6e351cf03a380b8e4ae9ad8203..b8c1041cdc7bdd17dd0f556f6340a658c24717dd 100644 (file)
@@ -18,8 +18,7 @@ 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
+#pragma once
 
 // place overrides here
 
@@ -37,5 +36,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
    //#define RGBLIGHT_EFFECT_RGB_TEST
    //#define RGBLIGHT_EFFECT_ALTERNATING
 #endif
-
-#endif /* CONFIG_USER_H */
index 769988cdb5809bcbdff0d9302408591bce59a036..cd0568f61e39ca4428106ccc5a778a659feb34e3 100644 (file)
@@ -1,21 +1,23 @@
 #ifndef CONFIG_USER_H
 #define CONFIG_USER_H
 
+#define SWAP_SCLN
+
 #undef TAPPING_FORCE_HOLD
 #undef TAPPING_TERM
-#define TAPPING_TERM 120
-#define SWAP_SCLN
+#define TAPPING_TERM 300
+#define IGNORE_MOD_TAP_INTERRUPT
 
 // If you need more program area, try select and reduce rgblight modes to use.
 
 // Selection of RGBLIGHT MODE to use.
 #if defined(LED_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_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
index fd324a859ae5f257c0f94ebd2d3e016931890528..9fba5072c40eb009f2a784d3fefffe96fac5f1dd 100644 (file)
@@ -7,21 +7,6 @@
 
 // keymaps definitions are moved to keymap_Xrows.c.
 
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-  switch(keycode) {
-    case KC_LOCK:
-      if (record->event.pressed) {
-        if (get_enable_kc_lang()) {
-          SEND_STRING( SS_LCTRL(SS_LSFT(SS_TAP(X_POWER))) );
-        } else {
-          SEND_STRING( SS_LGUI("l") );
-        }
-      }
-      return false;
-  }
-  return true;
-}
-
 #ifdef SSD1306OLED
 void matrix_init_keymap(void) {
   //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
@@ -37,23 +22,15 @@ void matrix_scan_user(void) {
 uint32_t layer_state_set_keymap(uint32_t state) {
   rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
   switch (biton32(state)) {
-    case _EDVORAKJ1:
-    case _EDVORAKJ2:
-      // _EDVORAKJ1 & J2 are same colored
-      rgblight_sethsv_noeeprom_white();
-      break;
     case _LOWER:
       rgblight_sethsv_noeeprom_red();
       break;
     case _RAISE:
       rgblight_sethsv_noeeprom_blue();
       break;
-    case _ADJUST:
-      rgblight_sethsv_noeeprom_green();
-      break;
     default: //  for any other layers, or the default layer
-      rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
-      rgblight_sethsv_noeeprom_red();
+      rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
+      rgblight_sethsv_red();
       break;
   }
   return state;
index 805e6b17b752f5613019bdd114cd80efdc3a59e7..f2befc03b584111e3005d9875110dd4f3141d869 100644 (file)
@@ -4,86 +4,38 @@
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_EDVORAK] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-     LBRC,RBRC,COMM,DOT , Y  , P  ,                F  , G  , R  , W  , Q  ,BSLS,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     EQL , A  , O  , E  , I  , U  ,                D  , T  , N  , S  , M  ,MINS,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     QUOT,SCLN, X  , C  , V  , Z  ,                B  , H  , J  , K  , L  ,SLSH,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     LEFT,DOWN, UP ,RGHT,TMB1,TMB2,TMB3,     TMB6,TMB7,TMB8,LEFT,DOWN, UP ,RGHT
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_EDVORAKJ1] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         , AI , OU , EI ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                   ,    ,    , Y  ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_EDVORAKJ2] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         , AI , OU , EI ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                   , Y  ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_QWERTY] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-     EQL , Q  , W  , E  , R  , T  ,                Y  , U  , I  , O  , P  ,MINS,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     LBRC, A  , S  , D  , F  , G  ,                H  , J  , K  , L  ,SCLN,QUOT,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     RBRC, Z  , X  , C  , V  , B  ,                N  , M  ,COMM,DOT ,SLSH,BSLS,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
+  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
+     GRV ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     ESC ,SCLN,  X  ,  C  ,  V  , Z  ,             H  ,  J  ,  K  ,  L  , B  ,SLSH,
+  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
+     HOME,PGDN,PGUP , END ,TMB1 ,TMB2,TMB3,  TMB4,TMB5,TMB6 ,LEFT ,DOWN , UP ,RGHT
+  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
   ),
 
   [_LOWER] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-      F1 , F2 , F3 , F4 , F5 ,LCBR,               RCBR, 7  , 8  , 9  ,MINS,SLSH,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-      F6 , F7 , F8 , F9 ,F10 ,LPRN,               RPRN, 4  , 5  , 6  ,PLUS,ASTR,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     F11 ,F12 ,PSCR,SLCK,PAUS,LBRC,               RBRC, 1  , 2  , 3  , NO , NO ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     HOME,PGDN,PGUP,END ,    ,    ,    ,         ,ESC , 0  ,HOME,PGDN,PGUP,END
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
+  //,----+----+------+------+------+----.           ,----+------+------+-------+----+----.
+         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+     PSCR,    , HOME , PGDN , PGUP ,END ,            LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
+  //|----+----+------+------+------+----+----. ,----+----+------+------+-------+----+----|
+         ,    ,      ,      ,      ,    , NO ,  MAC ,TMB7,      ,      ,       ,    ,
+  //`----+----+------+------+------+----+----/ \----+----+------+------+-------+----+----'
   ),
 
   [_RAISE] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-      F1 , F2 , F3 , F4 , F5 , F6 ,                F7 , F8 , F9 ,F10 ,F11 ,F12 ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     TILD,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN, NO ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     GRV , 1  , 2  , 3  , 4  , 5  ,                6  , 7  , 8  , 9  , 0  , NO ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     HOME,PGDN,PGUP,END ,TMB9,ESC ,    ,         ,    ,    ,HOME,PGDN,PGUP,END
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_ADJUST] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,   ,EXTOFF,   ,                   ,EXTON,   ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,RST ,DBUG,RTOG,WIN ,    ,                   ,MAC ,QWER,EDJP,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
+  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
+         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     PSCR,    ,HOME ,PGDN ,PGUP ,END ,            LEFT,DOWN , UP  ,RGHT ,    ,    ,
+  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
+         ,    ,     ,     ,     ,    ,WIN ,   NO ,    ,     ,     ,     ,    ,
+  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
   )
 };
index ef1b9d358c6a9f2dfd6cafb86d8eb0d427e101f7..642ba8c635b4b88d7389c3ea8a5d6bf414b1f588 100644 (file)
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_EDVORAK] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-     GRV ,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     LBRC,RBRC,COMM,DOT , Y  , P  ,                F  , G  , R  , W  , Q  ,BSLS,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     EQL , A  , O  , E  , I  , U  ,                D  , T  , N  , S  , M  ,MINS,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     QUOT,SCLN, X  , C  , V  , Z  ,TMB4,     TMB5, B  , H  , J  , K  , L  ,SLSH,
-  //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
-     LEFT,DOWN, UP ,RGHT,TMB1,TMB2,TMB3,     TMB6,TMB7,TMB8,LEFT,DOWN, UP ,RGHT
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_EDVORAKJ1] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         , AI , OU , EI ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                   ,    ,    , Y  ,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,    ,         ,    ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_EDVORAKJ2] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         , AI , OU , EI ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                   , Y  ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,    ,         ,    ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_QWERTY] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-     GRV ,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     EQL , Q  , W  , E  , R  , T  ,                Y  , U  , I  , O  , P  ,MINS,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     LBRC, A  , S  , D  , F  , G  ,                H  , J  , K  , L  ,SCLN,QUOT,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     RBRC, Z  , X  , C  , V  , B  ,    ,         , N  , M  ,COMM,DOT ,SLSH,BSLS,
-  //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
+  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
+     ESC ,EXLM, AT  ,HASH , DLR ,PERC,            CIRC,AMPR ,ASTR ,LPRN ,RPRN,BSPC,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     GRV ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
+  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
+     TAB ,SCLN,  X  ,  C  ,  V  , Z  , NO ,   NO , H  ,  J  ,  K  ,  L  , B  ,SLSH,
+  //|----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----|
+     HOME,PGDN,PGUP , END ,TMB1 ,TMB2,TMB3,  TMB4,TMB5,TMB6 ,LEFT ,DOWN , UP ,RGHT
+  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
   ),
 
   [_LOWER] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,SLSH,ASTR,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-      F1 , F2 , F3 , F4 , F5 ,LCBR,               RCBR, 7  , 8  , 9  ,MINS,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-      F6 , F7 , F8 , F9 ,F10 ,LPRN,               RPRN, 4  , 5  , 6  ,PLUS,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     F11 ,F12 ,PSCR,SLCK,PAUS,LBRC,LOCK,         ,RBRC, 1  , 2  , 3  ,    ,    ,
-  //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
-     HOME,PGDN,PGUP,END ,TMB9,    ,    ,         ,    , 0  ,HOME,PGDN,PGUP,END
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
+  //,----+----+------+------+------+----.           ,----+------+------+-------+----+----.
+     PSCR,    ,      ,      ,      ,    ,                ,      ,      ,       ,    ,    ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
+  //|----+----+------+------+------+----+----. ,----+----+------+------+-------+----+----|
+         ,    , HOME , PGDN , PGUP ,END ,    ,      ,LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
+  //|----+----+------+------+------+----+----| |----+----+------+------+-------+----+----|
+         ,    ,      ,      ,      ,    , NO ,  MAC ,TMB7,      ,      ,       ,    ,
+  //`----+----+------+------+------+----+----/ \----+----+------+------+-------+----+----'
   ),
 
   [_RAISE] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,SLSH,ASTR,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-      F1 , F2 , F3 , F4 , F5 ,LCBR,               RCBR, 7  , 8  , 9  ,MINS,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-      F6 , F7 , F8 , F9 ,F10 ,LPRN,               RPRN, 4  , 5  , 6  ,PLUS,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     F11 ,F12 ,PSCR,SLCK,PAUS,LBRC,LOCK,         ,RBRC, 1  , 2  , 3  ,    ,    ,
-  //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
-     HOME,PGDN,PGUP,END ,TMB9,    ,    ,         ,    , 0  ,HOME,PGDN,PGUP,END
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-  ),
-
-  [_ADJUST] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,   ,EXTOFF,   ,                   ,EXTON,   ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,RST ,DBUG,RTOG,WIN ,    ,                   ,MAC ,QWER,EDJP,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
+  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
+     PSCR,    ,     ,     ,     ,    ,                ,     ,     ,     ,    ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
+  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
+         ,    ,HOME ,PGDN ,PGUP ,END ,    ,      ,LEFT,DOWN , UP  ,RGHT ,    ,    ,
+  //|----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----|
+         ,    ,     ,     ,     ,    ,WIN ,   NO ,    ,     ,     ,     ,    ,
+  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
   )
 };
index 6a0e581024fb48daedf83c70a7ececcb0980ba6e..d9561d0b707f141b6e8766182805a37e29c0dff8 100644 (file)
@@ -2,27 +2,20 @@
 #define KEYMAP_XROWS_H
 
 #include "edvorakjp.h"
-
-enum custom_keycodes {
-  KC_LOCK = NEW_SAFE_RANGE,
-};
+/*
+ * enum custom_keycodes {
+ *   KC_LOCK = NEW_SAFE_RANGE,
+ * };
+ */
 
 #define KC_ KC_TRNS
 
-#define KC_TMB1 LGUI_T(KC_TAB)
-#define KC_TMB2 LSFT_T(KC_SPC)
-#define KC_TMB3 LOWER // act as LOWER when hold, as KC_LANG2(=English) when tapped
-#define KC_TMB4 LCTL_T(KC_ESC)
-#define KC_TMB5 RSFT_T(KC_DEL)
-#define KC_TMB6 RAISE // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
-#define KC_TMB7 RCTL_T(KC_BSPC)
-#define KC_TMB8 RALT_T(KC_ENT)
-#define KC_TMB9 LGUI(KC_TAB)
-
-#define KC_RST  RESET
-#define KC_DBUG DEBUG
-#define KC_RTOG RGB_TOG
-#define KC_EDJP EDVORAK
-#define KC_QWER QWERTY
+#define KC_TMB1 KC_LA(TAB)
+#define KC_TMB2 KC_LS(SPC)
+#define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
+#define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
+#define KC_TMB5 KC_RC(BSPC)
+#define KC_TMB6 KC_RG(ENT)
+#define KC_TMB7 KC_RC(DEL)
 
 #endif
index 227e2c56f82f947d1107c642dfc9198184457901..b931b72b7ccbe9cdaf365724564c4aaa4bd3387b 100644 (file)
@@ -34,13 +34,7 @@ void render_status(struct CharacterMatrix *matrix) {
   matrix_write_P(matrix, PSTR("\nLayer: "));
   switch (biton32(layer_state)) {
     case L_BASE:
-      matrix_write_P(matrix,
-          default_layer_state == 1UL<<_EDVORAK ? PSTR("EDVORAK") : PSTR("QWERTY")
-          );
-      break;
-    case _EDVORAKJ1:
-    case _EDVORAKJ2:
-      matrix_write_P(matrix, PSTR("JP_EXT"));
+      matrix_write_P(matrix, PSTR("Default"));
       break;
     case _RAISE:
       matrix_write_P(matrix, PSTR("Raise"));
@@ -48,17 +42,13 @@ void render_status(struct CharacterMatrix *matrix) {
     case _LOWER:
       matrix_write_P(matrix, PSTR("Lower"));
       break;
-    case _ADJUST:
-      matrix_write_P(matrix, PSTR("Adjust"));
-      break;
     default:
       matrix_write(matrix, buf);
   }
 
   // Host Keyboard LED Status
   char led[40];
-  snprintf(led, sizeof(led), "\n%s %s %s %s",
-      get_enable_jp_extra_layer() && get_japanese_mode() ? "EXT" : "   ",
+  snprintf(led, sizeof(led), "\n%s %s %s",
       (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : "    ",
       (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : "    ",
       (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : "    ");
index 9d3743995ac66911ec36621d8f8007155c9a1b30..4a96517eb98e614e9a3285be2d6bb0f987fa2cac 100644 (file)
@@ -15,6 +15,7 @@ UNICODE_ENABLE = no         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
 RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.
 SWAP_HANDS_ENABLE = no      # Enable one-hand typing
+TAP_DANCE_ENABLE = yes
 
 define HELIX_CUSTOMISE_MSG
   $(info Helix customize)
index 67d57d0622b5304aed7e4445d735bffd93be51ad..8140edc008b0c19e2ec8485336493f195af702b8 100755 (executable)
@@ -14,7 +14,7 @@
  * 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 "hid_liber.h"
+#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.
diff --git a/keyboards/hifumi/config.h b/keyboards/hifumi/config.h
new file mode 100644 (file)
index 0000000..dccb035
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+Copyright 2019 zk-phi
+
+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      0x3060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    riconken
+#define PRODUCT         hifumi
+#define DESCRIPTION     A macropad with 6 keys
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 3
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D4, C6 }
+#define MATRIX_COL_PINS { F4, F5, F6 }
+#define UNUSED_PINS
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLED_NUM 6
+#define RGBLIGHT_LIMIT_VAL 255
+#define RGBLIGHT_HUE_STEP 5
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/hifumi/hifumi.h b/keyboards/hifumi/hifumi.h
new file mode 100644 (file)
index 0000000..389ce20
--- /dev/null
@@ -0,0 +1,31 @@
+/* Copyright 2019 zk-phi
+ *
+ * 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
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+    k00, k01, k02, \
+    k10, k11, k12 \
+) \
+{ \
+    { k00, k01, k02 }, \
+    { k10, k11, k12 } \
+}
diff --git a/keyboards/hifumi/info.json b/keyboards/hifumi/info.json
new file mode 100644 (file)
index 0000000..2466838
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "keyboard_name": "hifumi",
+  "url": "https://github.com/zk-phi/1x2x3-keyboard",
+  "maintainer": "riconken",
+  "width": 3,
+  "height": 2,
+  "layouts": {
+    "LAYOUT": {
+        "layout": [{"label":"F5", "x":0, "y":0}, {"label":"Up", "x":1, "y":0}, {"label":"PrSc", "x":2, "y":0}, {"label":"Left", "x":0, "y":1}, {"label":"Down", "x":1, "y":1}, {"label":"Right", "x":2, "y":1}]
+    }
+  }
+}
diff --git a/keyboards/hifumi/keymaps/default/keymap.c b/keyboards/hifumi/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..9a43303
--- /dev/null
@@ -0,0 +1,47 @@
+/* Copyright 2019 zk-phi
+ *
+ * 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
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+enum layers {
+    DEFAULT,
+    RAISE,
+    LOWER,
+    ADJUST
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [DEFAULT] = LAYOUT(
+        LT(RAISE, KC_F5), KC_UP,   LT(LOWER, KC_PSCR),
+        KC_LEFT,          KC_DOWN, KC_RIGHT
+    ),
+    [RAISE] = LAYOUT(
+        _______, KC_PGUP, MO(ADJUST),
+        KC_HOME, KC_PGDN, KC_END
+    ),
+    [LOWER] = LAYOUT(
+        MO(ADJUST), _______, _______,
+        _______,    _______, _______
+    ),
+    [ADJUST] = LAYOUT(
+        _______,        RGB_TOG,        _______,
+        RGB_MODE_SNAKE, RGB_MODE_PLAIN, RGB_HUI
+    )
+};
diff --git a/keyboards/hifumi/keymaps/test/keymap.c b/keyboards/hifumi/keymaps/test/keymap.c
new file mode 100644 (file)
index 0000000..7aec009
--- /dev/null
@@ -0,0 +1,32 @@
+/* Copyright 2019 zk-phi
+ *
+ * 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
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+enum layers {
+    DEFAULT
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [DEFAULT] = LAYOUT(
+        KC_1, KC_2, KC_3,
+        KC_A, KC_B, KC_C
+    )
+};
diff --git a/keyboards/hifumi/readme.md b/keyboards/hifumi/readme.md
new file mode 100644 (file)
index 0000000..2911c12
--- /dev/null
@@ -0,0 +1,13 @@
+# hifumi
+
+A macro pad with 6 keys.
+
+Keyboard Maintainer: riconken, [zk-phi](https://github.com/zk-phi)  
+Hardware Supported: hifumi PCB, Pro Micro   
+Hardware Availability: [PCB & Case Data](https://github.com/zk-phi/1x2x3-keyboard)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make hifumi: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/hifumi/rules.mk b/keyboards/hifumi/rules.mk
new file mode 100644 (file)
index 0000000..98560f0
--- /dev/null
@@ -0,0 +1,62 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# 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
+#   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
diff --git a/keyboards/hotdox/config.h b/keyboards/hotdox/config.h
new file mode 100644 (file)
index 0000000..ed15f4b
--- /dev/null
@@ -0,0 +1,78 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0xE11D
+
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Z.P.Z.O.
+#define PRODUCT         HotDox
+#define DESCRIPTION     QMK keyboard firmware for HotDox
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 14
+
+#define MOUSEKEY_INTERVAL       20
+#define MOUSEKEY_DELAY          0
+#define MOUSEKEY_TIME_TO_MAX    60
+#define MOUSEKEY_MAX_SPEED      7
+#define MOUSEKEY_WHEEL_DELAY    0
+
+#define TAPPING_TOGGLE  1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM    200
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#ifndef IS_COMMAND
+#define IS_COMMAND() ( \
+    get_mods() == MOD_MASK_CTRL || \
+    get_mods() == MOD_MASK_SHIFT   \
+)
+#endif
+
+#define BACKLIGHT_PIN B7
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define LED_BRIGHTNESS_LO       15
+#define LED_BRIGHTNESS_HI       255
+
+/* fix space cadet rollover issue */
+#define DISABLE_SPACE_CADET_ROLLOVER
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE    5
+
+#define USB_MAX_POWER_CONSUMPTION 500
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+//#define DEBUG_MATRIX_SCAN_RATE
+
diff --git a/keyboards/hotdox/hotdox.c b/keyboards/hotdox/hotdox.c
new file mode 100644 (file)
index 0000000..00af9ef
--- /dev/null
@@ -0,0 +1,44 @@
+#include "hotdox.h"
+#include "backlight.h"
+#include "quantum.h"
+
+extern inline void ergodox_board_led_on(void);
+extern inline void ergodox_right_led_1_on(void);
+extern inline void ergodox_right_led_2_on(void);
+extern inline void ergodox_right_led_3_on(void);
+
+extern inline void ergodox_board_led_off(void);
+extern inline void ergodox_right_led_1_off(void);
+extern inline void ergodox_right_led_2_off(void);
+extern inline void ergodox_right_led_3_off(void);
+
+extern inline void ergodox_led_all_on(void);
+extern inline void ergodox_led_all_off(void);
+
+void ergodox_led_init(void);
+void ergodox_blink_all_leds(void);
+
+void matrix_init_kb(void) {
+  ergodox_blink_all_leds();
+  matrix_init_user();
+}
+
+void ergodox_blink_all_leds(void)
+{
+    ergodox_led_all_off();
+    ergodox_led_all_set(LED_BRIGHTNESS_HI);
+    ergodox_right_led_1_on();
+    _delay_ms(50);
+    ergodox_right_led_2_on();
+    _delay_ms(50);
+    ergodox_right_led_3_on();
+    _delay_ms(50);
+    ergodox_right_led_1_off();
+    _delay_ms(50);
+    ergodox_right_led_2_off();
+    _delay_ms(50);
+    ergodox_right_led_3_off();
+    ergodox_led_all_on();
+    _delay_ms(333);
+    ergodox_led_all_off();
+}
diff --git a/keyboards/hotdox/hotdox.h b/keyboards/hotdox/hotdox.h
new file mode 100644 (file)
index 0000000..0eef4ea
--- /dev/null
@@ -0,0 +1,187 @@
+#pragma once
+
+#include "quantum.h"
+#include <stdint.h>
+#include <stdbool.h>
+
+#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
+#define CPU_16MHz       0x00
+
+void init_ergodox(void);
+
+inline void ergodox_board_led_on(void)    { DDRB |= (1<<PB7); PORTB |= (1<<PB7);  }
+inline void ergodox_right_led_1_on(void)  { DDRB |= (1<<PB5); PORTB &= ~(1<<PB5); }
+inline void ergodox_right_led_2_on(void)  { DDRB |= (1<<PB6); PORTB &= ~(1<<PB6); }
+inline void ergodox_right_led_3_on(void)  { DDRB |= (1<<PB4); PORTB &= ~(1<<PB4); }
+
+inline void ergodox_board_led_off(void)   { DDRB |= (1<<PB7); PORTB &= ~(1<<PB7); }
+inline void ergodox_right_led_1_off(void) { DDRB |= (1<<PB5); PORTB |= (1<<PB5);  }
+inline void ergodox_right_led_2_off(void) { DDRB |= (1<<PB6); PORTB |= (1<<PB6);  }
+inline void ergodox_right_led_3_off(void) { DDRB |= (1<<PB4); PORTB |= (1<<PB4);  }
+
+inline void ergodox_right_led_on(uint8_t l) {
+    switch (l) {
+         case 1:
+             ergodox_right_led_1_on();
+             break;
+         case 2:
+             ergodox_right_led_2_on();
+             break;
+         case 3:
+             ergodox_right_led_3_on();
+             break;
+         default:
+             break;
+        }
+}
+
+inline void ergodox_right_led_off(uint8_t l) {
+    switch (l) {
+         case 1:
+             ergodox_right_led_1_off();
+             break;
+         case 2:
+             ergodox_right_led_2_off();
+             break;
+         case 3:
+             ergodox_right_led_3_off();
+             break;
+         default:
+             break;
+        }
+}
+
+inline void ergodox_led_all_on(void) {
+    ergodox_board_led_on();
+    ergodox_right_led_1_on();
+    ergodox_right_led_2_on();
+    ergodox_right_led_3_on();
+}
+
+inline void ergodox_led_all_off(void) {
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+}
+
+inline void ergodox_right_led_1_set(uint8_t n)          {}
+inline void ergodox_right_led_2_set(uint8_t n)          {}
+inline void ergodox_right_led_3_set(uint8_t n)          {}
+inline void ergodox_right_led_set(uint8_t l, uint8_t n) {}
+inline void ergodox_led_all_set(uint8_t n)              {}
+
+void ergodox_blink_all_leds(void);
+
+/*
+ *   LEFT HAND: LINES 76-83
+ *  RIGHT HAND: LINES 85-92
+ */
+#define LAYOUT_ergodox(                                         \
+                                                                \
+    k00,k01,k02,k03,k04,k05,k06,                                \
+    k10,k11,k12,k13,k14,k15,k16,                                \
+    k20,k21,k22,k23,k24,k25,                                    \
+    k30,k31,k32,k33,k34,k35,k36,                                \
+    k40,k41,k42,k43,k44,                                        \
+                            k55,k56,                            \
+                                k54,                            \
+                        k51,k52,k53,                            \
+                                                                \
+        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
+        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
+            k28,k29,k2A,k2B,k2C,k2D,                            \
+        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
+                k49,k4A,k4B,k4C,k4D,                            \
+    k57,k58,                                                    \
+    k59,                                                        \
+    k5A,k5B,k5C )                                               \
+                                                                \
+   /* matrix positions */                                       \
+   {                                                            \
+    { k00,   k01, k02, k03, k04, k05,   k06,      k07,   k08,   k09, k0A, k0B, k0C, k0D    }, \
+    { k10,   k11, k12, k13, k14, k15,   k16,      k17,   k18,   k19, k1A, k1B, k1C, k1D    }, \
+    { k20,   k21, k22, k23, k24, k25,   KC_NO,    KC_NO, k28,   k29, k2A, k2B, k2C, k2D    }, \
+    { k30,   k31, k32, k33, k34, k35,   k36,      k37,   k38,   k39, k3A, k3B, k3C, k3D    }, \
+    { k40,   k41, k42, k43, k44, KC_NO, KC_NO,    KC_NO, KC_NO, k49, k4A, k4B, k4C, k4D    }, \
+    { KC_NO, k51, k52, k53, k54, k55,   k56,      k57,   k58,   k59, k5A, k5B, k5C, KC_NO  }  \
+   }
+
+/*
+ *   LEFT HAND: LINES 110-117
+ *  RIGHT HAND: LINES 119-126
+ */
+#define LAYOUT_ergodox_80(                                      \
+                                                                \
+    k00,k01,k02,k03,k04,k05,k06,                                \
+    k10,k11,k12,k13,k14,k15,k16,                                \
+    k20,k21,k22,k23,k24,k25,                                    \
+    k30,k31,k32,k33,k34,k35,k36,                                \
+    k40,k41,k42,k43,k44,                                        \
+                            k55,k56,                            \
+                        k45,k46,k54,                            \
+                        k53,k52,k51,                            \
+                                                                \
+        k07,k08,k09,k0A,k0B,k0C,k0D,                            \
+        k17,k18,k19,k1A,k1B,k1C,k1D,                            \
+            k28,k29,k2A,k2B,k2C,k2D,                            \
+        k37,k38,k39,k3A,k3B,k3C,k3D,                            \
+                k49,k4A,k4B,k4C,k4D,                            \
+    k57,k58,                                                    \
+    k59,k47,k48,                                                \
+    k5A,k5B,k5C )                                               \
+                                                                \
+   /* matrix positions */                                       \
+   {                                                            \
+    { k00,   k01, k02, k03, k04, k05, k06,      k07,   k08, k09, k0A, k0B, k0C, k0D    }, \
+    { k10,   k11, k12, k13, k14, k15, k16,      k17,   k18, k19, k1A, k1B, k1C, k1D    }, \
+    { k20,   k21, k22, k23, k24, k25, KC_NO,    KC_NO, k28, k29, k2A, k2B, k2C, k2D    }, \
+    { k30,   k31, k32, k33, k34, k35, k36,      k37,   k38, k39, k3A, k3B, k3C, k3D    }, \
+    { k40,   k41, k42, k43, k44, k45, k45,      k47,   k48, k49, k4A, k4B, k4C, k4D    }, \
+    { KC_NO, k51, k52, k53, k54, k55, k56,      k57,   k58, k59, k5A, k5B, k5C, KC_NO  }  \
+   }
+
+/*  ---------- LEFT HAND -----------       ---------- RIGHT HAND ---------- */
+#define LAYOUT_ergodox_pretty(                                                  \
+                                                                                \
+    L00,L01,L02,L03,L04,L05,L06,               R00,R01,R02,R03,R04,R05,R06,     \
+    L10,L11,L12,L13,L14,L15,L16,               R10,R11,R12,R13,R14,R15,R16,     \
+    L20,L21,L22,L23,L24,L25,                       R21,R22,R23,R24,R25,R26,     \
+    L30,L31,L32,L33,L34,L35,L36,               R30,R31,R32,R33,R34,R35,R36,     \
+    L40,L41,L42,L43,L44,                               R42,R43,R44,R45,R46,     \
+                            L55,L56,       R50,R51,                             \
+                                L54,       R52,                                 \
+                        L51,L52,L53,       R53,R54,R55 )                        \
+                                                                                \
+   /* matrix positions */                                                       \
+   {                                                                            \
+    {   L00,L01,L02,L03,L04,L05,L06,            R00,R01,R02,R03,R04,R05,R06  }, \
+    {   L10,L11,L12,L13,L14,L15,L16,            R10,R11,R12,R13,R14,R15,R16  }, \
+    {   L20,L21,L22,L23,L24,L25,KC_NO,        KC_NO,R21,R22,R23,R24,R25,R26  }, \
+    {   L30,L31,L32,L33,L34,L35,L36,            R30,R31,R32,R33,R34,R35,R36  }, \
+    { L40,L41,L42,L43,L44,KC_NO,KC_NO,    KC_NO,KC_NO,R42,R43,R44,R45,R46    }, \
+    { KC_NO,L51,L52,L53,L54,L55,L56,          R50,R51,R52,R53,R54,R55,KC_NO  }  \
+   }
+
+/*  ---------- LEFT HAND -----------       ---------- RIGHT HAND ---------- */
+#define LAYOUT_ergodox_pretty_80(                                              \
+                                                                               \
+    L00,L01,L02,L03,L04,L05,L06,               R00,R01,R02,R03,R04,R05,R06,    \
+    L10,L11,L12,L13,L14,L15,L16,               R10,R11,R12,R13,R14,R15,R16,    \
+    L20,L21,L22,L23,L24,L25,                       R21,R22,R23,R24,R25,R26,    \
+    L30,L31,L32,L33,L34,L35,L36,               R30,R31,R32,R33,R34,R35,R36,    \
+    L40,L41,L42,L43,L44,                               R42,R43,R44,R45,R46,    \
+                            L55,L56,       R50,R51,                            \
+                        L45,L46,L54,       R52,R40,R41,                        \
+                        L51,L52,L53,       R53,R54,R55 )                       \
+                                                                               \
+   /* matrix positions */                                                      \
+   {                                                                           \
+    {   L00,L01,L02,L03,L04,L05,L06,          R00,R01,R02,R03,R04,R05,R06   }, \
+    {   L10,L11,L12,L13,L14,L15,L16,          R10,R11,R12,R13,R14,R15,R16   }, \
+    {   L20,L21,L22,L23,L24,L25,KC_NO,      KC_NO,R21,R22,R23,R24,R25,R26   }, \
+    {   L30,L31,L32,L33,L34,L35,L36,          R30,R31,R32,R33,R34,R35,R36   }, \
+    {   L40,L41,L42,L43,L44,L45,L46,          R40,R41,R42,R43,R44,R45,R46   }, \
+    { KC_NO,L51,L52,L53,L54,L55,L56,          R50,R51,R52,R53,R54,R55,KC_NO }  \
+   }
+
diff --git a/keyboards/hotdox/info.json b/keyboards/hotdox/info.json
new file mode 100644 (file)
index 0000000..cdfcd99
--- /dev/null
@@ -0,0 +1,107 @@
+{
+    "keyboard_name": "HotDox",
+    "maintainer": "layne001365",
+    "width": 19.5,
+    "height": 9.375,
+
+    "layouts": {
+      "LAYOUT_ergodox": {
+
+          "layout": [
+            {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+            {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+            {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+            {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+                   {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+
+                                          {"x":6, "y":5}, {"x":7, "y":5},
+                                                          {"x":7, "y":6},
+            {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7},
+
+
+                       {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+              {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+                                            {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+              {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+                                                                  {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+
+            {"x":9, "y":5}, {"x":10, "y":5},
+            {"x":9, "y":6},
+            {"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
+          ]
+      },
+      "LAYOUT_ergodox_pretty": {
+          "layout": [
+            {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+            {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+
+            {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+            {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+
+            {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+            {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+
+            {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+            {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+
+                   {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+                                                                  {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+                                          {"x":6, "y":5}, {"x":7, "y":5},      {"x":9, "y":5}, {"x":10, "y":5},
+                                                          {"x":7, "y":6},      {"x":9, "y":6},
+            {"x":5, "y":6, "h":2}, {"x":6, "y":6, "h":2}, {"x":7, "y":7},      {"x":9, "y":7}, {"x":10, "y":6, "h":2}, {"x":11, "y":6, "h":2}
+          ]
+      },
+      "LAYOUT_ergodox_80": {
+
+        "layout": [
+          {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+          {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+          {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+          {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+                 {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+
+                                        {"x":6, "y":5}, {"x":7, "y":5},
+
+                        {"x":5, "y":6}, {"x":6, "y":6}, {"x":7, "y":6},
+                        {"x":5, "y":7}, {"x":6, "y":7}, {"x":7, "y":7},
+
+
+                        {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+                        {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+                                                      {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+                        {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+                                                                            {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+
+          {"x":9, "y":5}, {"x":10, "y":5},
+          {"x":9, "y":6}, {"x":10, "y":6}, {"x":11, "y":6},
+          {"x":9, "y":7}, {"x":10, "y":7}, {"x":11, "y":7}
+        ]
+    },
+      "LAYOUT_ergodox_pretty_80": {
+
+        "layout": [
+          {"x":0, "y":0.375, "w":1.5}, {"x":1.5, "y":0.375}, {"x":2.5, "y":0.125}, {"x":3.5, "y":0}, {"x":4.5, "y":0.125}, {"x":5.5, "y":0.25}, {"x":6.5, "y":0.25},
+          {"x":9.5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.375, "w":1.5},
+
+          {"x":0, "y":1.375, "w":1.5}, {"x":1.5, "y":1.375}, {"x":2.5, "y":1.125}, {"x":3.5, "y":1}, {"x":4.5, "y":1.125}, {"x":5.5, "y":1.25}, {"x":6.5, "y":1.25, "h":1.5},
+          {"x":9.5, "y":1.25, "h":1.5}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.375, "w":1.5},
+
+          {"x":0, "y":2.375, "w":1.5}, {"x":1.5, "y":2.375}, {"x":2.5, "y":2.125}, {"x":3.5, "y":2}, {"x":4.5, "y":2.125}, {"x":5.5, "y":2.25},
+          {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.375, "w":1.5},
+
+          {"x":0, "y":3.375, "w":1.5}, {"x":1.5, "y":3.375}, {"x":2.5, "y":3.125}, {"x":3.5, "y":3}, {"x":4.5, "y":3.125}, {"x":5.5, "y":3.25}, {"x":6.5, "y":2.75, "h":1.5},
+          {"x":9.5, "y":2.75, "h":1.5}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.375, "w":1.5},
+
+                 {"x":0.5, "y":4.375}, {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4}, {"x":4.5, "y":4.125},
+                                                                {"x":11.5, "y":4.125}, {"x":12.5, "y":4}, {"x":13.5, "y":4.125}, {"x":14.5, "y":4.375}, {"x":15.5, "y":4.375},
+
+                                        {"x":6, "y":5}, {"x":7, "y":5},      {"x":9, "y":5}, {"x":10, "y":5},
+                        {"x":5, "y":6}, {"x":6, "y":6}, {"x":7, "y":6},      {"x":9, "y":6}, {"x":10, "y":6}, {"x":11, "y":6},
+                        {"x":5, "y":7}, {"x":6, "y":7}, {"x":7, "y":7},      {"x":9, "y":7}, {"x":10, "y":7}, {"x":11, "y":7}
+        ]
+    }
+  }
+}
diff --git a/keyboards/hotdox/keymaps/default/keymap.c b/keyboards/hotdox/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..0ec7b35
--- /dev/null
@@ -0,0 +1,189 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+  VRSN = SAFE_RANGE,
+  RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |   =    |   1  |   2  |   3  |   4  |   5  | LEFT |           | RIGHT|   6  |   7  |   8  |   9  |   0  |   -    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   \    |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | BkSp   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper|           | Meh  |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |Grv/L1|  '"  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Home |       | PgUp |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | End  |       | PgDn |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox(  // layer 0 : default
+        // left hand
+        KC_EQL,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   KC_LEFT,
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   TG(SYMB),
+        KC_BSPC,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LSFT,        CTL_T(KC_Z),  KC_X,   KC_C,   KC_V,   KC_B,   ALL_T(KC_NO),
+        LT(SYMB,KC_GRV),KC_QUOT,      LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+                                              ALT_T(KC_APP),  KC_LGUI,
+                                                              KC_HOME,
+                                               KC_SPC,KC_BSPC,KC_END,
+        // right hand
+             KC_RGHT,     KC_6,   KC_7,  KC_8,   KC_9,   KC_0,             KC_MINS,
+             TG(SYMB),    KC_Y,   KC_U,  KC_I,   KC_O,   KC_P,             KC_BSLS,
+                          KC_H,   KC_J,  KC_K,   KC_L,   LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+             MEH_T(KC_NO),KC_N,   KC_M,  KC_COMM,KC_DOT, CTL_T(KC_SLSH),   KC_RSFT,
+                                  KC_UP, KC_DOWN,KC_LBRC,KC_RBRC,          KC_FN1,
+             KC_LALT,        CTL_T(KC_ESC),
+             KC_PGUP,
+             KC_PGDN,KC_TAB,KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------.           ,--------------------------------------------------.
+ * |Version  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |---------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
+ * |         |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `---------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ * | EEP_RST  |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `-----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |Animat|      |       |Toggle|Solid |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |Bright|Bright|      |       |      |Hue-  |Hue+  |
+ *                                 |ness- |ness+ |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+       // left hand
+       VRSN,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       EEP_RST,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       RGB_MOD,KC_TRNS,
+                                               KC_TRNS,
+                               RGB_VAD,RGB_VAI,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       RGB_TOG, RGB_SLD,
+       KC_TRNS,
+       KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // dynamically generate these.
+    case VRSN:
+      if (record->event.pressed) {
+        SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+      }
+      return false;
+      break;
+    case RGB_SLD:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          rgblight_mode(1);
+        #endif
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_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/hotdox/keymaps/eozaki/keymap.c b/keyboards/hotdox/keymaps/eozaki/keymap.c
new file mode 100644 (file)
index 0000000..dc80e7a
--- /dev/null
@@ -0,0 +1,192 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+  PLACEHOLDER = SAFE_RANGE, // can always be here
+  VRSN,
+  RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Esc    |   1  |   2  |   3  |   4  |   5  |  ~   |           |  '   |   6  |   7  |   8  |   9  |   0  |   =    |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Del    |   Q  |   W  |   E  |   R  |   T  |  ~   |           |  "   |   Y  |   U  |   I  |   O  |   P  |   -    |
+ * |--------+------+------+------+------+------|  `   |           |      |------+------+------+------+------+--------|
+ * | Ctrl   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;   |    \   |
+ * |--------+------+------+------+------+------|  {   |           |  }   |------+------+------+------+------+--------|
+ * | LAlt   |   Z  |   X  |   C  |   V  |   B  |  [   |           |  ]   |   N  |   M  |   ,  |   .  |  /   | LShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   | LT-1 |  F4  |  F5  |  F6  |  F11 |                                       | Left | Down |  Up  | Right|  RAlt  |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |  L1  | Prev |       | Vol+ |  L2  |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |      | Play |       | Vol- |        |      |
+ *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
+ *                                 |      |ace   | Next |       | Mute |        |      |
+ *                                 `--------------------'       `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox(  // layer 0 : default
+        // left hand
+        KC_ESC,         KC_1,         KC_2,   KC_3,   KC_4,   KC_5,   LSFT(KC_GRV),
+        KC_DELT,        KC_Q,         KC_W,   KC_E,   KC_R,   KC_T,   KC_GRV,
+        KC_LCTL,        KC_A,         KC_S,   KC_D,   KC_F,   KC_G,
+        KC_LALT,        KC_Z,         KC_X,   KC_C,   KC_V,   KC_B,   KC_LBRC,
+        LT(SYMB, KC_F2),       KC_F4,        KC_F5,  KC_F6,  KC_F11,
+                                                   TG(SYMB),  KC_MPRV,
+                                                              KC_MPLY,
+                                               KC_SPC,KC_BSPC,KC_MNXT,
+        // right hand
+             KC_QUOT,         KC_6,   KC_7,   KC_8,   KC_9,   KC_0,             KC_EQL,
+             LSFT(KC_QUOT),  KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,             KC_MINS,
+                              KC_H,   KC_J,   KC_K,   KC_L,   LT(MDIA, KC_SCLN),KC_BSLS,
+             KC_RBRC,         KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,          KC_LSFT,
+                              KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,KC_RALT,
+             KC_VOLU,        TG(MDIA),
+             KC_VOLD,
+             KC_MUTE,KC_TAB, KC_ENT
+    ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------.           ,--------------------------------------------------.
+ * |Version  |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
+ * |---------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
+ * |         |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
+ * `---------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ * | EEP_RST |      |      |      |      |                                       |      |    . |   0  |   =  |      |
+ *   `-----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |Animat|      |       |Toggle|Solid |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |Bright|Bright|      |       |      |Hue-  |Hue+  |
+ *                                 |ness- |ness+ |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+       // left hand
+       VRSN,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
+       KC_TRNS,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+       KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+       EEP_RST,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+                                       RGB_MOD,KC_TRNS,
+                                               KC_TRNS,
+                               RGB_VAD,RGB_VAI,KC_TRNS,
+       // right hand
+       KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
+       KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    KC_ASTR, KC_F12,
+                KC_DOWN, KC_4,   KC_5,    KC_6,    KC_PLUS, KC_TRNS,
+       KC_TRNS, KC_AMPR, KC_1,   KC_2,    KC_3,    KC_BSLS, KC_TRNS,
+                         KC_TRNS,KC_DOT,  KC_0,    KC_EQL,  KC_TRNS,
+       RGB_TOG, RGB_SLD,
+       KC_TRNS,
+       KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |Brwser|
+ *                                 |      |      |------|       |------|      |Back  |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+                                           KC_TRNS, KC_TRNS,
+                                                    KC_TRNS,
+                                  KC_TRNS, KC_TRNS, KC_TRNS,
+    // right hand
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+                 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+       KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+                          KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+       KC_TRNS, KC_TRNS,
+       KC_TRNS,
+       KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // dynamically generate these.
+    case VRSN:
+      if (record->event.pressed) {
+        SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+      }
+      return false;
+      break;
+    case RGB_SLD:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          rgblight_mode(1);
+        #endif
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+      // TODO: Make this relevant to the ErgoDox EZ.
+        case 1:
+            ergodox_right_led_1_on();
+            break;
+        case 2:
+            ergodox_right_led_2_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/hotdox/keymaps/kloki/keymap.c b/keyboards/hotdox/keymaps/kloki/keymap.c
new file mode 100644 (file)
index 0000000..f858eff
--- /dev/null
@@ -0,0 +1,210 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+#define BASE 0 // default layer
+#define QW 1 // qwerty
+#define SYMB 2 // symbols
+#define NUM 3 // media keys
+
+enum custom_keycodes {
+  PLACEHOLDER = SAFE_RANGE, // can always be here
+  VRSN,
+  RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * | Esc    |   1  |   2  |   3  |   4  |   5  | SHIFT|           | SYM  |   6  |   7  |   8  |   9  |   0  |   Bck  |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * | Tab    |   Q  |   D  |   R  |   W  |   B  | `~   |           |  "'  |   J  |   F  |   U  |   P  |   :  |   \ |  |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * | Ctr/Es |   A  |   S  |   H  |   T  |   G  |------|           |------|   Y  |   N  |   E  |   O  |  I   | Enter  |
+ * |--------+------+------+------+------+------| = +  |           |  -_  |------+------+------+------+------+--------|
+ * | LShift |   Z  |   X  |   M  |   C  |   V  |      |           |      |   K  |   L  |   ,  |   .  | /    | RShift |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |MEH   |  Gui |AltShf| Left | Right|                                       | DOWN | UP   |   [  |   ]  | ~SYM |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        | ESC  |Home  |       | PgUp  | QW  |
+ *                                 ,------|------|------|       |------+--------+------.
+ *                                 |      |  ENT | End  |       | PgDn |        |      |
+ *                                 | Space| WIN  |------|       |------|  Tab   |Back  |
+ *                                 |  SYM |      | SCTR |       | SALT |   SYM  |      |
+ *                                 `--------------------'       `----------------------'
+ */
+
+[BASE] = LAYOUT_ergodox(  // layer 0 : default
+        // left hand
+        KC_ESC,         KC_1,        KC_2,     KC_3,   KC_4,   KC_5,   KC_LSFT,
+        KC_TAB,         KC_Q,        KC_D,     KC_R,   KC_W,   KC_B,   KC_GRV,
+        CTL_T(KC_ESC),  KC_A,        KC_S,     KC_H,   KC_T,   KC_G,
+        KC_LSFT,        KC_Z,        KC_X,     KC_M,   KC_C,   KC_V,   KC_EQL,
+        KC_MEH,         KC_LGUI,     KC_LALT,  KC_LEFT,KC_RGHT,
+                                                       KC_ESC,  KC_HOME,
+                                                                KC_END,
+                            LT(SYMB, KC_SPC),   LGUI_T(KC_ENT), S(KC_LGUI),
+        // right hand
+             TG(NUM),     KC_6,   KC_7,   KC_8,   KC_9,   KC_0,     KC_BSPC,
+             KC_QUOT,     KC_J,   KC_F,   KC_U,   KC_P,   KC_SCLN,  KC_BSLS,
+                          KC_Y,   KC_N,   KC_E,   KC_O,   KC_I ,    KC_ENT,
+             KC_MINS,     KC_K,   KC_L,   KC_COMM,KC_DOT, KC_SLSH,  KC_RSFT,
+                                  KC_DOWN,KC_UP,  KC_LBRC,KC_RBRC,  MO(SYMB),
+                       KC_PGUP,  TG(QW),
+             KC_PGDN,
+             S(KC_LALT),LT(SYMB, KC_TAB), KC_BSPC
+    ),
+
+[QW] = LAYOUT_ergodox(
+       _______, _______, _______, _______, _______, _______, _______,
+       _______, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    _______,
+       _______, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,
+       _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    _______,
+       _______, _______, _______, _______, _______,
+                                           _______, _______,
+                                                    _______,
+                                  _______, _______, _______,
+    // right hand
+       _______,  _______, _______, _______, _______, _______, _______,
+       _______,  KC_Y,    KC_U,    KC_I   , KC_O,    KC_P,    _______,
+                 KC_H,    KC_J,    KC_K   , KC_L,    KC_SCLN, _______,
+       _______,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, _______,
+                          _______, _______, _______, _______, _______,
+       _______, _______,
+       _______,
+       _______, _______, _______
+),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------.           ,--------------------------------------------------.
+ * |         |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   DEL  |
+ * |---------+------+------+------+------+------+------|           |------+------+------+------+------+------+--------|
+ * |         |   !  |   @  |   {  |   }  |   *  |      |           |      |   <  |  H  |   U  |   PU  |   *  |        |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   #  |   $  |   (  |   )  |   `  |------|           |------|   >  |   L  |   D  |   R  |   +  |        |
+ * |---------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |         |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   E  |   D  |  PD  |   \  |        |
+ * `---------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |       |      |      |      |      |                                       |      |      |      |      |      |
+ *   `-----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+       // left hand
+       _______,KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  _______,
+       _______,KC_EXLM,KC_AT,  KC_LCBR,KC_RCBR,KC_ASTR,_______,
+       _______,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+       _______,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,_______,
+       _______,_______,_______,_______,_______,
+                                       _______,_______,
+                                               _______,
+                               _______,_______,_______,
+       // right hand
+       _______, KC_F6,   KC_F7,   KC_F8,   KC_F9,    KC_F10,  KC_DEL,
+       _______, KC_LABK, KC_HOME, KC_UP,   KC_PGUP,  KC_ASTR, _______,
+                KC_RABK, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PLUS, _______,
+       _______, KC_AMPR, KC_END,  KC_DOWN, KC_PGDN,  KC_BSLS, _______,
+                         _______, _______, _______,  _______, _______,
+       _______, _______,
+       _______,
+       _______, _______, _______
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------.           ,--------------------------------------------------.
+ * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
+ * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
+ * |        |      |  L   | MsUp |   R  |      |      |           |      |      |  4   |   5  |  6   |      |  TAB   |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |  1   |   2  |   3  |      |        |
+ * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
+ * |        |      |      |      |      |      |      |           |      |      |      |   0  |   0  |      |        |
+ * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
+ *   |      |      |      |      |      |                                       |      |      |      |      |      |
+ *   `----------------------------------'                                       `----------------------------------'
+ *                                        ,-------------.       ,-------------.
+ *                                        |      |      |       |      |      |
+ *                                 ,------|------|------|       |------+------+------.
+ *                                 |      |      |      |       |      |      |      |
+ *                                 |      |      |------|       |------|      |      |
+ *                                 |      |      |      |       |      |      |      |
+ *                                 `--------------------'       `--------------------'
+ */
+[NUM] = LAYOUT_ergodox(
+       _______, _______, _______, _______, _______, _______, _______,
+       _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______,
+       _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
+       _______, _______, _______, _______, _______, _______, _______,
+       _______, _______, _______, _______, _______,
+                                           _______, _______,
+                                                    _______,
+                                  _______, _______, _______,
+    // right hand
+       _______,  _______, _______, _______, _______, _______, _______,
+       _______,  _______, KC_4,    KC_5   , KC_6,    _______, KC_TAB,
+                 _______, KC_1,    KC_2   , KC_3,    _______, _______,
+       _______,  _______, _______, KC_0,    KC_0,    _______, _______,
+                          _______, _______, _______, _______, _______,
+       _______, _______,
+       _______,
+       _______, _______, _______
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // dynamically generate these.
+    case VRSN:
+      if (record->event.pressed) {
+        SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+      }
+      return false;
+      break;
+    case RGB_SLD:
+      if (record->event.pressed) {
+        #ifdef RGBLIGHT_ENABLE
+          rgblight_mode(1);
+        #endif
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+    uint8_t layer = biton32(layer_state);
+
+    ergodox_board_led_off();
+    ergodox_right_led_1_off();
+    ergodox_right_led_2_off();
+    ergodox_right_led_3_off();
+    switch (layer) {
+        case 1:
+            ergodox_board_led_on();
+            break;
+        case 3:
+            ergodox_board_led_on();
+            break;
+        default:
+            // none
+            break;
+    }
+
+};
diff --git a/keyboards/hotdox/left.c b/keyboards/hotdox/left.c
new file mode 100644 (file)
index 0000000..970d36f
--- /dev/null
@@ -0,0 +1,130 @@
+#include "action.h"
+#include "left.h"
+#include "wait.h"
+
+bool i2c_initialized = false;
+
+void left_config(void);
+uint8_t left_write(uint8_t reg, uint8_t data);
+uint8_t left_read(uint8_t reg, uint8_t *data);
+
+uint8_t init_mcp23017(void)
+{
+    i2c_initialized = false;
+
+    if (i2c_initialized == 0)
+    {
+        i2c_init();  // on pins D(1,0)
+        _delay_ms(1000);
+    }
+
+    return 0;
+}
+void left_init(void)
+{
+    init_mcp23017();
+    left_scan();
+#if 0
+    while (1)
+    {
+        print("wait\n");
+        wait_us(1000000);
+    }
+#endif
+}
+
+void left_scan(void)
+{
+    uint8_t ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT);
+
+    if (ret == 0)
+    {
+        i2c_stop();
+
+        if (!i2c_initialized)
+        {
+            i2c_initialized = true;
+            left_config();
+            clear_keyboard();
+            print("mcp23017 attached!!!\n");
+        }
+    }
+    else
+    {
+        if (i2c_initialized)
+        {
+            i2c_initialized = false;
+            clear_keyboard();
+            print("mcp23017 deattached!!!\n");
+        }
+    }
+
+    return;
+}
+
+uint8_t left_read_cols(void)
+{
+    uint8_t data = 0;
+
+    left_read(MCP23017_B0_GPIOA, &data);
+
+    return data;
+}
+
+void left_unselect_rows(void)
+{
+    left_write(MCP23017_B0_IODIRB, 0x3F);
+}
+
+void left_select_row(uint8_t row)
+{
+    left_write(MCP23017_B0_IODIRB, ~(1 << row));
+}
+
+void left_config(void)
+{
+  left_write(MCP23017_B0_IODIRA, 0x7F);
+  left_write(MCP23017_B0_IPOLA,  0x7F);
+  left_write(MCP23017_B0_GPPUA,  0x7F);
+
+  left_write(MCP23017_B0_IODIRB, 0xFF);
+  left_write(MCP23017_B0_GPIOB,  0xC0);
+}
+
+uint8_t left_write(uint8_t reg, uint8_t data)
+{
+  if (!i2c_initialized)
+  {
+    return 0;
+  }
+
+  uint8_t ret;
+
+  ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT);     if (ret) goto out;
+  ret = i2c_write(reg, HOTDOX_I2C_TIMEOUT);                if (ret) goto out;
+  ret = i2c_write(data, HOTDOX_I2C_TIMEOUT);
+
+out:
+  i2c_stop();
+  return ret;
+}
+
+uint8_t left_read(uint8_t reg, uint8_t *data)
+{
+  if (!i2c_initialized)
+  {
+    return 0;
+  }
+
+  uint8_t ret = 0;
+
+  ret = i2c_start(I2C_ADDR_WRITE, HOTDOX_I2C_TIMEOUT);     if (ret) goto out;
+  ret = i2c_write(reg, HOTDOX_I2C_TIMEOUT);                if (ret) goto out;
+  ret = i2c_start(I2C_ADDR_READ, HOTDOX_I2C_TIMEOUT);      if (ret) goto out;
+
+  *data = i2c_read_nack(HOTDOX_I2C_TIMEOUT);
+
+out:
+  i2c_stop();
+  return ret;
+}
diff --git a/keyboards/hotdox/left.h b/keyboards/hotdox/left.h
new file mode 100644 (file)
index 0000000..3d8b5a6
--- /dev/null
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "quantum.h"
+#include <stdint.h>
+#include "i2c_master.h"
+#include <util/delay.h>
+
+#define MCP23017
+#define MCP23017_A0 0
+#define MCP23017_A1 0
+#define MCP23017_A2 0
+
+#define I2C_ADDR        (0x20)
+#define I2C_ADDR_WRITE  ((I2C_ADDR << 1) | I2C_WRITE)
+#define I2C_ADDR_READ   ((I2C_ADDR << 1) | I2C_READ)
+
+
+#define MCP23017_B0_IODIRA     0x00
+#define MCP23017_B0_IODIRB     0x01
+#define MCP23017_B0_IPOLA      0x02
+#define MCP23017_B0_IPOLB      0x03
+#define MCP23017_B0_GPINTENA   0x04
+#define MCP23017_B0_GPINTENB   0x05
+#define MCP23017_B0_DEFVALA    0x06
+#define MCP23017_B0_DEFVALB    0x07
+#define MCP23017_B0_INTCONA    0x08
+#define MCP23017_B0_INTCONB    0x09
+#define MCP23017_B0_IOCONA     0x0A
+#define MCP23017_B0_IOCONB     0x0B
+#define MCP23017_B0_GPPUA      0x0C
+#define MCP23017_B0_GPPUB      0x0D
+#define MCP23017_B0_INTFA      0x0E
+#define MCP23017_B0_INTFB      0x0F
+#define MCP23017_B0_INTCAPA    0x10
+#define MCP23017_B0_INTCAPB    0x11
+#define MCP23017_B0_GPIOA      0x12
+#define MCP23017_B0_GPIOB      0x13
+#define MCP23017_B0_OLATA      0x14
+#define MCP23017_B0_OLATB      0x15
+
+#define HOTDOX_I2C_TIMEOUT     100
+
+typedef int16_t i2c_status_t;
+
+void left_init(void);
+void left_scan(void);
+
+uint8_t left_read_cols(void);
+uint8_t left_get_col(uint8_t col);
+
+matrix_row_t left_read_row(void);
+
+void left_unselect_rows(void);
+void left_select_row(uint8_t row);
+
+uint8_t init_mcp23017(void);
+
diff --git a/keyboards/hotdox/matrix.c b/keyboards/hotdox/matrix.c
new file mode 100644 (file)
index 0000000..9d3a98d
--- /dev/null
@@ -0,0 +1,283 @@
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "hotdox.h"
+#include "left.h"
+#ifdef DEBUG_MATRIX_SCAN_RATE
+#include  "timer.h"
+#endif
+
+/*
+ * This constant define not debouncing time in msecs, but amount of matrix
+ * scan loops which should be made to get stable debounced results.
+ *
+ * On Ergodox matrix scan rate is relatively low, because of slow I2C.
+ * Now it's only 317 scans/second, or about 3.15 msec/scan.
+ * According to Cherry specs, debouncing time is 5 msec.
+ *
+ * And so, there is no sense to have DEBOUNCE higher than 2.
+ */
+
+#ifndef DEBOUNCE
+#   define DEBOUNCE    5
+#endif
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+
+// Debouncing: store for each key the number of scans until it's eligible to
+// change.  When scanning the matrix, ignore any changes in keys that have
+// already changed in the last DEBOUNCE scans.
+static uint8_t debounce_matrix[MATRIX_ROWS * MATRIX_COLS];
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+uint32_t matrix_timer;
+uint32_t matrix_scan_count;
+#endif
+
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+  matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+  matrix_scan_user();
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+  return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+  return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+  // disable JTAG
+  MCUCR = (1<<JTD);
+  MCUCR = (1<<JTD);
+
+  unselect_rows();
+  init_cols();
+
+  //eeprom_update_word(EECONFIG_MAGIC, 0x0000);
+
+  // initialize matrix state: all keys off
+  for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+    matrix[i] = 0;
+    for (uint8_t j=0; j < MATRIX_COLS; ++j) {
+      debounce_matrix[i * MATRIX_COLS + j] = 0;
+    }
+  }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+  matrix_timer = timer_read32();
+  matrix_scan_count = 0;
+#endif
+
+  matrix_init_quantum();
+
+}
+
+void matrix_power_up(void) {
+  unselect_rows();
+  init_cols();
+
+  // initialize matrix state: all keys off
+  for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+    matrix[i] = 0;
+  }
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+  matrix_timer = timer_read32();
+  matrix_scan_count = 0;
+#endif
+}
+
+// Returns a matrix_row_t whose bits are set if the corresponding key should be
+// eligible to change in this scan.
+matrix_row_t debounce_mask(uint8_t row) {
+  matrix_row_t result = 0;
+  for (uint8_t j=0; j < MATRIX_COLS; ++j) {
+    if (debounce_matrix[row * MATRIX_COLS + j]) {
+      --debounce_matrix[row * MATRIX_COLS + j];
+    } else {
+      result |= (1 << j);
+    }
+  }
+  return result;
+}
+
+// Report changed keys in the given row.  Resets the debounce countdowns
+// corresponding to each set bit in 'change' to DEBOUNCE.
+void debounce_report(matrix_row_t change, uint8_t row) {
+  for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
+    if (change & (1 << i)) {
+      debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
+    }
+  }
+}
+
+uint8_t matrix_scan(void)
+{
+  left_scan();
+
+#ifdef DEBUG_MATRIX_SCAN_RATE
+  matrix_scan_count++;
+
+  uint32_t timer_now = timer_read32();
+  if (TIMER_DIFF_32(timer_now, matrix_timer)>1000) {
+    print("matrix scan frequency: ");
+    pdec(matrix_scan_count);
+    print("\n");
+    matrix_print();
+
+    matrix_timer = timer_now;
+    matrix_scan_count = 0;
+  }
+#endif
+  for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+    select_row(i);
+    wait_us(30);  // without this wait read unstable value.
+    matrix_row_t mask = debounce_mask(i);
+    matrix_row_t cols = (read_cols(i) & mask) | (matrix[i] & ~mask);
+    debounce_report(cols ^ matrix[i], i);
+    matrix[i] = cols;
+
+    unselect_rows();
+  }
+
+  matrix_scan_quantum();
+
+  return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+  return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+  return matrix[row];
+}
+
+void matrix_print(void)
+{
+  print("\nr/c 0123456789ABCDEF\n");
+  for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+    phex(row); print(": ");
+    pbin_reverse16(matrix_get_row(row));
+    print("\n");
+  }
+}
+
+uint8_t matrix_key_count(void)
+{
+  uint8_t count = 0;
+  for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+    count += bitpop16(matrix[i]);
+  }
+  return count;
+}
+
+static void init_cols(void)
+{
+  // Pro Micro
+  DDRB  &= ~(1<<PB0 | 1<<PB1 | 1<<PB2 | 1<<PB3);
+  PORTB |=  (1<<PB0 | 1<<PB1 | 1<<PB2 | 1<<PB3);
+
+  DDRD  &= ~(1<<PD2 | 1<<PD3);
+  PORTD |=  (1<<PD2 | 1<<PD3);
+
+  DDRC  &= ~(1<<PC6);
+  PORTC |=  (1<<PC6);
+
+  left_init();
+}
+
+static matrix_row_t read_cols(uint8_t row)
+{
+  matrix_row_t cols0 = 0x00, cols1 = 0x00;
+
+  cols0 = left_read_cols();
+
+  cols1 = (PINC&(1<<PC6) ? 0 : (1<<(0+7))) |
+          (PIND&(1<<PD3) ? 0 : (1<<(1+7))) |
+          (PIND&(1<<PD2) ? 0 : (1<<(2+7))) |
+          (PINB&(1<<PB3) ? 0 : (1<<(3+7))) |
+          (PINB&(1<<PB2) ? 0 : (1<<(4+7))) |
+          (PINB&(1<<PB1) ? 0 : (1<<(5+7))) |
+          (PINB&(1<<PB0) ? 0 : (1<<(6+7))) ;
+
+  return (cols0 | cols1);
+}
+
+static void unselect_rows(void)
+{
+  // Pro Micro
+  DDRF  &= ~(1<<PF7 | 1<< PF6 | 1<<PF5 | 1<<PF4 | 1<<PF1 | 1<<PF0);
+  PORTF &= ~(1<<PF7 | 1<< PF6 | 1<<PF5 | 1<<PF4 | 1<<PF1 | 1<<PF0);
+
+  left_unselect_rows();
+}
+
+static void select_row(uint8_t row)
+{
+  // Pro Micro
+  switch (row) {
+  case 5:
+    DDRF  |=  (1<<PF0);
+    PORTF &= ~(1<<PF0);
+    break;
+  case 4:
+    DDRF  |=  (1<<PF1);
+    PORTF &= ~(1<<PF1);
+    break;
+  case 3:
+    DDRF  |=  (1<<PF4);
+    PORTF &= ~(1<<PF4);
+    break;
+  case 2:
+    DDRF  |=  (1<<PF5);
+    PORTF &= ~(1<<PF5);
+    break;
+  case 1:
+    DDRF  |=  (1<<PF6);
+    PORTF &= ~(1<<PF6);
+    break;
+  case 0:
+    DDRF  |=  (1<<PF7);
+    PORTF &= ~(1<<PF7);
+    break;
+  }
+
+  left_select_row(row);
+}
+
diff --git a/keyboards/hotdox/readme.md b/keyboards/hotdox/readme.md
new file mode 100644 (file)
index 0000000..c8062b0
--- /dev/null
@@ -0,0 +1,23 @@
+HotDox
+========
+
+![HotDox](https://cdn.shopify.com/s/files/1/1994/3097/products/Sunset_Ergodox.jpg?v=1540495379)
+
+The HotDox is a modified version of the ErgoDox & ErgoDone(made by K.T.E.C.).
+
+
+- Keyboard maintainer: [Layne](https://github.com/layne001365/qmk_firmware)
+
+# Building the firmware
+
+[Install the build tools.](https://docs.qmk.fm/#/getting_started_build_tools)
+
+In the root directory of the repository, build the firmware with a command like:
+
+    make hotdox:default
+
+For more information on the layout option and other ones, see the [`make` guide](https://docs.qmk.fm/#/getting_started_make_guide).
+
+# Flashing the firmware onto the keyboard
+  https://docs.qmk.fm/#/newbs_flashing
+
diff --git a/keyboards/hotdox/rules.mk b/keyboards/hotdox/rules.mk
new file mode 100644 (file)
index 0000000..f785cdd
--- /dev/null
@@ -0,0 +1,82 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make = Make software.
+#
+# make clean = Clean out built project files.
+#
+# That's pretty much all you need. To compile, always go make clean,
+# followed by make.
+#
+# For advanced users only:
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+#               (must have teensy_loader_cli installed).
+#
+#----------------------------------------------------------------------------
+
+# # project specific files
+SRC =  matrix.c     \
+          i2c_master.c \
+       left.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
+#   comment out to disable the options.
+#
+CUSTOM_MATRIX           = yes # Custom matrix file for the ErgoDone
+UNICODE_ENABLE          = yes # Unicode
+BOOTMAGIC_ENABLE        = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE         = yes  # Mouse keys(+4700)
+EXTRAKEY_ENABLE         = yes # Audio control and System control(+450)
+CONSOLE_ENABLE          = yes # Console for debug(+400)
+COMMAND_ENABLE          = no  # Commands for debug and configuration
+SLEEP_LED_ENABLE        = no  # Breathing sleep LED during USB suspend
+NKRO_ENABLE             = yes # USB Nkey Rollover - not yet supported in LUFA
+USB_6KRO_ENABLE         = no  # USB 6key Rollover
+BACKLIGHT_ENABLE        = yes # Enable keyboard backlight functionality
+KEYMAP_SECTION_ENABLE   = no  # Fixed address keymap for keymap editor
+SWAP_HANDS_ENABLE       = no  # Disable Onehand
+RGBLIGHT_ENABLE         = no
+MIDI_ENABLE             = no
+
+LAYOUTS = ergodox
index abafb69f99e72caefeac7e3f5b976c8237e175b7..c42e9e9418f4cac5b1c05c9d454087fedd2ba5e6 100644 (file)
@@ -1,6 +1,6 @@
 {
-  "keyboard_name": "clueboard/60",
-  "maintainer": "skullydazed",
+  "keyboard_name": "HS60v2",
+  "maintainer": "yiancar",
   "url": "",
   "width": 15,
   "height": 5,
index 650871a5e6893ffe9a2b77ece7e14a25ad85a876..3afd8afb33d678617d148ae7905ae5537cbd2c79 100644 (file)
@@ -1,6 +1,6 @@
-The default keymap for ANSI HS60 V2
-===================================
+The default keymap for ANSI HS60 V2. VIA support disabled.
+==========================================================
 
 ![Layout image](https://i.imgur.com/m8t5CfE.png)
 
-Default layer is normal ANSI and Fn layer is used for RGB functions, Volume control and arrow cluster
\ No newline at end of file
+Default layer is normal ANSI and Fn layer is used for RGB functions, Volume control and arrow cluster.
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/ansi_via/config.h b/keyboards/hs60/v2/keymaps/ansi_via/config.h
new file mode 100644 (file)
index 0000000..96adaf5
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+Copyright 2018 Yiancar
+
+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 overwrites for specific keymap */
+
+#define HS60_ANSI
+#undef  PRODUCT_ID
+#define PRODUCT_ID      0x4854
diff --git a/keyboards/hs60/v2/keymaps/ansi_via/keymap.c b/keyboards/hs60/v2/keymaps/ansi_via/keymap.c
new file mode 100644 (file)
index 0000000..ba64947
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright 2018 Yiancar
+ *
+ * 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
+
+//This is the ANSI version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_ansi( /* Base */
+    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,  MO(1)  ,  KC_APP,  KC_RCTL),
+
+[1] = LAYOUT_60_ansi( /* FN */
+    KC_GRV,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL ,\
+    KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET,    KC_TRNS,\
+    KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  S1_DEC,   S1_INC,   S2_DEC,   S2_INC,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+    KC_TRNS,            EF_DEC,   EF_INC,   H1_DEC,   H1_INC,   H2_DEC,   H2_INC,   BR_DEC,   BR_INC,   ES_DEC,   ES_INC,             KC_TRNS,\
+    KC_VOLU,  KC_VOLD,  KC_MUTE,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
+
+[2] = LAYOUT_60_ansi( /* Empty for dynamic keymaps */
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+    KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  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_60_ansi( /* Empty for dynamic keymaps */
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+    KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  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 matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/ansi_via/readme.md b/keyboards/hs60/v2/keymaps/ansi_via/readme.md
new file mode 100644 (file)
index 0000000..a462da6
--- /dev/null
@@ -0,0 +1,6 @@
+The default keymap for ANSI HS60 V2. VIA support enabled.
+=========================================================
+
+![Layout image](https://i.imgur.com/m8t5CfE.png)
+
+Default layer is normal ANSI and Fn layer is used for RGB functions, Volume control and arrow cluster
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/ansi_via/rules.mk b/keyboards/hs60/v2/keymaps/ansi_via/rules.mk
new file mode 100644 (file)
index 0000000..a2850a8
--- /dev/null
@@ -0,0 +1,66 @@
+# project specific files
+SRC =  keyboards/zeal60/zeal60.c \
+               keyboards/zeal60/rgb_backlight.c \
+               drivers/issi/is31fl3733.c \
+               quantum/color.c \
+               drivers/arm/i2c_master.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 = STM32F3xx
+
+# Linker script to use
+#   it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no              # Enable keyboard backlight functionality
+BOOTMAGIC_ENABLE = no              # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes              # Mouse keys
+EXTRAKEY_ENABLE = yes              # Audio control and System control
+CONSOLE_ENABLE = no                # Console for debug
+COMMAND_ENABLE = no                # Commands for debug and configuration
+SLEEP_LED_ENABLE = no              # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes                  # USB Nkey Rollover
+AUDIO_ENABLE = no                  # Audio output on port C6
+NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in
+#SERIAL_LINK_ENABLE = yes
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
index f0b29900e6bf8a18778e3c9b8d8af06822296f89..9aa0a3a2b5a27e17e0bf0bb353213cdd16c7df55 100644 (file)
@@ -1,5 +1,5 @@
-The default keymap for ISO HS60 V2
-==================================
+The default keymap for ISO HS60 V2. VIA support disabled.
+=========================================================
 
 ![Layout image](https://imgur.com/6go4vQV.png)
 
diff --git a/keyboards/hs60/v2/keymaps/default_via/keymap.c b/keyboards/hs60/v2/keymaps/default_via/keymap.c
new file mode 100644 (file)
index 0000000..c1e5757
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright 2018 Yiancar
+ *
+ * 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
+
+//This is the ISO version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_iso( /* Base */
+    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_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_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_LCTL,  KC_LGUI,  KC_LALT,                       KC_SPC,                          KC_RALT,  MO(1)  ,  KC_APP,  KC_RCTL),
+
+[1] = LAYOUT_60_iso( /* FN */
+    KC_GRV,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL ,\
+    KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET  ,          \
+    KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  S1_DEC,   S1_INC,   S2_DEC,   S2_INC,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  EF_DEC,   EF_INC,   H1_DEC,   H1_INC,   H2_DEC,   H2_INC,   BR_DEC,   BR_INC,   ES_DEC,   ES_INC,             KC_TRNS,\
+    KC_VOLU,  KC_VOLD,  KC_MUTE,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
+
+[2] = LAYOUT_60_iso( /* Empty for dynamic keymaps */
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,          \
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  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_60_iso( /* Empty for dynamic keymaps */
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,          \
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  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 matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/default_via/readme.md b/keyboards/hs60/v2/keymaps/default_via/readme.md
new file mode 100644 (file)
index 0000000..2a440f7
--- /dev/null
@@ -0,0 +1,6 @@
+The default keymap for ISO HS60 V2. VIA support enabled.
+========================================================
+
+![Layout image](https://imgur.com/6go4vQV.png)
+
+Default layer is normal ISO and Fn layer is used for RGB functions, Volume control and arrow cluster
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/default_via/rules.mk b/keyboards/hs60/v2/keymaps/default_via/rules.mk
new file mode 100644 (file)
index 0000000..a2850a8
--- /dev/null
@@ -0,0 +1,66 @@
+# project specific files
+SRC =  keyboards/zeal60/zeal60.c \
+               keyboards/zeal60/rgb_backlight.c \
+               drivers/issi/is31fl3733.c \
+               quantum/color.c \
+               drivers/arm/i2c_master.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 = STM32F3xx
+
+# Linker script to use
+#   it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no              # Enable keyboard backlight functionality
+BOOTMAGIC_ENABLE = no              # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes              # Mouse keys
+EXTRAKEY_ENABLE = yes              # Audio control and System control
+CONSOLE_ENABLE = no                # Console for debug
+COMMAND_ENABLE = no                # Commands for debug and configuration
+SLEEP_LED_ENABLE = no              # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes                  # USB Nkey Rollover
+AUDIO_ENABLE = no                  # Audio output on port C6
+NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in
+#SERIAL_LINK_ENABLE = yes
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
index 69b812c607247dcd9d69be5fd5f66362691b7724..5259a584d201d5a5bf144ddb26f6e526443dc5c7 100644 (file)
@@ -1,5 +1,5 @@
-The default keymap for HHKB HS60 V2
-===================================
+The default keymap for HHKB HS60 V2. VIA support disabled.
+==========================================================
 
 ![Layout image](https://imgur.com/usbrQWL.png)
 
diff --git a/keyboards/hs60/v2/keymaps/hhkb_via/config.h b/keyboards/hs60/v2/keymaps/hhkb_via/config.h
new file mode 100644 (file)
index 0000000..fc1b6d8
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+Copyright 2018 Yiancar
+
+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 overwrites for specific keymap */
+
+#define HS60_HHKB
+#undef  PRODUCT_ID
+#define PRODUCT_ID      0x4855
+
+#undef  RGB_BACKLIGHT_ALPHAS_MODS_ROW_0
+#undef  RGB_BACKLIGHT_ALPHAS_MODS_ROW_1
+#undef  RGB_BACKLIGHT_ALPHAS_MODS_ROW_2
+#undef  RGB_BACKLIGHT_ALPHAS_MODS_ROW_3
+#undef  RGB_BACKLIGHT_ALPHAS_MODS_ROW_4
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011100000000111
diff --git a/keyboards/hs60/v2/keymaps/hhkb_via/keymap.c b/keyboards/hs60/v2/keymaps/hhkb_via/keymap.c
new file mode 100644 (file)
index 0000000..9641eed
--- /dev/null
@@ -0,0 +1,60 @@
+/* Copyright 2018 Yiancar
+ *
+ * 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
+
+//This is the HHKB version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_hhkb( /* Base */
+    KC_ESC,   KC_1,     KC_2,  KC_3,  KC_4,  KC_5,  KC_6,  KC_7,  KC_8,  KC_9,     KC_0,     KC_MINS,  KC_EQL,  KC_GRV,  KC_BSLS,\
+    KC_TAB,   KC_Q,     KC_W,  KC_E,  KC_R,  KC_T,  KC_Y,  KC_U,  KC_I,  KC_O,     KC_P,     KC_LBRC,  KC_RBRC,          KC_BSPC,\
+    KC_LCTL,  KC_A,     KC_S,  KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,  KC_L,     KC_SCLN,  KC_QUOT,           KC_ENT,          \
+    KC_LSFT,            KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,            MO(1),\
+    KC_LCTL,  KC_LGUI,  KC_LALT,                KC_SPC,                            KC_RALT,  KC_RGUI,          KC_RCTL          ),
+
+[1] = LAYOUT_60_hhkb( /* 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_TRNS,  KC_TRNS,\
+    KC_TRNS, EF_DEC,  EF_INC,  H1_DEC,  H1_INC,  H2_DEC,  H2_INC,  BR_DEC,  BR_INC,   ES_DEC,  ES_INC,   KC_UP,    KC_TRNS,           KC_DEL, \
+    KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME,  KC_PGUP, KC_LEFT,  KC_RGHT,            KC_TRNS,         \
+    KC_TRNS,          KC_TRNS, S1_DEC,  S1_INC,  S2_DEC,  S2_INC,  KC_TRNS, KC_TRNS,  KC_END,  KC_PGDN,  KC_DOWN,  KC_TRNS,           KC_TRNS,\
+    KC_TRNS, KC_TRNS, KC_TRNS,                 KC_TRNS,                                        KC_TRNS,  KC_TRNS,            KC_TRNS         ),
+
+[2] = LAYOUT_60_hhkb( /* Empty for dynamic keymaps */
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,            KC_TRNS,          \
+    KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  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_60_hhkb( /* Empty for dynamic keymaps */
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,\
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS,  KC_TRNS,            KC_TRNS,          \
+    KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  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 matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/hhkb_via/readme.md b/keyboards/hs60/v2/keymaps/hhkb_via/readme.md
new file mode 100644 (file)
index 0000000..ea9803c
--- /dev/null
@@ -0,0 +1,6 @@
+The default keymap for HHKB HS60 V2. VIA support enabled.
+=========================================================
+
+![Layout image](https://imgur.com/usbrQWL.png)
+
+Default layer is normal HHKB with 7U space. Fn layer is used for RGB functions, Volume control and arrow cluster
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/hhkb_via/rules.mk b/keyboards/hs60/v2/keymaps/hhkb_via/rules.mk
new file mode 100644 (file)
index 0000000..a2850a8
--- /dev/null
@@ -0,0 +1,66 @@
+# project specific files
+SRC =  keyboards/zeal60/zeal60.c \
+               keyboards/zeal60/rgb_backlight.c \
+               drivers/issi/is31fl3733.c \
+               quantum/color.c \
+               drivers/arm/i2c_master.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 = STM32F3xx
+
+# Linker script to use
+#   it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no              # Enable keyboard backlight functionality
+BOOTMAGIC_ENABLE = no              # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes              # Mouse keys
+EXTRAKEY_ENABLE = yes              # Audio control and System control
+CONSOLE_ENABLE = no                # Console for debug
+COMMAND_ENABLE = no                # Commands for debug and configuration
+SLEEP_LED_ENABLE = no              # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes                  # USB Nkey Rollover
+AUDIO_ENABLE = no                  # Audio output on port C6
+NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in
+#SERIAL_LINK_ENABLE = yes
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
diff --git a/keyboards/hs60/v2/keymaps/iso_andys8/keymap.c b/keyboards/hs60/v2/keymaps/iso_andys8/keymap.c
new file mode 100644 (file)
index 0000000..12272ee
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright 2018 Yiancar
+ *
+ * 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
+
+// This is the ISO version of the PCB. With modifications by andys8 and an additional function layer.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_60_iso( /* Base */
+    KC_ESC,   KC_1,     KC_2,     KC_3,  KC_4,  KC_5,  KC_6,    KC_7,  KC_8,  KC_9,     KC_0,     KC_MINS, KC_EQL,   KC_BSPC,\
+    KC_TAB,   KC_Q,     KC_W,     KC_E,  KC_R,  KC_T,  KC_Y,    KC_U,  KC_I,  KC_O,     KC_P,     KC_LBRC, KC_RBRC,          \
+    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_NUHS,  KC_ENT, \
+    KC_LSFT,  KC_NUBS,  KC_Z,     KC_X,  KC_C,  KC_V,  KC_B,    KC_N,  KC_M,  KC_COMM,  KC_DOT,   KC_SLSH,           KC_RSFT,\
+    KC_LCTL,  KC_LGUI,  KC_LALT,                       KC_SPC,                          KC_RALT,  MO(2)  , KC_APP,   KC_RCTL),
+
+[1] = LAYOUT_60_iso( /* FN */
+    KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL ,\
+    KC_NO,   KC_NO,   KC_NO,   KC_NO,   RESET,   KC_NO,   KC_HOME, KC_PGDN, KC_PGUP, KC_END,  KC_PSCR, KC_NO,   KC_NO,           \
+    KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_NO,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_END,  KC_DEL,  KC_NO,   KC_NO,  \
+    KC_LSFT, KC_NO,   KC_APP,  KC_PAUS, KC_INS,  KC_NO,   KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO,            KC_RSFT,\
+    KC_LCTL, KC_LGUI, KC_LALT,                   KC_BSPC,                                     KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT),
+
+[2] = LAYOUT_60_iso( /* Light (Default FN) */
+    KC_GRV,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_DEL ,\
+    KC_TRNS,  KC_TRNS,  KC_UP,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RESET  ,          \
+    KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  S1_DEC,   S1_INC,   S2_DEC,   S2_INC,   KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  EF_DEC,   EF_INC,   H1_DEC,   H1_INC,   H2_DEC,   H2_INC,   BR_DEC,   BR_INC,   ES_DEC,   ES_INC,             KC_TRNS,\
+    KC_VOLU,  KC_VOLD,  KC_MUTE,                                KC_TRNS,                                KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS),
+
+[3] = LAYOUT_60_iso( /* Empty for dynamic keymaps */
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,          \
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,\
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  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 matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/iso_andys8/readme.md b/keyboards/hs60/v2/keymaps/iso_andys8/readme.md
new file mode 100644 (file)
index 0000000..1b843fe
--- /dev/null
@@ -0,0 +1,4 @@
+The andys8 keymap for ISO HS60 V2
+==================================
+
+Default iso layout with minor modifications and additional function layer.
\ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/iso_andys8/rules.mk b/keyboards/hs60/v2/keymaps/iso_andys8/rules.mk
new file mode 100644 (file)
index 0000000..a2850a8
--- /dev/null
@@ -0,0 +1,66 @@
+# project specific files
+SRC =  keyboards/zeal60/zeal60.c \
+               keyboards/zeal60/rgb_backlight.c \
+               drivers/issi/is31fl3733.c \
+               quantum/color.c \
+               drivers/arm/i2c_master.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 = STM32F3xx
+
+# Linker script to use
+#   it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no              # Enable keyboard backlight functionality
+BOOTMAGIC_ENABLE = no              # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes              # Mouse keys
+EXTRAKEY_ENABLE = yes              # Audio control and System control
+CONSOLE_ENABLE = no                # Console for debug
+COMMAND_ENABLE = no                # Commands for debug and configuration
+SLEEP_LED_ENABLE = no              # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes                  # USB Nkey Rollover
+AUDIO_ENABLE = no                  # Audio output on port C6
+NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in
+#SERIAL_LINK_ENABLE = yes
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
index 4be7965e3df98244a51c0a309460227c3b60a6e7..4576211f1025606c439310d57a83abb7fd7d1ad1 100644 (file)
@@ -1,25 +1,22 @@
-/*
-Copyright 2019 Stanrc85
-
-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 overwrites for specific keymap */
-
+// Include overwrites for specific keymap
 #define HS60_ANSI
 #undef  PRODUCT_ID
 #define PRODUCT_ID      0x4854
-#define TAPPING_TERM 200
-#define RETRO_TAPPING
+
+// disable backlight after timeout in minutes, 0 = no timeout
+#undef RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 10
+
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_0
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_1
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_2
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_3
+#undef RGB_BACKLIGHT_ALPHAS_MODS_ROW_4
+
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001 //Setting \ key to "MOD" instead of "ALPHA" for lighting
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011110000000111
index d8d79a581c800ac3e839169e68bc2a88d985af77..d0a77d91688347f5be42cb147cd6ff5f7c7d52ef 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include QMK_KEYBOARD_H
-
-#define DEFAULT 0  //Custom ANSI
-#define LAYER1 1   //Default ANSI (enable with Fn2+D)
-#define LAYER2 2   //Function keys, arrows, custom shortcuts, volume control
-#define LAYER3 3   //RGB Underglow controls and RESET
-
-//Aliases for longer keycodes
-#define KC_CAD LALT(LCTL(KC_DEL))
-#define KC_LOCK        LGUI(KC_L)
-#define CA_QUOT LCA(KC_QUOT)
-#define CA_SCLN LCA(KC_SCLN)
-#define KC_CTLE LCTL_T(KC_ESC)
-#define LT_SPCF LT(2, KC_SPC)
-#define TD_TESC TD(TD_ESC)
-#define TD_TWIN TD(TD_WIN)
-
-//Tap Dance Declarations
-enum {
-       TD_WIN = 0,
-       TD_ESC
-};
-
-qk_tap_dance_action_t tap_dance_actions[] = {
-       [TD_WIN] = ACTION_TAP_DANCE_DOUBLE(KC_CAD, KC_LOCK),
-       [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV)
-};
+#include "stanrc85.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        [0] = LAYOUT_60_ansi(
@@ -47,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                KC_TAB,  KC_Q,    KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
                KC_CTLE, 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,          LT_SPCF,          KC_RALT, TD_TWIN, MO(3),   KC_RCTL),
+               KC_LCTL, KC_LGUI, KC_LALT,          LT_SPCF,          KC_RALT, TD_TWIN, MO(3),   TD_TCTL),
 
        [1] = 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,
@@ -58,19 +33,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
        [2] = LAYOUT_60_ansi(
                KC_TILD, 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,
-               _______, _______, CA_QUOT, KC_VOLU, CA_SCLN, _______, _______, KC_HOME, KC_UP,   KC_END,  _______, _______, _______, RESET,
+               _______, _______, CA_QUOT, KC_VOLU, CA_SCLN, _______, _______, KC_HOME, KC_UP,   KC_END,  _______, _______, _______, KC_INS,
                KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_MPLY, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
                _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
                _______, _______, _______,                   _______,                   _______, _______, _______, _______),
 
        [3] = LAYOUT_60_ansi(
-               _______, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, RGB_SAI, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______,
-               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
-               _______, _______, _______, TG(1),   _______, _______, _______, _______, _______, _______, _______, _______, _______,
+               _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, EEP_RST,
+               _______, EF_INC,  ES_INC,  S1_INC,  H1_INC,  S2_INC,  H2_INC,  BR_INC,  _______, _______, _______, _______, _______, RESET,
+               TG(1),   EF_DEC,  ES_DEC,  S1_DEC,  H1_DEC,  S2_DEC,  H2_DEC,  BR_DEC,  _______, _______, _______, _______, KC_MAKE,
                _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
                _______, _______, _______,                   _______,                   _______, _______, _______, _______)
 };
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+// Backlight specific keys:
+//  EF_INC, EF_DEC,   // next/previous backlight effect
+//  H1_INC, H1_DEC,   // Color 1 hue increase/decrease
+//  S1_INC, S1_DEC,   // Color 1 saturation increase/decrease
+//  H2_INC, H2_DEC,   // Color 2 hue increase/decrease
+//  S2_INC, S2_DEC,   // Color 2 saturation increase/decrease
+//  BR_INC, BR_DEC,   // backlight brightness increase/decrease
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
   return true;
 }
index 650871a5e6893ffe9a2b77ece7e14a25ad85a876..430d363f3762c6b121537c45a3f6422ab53c9b7c 100644 (file)
@@ -1,6 +1,48 @@
-The default keymap for ANSI HS60 V2
-===================================
+<!-- Copyright 2019 Stanrc85
 
-![Layout image](https://i.imgur.com/m8t5CfE.png)
+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.
 
-Default layer is normal ANSI and Fn layer is used for RGB functions, Volume control and arrow cluster
\ No newline at end of file
+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/>.-->
+
+# Stanrc85's Standard ANSI 60% Layout
+
+## Keymap Notes
+- Layer 0 is default QWERTY layout with additional custom features:
+    - SpaceFN to function layer 2 on `Space`
+    - `CTRL` when held and `ESC` when tapped on `CAPS LOCK`
+    - Tap Dance on `Fn1` for `CTRL+ALT+DEL` and `WIN+L`
+    - Tap Dance on `ESC` for `ESC` and  ` ` ` 
+
+![Base QWERTY Layer](https://imgur.com/lGcyLJx.png)
+
+- Layer 1 is default QWERTY with no custom features used mostly for gaming
+    - Enabled by `Fn2+CAPS` from base layer
+
+![Default ANSI Layer](https://imgur.com/M7T9PNT.png)
+
+- Layer 2 is Function layer:
+    - F keys
+    - Arrows
+    - Volume and Media controls
+    - AutoHotkey shortcuts based on [Speaker Control](https://github.com/stanrc85/Speaker-Control) script
+        - AHK Mic is used to mute/unmute microphone
+        - AHK Speaker switches audio output between headphones and speakers
+
+![Function Layer](https://imgur.com/YPl0JrU.png)
+
+- Layer 3 is Backlight control and RESET
+    - `Fn2+CAPS` used to toggle Default QWERTY layer on and off
+
+![RGB and RESET Layer](https://imgur.com/mMHoJPa.png)
+
+### Build
+To build the firmware file associated with this keymap, simply run `make your_keyboard:stanrc85`.
index e5ddcae8d92774f4e5e8ef861d32b27f16b1c6a7..a2850a83057d400490679023cc9a214f30b682d7 100644 (file)
@@ -1 +1,66 @@
-TAP_DANCE_ENABLE = yes
+# project specific files
+SRC =  keyboards/zeal60/zeal60.c \
+               keyboards/zeal60/rgb_backlight.c \
+               drivers/issi/is31fl3733.c \
+               quantum/color.c \
+               drivers/arm/i2c_master.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 = STM32F3xx
+
+# Linker script to use
+#   it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no              # Enable keyboard backlight functionality
+BOOTMAGIC_ENABLE = no              # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes              # Mouse keys
+EXTRAKEY_ENABLE = yes              # Audio control and System control
+CONSOLE_ENABLE = no                # Console for debug
+COMMAND_ENABLE = no                # Commands for debug and configuration
+SLEEP_LED_ENABLE = no              # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes                  # USB Nkey Rollover
+AUDIO_ENABLE = no                  # Audio output on port C6
+NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in
+#SERIAL_LINK_ENABLE = yes
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
diff --git a/keyboards/hs60/v2/keymaps/win_osx_dual/keymap.c b/keyboards/hs60/v2/keymaps/win_osx_dual/keymap.c
new file mode 100644 (file)
index 0000000..31d7ec1
--- /dev/null
@@ -0,0 +1,97 @@
+/* Copyright 2018 Yiancar
+ *
+ * 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
+
+
+#define _QWERTY 0
+#define _OSX 1
+#define _RAISE 2
+#define _SHIFTER 3
+#define _ADJUST 16
+
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  OSX,
+  RAISE,
+  SHIFTER,
+};
+
+#define RAISE  MO(_RAISE)
+
+#define OSX_SHIFT LM(_SHIFTER, MOD_LSFT)
+#define OSX_ALT   LM(_SHIFTER, MOD_LALT)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = LAYOUT_60_iso( /* Windows ISO layout */
+    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_CAPS,    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_TAB,     KC_A,       KC_S,      KC_D,       KC_F,       KC_G,       KC_H,       KC_J,       KC_K,       KC_L,        KC_SCLN,    KC_QUOT,    KC_NUHS,    KC_ENT, \
+    KC_LSFT,    KC_NUBS,    KC_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,    RAISE ,     KC_RCTL),
+
+[_OSX] = LAYOUT_60_iso( /* OSX ISO 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_CAPS,    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_TAB,     KC_A,       KC_S,      KC_D,       KC_F,       KC_G,       KC_H,       KC_J,       KC_K,       KC_L,        KC_SCLN,    KC_QUOT,    A(KC_3),    KC_ENT, \
+    OSX_SHIFT,  KC_NUHS,    KC_Z,      KC_X,       KC_C,       KC_V,       KC_B,       KC_N,       KC_M,       KC_COMM,     KC_DOT,     KC_SLSH,                KC_RSFT,\
+    KC_LCTL,    OSX_ALT,    KC_LGUI,                                KC_SPC,                                                 KC_RGUI,    KC_RALT,    RAISE ,     KC_RCTL),
+
+[_RAISE] = LAYOUT_60_iso( /* Configuration */
+    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_TRNS,     QWERTY,    KC_TRNS,   KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,    OSX,         KC_TRNS,    KC_TRNS,    KC_TRNS,            \
+    KC_TRNS,     EF_INC,    H1_INC,    S1_INC,     H2_INC,     S2_INC,     BR_INC,     ES_INC,     KC_TRNS,    KC_TRNS,     KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS,\
+    KC_TRNS,     KC_UP,     EF_DEC,    H1_DEC,     S2_DEC,     H2_DEC,     S2_DEC,     BR_DEC,     ES_DEC,     KC_TRNS,     KC_TRNS,    KC_TRNS,                KC_TRNS,\
+    KC_LEFT,     KC_DOWN,   KC_RGHT,                               KC_TRNS,                                                 KC_TRNS,    KC_TRNS,    KC_TRNS,    KC_TRNS),
+
+[_SHIFTER] = LAYOUT_60_iso( /* Shift Mods makes a keyboard with windows key layout work on OSX*/
+    KC_TRNS,    S(KC_1),    S(KC_QUOT),S(KC_3),    S(KC_4),    S(KC_5),    S(KC_6),    S(KC_7),    S(KC_8),    S(KC_9),     S(KC_0),    S(KC_MINS), S(KC_EQL),   KC_DEL,\
+    KC_TRNS,    S(KC_Q),    S(KC_W),   S(KC_E),    S(KC_R),    S(KC_T),    S(KC_Y),    S(KC_U),    S(KC_I),    S(KC_O),     S(KC_P),    S(KC_LBRC), S(KC_RBRC),            \
+    KC_TRNS,    S(KC_A),    S(KC_S),   S(KC_D),    S(KC_F),    S(KC_G),    S(KC_H),    S(KC_J),    S(KC_K),    S(KC_L),     S(KC_SCLN), S(KC_2),    S(KC_NUBS),  KC_TRNS, \
+    KC_TRNS,    S(KC_NUHS), S(KC_Z),   S(KC_X),    S(KC_C),    S(KC_V),    S(KC_B),    S(KC_N),    S(KC_M),    S(KC_COMM),  S(KC_DOT),  S(KC_SLSH),              KC_TRNS,\
+    KC_TRNS,    KC_TRNS,   KC_TRNS,                                KC_TRNS,                                                 KC_TRNS,    KC_TRNS,    KC_TRNS,     KC_TRNS)
+
+
+};
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+    case OSX:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_OSX);
+      }
+      return false;
+
+  }
+  return true;
+}
diff --git a/keyboards/hs60/v2/keymaps/win_osx_dual/readme.md b/keyboards/hs60/v2/keymaps/win_osx_dual/readme.md
new file mode 100644 (file)
index 0000000..c2e58bf
--- /dev/null
@@ -0,0 +1,6 @@
+The default keymap for ISO HS60 V2
+==================================
+
+![Layout image](https://i.imgur.com/NEtFQcV.png)
+
+Default layer is normal ISO for windows. Second layout is Windows ISO layout but for OSX, but with the keys corrected so you will get the correct shifted and alt'd keys on OSX (keyboard keys match OSX keys without having to change your keyboard type in system preferences).  Layer three is configuration and other functions, and layer four is where the shifting magic happens.  Also tab and caps lock have been swapped around.
diff --git a/keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk b/keyboards/hs60/v2/keymaps/win_osx_dual/rules.mk
new file mode 100644 (file)
index 0000000..c89d909
--- /dev/null
@@ -0,0 +1,66 @@
+# project specific files
+SRC =  keyboards/zeal60/zeal60.c \
+               keyboards/zeal60/rgb_backlight.c \
+               drivers/issi/is31fl3733.c \
+               quantum/color.c \
+               drivers/arm/i2c_master.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 = STM32F3xx
+
+# Linker script to use
+#   it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+#   or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+#  - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+#  or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU  = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+#   comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no              # Enable keyboard backlight functionality
+BOOTMAGIC_ENABLE = yes             # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes              # Mouse keys
+EXTRAKEY_ENABLE = yes              # Audio control and System control
+CONSOLE_ENABLE = no                # Console for debug
+COMMAND_ENABLE = no                # Commands for debug and configuration
+SLEEP_LED_ENABLE = no              # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes                  # USB Nkey Rollover
+AUDIO_ENABLE = no                  # Audio output on port C6
+NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in
+#SERIAL_LINK_ENABLE = yes
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
index e6658ced9a30ea385015076d42958bbd20ebe2f8..e838426a2d97289373a74c04bc8076a2ba807ad7 100644 (file)
@@ -11,8 +11,27 @@ Hardware Availability: http://groupbuys.mechboards.co.uk/shop/hs60-hotswap-60-pc
 
 Due to the RGB implementation, the HS60 is currently not compatible with community layouts.
 
+## Instructions
+
+### Build
+
 Make example for this keyboard (after setting up your build environment):
 
     make hs60/v2: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.
\ No newline at end of file
+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.
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or dfu-util (`make hs60/v2:<keymap>:dfu-util`)
index a2850a83057d400490679023cc9a214f30b682d7..5659d28c9ff1017a7a6795e45b53cb759e79db8d 100644 (file)
@@ -61,6 +61,6 @@ AUDIO_ENABLE = no                  # Audio output on port C6
 NO_USB_STARTUP_CHECK = no          # Disable initialization only when usb is plugged in
 #SERIAL_LINK_ENABLE = yes
 
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+RAW_ENABLE = no
+DYNAMIC_KEYMAP_ENABLE = no
 CIE1931_CURVE = yes
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json b/keyboards/idobo/keymaps/greenshadowmaker/keyboard-layout-editor-gsm-idobo.json
new file mode 100644 (file)
index 0000000..9512207
--- /dev/null
@@ -0,0 +1,190 @@
+[
+  {
+    "name": "gsm-idobo",
+    "notes": "Massdrop xd75\n\nFront Legend = \"Adust\" layer (both lower and Raise)"
+  },
+  [
+    {
+      "a": 3
+    },
+    "Esc\n\n\n\nreset",
+    {
+      "t": "#0000ff\n#ff0000",
+      "a": 4
+    },
+    "\nF1\n\n\n\n\n\n\n\n1 !",
+    "\nF2\n\n\n\n\n\n\n\n2 @",
+    "\nF3\n\n\n\n\n\n\n\n3 #",
+    "\nF4\n\n\n\n\n\n\n\n4 $",
+    "\nF5\n\n\n\n\n\n\n\n5 %",
+    {
+      "t": "#000000",
+      "a": 7
+    },
+    "= +",
+    "",
+    "- _",
+    {
+      "t": "#0000ff\n#ff0000",
+      "a": 0
+    },
+    "\nF6\n\n\nrgbplain\n\n\n\n\n6 ^",
+    "\nF7\n\n\nrgbtest\n\n\n\n\n7 &",
+    "\nF8\n\n\nrgbmode\n\n\n\n\n8 *",
+    {
+      "a": 4
+    },
+    "\nF9\n\n\n\n\n\n\n\n9 (",
+    "\nF10\n\n\n\n\n\n\n\n0 )",
+    {
+      "t": "#000000",
+      "a": 7
+    },
+    "Bksp"
+  ],
+  [
+    "Tab",
+    "Q",
+    {
+      "t": "#0000ff\n#ff0000",
+      "a": 4
+    },
+    "PgUp\nUP\n\n\n\n\n\n\n\nW",
+    {
+      "t": "#000000",
+      "a": 7
+    },
+    "E",
+    {
+      "a": 3
+    },
+    "R\n\n\n\nrgb_tog",
+    "T\n\n\n\nbl_tog",
+    {
+      "a": 7
+    },
+    "",
+    "",
+    "[ {",
+    "T",
+    "Y",
+    "I",
+    "O",
+    "P",
+    "]"
+  ],
+  [
+    {
+      "c": "#0000ff",
+      "t": "#ffffff"
+    },
+    "Raise",
+    {
+      "c": "#cccccc",
+      "t": "#0000ff\n#ff0000",
+      "a": 4
+    },
+    "Home\nLEFT\n\n\n\n\n\n\n\nA",
+    {
+      "a": 0
+    },
+    "PgDwn\nDOWN\n\n\nrgb_hai\n\n\n\n\nS",
+    "End\nRIGHT\n\n\nrgb_sai\n\n\n\n\nD",
+    {
+      "t": "#000000",
+      "a": 3
+    },
+    "F\n\n\n\nrgb_vai",
+    "G\n\n\n\nbl_inc",
+    {
+      "a": 7
+    },
+    "",
+    "UP",
+    "",
+    "H",
+    "J",
+    "K",
+    "L",
+    "; :",
+    "' \""
+  ],
+  [
+    {
+      "a": 3
+    },
+    "Shift\n\n\n\neep_rst",
+    {
+      "a": 7
+    },
+    "Z",
+    {
+      "a": 3
+    },
+    "X\n\n\n\nrgb_hud",
+    "C\n\n\n\nrgb_sad",
+    "V\n\n\n\nrgb_vad",
+    "B\n\n\n\nbl_dec",
+    {
+      "a": 7
+    },
+    "LEFT",
+    "DOWN",
+    "RIGHT",
+    "N",
+    "M",
+    ", <",
+    ". >",
+    "/ ?",
+    {
+      "a": 6
+    },
+    "Shift"
+  ],
+  [
+    {
+      "a": 7
+    },
+    "` ~",
+    "\\ |",
+    "Alt",
+    "Ctrl",
+    {
+      "c": "#ff0000"
+    },
+    "Lower",
+    {
+      "c": "#eb7c15"
+    },
+    "Space",
+    {
+      "c": "#cccccc",
+      "t": "#0000ff\n#ff0000",
+      "a": 4
+    },
+    "\nApp\n\n\n\n\n\n\n\nOS",
+    {
+      "t": "#000000",
+      "a": 7
+    },
+    "Del",
+    "Enter",
+    {
+      "c": "#eb7c15"
+    },
+    "Space",
+    {
+      "c": "#0000ff",
+      "t": "#ffffff"
+    },
+    "Raise",
+    {
+      "c": "#cccccc",
+      "t": "#000000"
+    },
+    "",
+    "",
+    "",
+    "PrtScr"
+  ]
+]
\ No newline at end of file
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/keymap.c b/keyboards/idobo/keymaps/greenshadowmaker/keymap.c
new file mode 100644 (file)
index 0000000..e96459d
--- /dev/null
@@ -0,0 +1,152 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 16
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  LOWER,
+  RAISE,
+  ADJUST,
+};
+
+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      | ]      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | RAISE  | A      | S      | D      | F      | G      |        | UP     |        | H      | J      | K      | L      | ;      | '      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | LEFT   | DOWN   | RIGHT  | N      | M      | ,      | .      | /      | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | `      | \      | LALT   | LCTRL  | LOWER  | SPACE  | LGUI   | DEL    | ENTER  | SPACE  | RAISE  |        |        |        | PrtScr |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_5x15( \
+    KC_ESC,     KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINS, XXXXXXX,    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,    XXXXXXX, XXXXXXX,   KC_LBRC,   KC_Y,    KC_U,    KC_I,       KC_O,     KC_P, KC_RBRC,  \
+     RAISE,     KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    XXXXXXX,   KC_UP,   XXXXXXX,   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_LEFT, KC_DOWN,   KC_RGHT,   KC_N,    KC_M,    KC_COMM,  KC_DOT,  KC_SLSH, KC_RSFT, \
+  KC_GRAVE, KC_GRAVE, KC_LALT, KC_LCTL,   LOWER,  KC_SPC,    KC_LGUI,  KC_DEL,    KC_ENT, KC_SPC,   RAISE,    XXXXXXX, XXXXXXX,  XXXXXXX, KC_PSCR  \
+),
+
+
+/* LOWER
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * |        | F1     | F2     | F3     | F4     | F5     |        |        |        | F6     | F7     | F8     | F9     | F10    |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |  UP    |        |        |        |        |        |        |        |        |        | PR SCR |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | RAISE  | LEFT   |  DOWN  |  RIGHT |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        | LOWER  |        |  APP   |        |        |        |  RAISE |        |        |        |        |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_5x15( \
+    XXXXXXX,   KC_F1,   KC_F2,   KC_F3, XXXXXXX,   KC_F5, XXXXXXX, XXXXXXX, XXXXXXX,    KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10, XXXXXXX,  \
+    XXXXXXX, XXXXXXX,   KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  \
+      RAISE, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,   LOWER, XXXXXXX,  KC_APP, XXXXXXX, XXXXXXX,  XXXXXXX,   RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  \
+),
+
+ /* RAISE
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |  pgup  |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | RAISE  | home   |  pgdn  | end    |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        | LOWER  |        |        |        |        |        |  RAISE |        |        |        |        |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_5x15( \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  \
+    XXXXXXX, XXXXXXX,   KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  \
+      RAISE, KC_HOME, KC_PGDN,  KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,   LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX,   RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  \
+),
+
+
+ /* ADJUST
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | RESET  |        |        |        |        |        |        |        |        |rgbplain|rgbtest | rgbmode|        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |rgb tog | bl_tog |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | RAISE  |        | rgb hi | rgb sai|rgb vai | bl inc |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | EEP Rst|        | rgb hd | rgb sad|rgb vad | bl dec |        |        |        |        |        |        |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        | LOWER  |        |        |        |        |        |  RAISE |        |        |        |        |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_5x15( \
+    RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  RGB_M_P, RGB_M_T, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX,  \
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, BL_TOGG, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  \
+    RAISE, XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI,  BL_INC, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+  EEP_RST, XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD,  BL_DEC, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,   LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX,   RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  \
+),
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/readme.md b/keyboards/idobo/keymaps/greenshadowmaker/readme.md
new file mode 100644 (file)
index 0000000..bdd28d4
--- /dev/null
@@ -0,0 +1,3 @@
+# GreenShadowMaker keymap for idobo
+
+Note: keyboard-layout-editor-gsm-idobo.json shoudl be the matching layout for http://www.keyboard-layout-editor.com
diff --git a/keyboards/idobo/keymaps/greenshadowmaker/rules.mk b/keyboards/idobo/keymaps/greenshadowmaker/rules.mk
new file mode 100644 (file)
index 0000000..f6587a8
--- /dev/null
@@ -0,0 +1,3 @@
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+RGBLIGHT_ENABLE = yes      # Enable keyboard RGB underglow
index a5568e400defe2d37024e7fa9ee07544666b1edb..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1 +1,3 @@
-#include "../../config.h"
+#pragma once
+
+// place overrides here
index ed1ea90fe7c4957ba2701fce23394928f595e711..7d3612554bc75d0f8752ba2457b4ee020cdfeb5a 100644 (file)
@@ -36,7 +36,7 @@ $ make
 $ sudo cp bootloadHID /usr/bin
 ```
 
-In order to use the `./program` script, which can reboot the board into
+In order to use the `././util/atmega32a_program.py` script, which can reboot the board into
 the bootloader, you'll need Python 2 with PyUSB installed:
 
 ```
index 09684bd82563bf9fde9025ebe7de81ac8104a1d0..29dc2605de05d6db40b55075e3abebd7d98aa658 100644 (file)
@@ -36,7 +36,7 @@ $ make
 $ sudo cp bootloadHID /usr/bin
 ```
 
-In order to use the `./program` script, which can reboot the board into
+In order to use the `./util/atmega32a_program.py` script, which can reboot the board into
 the bootloader, you'll need Python 2 with PyUSB installed:
 
 ```
index 397889535e5248ec60d7721c373613a1a5a0d4d5..f7b8acc641b24fc5c508a43e3f4e3d3c7b921c01 100644 (file)
@@ -37,7 +37,7 @@ $ brew cask install crosspack-avr
 $ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
 ```
 
-In order to use the `./program` script, which can reboot the board into
+In order to use the `././util/atmega32a_program.py` script, which can reboot the board into
 the bootloader, you'll need Python 2 with PyUSB installed:
 
 ```
diff --git a/keyboards/jj50/keymaps/archetype/README.md b/keyboards/jj50/keymaps/archetype/README.md
new file mode 100644 (file)
index 0000000..a2ae4e9
--- /dev/null
@@ -0,0 +1,22 @@
+# archetype keymap for jj50 keyboards
+A keymap that can be used with the jj50 ortholinear keyboard.
+
+## Features
+
+- `QWERTY` layout (Default)
+- `COLEMAK` layout
+- `FN` layout (various keys that are rarely needed)
+- `FX` layout (Control lighting and audio)
+- Use `Left Ctrl` and `Left Alt` to output `()`, `[]` and `{}` by tapping once, twice or thrice respectively. Hold them down for the regular keycode (LCtrl or LAlt)
+- `Right Shift` when held or Enter when tapped
+- Auto-Shift enabled (long press on alphas and numeric keys outputs shifted character)
+- Full arrow keys available
+
+
+## Feedback
+
+I made this keymap based on the existing default one. If you happen to use this keymap [drop me a line](mailto://idimitrakopoulos@gmail.com) about what could be improved etc
+
+Enjoy!
+
+Iason Dimitrakopoulos
diff --git a/keyboards/jj50/keymaps/archetype/config.h b/keyboards/jj50/keymaps/archetype/config.h
new file mode 100644 (file)
index 0000000..7955796
--- /dev/null
@@ -0,0 +1,8 @@
+#pragma once
+
+#undef AUTO_SHIFT_TIMEOUT
+#undef TAPPING_TERM
+
+#define AUTO_SHIFT_TIMEOUT 150
+#define TAPPING_TERM 150
+//#define BOOTMAGIC_KEY_SALT KC_LCTL
diff --git a/keyboards/jj50/keymaps/archetype/keymap.c b/keyboards/jj50/keymaps/archetype/keymap.c
new file mode 100644 (file)
index 0000000..0704943
--- /dev/null
@@ -0,0 +1,215 @@
+/*
+Base Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Modified 2017 Andrew Novak <ndrw.nvk@gmail.com>
+Modified 2018 Wayne Jones (WarmCatUK) <waynekjones@gmail.com>
+Modified 2019 Iason Dimitrakopoulos (idimitrakopoulos) <idimitrakopoulos@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 LicensezZZ
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+#include "rgblight.h"
+#include "quantum.h"
+
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _FN 2
+#define _FX 3
+
+enum {
+  TD_BSPC_DEL = 0,
+  TD_LCTL_LBRC = 1,
+  TD_LALT_RBRC = 2,
+};
+
+
+void left_brackets(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      if (state->interrupted || !state->pressed) {
+        register_mods(MOD_LSFT);
+        register_code(KC_9);
+      } else {
+        register_mods(MOD_LCTL);
+      }
+    } else if (state->count == 2) {
+        register_code(KC_LBRC);
+    } else if (state->count == 3) {
+        register_mods(MOD_LSFT);
+        register_code(KC_LBRC);
+    }
+}
+
+void left_brackets_reset(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      if (state->interrupted || !state->pressed) {
+        unregister_mods(MOD_LSFT);
+        unregister_code(KC_9);
+      } else {
+        unregister_mods(MOD_LCTL);
+      }
+    } else if (state->count == 2) {
+        unregister_code(KC_LBRC);
+    } else if (state->count == 3) {
+        unregister_mods(MOD_LSFT);
+        unregister_code(KC_LBRC);
+    }
+}
+
+void right_brackets(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      if (state->interrupted || !state->pressed) {
+        register_mods(MOD_LSFT);
+        register_code(KC_0);
+      } else {
+        register_mods(MOD_LALT);
+      }
+    } else if (state->count == 2) {
+        register_code(KC_RBRC);
+    } else if (state->count == 3) {
+        register_mods(MOD_LSFT);
+        register_code(KC_RBRC);
+    }
+}
+
+void right_brackets_reset(qk_tap_dance_state_t *state, void *user_data) {
+    if (state->count == 1) {
+      if (state->interrupted || !state->pressed) {
+        unregister_mods(MOD_LSFT);
+        unregister_code(KC_0);
+      } else {
+        unregister_mods(MOD_LALT);
+      }
+    } else if (state->count == 2) {
+        unregister_code(KC_RBRC);
+    } else if (state->count == 3) {
+        unregister_mods(MOD_LSFT);
+        unregister_code(KC_RBRC);
+    }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  // Single tap = Backspace | Double tap = Delete
+  [TD_BSPC_DEL] = ACTION_TAP_DANCE_DOUBLE(KC_BSPC, KC_DEL),
+  // Single tap = ( | Double tap = [ | Triple tap = { | Single hold = KC_LCTL
+  [TD_LCTL_LBRC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, left_brackets, left_brackets_reset),
+  // Single tap = ) | Double tap = ] | Triple tap = } | Single hold = KC_LALT
+  [TD_LALT_RBRC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, right_brackets, right_brackets_reset),
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    [_QWERTY] = LAYOUT( \
+
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+.
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            KC_ESC,           KC_1,             KC_2,             KC_3,             KC_4,             KC_5,             KC_6,             KC_7,             KC_8,             KC_9,             KC_0,             KC_BSPC,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            KC_TAB,           KC_Q,             KC_W,             KC_E,             KC_R,             KC_T,             KC_Y,             KC_U,             KC_I,             KC_O,             KC_P,             KC_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_LSFT,          KC_Z,             KC_X,             KC_C,             KC_V,             KC_B,             KC_N,             KC_M,             KC_DOT,           KC_SLSH,          KC_UP,          SFT_T(KC_ENT),  \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+        TD(TD_LCTL_LBRC),     KC_LGUI,      TD(TD_LALT_RBRC),     _______,          _______,       LT(_FN, KC_SPC),  LT(_FN, KC_SPC),     _______,          KC_COMM,          KC_LEFT,          KC_DOWN,          KC_RGHT       \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+'
+    ),
+
+    [_COLEMAK] = LAYOUT( \
+
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+.
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          KC_F,             KC_P,             KC_G,             KC_J,             KC_L,             KC_U,             KC_Y,             KC_SCLN,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          KC_R,             KC_S,             KC_T,             KC_D,             _______,          KC_N,             KC_E,             KC_I,             KC_O,             _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          _______,          _______,          _______,          KC_K,             _______,          _______,          _______,          _______,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______       \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+'
+    ),
+
+    [_FN] = LAYOUT( \
+
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+.
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            KC_GRV,           KC_F1,            KC_F2,            KC_F3,            KC_F4,            KC_F5,            KC_F6,            KC_F7,            KC_F8,            KC_F9,            KC_F10,           KC_DEL,       \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            KC_PSCR,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          KC_EQUAL,     \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            KC_CAPS,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          KC_MINUS,     \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          KC_PGUP,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          KC_HOME,          KC_PGDN,          KC_END        \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+'
+    ),
+
+    [_FX] = LAYOUT( \
+
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+.
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          BL_ON,            BL_INC,           RGB_TOG,          RGB_MOD,          _______,          _______,          _______,          _______,          _______,          _______,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          BL_OFF,           BL_DEC,           RGB_HUI,          RGB_SAI,          RGB_VAI,          RGB_SPI,          _______,          _______,          _______,          _______,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          RGB_TOG,          BL_STEP,          RGB_HUD,          RGB_SAD,          RGB_VAD,          RGB_SPD,          _______,          _______,          _______,          _______,          _______,      \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+|
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+            _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______,          _______       \
+      //|                |                 |                 |                 |                 |                 |                 |                 |                 |                 |                 |                  |
+      //,----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+-----------------+'
+    ),
+
+
+};
diff --git a/keyboards/jj50/keymaps/archetype/rules.mk b/keyboards/jj50/keymaps/archetype/rules.mk
new file mode 100644 (file)
index 0000000..e32e8ce
--- /dev/null
@@ -0,0 +1,65 @@
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+# Modified 2018 Wayne Jones (WarmCatUK) <waynekjones@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/>.
+
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# processor frequency
+F_CPU = 12000000
+
+# 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 = bootloadHID
+
+# build options
+BOOTMAGIC_ENABLE = lite
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+NKRO_ENABLE = no
+# Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+TAP_DANCE_ENABLE = yes
+AUTO_SHIFT_ENABLE = yes
+
+
+DISABLE_WS2812 = no
+
+KEY_LOCK_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
+
+
+#OPT_DEFS = -DDEBUG_LEVEL=0
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC = matrix.c i2c.c backlight.c
+
+# programming options
+PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
+
+LAYOUTS = ortho_5x12
index 9d753eb8e6ea225c9e4760464e97e731438b2529..d5334d4956b9581c0cf2a82ec85f83539317ce99 100644 (file)
@@ -18,8 +18,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "rgblight.h"
 
 #define ______ KC_TRNS
 #define _DEFLT 0
@@ -113,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         _______, _______, _______, _______, _______, _______, _______,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
         BL_STEP, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY    \
     ),
-    
+
     /* Fn
      * ,-----------------------------------------------------------------------------------.
      * |      |      |  £   |      |      |      |      |      |      |      |      |      |
diff --git a/keyboards/jj50/program b/keyboards/jj50/program
deleted file mode 100644 (file)
index a88d9cd..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 Luiz Ribeiro <luizribeiro@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/>.
-
-from __future__ import print_function
-
-import os
-import sys
-import time
-import usb
-
-if len(sys.argv) < 2:
-    print('Usage: %s <firmware.hex>' % sys.argv[0])
-    sys.exit(1)
-
-print('Searching for ps2avrGB... ', end='')
-
-dev = usb.core.find(idVendor=0x20A0, idProduct=0x422D)
-if dev is None:
-    raise ValueError('Device not found')
-
-print('Found', end='\n\n')
-
-print('Device Information:')
-print('  idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
-print('  idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
-print('Manufacturer: %s' % (dev.iManufacturer))
-print('Serial: %s' % (dev.iSerialNumber))
-print('Product: %s' % (dev.iProduct), end='\n\n')
-
-print('Transferring control to bootloader... ', end='')
-
-dev.set_configuration()
-
-request_type = usb.util.build_request_type(
-        usb.util.CTRL_OUT,
-        usb.util.CTRL_TYPE_CLASS,
-        usb.util.CTRL_RECIPIENT_DEVICE)
-
-USBRQ_HID_SET_REPORT = 0x09
-HID_REPORT_OPTION = 0x0301
-
-
-try:
-    dev.ctrl_transfer(
-            request_type,
-            USBRQ_HID_SET_REPORT,
-            HID_REPORT_OPTION,
-            0,
-            [0, 0, 0xFF] + [0] * 5
-            )
-except usb.core.USBError:
-    # for some reason I keep getting USBError, but it works!
-    pass
-
-# wait a bit until bootloader starts up
-time.sleep(2)
-
-print('OK')
-print('Programming...')
-if os.system('bootloadHID -r "%s"' % sys.argv[1]) == 0:
-    print('\nDone!')
index 1a18ec4fe4facf385fefd8bf50c3b4a776602ebe..4ee5719185eade98ae452d1cba2aa6f29b763850 100644 (file)
@@ -58,6 +58,6 @@ CUSTOM_MATRIX = yes
 SRC = matrix.c i2c.c backlight.c
 
 # programming options
-PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
 
 LAYOUTS = ortho_5x12
index 29d93c10722364bd3b5aa775cfad1d0fc1c62f82..331d33155279842c7f0dca600856d79a3b36c9b5 100644 (file)
@@ -1,4 +1,4 @@
-#include "k_type.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [0] = KEYMAP(
index 08c51f6cb50cd9b8d2c917291a10da4374740da0..c4bea7eb03181cc6496277cf52559f9e7f8b5272 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
diff --git a/keyboards/katana60/keymaps/msiu/config.h b/keyboards/katana60/keymaps/msiu/config.h
new file mode 100644 (file)
index 0000000..b57cc48
--- /dev/null
@@ -0,0 +1,21 @@
+/* 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/msiu/keymap.c b/keyboards/katana60/keymaps/msiu/keymap.c
new file mode 100644 (file)
index 0000000..72b795b
--- /dev/null
@@ -0,0 +1,70 @@
+#include QMK_KEYBOARD_H
+
+// Mod-Tap keys for cleaner code
+#define ESC_CTL LCTL_T(KC_ESC)
+#define SPC_LW LT(2, KC_SPC)
+#define ENT_FN LT(4, KC_ENT)
+
+#define _QW 0
+#define _DV 1
+#define _LW 2
+#define _RS 3
+#define _FN 4
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = LAYOUT( /* Base */
+  KC_ESC,  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    TG(1),   KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_PLUS,
+  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,
+  ESC_CTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_HOME,          KC_PGUP, 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_END,  KC_DEL,  KC_PGDN, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+  KC_LCTL, KC_HYPR, KC_LALT, KC_LGUI,                   SPC_LW,  ENT_FN,  KC_SPC,           MO(3),   KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT
+    ),
+[_DV] = LAYOUT(
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    _______,          _______, KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______,
+  _______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    _______,          _______, KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
+  _______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    _______, _______, _______, KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______,
+  _______, _______, _______, _______,                   _______, _______, _______,          _______, _______, _______, _______, _______
+    ),
+[_LW] = 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_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______,          _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+  _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,            _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
+  _______, _______, _______, _______,                   _______, _______, _______,          _______, _______, _______, _______, _______
+    ),
+[_RS] = 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_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_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
+  _______, _______, _______, _______,                   _______, _______, _______,          _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+    ),
+[_FN] = LAYOUT(
+  _______, _______, _______, _______, _______, _______, _______, RESET,   _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______, KC_UP,   _______, KC_PSCR, _______,
+  _______, _______, _______, _______, _______, _______, _______,          _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______,                   _______, _______, _______,          _______, _______, _______, _______, _______
+    )
+};
+
+
+
+
+
+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/katana60/keymaps/msiu/readme.md b/keyboards/katana60/keymaps/msiu/readme.md
new file mode 100644 (file)
index 0000000..e4f0ebd
--- /dev/null
@@ -0,0 +1,3 @@
+# msiu's keymap for katana: standard QWERTY layout with planck like layers
+
+This layout take a standard QWERTY default layer, with raise and lower layers similar to planck. It is for me to easily transition between keyboards. I put a few nav keys in the 'tree' middle, but I have come to realise I rarely use them as I am used to the planck layering. Top of the tree is a toggle for Dvorak layer. 
index 31f2f9cf57eb648960a3d77db201f7c0729ae102..c24ed9caa5cf1b636127e6c007717e9344722dd8 100644 (file)
 {
     "keyboard_name": "KBD19x",
-    "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/kbd19x",
+    "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/kbdfans/kbd19x",
     "maintainer": "qmk",
     "width": 19.5,
     "height": 6.75,
     "layouts": {
         "LAYOUT_ansi": {
-           "key_count": 99,
-            "layout": [{"label":"Esc", "x":0, "y":0},
-                      {"label":"F1", "x":1.25, "y":0},
-                      {"label":"F2", "x":2.25, "y":0},
-                      {"label":"F3", "x":3.25, "y":0},
-                      {"label":"F4", "x":4.25, "y":0},
-                      {"label":"F5", "x":5.5, "y":0},
-                      {"label":"F6", "x":6.5, "y":0},
-                      {"label":"F7", "x":7.5, "y":0},
-                      {"label":"F8", "x":8.5, "y":0},
-                      {"label":"F9", "x":9.75, "y":0},
-                      {"label":"F10", "x":10.75, "y":0},
-                      {"label":"F11", "x":11.75, "y":0},
-                      {"label":"F12", "x":12.75, "y":0},
-                      {"label":"BkLgt Step", "x":14, "y":0},
-                      {"label":"Print Screen", "x":15.5, "y":0},
-                      {"label":"Scroll Lock", "x":16.5, "y":0},
-                      {"label":"Pause Break", "x":17.5, "y":0},
-                      {"label":"PgDn", "x":18.5, "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":"Num Lock", "x":15.5, "y":1.5},
-                      {"label":"/", "x":16.5, "y":1.5},
-                      {"label":"*", "x":17.5, "y":1.5},
-                      {"label":"-", "x":18.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":"7", "x":15.5, "y":2.5},
-                      {"label":"8", "x":16.5, "y":2.5},
-                      {"label":"9", "x":17.5, "y":2.5},
-                      {"label":"+", "x":18.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":15.5, "y":3.5},
-                      {"label":"5", "x":16.5, "y":3.5},
-                      {"label":"6", "x":17.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":1.75},
-                      {"label":"1", "x":15.5, "y":4.5},
-                      {"label":"2", "x":16.5, "y":4.5},
-                      {"label":"3", "x":17.5, "y":4.5},
-                      {"label":"Enter", "x":18.5, "y":4.5, "h":2},
-                      {"label":"\u2191", "x":14.25, "y":4.75},
-                      {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
-                      {"label":"Win", "x":1.25, "y":5.5},
-                      {"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
-                      {"x":3.5, "y":5.5, "w":6.25},
-                      {"label":"Alt", "x":9.75, "y":5.5},
-                      {"label":"MO(1)", "x":10.75, "y":5.5},
-                      {"label":"Ctrl", "x":11.75, "y":5.5, "w":1.25},
-                      {"label":"0", "x":16.5, "y":5.5},
-                      {"label":".", "x":17.5, "y":5.5},
-                      {"label":"\u2190", "x":13.25, "y":5.75},
-                      {"label":"\u2193", "x":14.25, "y":5.75},
-                      {"label":"\u2192", "x":15.25, "y":5.75}]
+            "key_count": 99,
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"F1", "x":1.25, "y":0},
+                {"label":"F2", "x":2.25, "y":0},
+                {"label":"F3", "x":3.25, "y":0},
+                {"label":"F4", "x":4.25, "y":0},
+                {"label":"F5", "x":5.5, "y":0},
+                {"label":"F6", "x":6.5, "y":0},
+                {"label":"F7", "x":7.5, "y":0},
+                {"label":"F8", "x":8.5, "y":0},
+                {"label":"F9", "x":9.75, "y":0},
+                {"label":"F10", "x":10.75, "y":0},
+                {"label":"F11", "x":11.75, "y":0},
+                {"label":"F12", "x":12.75, "y":0},
+                {"label":"Extra Esc", "x":14, "y":0},
+                {"label":"PrtSc", "x":15.5, "y":0},
+                {"label":"Pause", "x":16.5, "y":0},
+                {"label":"Insert", "x":17.5, "y":0},
+                {"label":"Home", "x":18.5, "y":0},
+                {"label":"`~", "x":0, "y":1.5},
+                {"label":"1!", "x":1, "y":1.5},
+                {"label":"2@", "x":2, "y":1.5},
+                {"label":"3#", "x":3, "y":1.5},
+                {"label":"4$", "x":4, "y":1.5},
+                {"label":"5%", "x":5, "y":1.5},
+                {"label":"6^", "x":6, "y":1.5},
+                {"label":"7&", "x":7, "y":1.5},
+                {"label":"8*", "x":8, "y":1.5},
+                {"label":"9(", "x":9, "y":1.5},
+                {"label":"0)", "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":"Num Lock", "x":15.5, "y":1.5},
+                {"label":"/", "x":16.5, "y":1.5},
+                {"label":"*", "x":17.5, "y":1.5},
+                {"label":"-", "x":18.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":"7", "x":15.5, "y":2.5},
+                {"label":"8", "x":16.5, "y":2.5},
+                {"label":"9", "x":17.5, "y":2.5},
+                {"label":"+", "x":18.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":15.5, "y":3.5},
+                {"label":"5", "x":16.5, "y":3.5},
+                {"label":"6", "x":17.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":1.75},
+                {"label":"Up", "x":14.25, "y":4.75},
+                {"label":"1", "x":15.5, "y":4.5},
+                {"label":"2", "x":16.5, "y":4.5},
+                {"label":"3", "x":17.5, "y":4.5},
+                {"label":"Enter", "x":18.5, "y":4.5, "h":2},
+                {"label":"Control", "x":0, "y":5.5, "w":1.25},
+                {"label":"GUI", "x":1.25, "y":5.5},
+                {"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
+                {"label":"Space", "x":3.5, "y":5.5, "w":6.25},
+                {"label":"Alt", "x":9.75, "y":5.5},
+                {"label":"Fn", "x":10.75, "y":5.5},
+                {"label":"Control", "x":11.75, "y":5.5, "w":1.25},
+                {"label":"Left", "x":13.25, "y":5.75},
+                {"label":"Right", "x":14.25, "y":5.75},
+                {"label":"Down", "x":15.25, "y":5.75},
+                {"label":"0", "x":16.5, "y":5.5},
+                {"label":".", "x":17.5, "y":5.5}
+            ]
         },
         "LAYOUT_all": {
-           "key_count": 103,
-            "layout": [{"label":"Esc", "x":0, "y":0},
-                      {"label":"F1", "x":1.25, "y":0},
-                      {"label":"F2", "x":2.25, "y":0},
-                      {"label":"F3", "x":3.25, "y":0},
-                      {"label":"F4", "x":4.25, "y":0},
-                      {"label":"F5", "x":5.5, "y":0},
-                      {"label":"F6", "x":6.5, "y":0},
-                      {"label":"F7", "x":7.5, "y":0},
-                      {"label":"F8", "x":8.5, "y":0},
-                      {"label":"F9", "x":9.75, "y":0},
-                      {"label":"F10", "x":10.75, "y":0},
-                      {"label":"F11", "x":11.75, "y":0},
-                      {"label":"F12", "x":12.75, "y":0},
-                      {"label":"BkLgt Step", "x":14, "y":0},
-                      {"label":"Print Screen", "x":15.5, "y":0},
-                      {"label":"Scroll Lock", "x":16.5, "y":0},
-                      {"label":"Pause Break", "x":17.5, "y":0},
-                      {"label":"PgDn", "x":18.5, "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},
-                      {"x":13, "y":1.5},
-                      {"label":"BS", "x":14, "y":1.5},
-                      {"label":"Num Lock", "x":15.5, "y":1.5},
-                      {"label":"/", "x":16.5, "y":1.5},
-                      {"label":"*", "x":17.5, "y":1.5},
-                      {"label":"-", "x":18.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":"7", "x":15.5, "y":2.5},
-                      {"label":"8", "x":16.5, "y":2.5},
-                      {"label":"9", "x":17.5, "y":2.5},
-                      {"label":"+", "x":18.5, "y":2.5},
-                      {"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":15.5, "y":3.5},
-                      {"label":"5", "x":16.5, "y":3.5},
-                      {"label":"6", "x":17.5, "y":3.5},
-                      {"x":18.5, "y":3.5},
-                      {"label":"Shift", "x":0, "y":4.5, "w":1.25},
-                      {"x":1.25, "y":4.5},
-                      {"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":1.75},
-                      {"label":"1", "x":15.5, "y":4.5},
-                      {"label":"2", "x":16.5, "y":4.5},
-                      {"label":"3", "x":17.5, "y":4.5},
-                      {"label":"Enter", "x":18.5, "y":4.5},
-                      {"label":"\u2191", "x":14.25, "y":4.75},
-                      {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
-                      {"label":"Win", "x":1.25, "y":5.5},
-                      {"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
-                      {"x":3.5, "y":5.5, "w":6.25},
-                      {"label":"Alt", "x":9.75, "y":5.5},
-                      {"label":"Menu", "x":10.75, "y":5.5},
-                      {"label":"Ctrl", "x":11.75, "y":5.5, "w":1.25},
-                      {"label":"0", "x":16.5, "y":5.5},
-                      {"label":".", "x":17.5, "y":5.5},
-                      {"x":18.5, "y":5.5},
-                      {"label":"\u2190", "x":13.25, "y":5.75},
-                      {"label":"\u2193", "x":14.25, "y":5.75},
-                      {"label":"\u2192", "x":15.25, "y":5.75}]
+            "key_count": 103,
+            "layout": [
+                {"label":"Esc", "x":0, "y":0},
+                {"label":"F1", "x":1.25, "y":0},
+                {"label":"F2", "x":2.25, "y":0},
+                {"label":"F3", "x":3.25, "y":0},
+                {"label":"F4", "x":4.25, "y":0},
+                {"label":"F5", "x":5.5, "y":0},
+                {"label":"F6", "x":6.5, "y":0},
+                {"label":"F7", "x":7.5, "y":0},
+                {"label":"F8", "x":8.5, "y":0},
+                {"label":"F9", "x":9.75, "y":0},
+                {"label":"F10", "x":10.75, "y":0},
+                {"label":"F11", "x":11.75, "y":0},
+                {"label":"F12", "x":12.75, "y":0},
+                {"label":"Extra Esc", "x":14, "y":0},
+                {"label":"PrtSc", "x":15.5, "y":0},
+                {"label":"Pause", "x":16.5, "y":0},
+                {"label":"Insert", "x":17.5, "y":0},
+                {"label":"Home", "x":18.5, "y":0},
+                {"label":"`~", "x":0, "y":1.5},
+                {"label":"1!", "x":1, "y":1.5},
+                {"label":"2@", "x":2, "y":1.5},
+                {"label":"3#", "x":3, "y":1.5},
+                {"label":"4$", "x":4, "y":1.5},
+                {"label":"5%", "x":5, "y":1.5},
+                {"label":"6^", "x":6, "y":1.5},
+                {"label":"7&", "x":7, "y":1.5},
+                {"label":"8*", "x":8, "y":1.5},
+                {"label":"9(", "x":9, "y":1.5},
+                {"label":"0)", "x":10, "y":1.5},
+                {"label":"-_", "x":11, "y":1.5},
+                {"label":"=+", "x":12, "y":1.5},
+                {"label":"Split Backspace (Left)", "x":13, "y":1.5},
+                {"label":"Split Backspace (Right)", "x":14, "y":1.5},
+                {"label":"Num Lock", "x":15.5, "y":1.5},
+                {"label":"/", "x":16.5, "y":1.5},
+                {"label":"*", "x":17.5, "y":1.5},
+                {"label":"-", "x":18.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":"7", "x":15.5, "y":2.5},
+                {"label":"8", "x":16.5, "y":2.5},
+                {"label":"9", "x":17.5, "y":2.5},
+                {"label":"Split + (Top)", "x":18.5, "y":2.5},
+                {"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":15.5, "y":3.5},
+                {"label":"5", "x":16.5, "y":3.5},
+                {"label":"6", "x":17.5, "y":3.5},
+                {"label":"Split + (Bottom)", "x":18.5, "y":3.5},
+                {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+                {"label":"ISO Backslash", "x":1.25, "y":4.5},
+                {"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":1.75},
+                {"label":"Up", "x":14.25, "y":4.75},
+                {"label":"1", "x":15.5, "y":4.5},
+                {"label":"2", "x":16.5, "y":4.5},
+                {"label":"3", "x":17.5, "y":4.5},
+                {"label":"Split Enter (Top)", "x":18.5, "y":4.5},
+                {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+                {"label":"GUI", "x":1.25, "y":5.5},
+                {"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
+                {"label":"Space", "x":3.5, "y":5.5, "w":6.25},
+                {"label":"Alt", "x":9.75, "y":5.5},
+                {"label":"Fn", "x":10.75, "y":5.5},
+                {"label":"Ctrl", "x":11.75, "y":5.5, "w":1.25},
+                {"label":"Left", "x":13.25, "y":5.75},
+                {"label":"Down", "x":14.25, "y":5.75},
+                {"label":"Right", "x":15.25, "y":5.75},
+                {"label":"0", "x":16.5, "y":5.5},
+                {"label":".", "x":17.5, "y":5.5},
+                {"label":"Split Enter (Bottom)", "x":18.5, "y":5.5}
+            ]
         }
     }
 }
-
index d7a851e3ebd074bf08819ee16baaea3dfa917b35..df0251fa42056832af8f17ca954c090fc69b7bfe 100644 (file)
@@ -13,8 +13,7 @@
  * 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 KBD4X_H
-#define KBD4X_H
+#pragma once
 
 #include "quantum.h"
 
@@ -44,5 +43,3 @@
        { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
        { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \
 }
-
-#endif
index 6cfd92bc63b15d68eb3b02c10896d9c71b197435..de03b833ce2e9c2bde98114d73c5233ef26cd6ff 100644 (file)
@@ -62,7 +62,7 @@ BOOTLOADER = atmel-dfu
 # Build Options
 #   change yes to no to disable
 #
-BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration(+1000)
 MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
 EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
 CONSOLE_ENABLE = yes        # Console for debug(+400)
index 48262f785956c4494a4ab5b37dc0139db7cc5a7a..730df130778aa8326b99216e07897ddc6a689202 100644 (file)
@@ -15,8 +15,7 @@ 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"
 
@@ -182,4 +181,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 6a4b99ec42599cabf5ef23eb30c0a02e87677277..797b331b0d72b42d1b7297a3cd1de9f28f65b161 100644 (file)
@@ -13,8 +13,7 @@
  * 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 KBD66_H
-#define KBD66_H
+#pragma once
 
 #include "quantum.h"
 
@@ -33,4 +32,3 @@
     { k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, k48, KC_NO, k4A, k4B, k4C,   k4D, k4E,   k4F}, \
 }
 
-#endif
index c7b3d6ecc333a01fc124b36585eef2ae695467df..6d42fc568a1a79825e127b383a0394db978f2700 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index dcc9b5bbd65fbe291d3d5a348defd1edc813e0ed..764bdf424f91c8be217810284f683efabdf80a54 100644 (file)
@@ -51,7 +51,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 # Build Options
 #   change yes to no to disable
 #
-BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
+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 = yes        # Console for debug(+400)
index a24afd16c6003f6802b8f80dfdd68994a60bdcdc..8822b213e3c66af185f688941410fa46f1ba9cd9 100644 (file)
@@ -66,7 +66,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   #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
+  #define RGBLIGHT_ANIMATIONS
 // /*== or choose animations ==*/
 //   #define RGBLIGHT_EFFECT_BREATHING
 //   #define RGBLIGHT_EFFECT_RAINBOW_MOOD
index 89fa9a534d33954482fa49e2f22336eac143cf1d..13a8a420d2fa9b8d45670ad8209e82b782a53bb3 100644 (file)
@@ -24,13 +24,13 @@ enum custom_keycodes {
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 /* Keymap (Base Layer) Default Layer
    * ,----------------------------------------------------------------.
-   * |Esc | 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |~ ` |
+   * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |Home|
    * |----------------------------------------------------------------|
-   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |Del |
+   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |PgUp|
    * |----------------------------------------------------------------|
-   * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgUp|
+   * |Ctrl   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |PgDn|
    * |----------------------------------------------------------------|
-   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up|PgDn|
+   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift | Up|End |
    * |----------------------------------------------------------------|
    * |Ctrl|Win |Alt |        Space          |Alt| FN|Ctrl|Lef|Dow|Rig |
    * `----------------------------------------------------------------'
@@ -44,15 +44,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   /* Keymap Fn Layer
    * ,----------------------------------------------------------------.
-   * |   | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del    |Ins |
+   * |~ `|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del    |Ins |
    * |----------------------------------------------------------------|
-   * |     |   |Up |   |   |   |   |   |   |   |   |   |   |     |Hme |
+   * |Caps |   |Up |   |   |   |   |   |PSc|SLk|Pau|Up |   |     |    |
    * |----------------------------------------------------------------|
-   * |      |<- |Dn | ->|   |   |   |   |   |   |   |   |        |End |
+   * |      |Lef|Dow|Rig|   |   |   |   |Hom|PUp|Lef|Rig|        |    |
    * |----------------------------------------------------------------|
-   * |        |   |   |Bl-|BL |BL+|   |VU-|VU+|MUT|   |   McL|MsU|McR |
+   * |        |   |   |   |   |   |   |   |End|PDn|Dow|      |PUp|    |
    * |----------------------------------------------------------------|
-   * |    |    |    |                       |   |   |    |MsL|MsD|MsR |
+   * |    |    |    |                       |   |   |    |Hom|PDn|End |
    * `----------------------------------------------------------------'
    */
 [1] = LAYOUT_65_ansi(
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/koba/config.h b/keyboards/kbdfans/kbd67/rev1/keymaps/koba/config.h
new file mode 100644 (file)
index 0000000..f4d7de0
--- /dev/null
@@ -0,0 +1,17 @@
+/* Copyright 2019 Daisuke Kobayashi
+ *
+ * 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
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/koba/keymap.c b/keyboards/kbdfans/kbd67/rev1/keymaps/koba/keymap.c
new file mode 100644 (file)
index 0000000..b00805e
--- /dev/null
@@ -0,0 +1,61 @@
+/* Copyright 2019 Daisuke Kobayashi
+ *
+ * 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
+#include "keymap_jp.h"
+
+#define RGB_RMO RGB_RMOD
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap (Base Layer) Default Layer
+   * ,----------------------------------------------------------------.
+   * |Esc|  1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  ^|  \|BS |Del |
+   * |----------------------------------------------------------------|
+   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  @|  [| Ent |PgUp|
+   * |------------------------------------------------------.    |----|
+   * |H/Z   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  :|  ]|    |PgDn|
+   * |----------------------------------------------------------------|
+   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift |Up |PScr|
+   * |----------------------------------------------------------------|
+   * |Ctrl|Win |Alt | Space    |Fn | Space  |Alt |Ctrl|  |Lef|Dow|Rig |
+   * `------------------------------------------------'  `------------'
+   */
+[0] = 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, JP_CIRC, KC_JYEN, KC_BSPC, KC_DELT, \
+  KC_TAB,     KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,    KC_O,    KC_P,    JP_AT,   JP_LBRC, JP_RBRC,       KC_PGUP, \
+  KC_ZKHK,       KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,    KC_L,    KC_SCLN, JP_COLN,       KC_ENT,        KC_PGDN, \
+  KC_LSFT, XXXXXXX, 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_PSCR, \
+  KC_LCTL, KC_LGUI, KC_LALT,        KC_SPC,         MO(1),          KC_SPC,          KC_RALT, KC_RCTL, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT),
+
+  /* Keymap Fn Layer
+   * ,----------------------------------------------------------------.
+   * |Rst| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|   |   |Ins |
+   * |----------------------------------------------------------------|
+   * |     |M- |M+ |RGB|H- |H+ |   |   |Prt|SLk|Pau|   |   |     |    |
+   * |------------------------------------------------------.    |----|
+   * |Caps  |Vo-|Vo+|Mut|S- |S+ |  *|  /|Hom|PUp|   |   |   |    |    |
+   * |----------------------------------------------------------------|
+   * |        |BL-|BL+|BL |V- |V+ |  +|  -|End|PDn|  _|      |PUp|    |
+   * |----------------------------------------------------------------|
+   * |    |    |    | Muhenkan |   | Henkan |Kana|Menu|  |Hom|PDn|End |
+   * `------------------------------------------------'  `------------'
+   */
+[1] = LAYOUT_all(
+   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, XXXXXXX,_______,KC_INS,  \
+   _______,   RGB_RMO,RGB_MOD,RGB_TOG,RGB_HUD,RGB_HUI,XXXXXXX,XXXXXXX,KC_PSCR,KC_SLCK,KC_PAUS,XXXXXXX,XXXXXXX,XXXXXXX,     _______, \
+   KC_CAPS,     KC_VOLD,KC_VOLU,KC_MUTE,RGB_SAD,RGB_SAI,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,XXXXXXX,XXXXXXX,      KC_PENT,     _______, \
+   _______,_______,BL_DEC, BL_INC, BL_TOGG,RGB_VAD,RGB_VAI,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,JP_UNDS,_______,        KC_PGUP,_______, \
+   _______,_______,_______,        KC_MHEN,        _______,        KC_HENK,        KC_KANA,KC_APP, _______,KC_HOME,KC_PGDN,KC_END),
+};
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/koba/readme.md b/keyboards/kbdfans/kbd67/rev1/keymaps/koba/readme.md
new file mode 100644 (file)
index 0000000..b432436
--- /dev/null
@@ -0,0 +1,7 @@
+# Koba's keymap for KBD67
+
+![keyboard-layout](https://user-images.githubusercontent.com/1042121/54736578-244ffe80-4bef-11e9-9882-37611b4efdf4.png)
+
+- JIS layout.
+- Fn layer is arranged like HHKB.
+- 3 splitted space bar. (Space-Fn-Space)
index 4ee136393a7289cffdb3cc4f7b01577e95a44229..f27a00191a2bed7c523b2a82bbf8f1a1da48bda5 100644 (file)
@@ -13,8 +13,7 @@
  * 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 REV1_H
-#define REV1_H
+#pragma once
 
 #include "quantum.h"
 
@@ -56,4 +55,3 @@
     { K40, K41,   KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C,   K4D,   K4E,   K4F }, \
 }
 
-#endif
index 3d0c70f77ab8f849e80bc63d1cbfe4b2d8707ada..46e3c2460736f3afa16d7d0b22b7ed6756b36817 100644 (file)
@@ -13,8 +13,7 @@
  * 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 KBD6X_H
-#define KBD6X_H
+#pragma once
 
 #include "quantum.h"
 
@@ -32,5 +31,3 @@
     { K30, K31, K32, K33,   K34,   K35,   K36, K37,   K38,   K39,   K3A, K3B, K3C, KC_NO }, \
     { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D   }, \
 }
-
-#endif
index fa324be9a116fe40f05525984e1d2ba3a4f9a614..3404cc4e491a85baa6a97ff7cdbe8228c11aa84a 100644 (file)
@@ -56,9 +56,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
    * │      │ ← │ ↓ │ → │PgD│   │   │   │MW↑│M← │M↓ │M→ │        │
    * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
-   * │        │Mut│VoD│VoU│Ply│Prv│Nxt│MW←│MW→│M4 │M5 │      │   │
+   * │        │Mut│Vo-│Vo+│Ply│Prv│Nxt│MW←│MW→│M4 │M5 │      │   │
    * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
-   *       │   │     │            MW↓            │MAcl2│   │
+   *       │DPR│DstNA│            MW↓            │MAcl2│   │
    *       └───┴─────┴───────────────────────────┴─────┴───┘
    */
   [L_FN] = LAYOUT(
@@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _______, KC_HOME, KC_UP,   KC_END,  KC_PGUP, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, KC_BTN3, KC_DEL,
     _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______,
     _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_WH_L, KC_WH_R, KC_BTN4, KC_BTN5, _______, _______,
-    XXXXXXX, _______, _______,                   KC_WH_D,                   KC_ACL2, _______, XXXXXXX
+    XXXXXXX, DST_P_R, DST_N_A,                   KC_WH_D,                   KC_ACL2, _______, XXXXXXX
   ),
 
   /* RCtrl layer
@@ -79,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
    * │        │   │   │   │   │   │   │   │   │   │   │      │   │
    * └─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┘
-   *       │Dst│Dstp←│                           │Dstp→│   │
+   *       │DtR│DstA │                           │     │   │
    *       └───┴─────┴───────────────────────────┴─────┴───┘
    */
   [L_RCTRL] = LAYOUT(
@@ -87,6 +87,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     _______, TOP,     MV_UP,   BOTTOM,  PRV_TAB, _______, _______, _______, _______, _______, _______, _______, _______, CLEAR,
     _______, MV_LEFT, MV_DOWN, MV_RGHT, NXT_TAB, _______, _______, _______, _______, _______, _______, _______, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-    XXXXXXX, DESKTOP, DSKTP_L,                   _______,                   DSKTP_R, _______, XXXXXXX
+    XXXXXXX, DST_REM, DST_ADD,                   _______,                   _______, _______, XXXXXXX
   ),
 };
index a45a631dc04ae64d5f84489e37d2f1f697ab85d9..4e485bf7667a1b26510db1b5d9229caab225e82b 100644 (file)
@@ -1,2 +1,11 @@
+BOOTMAGIC_ENABLE  = no
+COMMAND_ENABLE    = yes
+CONSOLE_ENABLE    = yes
+EXTRAKEY_ENABLE   = yes
+MOUSEKEY_ENABLE   = yes
+NKRO_ENABLE       = yes
+TAP_DANCE_ENABLE  = yes
+UNICODEMAP_ENABLE = yes
+
 BACKLIGHT_ENABLE = no
 RGBLIGHT_ENABLE  = no
index 8e6f094500bfe5fb5e7af17ff125a91c9bad3704..ad8706ba97e85bdba0707bc08beeb62c9d8ee617 100644 (file)
@@ -1,5 +1,4 @@
-#ifndef KBD75_H
-#define KBD75_H
+#pragma once
 
 #include "quantum.h"
 
@@ -12,4 +11,3 @@
     #include "rev2.h"
 #endif
 
-#endif
index 0f756350514c248c3f92d5264af4a99344a44bee..4496c59100617fc8c9e820df1515a623273b5d14 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 7fa3bf328ec94721cdc1626374db562e84209b63..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
-
-#endif
+// place overrides here
index 7986b504162a07c720313b067af13d4a59d566b8..01bb31a6e14a0617890c0a15d6ed1d12c782a859 100644 (file)
@@ -17,16 +17,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #pragma once
 
-/* Use I2C or Serial, not both */
-
-#define USE_SERIAL
 // #define USE_I2C
-
-/* Select hand configuration */
-
-#define MASTER_LEFT
-// #define MASTER_RIGHT
-// #define EE_HANDS
+#define EE_HANDS
 
 #undef RGBLED_NUM
 #define RGBLIGHT_ANIMATIONS
index 4644c3d9b55d8ed303fc03cf619377af071abb6e..f0e4d6f15b6876495d6fcf9898891087f473c7c3 100644 (file)
@@ -5,7 +5,7 @@ extern keymap_config_t keymap_config;
 #define _QWERTY 0
 #define _LOWER 1
 #define _RAISE 2
-#define _ADJUST 16
+#define _ADJUST 3
 
 enum custom_keycodes {
   QWERTY = SAFE_RANGE,
@@ -20,25 +20,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
      KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                               KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                               KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL,
+     KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                               KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
      KC_LSFT, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                               KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
   //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_HOME,          KC_END,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+     KC_LCTL, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_GRV,           KC_DEL,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
   //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
-                                    KC_LGUI, LOWER,   KC_ENT,                    KC_SPC,  RAISE,   KC_LALT
+                                    KC_LGUI, LOWER,   KC_ENT,                    KC_SPC,  RAISE,   KC_RALT
                                 // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
   ),
 
   [_LOWER] = LAYOUT(
   //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
-     KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                            KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+     KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                            KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PGUP,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
-     RESET,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                               KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______,
+     RESET,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                               KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_PGDN,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_DEL,  _______, KC_LEFT, KC_RGHT, KC_UP,   KC_LBRC,                            KC_RBRC, KC_P4,   KC_P5,   KC_P6,   KC_PLUS, KC_PIPE,
+     KC_DEL,  _______, KC_LEFT, KC_RGHT, KC_UP,   KC_LBRC,                            KC_RBRC, KC_P4,   KC_P5,   KC_P6,   KC_PLUS, KC_HOME,
   //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     BL_STEP, _______, _______, _______, KC_DOWN, KC_LCBR, KC_LPRN,          KC_RPRN, KC_RCBR, KC_P1,   KC_P2,   KC_P3,   KC_MINS, _______,
+     BL_STEP, _______, _______, _______, KC_DOWN, KC_LCBR, KC_LPRN,          KC_RPRN, KC_RCBR, KC_P1,   KC_P2,   KC_P3,   KC_MINS, KC_END,
   //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
                                     _______, _______, KC_DEL,                    KC_DEL,  _______, KC_P0
                                 // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
      RGB_TOG, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                            KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
-     RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS,                            KC_EQL,  KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
+     RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS,                            KC_EQL,  KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, _______,
   //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
      KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN,          _______, KC_PLUS, KC_END,  RGB_HUD, RGB_SAD, RGB_VAD, _______,
   //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
index 1610c4b12426313b9bce5a4b103e73179eb38bd2..954d0d3b99ae15f9733f04edc7b27d156bf74cf6 100644 (file)
@@ -1,10 +1,7 @@
 #ifndef CONFIG_USER_H
 #define CONFIG_USER_H
 
-#include "config_common.h"
-
 /* Use I2C or Serial, not both */
-
 #define USE_SERIAL
 // #define USE_I2C
 
 // #define MASTER_RIGHT
 // #define EE_HANDS
 
+#define SWAP_SCLN
+#define TAPPING_TERM 300
+#define IGNORE_MOD_TAP_INTERRUPT
+
 #undef RGBLED_NUM
-#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
 #define RGBLED_NUM 10
+#define RGBLIGHT_LIMIT_VAL 100
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 8
 #define RGBLIGHT_VAL_STEP 8
-#define RGBLIGHT_LIMIT_VAL 100
-
-#define MOUSEKEY_WHEEL_MAX_SPEED   10
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 20
-
-#define TAPPING_TERM 120
-#define SWAP_SCLN
 
-#endif
+#endif // CONFIG_USER_H
index f5d305f7f49dedb0f90f945793925f79f69b42f8..be287390dd57ebf3c09709c56c8e7a16df40b5a6 100644 (file)
 #include QMK_KEYBOARD_H
 #include "edvorakjp.h"
 
-enum custom_keycodes {
-  KC_LOCK = NEW_SAFE_RANGE,
-};
+/*
+ * enum custom_keycodes {
+ *   KC_LOCK = NEW_SAFE_RANGE,
+ * };
+ */
 
 #define KC_ KC_TRNS
 
-#define KC_TMB1 LGUI_T(KC_TAB)
-#define KC_TMB2 LSFT_T(KC_SPC)
-#define KC_TMB3 LOWER // act as LOWER when hold, as KC_LANG2(=English) when tapped
-#define KC_TMB4 LCTL_T(KC_ESC)
-#define KC_TMB5 RSFT_T(KC_DEL)
-#define KC_TMB6 RAISE // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
-#define KC_TMB7 RCTL_T(KC_BSPC)
-#define KC_TMB8 RALT_T(KC_ENT)
-#define KC_TMB9 LGUI(KC_TAB)
-
-#define KC_RST  RESET
-#define KC_DBUG DEBUG
-#define KC_RTOG RGB_TOG
-#define KC_EDJP EDVORAK
-#define KC_QWER QWERTY
+#define KC_TMB1 KC_LA(TAB)
+#define KC_TMB2 KC_LS(SPC)
+#define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
+#define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
+#define KC_TMB5 KC_RC(BSPC)
+#define KC_TMB6 KC_RG(ENT)
+#define KC_TMB7 KC_RC(DEL)
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   [_EDVORAK] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-     GRV ,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     LBRC,RBRC,COMM,DOT , Y  , P  ,                F  , G  , R  , W  , Q  ,BSLS,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     EQL , A  , O  , E  , I  , U  ,                D  , T  , N  , S  , M  ,MINS,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     QUOT,SCLN, X  , C  , V  , Z  ,TMB4,     TMB5, B  , H  , J  , K  , L  ,SLSH,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-                       TMB1,TMB2,TMB3,         TMB6,TMB7,TMB8
-  //                  `----+----+----'        `----+----+----'
-  ),
-
-  [_EDVORAKJ1] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         , AI , OU , EI ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                   ,    ,    , Y  ,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,    ,         ,    ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-                           ,    ,    ,             ,    ,
-  //                  `----+----+----'        `----+----+----'
-  ),
-
-  [_EDVORAKJ2] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         , AI , OU , EI ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,                   , Y  ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,ANN ,ONN ,ENN ,INN ,UNN ,    ,         ,    ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-                           ,    ,    ,             ,    ,
-  //                  `----+----+----'        `----+----+----'
-  ),
-
-  [_QWERTY] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-     GRV ,EXLM, AT ,HASH,DLR ,PERC,               CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     EQL , Q  , W  , E  , R  , T  ,                Y  , U  , I  , O  , P  ,MINS,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-     LBRC, A  , S  , D  , F  , G  ,                H  , J  , K  , L  ,SCLN,QUOT,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     RBRC, Z  , X  , C  , V  , B  ,    ,         , N  , M  ,COMM,DOT ,SLSH,BSLS,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-                           ,    ,    ,             ,    ,
-  //                  `----+----+----'        `----+----+----'
+  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
+     GRV ,EXLM, AT  ,HASH , DLR ,PERC,            CIRC,AMPR ,ASTR ,LPRN ,RPRN,BSPC,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     TAB ,QUOT,COMM , DOT ,  Y  , Q  ,             F  ,  G  ,  R  ,  W  , P  ,BSLS,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+     EQL , A  ,LA(O),LG(E),LC(I), U  ,             D  ,RS(T),RG(N),RA(S), M  ,MINS,
+  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
+     ESC ,SCLN,  X  ,  C  ,  V  , Z  , NO ,   NO , H  ,  J  ,  K  ,  L  , B  ,SLSH,
+  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
+                           TMB1,TMB2,TMB3,    TMB4,TMB5,TMB6
+  //                      `----+----+----'   `----+----+----'
   ),
 
   [_LOWER] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,SLSH,ASTR,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,BTN4,WH_U,BTN5,    ,                   , 7  , 8  , 9  ,MINS,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,WH_L,WH_D,WH_R,    ,                   , 4  , 5  , 6  ,PLUS,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,    ,BTN1,BTN3,BTN2,    ,    ,         ,    , 1  , 2  , 3  ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-                           ,    ,    ,             , 0  ,
-  //                  `----+----+----'        `----+----+----'
+  //,----+----+------+------+------+----.           ,----+------+------+-------+----+----.
+         ,    ,      ,      ,      ,    ,                ,      ,      ,       ,    ,    ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+         ,    , LCBR , LBRC , LPRN ,    ,                , RPRN , RBRC , RCBR  ,    ,    ,
+  //|----+----+------+------+------+----|           |----+------+------+-------+----+----|
+      F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 ,             F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
+  //|----+----+------+------+------+----+----. ,----+----+------+------+-------+----+----|
+     PSCR,    , HOME , PGDN , PGUP ,END ,    ,      ,LEFT, DOWN ,  UP  , RGHT  ,    ,    ,
+  //`----+----+------+------+------+----+----/ \----+----+------+------+-------+----+----'
+                                  ,    , NO ,    MAC ,TMB7,
+  //                         `----+----+----'   `----+----+----'
   ),
 
   [_RAISE] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-      F1 , F2 , F3 , F4 , F5 ,LCBR,               RCBR,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-      F6 , F7 , F8 , F9 ,F10 ,LPRN,               RPRN,HOME,PGDN,PGUP,END ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-     F11 ,F12 ,PSCR,SLCK,PAUS,LBRC,LOCK,         ,RBRC,LEFT,DOWN, UP ,RGHT,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-                       TMB9,    ,    ,             ,    ,
-  //                  `----+----+----'        `----+----+----'
-  ),
-
-  [_ADJUST] = LAYOUT_kc(
-  //,----+----+----+----+----+----.              ,----+----+----+----+----+----.
-         ,    ,    ,    ,    ,    ,                   ,    ,    ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,    ,    ,   ,EXTOFF,   ,                   ,EXTON,   ,    ,    ,    ,
-  //|----+----+----+----+----+----|              |----+----+----+----+----+----|
-         ,RST ,DBUG,RTOG,WIN ,    ,                   ,MAC ,QWER,EDJP,    ,    ,
-  //|----+----+----+----+----+----+----.    ,----|----+----+----+----+----+----|
-         ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,    ,
-  //`----+----+----+----+----+----+----/    \----+----+----+----+----+----+----'
-                           ,    ,    ,             ,    ,
-  //                  `----+----+----'        `----+----+----'
+  //,----+----+-----+-----+-----+----.           ,----+-----+-----+-----+----+----.
+         ,    ,     ,     ,     ,    ,                ,     ,     ,     ,    ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+         ,    ,EXLM , AT  ,HASH ,DLR ,            PERC,CIRC ,AMPR ,ASTR ,    ,    ,
+  //|----+----+-----+-----+-----+----|           |----+-----+-----+-----+----+----|
+         , 1  ,LA(2),LG(3),LC(4), 5  ,             6  ,RS(7),RG(8),RA(9), 0  ,    ,
+  //|----+----+-----+-----+-----+----+----. ,----+----+-----+-----+-----+----+----|
+     PSCR,    ,HOME ,PGDN ,PGUP ,END ,    ,      ,LEFT,DOWN , UP  ,RGHT ,    ,    ,
+  //`----+----+-----+-----+-----+----+----/ \----+----+-----+-----+-----+----+----'
+                               ,    ,WIN ,     NO ,    ,
+  //                      `----+----+----'   `----+----+----'
   )
 };
 
 void matrix_init_keymap() {
 }
 
-bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
-  switch(keycode) {
-    case KC_LOCK:
-      if (record->event.pressed) {
-        if (get_enable_kc_lang()) {
-          SEND_STRING( SS_LCTRL(SS_LSFT(SS_TAP(X_POWER))) );
-        } else {
-          SEND_STRING( SS_LGUI("l") );
-        }
-      }
-      return false;
-  }
-  return true;
-}
-
+#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
 uint32_t layer_state_set_keymap(uint32_t state) {
+  rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
   switch (biton32(state)) {
-    case _EDVORAKJ1:
-    case _EDVORAKJ2:
-      // _EDVORAKJ1 & J2 are same colored
-      rgblight_setrgb (0xFF, 0xFF, 0xFF);
-      break;
     case _LOWER:
-      rgblight_setrgb (0xFF, 0x00, 0x00);
+      rgblight_sethsv_noeeprom_red();
       break;
     case _RAISE:
-      rgblight_setrgb (0x00, 0x00, 0xFF);
-      break;
-    case _ADJUST:
-      rgblight_setrgb (0x00, 0xFF, 0x00);
+      rgblight_sethsv_noeeprom_blue();
       break;
-    default: //  for any other layers, or the default layer
-      rgblight_mode(28);
+    default: // for any other layers, or the default layer
+      rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
+      get_japanese_mode() ? rgblight_sethsv_noeeprom_red() : rgblight_sethsv_noeeprom_green();
       break;
   }
   return state;
 }
+#endif
index 58d244c38954be9177fbe7201c40be1a29e7d9ab..4ee94a9832e5a0dd4ef06a6f303cd50e4999602b 100644 (file)
@@ -2,15 +2,17 @@
 #   change to "no" to disable the options, or define them in the Makefile in
 #   the appropriate keymap folder that will get included automatically
 #
-BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes   # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
-CONSOLE_ENABLE = no    # Console for debug(+400)
-COMMAND_ENABLE = no    # Commands for debug and configuration
-NKRO_ENABLE = 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. 
+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
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/keebio/iris/keymaps/moonfall/config.h b/keyboards/keebio/iris/keymaps/moonfall/config.h
new file mode 100644 (file)
index 0000000..7986b50
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+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
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/keebio/iris/keymaps/moonfall/keymap.c b/keyboards/keebio/iris/keymaps/moonfall/keymap.c
new file mode 100644 (file)
index 0000000..0b6cde4
--- /dev/null
@@ -0,0 +1,114 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  LOWER,
+  RAISE,
+  ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = 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_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                               KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     RAISE,   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_DEL,           KC_ENT,  KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,
+  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+                                    LOWER,   KC_LALT, KC_BSPC,                   KC_SPC,  KC_LGUI, KC_LCTL
+                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
+  ),
+
+  [_LOWER] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     KC_EQL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                              KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_EQL,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, _______, KC_UP,   _______, _______, _______,                            _______, KC_PLUS, KC_EQL,  KC_TILD, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP,   _______,                            KC_HOME, KC_PGDN, KC_PGUP, KC_END,  _______, KC_GRV, 
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, KC_GRV,  _______, _______, _______, _______, KC_HOME,          KC_PGUP, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______,
+  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+                                    _______, _______, KC_END,                    KC_PGDN, _______, _______
+                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
+  ),
+
+  [_RAISE] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     KC_EQL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                              KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_EQL,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, _______, KC_UP,   _______, _______, _______,                            _______, KC_PLUS, KC_EQL,  KC_TILD, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_UP,   _______,                            KC_HOME, KC_PGDN, KC_PGUP, KC_END,  _______, KC_GRV, 
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, KC_GRV,  _______, _______, _______, _______, KC_HOME,          KC_PGUP, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, _______,
+  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+                                    _______, _______, KC_END,                    KC_PGDN, _______, _______
+                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
+  ),
+
+  [_ADJUST] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                          ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, _______, _______, _______, _______, _______,                            _______, _______, _______, _______, _______, _______,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______, _______, _______, _______, _______,
+  //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+                                    _______, _______, _______,                   _______, _______, _______
+                                // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
+  )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/keebio/iris/keymaps/moonfall/rules.mk b/keyboards/keebio/iris/keymaps/moonfall/rules.mk
new file mode 100644 (file)
index 0000000..db925dd
--- /dev/null
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = no
diff --git a/keyboards/keebio/iris/keymaps/nstickney/README.md b/keyboards/keebio/iris/keymaps/nstickney/README.md
new file mode 100644 (file)
index 0000000..1cafce6
--- /dev/null
@@ -0,0 +1,46 @@
+# nstickney's Iris Layout
+ > Familiar layout for users who regularly switch between Iris and more standard layouts.
+
+[![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg)](https://github.com/RichardLitt/standard-readme)
+
+## Install
+
+For instructions on building and installing this keymap, see the [docs](https://docs.qmk.fm/#/getting_started_make_guide). Below is the command for me; it may be different for you.
+
+```sh
+$ make keebio/iris/rev2:nstickney:avrdude
+```
+
+## Usage
+
+0. QWERTY `BASE` layer.
+       * `/`, `\\`, ` `, `[ENTER]`, `-`, and `=` on the thumb clusters.
+       * `CAPSLOCK` replaced by `ESC`; hold it down for `CTRL`. `'` can also be held for `CTRL`.
+       * [Space-Cadet Shift](/docs/docs/feature_space_cadet_shift.md) is enabled, so the `SHIFT` keys send `(` and `)` when tapped.
+       * Hold down `/` or `=` for `ALT`.
+       * Hold down `\\` or `-` to access the functions layer.
+       * Upper-center thumb keys are `GUI` and `MENU`.
+               * Tapping `GUI` 2, 3, or 4 times will toggle `NUMLOCK`, `CAPSLOCK`, or `SCROLLLOCK`, respectively.
+               * Tapping `MENU` 2, 3, or 4 times will toggle the `NUMP`, `SYMB`, and `SYSH` layers, respectively.
+0. Unicode-input symbols on `SYMB` and `SYSH` layers. Based (loosely) on US-International layout.
+0. `NUMP` layer has number pads on each hand. Number pad `7`-`8`-`9` align with QWERTY `7`-`8`-`9` on right hand.
+0. Function, arrow, media, and miscellaneous keys on `FCTN` layer.
+       * `F1` through `F10` on `1`-`10`. `F11` is on `GUI` and `F12` is on `MENU`.
+       * Brackets (`[` and `]`) available on `U` and `I`; braces (`{` and `}`) on `O` and `P`.
+       * Arrow keys on `ESDF` and `HJKL`; familiar for both Vim users and FPS gamers.
+       * `W` is `HOME`; `R` is `END`. `T` is `PAGE UP` and `G` is `PAGE DOWN`.
+       * Music controls on lower row of left hand.
+       * Volume and screen brightness on lower row of right hand.
+       * `PRINT SCREEN`, `PAUSE`, `SYSREQ`, `INSERT`, and `CLEAR` also mapped, as intelligently as possible.
+       * `A` toggles the RGB underglow (which changes color to indicate active layer).
+       * `Q` toggles the Unicode input through Linux, WinCompose, and MacOS.
+
+## Contribute
+
+If you are using this layout and think you've found a better way to do something, I'd appreciate an [issue](https://github.com/nstickney/qmk_firmware/issues), or better yet a [pull request](https://github.com/nstickney/qmk_firmware/pulls).
+
+
+## License
+
+Copyright &copy; 2016-2019 @nstickney. Released under [GPL-2.0](/LICENSE).
diff --git a/keyboards/keebio/iris/keymaps/nstickney/config.h b/keyboards/keebio/iris/keymaps/nstickney/config.h
new file mode 100644 (file)
index 0000000..0aeb87e
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+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
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+// #undef RGBLED_NUM
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 12
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+
+// Unicode input
+#undef UNICODE_SELECTED_MODES
+#define UNICODE_SELECTED_MODES UC_OSX, UC_LNX, UC_WINC
diff --git a/keyboards/keebio/iris/keymaps/nstickney/keymap.c b/keyboards/keebio/iris/keymaps/nstickney/keymap.c
new file mode 100644 (file)
index 0000000..6091399
--- /dev/null
@@ -0,0 +1,165 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Layers
+#define BASE 0 // Base layer
+#define SYMB 1 // Symbols
+#define SYSH 2 // Symbols, shifted
+#define NUMP 4 // Numpad
+#define FCTN 8 // Functions
+
+// Tap Dancing
+void dance_lock (qk_tap_dance_state_t *state, void *user_data) {
+       switch (state->count){
+               case 1: // Press once for LGUI
+                       tap_code(KC_LGUI);
+                       break;
+               case 2: // Press twice for NUMLOCK
+                       tap_code(KC_NLCK);
+                       break;
+               case 3: // Press thrice for CAPSLOCK
+                       tap_code(KC_CAPS);
+                       break;
+               case 4: // Press four times for SCROLLOCK
+                       tap_code(KC_SLCK);
+                       break;
+               default:
+                       break;
+       }
+};
+
+void dance_layer (qk_tap_dance_state_t *state, void *user_data) {
+       switch (state -> count) {
+               case 1: // Press once for MENU
+                       tap_code(KC_APP);
+                       break;
+               case 2: // Press twice for NUMPAD
+                       layer_invert(NUMP);
+                       break;
+               case 3: // Press thrice for SYMBOLS
+                       layer_invert(SYMB);
+                       break;
+               case 4: // Press four times for SYMBOLS, SHIFTED
+                       layer_invert(SYSH);
+                       break;
+               default:
+                       break;
+       }
+};
+
+enum tap_dances {LOCKS = 0, LAYERS = 1};
+qk_tap_dance_action_t tap_dance_actions[] = {
+       [LOCKS] = ACTION_TAP_DANCE_FN(dance_lock),
+       [LAYERS] = ACTION_TAP_DANCE_FN(dance_layer)
+};
+
+// Make layering more clear
+#define CC_ESC LCTL_T(KC_ESC)
+#define CC_QUOT RCTL_T(KC_QUOT)
+#define AC_SLSH LALT_T(KC_SLSH)
+#define AC_EQL RALT_T(KC_EQL)
+#define FC_BSLS LT(FCTN, KC_BSLS)
+#define FC_MINS LT(FCTN, KC_MINS)
+
+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,
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       CC_ESC,    KC_A,      KC_S,      KC_D,      KC_F,      KC_G,                                     KC_H,      KC_J,      KC_K,      KC_L,      KC_SCLN,   CC_QUOT,
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐        ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       KC_LSPO,   KC_Z,      KC_X,      KC_C,      KC_V,      KC_B,      TD(LOCKS),          TD(LAYERS),KC_N,      KC_M,      KC_COMM,   KC_DOT,    KC_SLSH,   KC_RSPC,
+// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘        └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+                                                        AC_SLSH,   FC_BSLS,   KC_SPC,                        KC_ENT,    FC_MINS,   AC_EQL
+//                                                  └──────────┴──────────┴──────────┘                   └──────────┴──────────┴──────────┘
+       ),
+
+       [SYMB] = LAYOUT(
+// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐                              ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+       UC(0x00EF),UC(0x00A1),UC(0x00B2),UC(0x00B3),UC(0x00A4),UC(0x20AC),                               UC(0x00BC),UC(0x00BD),UC(0x00BE),UC(0x2018),UC(0x2019),_______,  
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   UC(0x00E4),UC(0x00E5),UC(0x00E9),UC(0x00AE),UC(0x00FE),                               UC(0x00FC),UC(0x00FA),UC(0x00ED),UC(0x00F3),UC(0x00F6),_______,  
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   UC(0x00E1),UC(0x00DF),UC(0x00F0),UC(0x00EC),UC(0x00ED),                               UC(0x00EE),UC(0x00E0),UC(0x00E2),UC(0x00F8),UC(0x00B6),UC(0x00B4),
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐        ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   UC(0x00E6),UC(0x00E8),UC(0x00A9),UC(0x00EA),UC(0x00EB),_______,            _______,   UC(0x00F1),UC(0x00FD),UC(0x00E7),UC(0x00F4),UC(0x00BF),_______,  
+// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘        └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+                                             UC(0x00BF),UC(0x00AC),_______,                       _______,   UC(0x00B1),UC(0x00D7)
+//                                       └──────────┴──────────┴──────────┘                   └──────────┴──────────┴──────────┘
+       ),
+
+       [SYSH] = LAYOUT(
+// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐                              ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+       UC(0x00CF),UC(0x00B9),UC(0x2200),UC(0x2201),UC(0x00A3),UC(0x00A5),                               UC(0x00B5),UC(0x00AB),UC(0x00BB),UC(0x201C),UC(0x201D),_______,  
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   UC(0x00C4),UC(0x00C5),UC(0x00C9),UC(0x2122),UC(0x00DE),                               UC(0x00DC),UC(0x00DA),UC(0x00CD),UC(0x00D3),UC(0x00D6),_______,  
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   UC(0x00C1),UC(0x00A7),UC(0x00D0),UC(0x00CC),UC(0x00CD),                               UC(0x00CE),UC(0x00C1),UC(0x00C2),UC(0x00D8),UC(0x00B0),UC(0x00A8),
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐        ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   UC(0x00C6),UC(0x00C8),UC(0x00A2),UC(0x00CA),UC(0x00CB),_______,            _______,   UC(0x00D1),UC(0x00DD),UC(0x00C7),UC(0x00D4),UC(0x203D),_______,  
+// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘        └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+                                                                                 UC(0x203D),UC(0x00A6),_______,                       _______,   UC(0x00AA),UC(0x00F7)
+//                                       └──────────┴──────────┴──────────┘                   └──────────┴──────────┴──────────┘
+       ),
+
+       [NUMP] = LAYOUT(
+// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐                              ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+       _______,   _______,   KC_P7,     KC_P8,     KC_P9,     KC_PSLS,                                  _______,   KC_P7,     KC_P8,     KC_P9,     KC_PSLS,   _______,  
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   _______,   KC_P4,     KC_P5,     KC_P6,     KC_PAST,                                  _______,   KC_P4,     KC_P5,     KC_P6,     KC_PAST,   _______,  
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   _______,   KC_P1,     KC_P2,     KC_P3,     KC_PMNS,                                  _______,   KC_P1,     KC_P2,     KC_P3,     KC_PMNS,   _______,  
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐        ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   _______,   KC_P0,     KC_PCMM,   KC_PDOT,   KC_PPLS,   _______,            _______,   _______,   KC_P0,     KC_PCMM,   KC_PDOT,   KC_PPLS,   _______,  
+// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘        └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+                                                                                 _______,   _______,   _______,                       KC_PENT,   _______,   _______
+//                                       └──────────┴──────────┴──────────┘                   └──────────┴──────────┴──────────┘
+       ),
+
+       [FCTN] = LAYOUT(
+// ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐                              ┌──────────┬──────────┬──────────┬──────────┬──────────┬──────────┐
+       KC_ESC,    KC_F1,     KC_F2,     KC_F3,     KC_F4,     KC_F5,                                    KC_F6,     KC_F7,     KC_F8,     KC_F9,     KC_F10,    KC_SYSREQ,
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       KC_PSCR,   UC_MOD,    KC_HOME,   KC_UP,     KC_END,    KC_PGUP,                                  UC(0x2014),KC_LBRC,   KC_RBRC,   S(KC_LBRC),S(KC_RBRC),KC_INS,
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤                              ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       KC_PAUS,   RGB_TOG,   KC_LEFT,   KC_DOWN,   KC_RGHT,   KC_PGDN,                                  KC_LEFT,   KC_DOWN,   KC_UP,     KC_RGHT,   KC_BRIU,   KC_CLR,
+// ├──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┐        ┌──────────┼──────────┼──────────┼──────────┼──────────┼──────────┼──────────┤
+       _______,   KC_MPRV,   KC_MRWD,   KC_MPLY,   KC_MFFD,   KC_MNXT,   KC_F11,             KC_F12,    KC_MSTP,   KC_MUTE,   KC_VOLD,   KC_VOLU,   KC_BRID,   _______,  
+// └──────────┴──────────┴──────────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘        └────┬─────┴────┬─────┴────┬─────┴────┬─────┴──────────┴──────────┴──────────┘
+                                                                                 _______,   _______,   _______,                       _______,   _______,   _______
+//                                       └──────────┴──────────┴──────────┘                   └──────────┴──────────┴──────────┘
+       )
+};
+
+// Initialize rgblight
+void keyboard_post_init_user(void) {
+       rgblight_enable_noeeprom();
+       for (int i = 360; i > 0; i--) {
+               rgblight_sethsv_noeeprom(i, 255, 255);
+       }
+       layer_state_set_user(layer_state);
+};
+
+// Turn on RGB underglow according to active layer
+uint32_t layer_state_set_user(uint32_t state) {
+       switch (biton32(state)) {
+               case FCTN:
+                       rgblight_sethsv_noeeprom(136, 255, 255);
+                       break;
+               case NUMP:
+                       rgblight_sethsv_noeeprom(228, 255, 255);
+                       break;
+               case SYMB:
+               case SYSH:
+                       rgblight_sethsv_noeeprom(320, 255, 255);
+                       break;
+               default: //  for any other layers, or the default layer
+                       rgblight_sethsv_noeeprom(19, 255, 255);
+                       break;
+       }
+       return state;
+};
diff --git a/keyboards/keebio/iris/keymaps/nstickney/rules.mk b/keyboards/keebio/iris/keymaps/nstickney/rules.mk
new file mode 100644 (file)
index 0000000..851fc92
--- /dev/null
@@ -0,0 +1,4 @@
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE=yes
+UNICODE_ENABLE = yes
index 33e17182117faf341189b7f2589ff251c3ee5ed9..431def355ee94c1e572a18957000a7401d2f6449 100644 (file)
@@ -22,9 +22,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
       KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                               KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_QUOT,
   //├────────┼────────┼────────┼────────┼────────┼────────┤                          ├────────┼────────┼────────┼────────┼────────┼────────┤
-      KC_LSFT, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                               KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_RSFT,
+      KC_LGUI, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                               KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_RGUI,
   //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐        ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-      KC_LGUI, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LALT,          KC_RALT,  KC_N,    KC_M,    KC_COMM, KC_DOT, KC_SLSH, KC_RGUI,
+      KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LALT,          KC_RALT,  KC_N,    KC_M,    KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
   //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘        └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
                                     KC_LCTL, LOWER,   KC_SPC,                    KC_ENT,  RAISE,   KC_RCTL
                                 // └────────┴────────┴────────┘                 └────────┴────────┴────────┘
index 70e5d6e2a5dfe91d7eecde406ade291ccec6530f..ff0d28c73ca673fe06adce9f5adfc594dd0151f1 100644 (file)
@@ -71,6 +71,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 /* ws2812 RGB LED */
 #define RGB_DI_PIN F7
 #define RGBLED_NUM 12    // Number of LEDs
+#define RGBLED_SPLIT { 6, 6 }
 
 #define DYNAMIC_KEYMAP_LAYER_COUNT 4
 
diff --git a/keyboards/keebio/levinson/keymaps/dcompact/config.h b/keyboards/keebio/levinson/keymaps/dcompact/config.h
new file mode 100644 (file)
index 0000000..be2d71e
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+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
diff --git a/keyboards/keebio/levinson/keymaps/dcompact/keymap.c b/keyboards/keebio/levinson/keymaps/dcompact/keymap.c
new file mode 100644 (file)
index 0000000..a0556c0
--- /dev/null
@@ -0,0 +1,238 @@
+#include QMK_KEYBOARD_H
+
+#include "keymap_steno.h"
+
+// Custom Keycodes and Combinations Used
+#define DEL_SHF SFT_T(KC_DEL)
+#define QUAKE LCTL(KC_GRV)
+
+#define WKSP_L LALT(LCTL(KC_LEFT))
+#define WKSP_D LALT(LCTL(KC_DOWN))
+#define WKSP_U LALT(LCTL(KC_UP))
+#define WKSP_R LALT(LCTL(KC_RGHT))
+
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _BASE,
+  _LOWER,
+  _RAISE,
+  _FUNC,
+  _PLOVER,
+  _ADJUST,
+  _MOUSE
+};
+
+enum planck_keycodes {
+  BASE = SAFE_RANGE,
+  PLOVER,
+  LOWER,
+  RAISE,
+  FUNC,
+  MOUSE,
+  ADJUST,
+  EXT_PLV
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  | " '  | < ,  | > .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | ? /  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  | _ -  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |Del/Sf|  : ; |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  | Bspc |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl |Plover| GUI  | Alt  |Lower |Shift |Space |Raise | Alt  | GUI  |  Fn  |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_BASE] = LAYOUT_ortho_4x12( \
+   KC_TAB, KC_QUOT, KC_COMM,  KC_DOT,    KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L, KC_SLSH, \
+   KC_ESC,    KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S, KC_MINS, \
+  DEL_SHF, KC_SCLN,    KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z, KC_BSPC, \
+  KC_LCTL,  PLOVER, KC_LGUI, KC_LALT,   LOWER,  KC_LSFT,  KC_SPC,  RAISE, KC_RALT, KC_RGUI,    FUNC,  KC_ENT  \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      | Home |PgDwn | PgUp | End  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |PrScr | Menu |      |      |      |      | Left | Down |  Up  |Right |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |CapsLk|NumLck| Ins  |      |      |      |WkLeft|WkDown| WkUp |WkRigh|      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |Raise |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP,  KC_END, XXXXXXX, \
+  XXXXXXX, KC_PSCR, KC_MENU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN,   KC_UP, KC_RGHT, XXXXXXX, \
+  XXXXXXX, KC_CAPS, KC_LNUM,  KC_INS, XXXXXXX, XXXXXXX, XXXXXXX,  WKSP_L,  WKSP_D,  WKSP_U,  WKSP_R, XXXXXXX, \
+  _______, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX  \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |Quake |   `  |   ~  |   \  |   |  |   (  |   )  |   7  |   8  |   9  |   /  |  =   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   !  |   @  |   #  |   $  |   {  |   }  |   4  |   5  |   6  |   *  |  +   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   %  |   ^  |   &  |   *  |   [  |   ]  |   1  |   2  |   3  |   -  |Bkspc |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |Lower |   <  |   >  |      |   0  |   .  |   ,  |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+    QUAKE,  KC_GRV, KC_TILD, KC_BSLS, KC_PIPE, KC_LPRN, KC_RPRN,    KC_7,    KC_8,    KC_9, KC_SLSH,  KC_EQL, \
+  XXXXXXX, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_LCBR, KC_RCBR,    KC_4,    KC_5,    KC_6, KC_ASTR, KC_PLUS, \
+  XXXXXXX, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC,    KC_1,    KC_2,    KC_3, KC_MINS, KC_BSPC, \
+  _______, XXXXXXX, _______, _______, _______, KC_LABK, KC_RABK, _______,    KC_0,  KC_DOT, KC_COMM, XXXXXXX  \
+),
+
+/* Func
+ * ,-----------------------------------------------------------------------------------.
+ * |      |Sleep |Prev-W|Ply/Ps|Next-W|      |      |  F9  | F10  | F11  | F12  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      | Wake | Mute | Vol- | Vol+ |      |      |  F5  |  F6  |  F7  |  F8  |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Power |Prev-M|Ply/Ps|Next-M|      |      |  F1  |  F2  |  F3  |  F4  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = LAYOUT_ortho_4x12( \
+  XXXXXXX, KC_SLEP, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,   KC_F9,  KC_F10,  KC_F11,  KC_F12, XXXXXXX, \
+  XXXXXXX, KC_WAKE, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX,   KC_F5,   KC_F6,   KC_F7,   KC_F8, XXXXXXX, \
+  XXXXXXX,  KC_PWR, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX,   KC_F1,   KC_F2,   KC_F3,   KC_F4, XXXXXXX, \
+  _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX  \
+),
+
+/* Mouse (Not Reachable on Planck)
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |Click1|Click3|Click2|      |      |MouseL|MouseD|MouseU|MouseR|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |Accel0|Accel1|Accel2|      |      |ScrllL|ScrllD|ScrllU|ScrllR|      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MOUSE] = LAYOUT_ortho_4x12( \
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+  XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, XXXXXXX, \
+  XXXXXXX, XXXXXXX, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, XXXXXXX, \
+  _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX  \
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |  FN  |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |      |      |   E  |   U  |  PWR | RES1 | RES2 |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = LAYOUT_ortho_4x12( \
+  STN_N1,  STN_N2,  STN_N3,  STN_N4,  STN_N5,  STN_N6,  STN_N7,  STN_N8,  STN_N9,  STN_NA,  STN_NB,  STN_NC , \
+  STN_FN,  STN_S1,  STN_TL,  STN_PL,  STN_HL,  STN_ST1, STN_ST3, STN_FR,  STN_PR,  STN_LR,  STN_TR,  STN_DR , \
+  XXXXXXX, STN_S2,  STN_KL,  STN_WL,  STN_RL,  STN_ST2, STN_ST4, STN_RR,  STN_BR,  STN_GR,  STN_SR,  STN_ZR , \
+  EXT_PLV, XXXXXXX, XXXXXXX, STN_A,   STN_O,   XXXXXXX, XXXXXXX, STN_E,   STN_U,   STN_PWR, STN_RE1, STN_RE2  \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|RGBTog|RGBMod|      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|Light-|Light+|      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] =  LAYOUT_ortho_4x12( \
+  _______,   RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , \
+  _______, _______, _______,   AU_ON,  AU_OFF, AG_NORM, AG_SWAP, RGB_TOG, RGB_MOD, _______, _______, _______, \
+  _______,  MUV_DE,  MUV_IN,   MU_ON,  MU_OFF,   MI_ON,  MI_OFF, RGB_VAD, RGB_VAI, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case FUNC:
+      if (record->event.pressed) {
+        layer_on(_FUNC);
+      } else {
+        layer_off(_FUNC);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (!record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_SONG(plover_song);
+        #endif
+        layer_on(_PLOVER);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+    case MOUSE:
+      if (record->event.pressed) {
+        layer_on(_MOUSE);
+      } else {
+        layer_off(_MOUSE);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void keyboard_post_init_user(void) {
+  steno_set_mode(STENO_MODE_GEMINI);
+}
diff --git a/keyboards/keebio/levinson/keymaps/dcompact/readme.md b/keyboards/keebio/levinson/keymaps/dcompact/readme.md
new file mode 100644 (file)
index 0000000..cd88c3f
--- /dev/null
@@ -0,0 +1,45 @@
+# DCompact Layout
+
+**Dvorak, Layered, Mouse-Enabled, Compact -- now with Plover~**
+
+_See [the layout source](keymap.c) for the actual layout_
+
+## Goals
+
+The following are the goals kept in mind when designing the DCompact
+layout:
+
+- Provide minimal travel distance when typing English or coding
+- Consistent muscle memory translation from standard QWERTY
+- Stateless typing experience
+- OS-agnostic features, macros, and key placement
+- Minimize dependence on mouse usage
+
+These are generally all met or balanced within reason. This layout is
+not intended at all to be a familiar layout for much of anyone (except
+maybe those who already type in Dvorak) -- this is meant to amplify the
+best parts of having limited, ortholinear keys with layering.
+
+## As Reference Material
+
+If you're reading this hoping to find reference material to implement
+your own layout, then please feel free to copy over this layout and
+make edits where you see fit. I removed a lot of the features I felt
+extraneous to my usage and simplified style where I felt needed. This
+would hopefully mean that my code should feel like a good base to
+develop from for those new to QMK.
+
+_Remember that settings defined in the layout directory override and
+merge with those in the keyboard folder_
+
+## Relevant Links
+
+- [Online Dvorak Layout Trainer](https://learn.dvorak.nl/)
+- [Dvorak Wikipedia Page](https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard)
+- [QMK Docs](https://docs.qmk.fm/#/)
+- [QMK KeyCode Reference](https://docs.qmk.fm/#/keycodes)
+
+## Contact
+
+Maintainer: [Dan](https://github.com/loksonarius)
+
diff --git a/keyboards/keebio/levinson/keymaps/dcompact/rules.mk b/keyboards/keebio/levinson/keymaps/dcompact/rules.mk
new file mode 100644 (file)
index 0000000..cd031e0
--- /dev/null
@@ -0,0 +1,13 @@
+# https://beta.docs.qmk.fm/reference/config-options#feature-options
+# Features Specifically Wanted
+EXTRAKEY_ENABLE = yes
+STENO_ENABLE = yes
+NKRO_ENABLE = yes
+AUDIO_ENABLE = yes
+
+# Features taking up space
+MOUSEKEY_ENABLE = no
+MIDI_ENABLE = no
+CONSOLE_ENABLE = no
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
diff --git a/keyboards/keebio/levinson/keymaps/omgvee/config.h b/keyboards/keebio/levinson/keymaps/omgvee/config.h
new file mode 100644 (file)
index 0000000..ba005c0
--- /dev/null
@@ -0,0 +1,26 @@
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define TAPPING_TERM 150
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#undef PRODUCT
+#define PRODUCT "Vee's hotswappable LEVINSON purely ortholinear keeb"
+
diff --git a/keyboards/keebio/levinson/keymaps/omgvee/keymap.c b/keyboards/keebio/levinson/keymaps/omgvee/keymap.c
new file mode 100644 (file)
index 0000000..8dab1c2
--- /dev/null
@@ -0,0 +1,185 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _FN3 5
+#define _FN4 6
+#define _ADJUST 16
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  FN3,
+  FN4,
+  ADJUST,
+};
+
+#define KC_ KC_TRNS
+
+#define KC_CAPW LGUI(LSFT(KC_3))        // Capture whole screen
+#define KC_CPYW LGUI(LSFT(LCTL(KC_3)))  // Copy whole screen
+#define KC_CAPP LGUI(LSFT(KC_4))        // Capture portion of screen
+#define KC_CPYP LGUI(LSFT(LCTL(KC_4)))  // Copy portion of screen
+#define KC_X0 MT(MOD_LCTL, KC_ESC)
+#define KC_SCAP SFT_T(KC_CAPS)
+#define KC_LOW LOWER
+#define KC_RAIS RAISE
+#define KC_X3 LT(_FN3, KC_GRV)
+#define KC_SENT MT(MOD_LSFT, KC_ENT)
+#define KC_X5 BL_STEP
+#define KC_CTB CTL_T(KC_TAB)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT_kc(
+  //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
+     GESC, Q  , W  , E  , R  , T  ,      Y  , U  , I  , O  , P  ,BSPC,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+     SCAP, A  , S  , D  , F  , G  ,      H  , J  , K  , L  ,SCLN,QUOT,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      CTB, Z  , X  , C  , V  , B  ,      N  , M  ,COMM,DOT ,SLSH,SENT,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      X3 ,LCTL,LALT,LGUI,LOW ,ENT ,      SPC,RAIS,RALT,    ,    ,    
+  //`----+----+----+----+----+----'    `----+----+----+----+----+----'
+  ),
+
+  [_LOWER] = LAYOUT_kc(
+  //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
+     GRV , 1  , 2  , 3  , 4  , 5  ,      6  , 7  , 8  , 9  , 0  ,BSPC,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+     SCAP, NO ,HOME,PGDN,PGUP, END,     LEFT,DOWN, UP ,RGHT, INS, DEL,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+     CTB , F1 , F2 , F3 , F4 , F5 ,      F6,  F7 , F8 , F9 , F10, F11,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      X3 ,LCTL,LALT,LGUI, LOW, ENT,      SPC,RAIS,RALT,    ,    , F12
+  //`----+----+----+----+----+----'    `----+----+----+----+----+----'
+  ),
+
+  [_RAISE] = LAYOUT_kc(
+  //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
+     TAB, EXLM, AT ,HASH,DLR ,PERC,     CIRC,AMPR,ASTR,LPRN,RPRN, DEL,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+     SCAP,    ,    ,    ,    ,    ,     MINS, EQL,    ,LBRC,RBRC,BSLS,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      CTB,    ,    ,    ,    ,    ,     UNDS,PLUS,VOLD,VOLU,MUTE,SENT,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      X3 ,LCTL,LALT,LGUI, LOW, ENT,      SPC,RAIS,RALT,    ,    , NO
+  //`----+----+----+----+----+----'    `----+----+----+----+----+----'
+  ),
+
+  [_COLEMAK] = LAYOUT_kc(
+  //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
+     GESC, Q  , W  , F  , P  , G  ,      J  , L  , U  , Y  ,SCLN,MINS,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+     SCAP, A  , R  , S  , T  , D  ,      H  , N  , E  , I  , O  ,QUOT,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      CTB, Z  , X  , C  , V  , B  ,      K  , M  ,COMM,DOT ,SLSH,SENT,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      X3 ,LCTL,LALT,LGUI, LOW, ENT,      SPC,RAIS,RALT,    ,    ,
+  //`----+----+----+----+----+----'    `----+----+----+----+----+----'
+  ),
+
+  [_DVORAK] = LAYOUT_kc(
+  //,----+----+----+----+----+----.    ,----+----+----+----+----+----.  
+     TAB ,QUOT,COMM,DOT , P  , Y  ,      F  , G  , C  , R  , L  ,MINS, 
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      X0 , A  , O  , E  , U  , I  ,      D  , H  , T  , N  , S  ,SLSH,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+     LSFT,SCLN, Q  , J  , K  , X  ,      B  , M  , W  , V  , Z  ,SENT,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+      X3 ,LCTL,LALT,LGUI, LOW, ENT,      SPC,RAIS,RALT,    ,    ,
+  //`----+----+----+----+----+----'    `----+----+----+----+----+----'
+  ),
+
+  [_FN3] = LAYOUT_kc(
+  //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
+     F12 , F1 , F2 , F3 , F4 , F5 ,      F6 , F7 , F8 , F9 ,F10 ,F11 ,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+         ,    ,    ,    ,    ,    ,     MS_L,MS_D,MS_U,MS_R,WH_L,WH_R,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+         ,    ,    ,    ,    ,    ,     BTN1,WH_D,WH_U,BTN2,    ,    ,
+  //|----+----+----+----+----+----|    |----+----+----+----+----+----|
+         ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,
+  //`----+----+----+----+----+----'    `----+----+----+----+----+----'
+  ),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn|      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+  [_ADJUST] = LAYOUT( \
+      RESET,  QWERTY, COLEMAK,  DVORAK, _______, EEP_RST,   KC_MNXT, KC_MPRV, KC_MFFD, KC_MRWD,  DVORAK, KC_EJCT, \
+    RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_PGUP, KC_HOME,   KC_LEFT, KC_DOWN,   KC_UP, KC_RGHT,   CK_UP, CK_DOWN, \
+    RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_PGDN,  KC_END,   KC_BRID, KC_BRIU, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPLY, \
+    BL_TOGG,  BL_INC,  BL_DEC, BL_BRTG, _______, _______,    CK_RST, _______, CK_TOGG,  MU_MOD,  MU_TOG,  AU_TOG \
+  )
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+         set_single_persistent_default_layer(_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/keebio/levinson/keymaps/omgvee/readme.md b/keyboards/keebio/levinson/keymaps/omgvee/readme.md
new file mode 100644 (file)
index 0000000..f882c98
--- /dev/null
@@ -0,0 +1,21 @@
+# What I want from my LEVINSON (Let's Split on steroids) keymap
+====================================================================================================
+
+
+![My indigo Levinson keeb](https://i.imgur.com/sPfzSTk.jpg)
+
+- media keys and media controls, including Eject, for however rare those computers with OSX *and* bloody optical drives might be
+- in-switch LED intensity controls (+/-)
+- underglow RGB hue/color controls
+- underglow RGB intensity controls
+- familiar key arrangement with Enter and symbols on the usual keys (to the right hand side, on some layer, pref RAISE for one-handed operation)
+- navigation keys should be the vim ones really;
+- arrow keys on one layer(most likely on the ADJUST one, but also on LOWER, as per my usual other split keebs)
+- mouse keys too
+- hardware reset for the ProMicro to put it bootloader mode, sounds, eeprom reset, backlights and rgb controls reset, etc.
+
+See keymap.c for layouts
+See config.h for various toggles and flags
+
+
+P.S> this is my first fully and purely ortholinear keyboard, as opposed to my [Iris](https://github.com/qmk/qmk_firmware/tree/master/keyboards/keebio/iris/keymaps/omgvee "Vee's Iris keeb"), [Helidox](https://github.com/qmk/qmk_firmware/tree/master/keyboards/crkbd/keymaps/omgvee "Vee's beloved Helidox keeb"), MiniDox, etc., which are mildly staggered, but on the vertical side, which seems better imho than this... but we'll see how I get on with it over time...
diff --git a/keyboards/keebio/levinson/keymaps/omgvee/rules.mk b/keyboards/keebio/levinson/keymaps/omgvee/rules.mk
new file mode 100644 (file)
index 0000000..3540947
--- /dev/null
@@ -0,0 +1,11 @@
+EXTRAFLAGS += -flto
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+TAP_DANCE_ENABLE = no
+NKRO_ENABLE = yes
+LEADER_ENABLE = no
+UNICODE_ENABLE = yes
+AUDIO_ENABLE = yes
index fe3229966f6f0085f5e470f3642c9a91cb59b360..2d511fee3c77d210fb08a111f8e0fe8db32b700d 100644 (file)
@@ -112,11 +112,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* Arrow layer
  * ,-----------------------------------------.   .-----------------------------------------.
- * |      |      |      |      |      |      |   |      |      |      |      |      | PgUp |
+ * |  §/½ |      |      |      |      |      |   |      |      |      | Ins  | Home | PgUp |
  * |------+------+------+------+------+------+   +------+------+------+------+------+------|
- * |      |      |  Up  |      |      |      |   |      |      |      |      |      | PgDn |
+ * |      |      |  Up  |      |      |      |   |      |      |      | Del  | End  | PgDn |
  * |------+------+------+------+------+------|   |------+------+------+------+------+------|
- * |      | Left | Down | Right|      |      |   |      |      |      |      |      |      |
+ * |      | Left | Down | Right|      | Back |   |  Fwd |      |      |      |      |      |
  * |------+------+------+------+------+------|   |------+------+------+------+------+------|
  * |      |      |      |      |      |      |   |      |      |      |      |      |      |
  * |------+------+------+------+------+------+   +------+------+------+------+------+------|
@@ -124,9 +124,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------'   '-----------------------------------------'
  */
 [ARRW] = LAYOUT( \
-  NO_HALF,  _______,  _______,  _______ ,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  KC_PGUP, \
-  _______,  _______,  KC_UP  ,  _______ ,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  KC_PGDN, \
-  _______,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______, \
+  NO_HALF,  _______,  _______,  _______ ,  _______,  _______,     _______,  _______,  _______,  KC_INS ,  KC_HOME,  KC_PGUP, \
+  _______,  _______,  KC_UP  ,  _______ ,  _______,  _______,     _______,  _______,  _______,  KC_DEL ,  KC_END ,  KC_PGDN, \
+  _______,  KC_LEFT,  KC_DOWN,  KC_RIGHT,  _______,  KC_WBAK,     KC_WFWD,  _______,  _______,  _______,  _______,  _______, \
   _______,  _______,  _______,  _______ ,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______, \
   _______,  _______,  _______,  KC_DEL  ,  _______,  _______,     _______,  _______,  _______,  _______,  _______,  _______  \
 ),
index 18b40ecec7ae345894c1f75c5674570b29066513..3c7822def033242bbe8885151ac710df7075b2b5 100644 (file)
@@ -56,6 +56,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define RGB_DI_PIN B4
 #define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 12
+#define RGBLED_SPLIT { 6, 6 }
 
 /* Backlight LEDs */
 #define BACKLIGHT_PIN B5
index 160e7896bbd08d0743b561f9d5bbc5f44a47d2ca..1b50ccbe50e926185d1628639d7e2e5a9907fe84 100644 (file)
               {"label":"Down", "x":15, "y":4},
               {"label":"Right", "x":16, "y":4}
           ]
+      },
+      "LAYOUT_60_with_macro": {
+          "layout": [
+              {"label":"F1", "x":0, "y":0},
+              {"label":"F6", "x":1, "y":0},
+
+              {"label":"Esc", "x":2.25, "y":0},
+              {"label":"1", "x":3.25, "y":0},
+              {"label":"2", "x":4.25, "y":0},
+              {"label":"3", "x":5.25, "y":0},
+              {"label":"4", "x":6.25, "y":0},
+              {"label":"5", "x":7.25, "y":0},
+              {"label":"6", "x":8.25, "y":0},
+
+              {"label":"7", "x":10.25, "y":0},
+              {"label":"8", "x":11.25, "y":0},
+              {"label":"9", "x":12.25, "y":0},
+              {"label":"0", "x":13.25, "y":0},
+              {"label":"-", "x":14.25, "y":0},
+              {"label":"=", "x":15.25, "y":0},
+              {"label":"Del", "x":16.25, "y":0},
+              {"label":"Bksp", "x":17.25, "y":0},
+
+              {"label":"F2", "x":0, "y":1},
+              {"label":"F7", "x":1, "y":1},
+
+              {"label":"Tab", "x":2.25, "y":1, "w":1.5},
+              {"label":"Q", "x":3.75, "y":1},
+              {"label":"W", "x":4.75, "y":1},
+              {"label":"E", "x":5.75, "y":1},
+              {"label":"R", "x":6.75, "y":1},
+              {"label":"T", "x":7.75, "y":1},
+
+              {"label":"Y", "x":9.75, "y":1},
+              {"label":"U", "x":10.75, "y":1},
+              {"label":"I", "x":11.75, "y":1},
+              {"label":"O", "x":12.75, "y":1},
+              {"label":"P", "x":13.75, "y":1},
+              {"label":"{", "x":14.75, "y":1},
+              {"label":"}", "x":15.75, "y":1},
+              {"label":"Backslash", "x":16.75, "y":1, "w":1.5},
+
+              {"label":"F3", "x":0, "y":2},
+              {"label":"F8", "x":1, "y":2},
+
+              {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75},
+              {"label":"A", "x":4, "y":2},
+              {"label":"S", "x":5, "y":2},
+              {"label":"D", "x":6, "y":2},
+              {"label":"F", "x":7, "y":2},
+              {"label":"G", "x":8, "y":2},
+
+              {"label":"H", "x":10, "y":2},
+              {"label":"J", "x":11, "y":2},
+              {"label":"K", "x":12, "y":2},
+              {"label":"L", "x":13, "y":2},
+              {"label":":", "x":14, "y":2},
+              {"label":"\"", "x":15, "y":2},
+              {"label":"Enter", "x":16, "y":2, "w":2.25},
+
+              {"label":"F4", "x":0, "y":3},
+              {"label":"F9", "x":1, "y":3},
+
+              {"label":"Shift", "x":2.25, "y":3, "w":2.25},
+              {"label":"Z", "x":4.5, "y":3},
+              {"label":"X", "x":5.5, "y":3},
+              {"label":"C", "x":6.5, "y":3},
+              {"label":"V", "x":7.5, "y":3},
+              {"label":"B", "x":8.5, "y":3},
+
+              {"label":"N", "x":10.5, "y":3},
+              {"label":"M", "x":11.5, "y":3},
+              {"label":",", "x":12.5, "y":3},
+              {"label":".", "x":13.5, "y":3},
+              {"label":"/", "x":14.5, "y":3},
+              {"label":"Shift", "x":15.5, "y":3, "w":1.75},
+              {"label":"Fn", "x":17.25, "y":3},
+
+              {"label":"F5", "x":0, "y":4},
+              {"label":"F10", "x":1, "y":4},
+
+              {"label":"Ctrl", "x":2.25, "y":4, "w":1.25},
+              {"label":"Win", "x":3.5, "y":4, "w":1.25},
+              {"label":"Alt", "x":4.75, "y":4, "w":1.25},
+              {"label":"Fn", "x":6, "y":4, "w":1.25},
+              {"label":"Space", "x":7.25, "y":4, "w":2.25},
+
+              {"label":"Fn", "x":10.5, "y":4, "w":1.25},
+              {"label":"Space", "x":11.75, "y":4, "w":1.5},
+              {"label":"Alt", "x":13.25, "y":4},
+              {"label":"Ctrl", "x":14.25, "y":4},
+              {"label":"Left", "x":15.25, "y":4},
+              {"label":"Down", "x":16.25, "y":4},
+              {"label":"Right", "x":17.25, "y":4}
+          ]
+      },
+      "LAYOUT_65_with_macro": {
+        "layout": [
+              {"label":"F1", "x":0, "y":0},
+              {"label":"F6", "x":1, "y":0},
+
+              {"label":"Esc", "x":2.25, "y":0},
+              {"label":"1", "x":3.25, "y":0},
+              {"label":"2", "x":4.25, "y":0},
+              {"label":"3", "x":5.25, "y":0},
+              {"label":"4", "x":6.25, "y":0},
+              {"label":"5", "x":7.25, "y":0},
+              {"label":"6", "x":8.25, "y":0},
+
+              {"label":"7", "x":10.25, "y":0},
+              {"label":"8", "x":11.25, "y":0},
+              {"label":"9", "x":12.25, "y":0},
+              {"label":"0", "x":13.25, "y":0},
+              {"label":"-", "x":14.25, "y":0},
+              {"label":"=", "x":15.25, "y":0},
+              {"label":"=", "x":16.25, "y":0},
+              {"label":"Bksp", "x":17.25, "y":0},
+              {"label":"Home", "x":18.25, "y":0},
+
+              {"label":"F2", "x":0, "y":1},
+              {"label":"F7", "x":1, "y":1},
+
+              {"label":"Tab", "x":2.25, "y":1, "w":1.5},
+              {"label":"Q", "x":3.75, "y":1},
+              {"label":"W", "x":4.75, "y":1},
+              {"label":"E", "x":5.75, "y":1},
+              {"label":"R", "x":6.75, "y":1},
+              {"label":"T", "x":7.75, "y":1},
+
+              {"label":"Y", "x":9.75, "y":1},
+              {"label":"U", "x":10.75, "y":1},
+              {"label":"I", "x":11.75, "y":1},
+              {"label":"O", "x":12.75, "y":1},
+              {"label":"P", "x":13.75, "y":1},
+              {"label":"{", "x":14.75, "y":1},
+              {"label":"}", "x":15.75, "y":1},
+              {"label":"|", "x":16.75, "y":1, "w":1.5},
+              {"label":"PgUp", "x":18.25, "y":1},
+
+              {"label":"F3", "x":0, "y":2},
+              {"label":"F8", "x":1, "y":2},
+
+              {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75},
+              {"label":"A", "x":4, "y":2},
+              {"label":"S", "x":5, "y":2},
+              {"label":"D", "x":6, "y":2},
+              {"label":"F", "x":7, "y":2},
+              {"label":"G", "x":8, "y":2},
+
+              {"label":"H", "x":10, "y":2},
+              {"label":"J", "x":11, "y":2},
+              {"label":"K", "x":12, "y":2},
+              {"label":"L", "x":13, "y":2},
+              {"label":":", "x":14, "y":2},
+              {"label":"\"", "x":15, "y":2},
+              {"label":"Enter", "x":16, "y":2, "w":2.25},
+              {"label":"PgDn", "x":18.25, "y":2},
+
+              {"label":"F4", "x":0, "y":3},
+              {"label":"F9", "x":1, "y":3},
+
+              {"label":"Shift", "x":2.25, "y":3, "w":2.25},
+              {"label":"Z", "x":4.5, "y":3},
+              {"label":"X", "x":5.5, "y":3},
+              {"label":"C", "x":6.5, "y":3},
+              {"label":"V", "x":7.5, "y":3},
+              {"label":"B", "x":8.5, "y":3},
+
+              {"label":"N", "x":10.5, "y":3},
+              {"label":"M", "x":11.5, "y":3},
+              {"label":",", "x":12.5, "y":3},
+              {"label":".", "x":13.5, "y":3},
+              {"label":"/", "x":14.5, "y":3},
+              {"label":"Shift", "x":15.5, "y":3, "w":1.75},
+              {"label":"Up", "x":17.25, "y":3},
+              {"label":"End", "x":18.25, "y":3},
+
+              {"label":"F5", "x":0, "y":4},
+              {"label":"F10", "x":1, "y":4},
+
+              {"label":"Ctrl", "x":2.25, "y":4, "w":1.25},
+              {"label":"Win", "x":3.5, "y":4, "w":1.25},
+              {"label":"Alt", "x":4.75, "y":4, "w":1.25},
+              {"label":"Fn", "x":6, "y":4, "w":1.25},
+              {"label":"Space", "x":7.25, "y":4, "w":2.25},
+
+              {"label":"Fn", "x":10.5, "y":4, "w":1.25},
+              {"label":"Space", "x":11.75, "y":4, "w":1.5},
+              {"label":"Alt", "x":13.25, "y":4},
+              {"label":"Ctrl", "x":14.25, "y":4},
+              {"label":"Win", "x":15.25, "y":4},
+              {"label":"Left", "x":16.25, "y":4},
+              {"label":"Down", "x":17.25, "y":4},
+              {"label":"Right", "x":18.25, "y":4}
+            ]
+          }
       }
-    }
 }
diff --git a/keyboards/keebio/quefrency/keymaps/unausgeschlafen/config.h b/keyboards/keebio/quefrency/keymaps/unausgeschlafen/config.h
new file mode 100644 (file)
index 0000000..f9efe78
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+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
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
diff --git a/keyboards/keebio/quefrency/keymaps/unausgeschlafen/keymap.c b/keyboards/keebio/quefrency/keymaps/unausgeschlafen/keymap.c
new file mode 100644 (file)
index 0000000..e42c865
--- /dev/null
@@ -0,0 +1,62 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _FN1 1
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap _BL: (Base Layer) Default Layer
+ * +-------------------------------------------------------------------------+
+ * | ESC | 1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  0 |  - |  = | BACKSP |
+ * +-------------------------------------------------------------------------+
+ * | TAB  |  Q |  W |  E |  R |  T |  Y |  U |  I |  O |  P |  [ |  ] |   \  |
+ * +-------------------------------------------------------------------------+
+ * | FN     |  A |  S |  D |  F |  G |  H |  J |  K |  L |  ; |  ' |  RETURN |
+ * +-------------------------------------------------------------------------+
+ * | LSHIFT   |  Z |  X |  C |  V |  B |  N |  M |  , |  . |  / | SHIFT | FN |
+ * +-------------------------------------------------------------------------+
+ * |LALT|LMETA|RCTRL|   SPACE | FN | SPACE           | RALT| MENU| RWIN|RCTRL|
+ * +-------------------------------------------------------------------------+
+ */
+
+  [_BASE] = 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_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, \
+    MO(_FN1), 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_LALT,  KC_LGUI, KC_LCTL, KC_SPC,  MO(_FN1), KC_SPC,  _______, KC_RALT, KC_APP,  _______, KC_RGUI, KC_RCTL
+  ),
+
+  /* Keymap _FL: Function Layer
+   * ,-----------------------------------------------------------.
+   * | ~  | F1| F2| F3| F4| F5| F6| F7| F8| F9| F0|F11|F12|  DEL |
+   * |-----------------------------------------------------------|
+   * |     |   | UP|  | MSL|MSD|MSU|MSR|   |   |PRT|PGD|PGU|PAUS |
+   * |-----------------------------------------------------------|
+   * |       | LE| DN| RE|   |   | LE| DN| UP| RE|   |   |       |
+   * |-----------------------------------------------------------|
+   * |        |HOM|END|   |   |PRE|NXT|MUT|VOD|VOU|  /|Shift | FN|
+   * |-----------------------------------------------------------|
+   * |    |    |    |    |  PLAY | PLAY     |     |    |    |    |
+   * `-----------------------------------------------------------'
+   */
+
+  [_FN1] = LAYOUT(
+    KC_GRAVE, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, KC_DEL, \
+    _______,  _______, KC_UP,   _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, KC_PSCR, KC_PGUP, KC_PGDN, KC_PAUS, \
+    _______,  KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, _______, _______, _______, \
+    _______,  KC_HOME, KC_END,  _______, _______, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, \
+    _______,  _______, _______, KC_MPLY, _______,          KC_MPLY,         _______, _______, _______, _______, _______, _______
+  )
+};
diff --git a/keyboards/keebio/quefrency/keymaps/unausgeschlafen/readme.md b/keyboards/keebio/quefrency/keymaps/unausgeschlafen/readme.md
new file mode 100644 (file)
index 0000000..a8d0efe
--- /dev/null
@@ -0,0 +1,26 @@
+## UNAUSGESCHLAFEN'S QUEFRENCY
+
+This is the keymap that goes with [unausgeschlafen's Quefrency](https://www.reddit.com/r/MechanicalKeyboards/comments/aquefb/my_daily_driver_quefrency/)
+
+If you are using Ardoinos, comment this line in `rules.mk`:
+```make
+BOOTLOADER = atmel-dfu # comment this line if you use arduinos
+```
+
+Although QMK offers one-shot build and flash, I personally build and flash separately (for the Elite C).
+I used the QMK default for the Arduino Pro Micros.
+However, I do not own them anymore.
+Hence, only the instructions for the Elite C are provided.
+
+Build with:
+```sh
+make keebio/quefrency:unausgeschlafen
+```
+
+Flash with:
+
+```sh
+sudo dfu-programmer atmega32u4 erase
+sudo dfu-programmer atmega32u4 flash keebio_quefrency_rev1_unausgeschlafen.hex
+sudo dfu-programmer atmega32u4 reset
+```
diff --git a/keyboards/keebio/quefrency/keymaps/unausgeschlafen/rules.mk b/keyboards/keebio/quefrency/keymaps/unausgeschlafen/rules.mk
new file mode 100644 (file)
index 0000000..9895624
--- /dev/null
@@ -0,0 +1 @@
+BOOTLOADER = atmel-dfu # comment this line if you use arduinos
index 4b95eea5091c427c54d92f681f7a3cf37b8e0424..67cef6195b8515d6d48373b52a01ff97063c64e8 100644 (file)
@@ -34,8 +34,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MATRIX_COLS 8
 
 // wiring of each half
-#define MATRIX_ROW_PINS { F4, D4, D7, E6, B4, B5 }
-#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6, C6 }
+#define MATRIX_ROW_PINS { F4, D4, D7, E6, B4, C6 }
+#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6, B5 }
+#define MATRIX_ROW_PINS_RIGHT { F4, D4, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS_RIGHT { F5, F6, F7, B1, B3, B2, B6, C6 }
 #define SPLIT_HAND_PIN D2
 
 /* Set 0 if debouncing isn't needed */
index 8893d122e04be2b5675204802a059c4321f8fc73..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 2c852d181991103c54775584f2f4e3cce60eed4a..a3ed4f762a6eeed9c25e4d72489329e581caaa87 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index a3828f7d5d6e9b7b981fd73ece9cd60535224c27..09b8f1bc73a173027f3d792294dd121cdcbf812b 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 999d8876c2b63477f38654f7d6a71656d985b860..6775ba671ef26ae06d1ca2ca1e85372e05b7ad7f 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index a3828f7d5d6e9b7b981fd73ece9cd60535224c27..09b8f1bc73a173027f3d792294dd121cdcbf812b 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index da2ff292a7a074d6b6263d8ca892205b642ed6dd..c793349a5d7bd8a9c159f26446fbf6b311d0a22a 100644 (file)
@@ -1,7 +1,5 @@
 // Below layout is based upon /u/That-Canadian's planck layout
-#include "launchpad.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
 
 extern keymap_config_t keymap_config;
 
@@ -21,9 +19,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* Qwerty
  * ,-------------.
- * |   1  |  2   |  
+ * |   1  |  2   |
  * |------+------|
- * |   3  |  4   | 
+ * |   3  |  4   |
  * |------+------|
  * |   5  |  6   |
  * |------+------|
@@ -39,9 +37,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* Function
  * ,-------------.
- * |   Q  |CALDEL|  
+ * |   Q  |CALDEL|
  * |------+------|
- * |   A  |TSKMGR| 
+ * |   A  |TSKMGR|
  * |------+------|
  * |   Z  |  X   |
  * |------+------|
@@ -58,5 +56,5 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 };
 
 void matrix_init_user(void) {
-    
+
 }
diff --git a/keyboards/launchpad/keymaps/default_rgb/config.h b/keyboards/launchpad/keymaps/default_rgb/config.h
new file mode 100644 (file)
index 0000000..cae1450
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+/* Underlight Configuration */
+#define RGB_DI_PIN F4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 2  // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
\ No newline at end of file
diff --git a/keyboards/launchpad/keymaps/default_rgb/keymap.c b/keyboards/launchpad/keymaps/default_rgb/keymap.c
new file mode 100644 (file)
index 0000000..50fef53
--- /dev/null
@@ -0,0 +1,76 @@
+// Below layout is based upon /u/That-Canadian's planck layout
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _RGB 1
+#define _FUNC 15
+
+// Defines for task manager and such
+#define CALTDEL LCTL(LALT(KC_DEL))
+#define TSKMGR LCTL(LSFT(KC_ESC))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    /* Qwerty
+     * ,-------------.
+     * |   1  |  2   |
+     * |------+------|
+     * |   3  |  4   |
+     * |------+------|
+     * |   5  |  6   |
+     * |------+------|
+     * | FUNC | RGB  |
+     * `-------------'
+     */
+    [_QWERTY] = LAYOUT( \
+        KC_1,      KC_2, \
+        KC_3,      KC_4, \
+        KC_5,      KC_6, \
+        MO(_FUNC), TG(_RGB) \
+      ),
+
+    /* RGB
+     * ,-------------.
+     * | Mode-| Mode+|
+     * |------+------|
+     * | HUE- | HUE+ |
+     * |------+------|
+     * | SAT- | SAT+ |
+     * |------+------|
+     * |RGBTOG|      |
+     * `-------------'
+     */
+    [_RGB] = LAYOUT( \
+        RGB_RMOD, RGB_MOD, \
+        RGB_HUD,  RGB_HUI, \
+        RGB_SAD,  RGB_SAI, \
+        RGB_TOG,  KC_TRNS \
+      ),
+
+    /* Function
+     * ,-------------.
+     * |   Q  |CALDEL|
+     * |------+------|
+     * |   A  |TSKMGR|
+     * |------+------|
+     * |   Z  |  X   |
+     * |------+------|
+     * |      |  C   |
+     * `-------------'
+     */
+    [_FUNC] = LAYOUT( \
+        KC_Q,    CALTDEL, \
+        KC_A,    TSKMGR, \
+        KC_Z,    KC_X, \
+        _______, KC_C \
+      )
+
+};
+
+void matrix_init_user(void) {}
diff --git a/keyboards/launchpad/keymaps/default_rgb/readme.md b/keyboards/launchpad/keymaps/default_rgb/readme.md
new file mode 100644 (file)
index 0000000..3f15ff9
--- /dev/null
@@ -0,0 +1,41 @@
+# Launch Pad
+
+![Launch Pad](https://i.imgur.com/WVTe0Ku.png)
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+A budget-minded, 4-8 key macro-pad with built in legs, plate & case.
+
+Supports MX & Alps switches. 2x 1u or 1x 2u supported for each row.
+
+Supports 2u PCB-Mount stabilizers.
+
+Runs off of 1x Pro Micro & 8x diodes (1n4148).
+
+Optional "Reset" switch can be used on the PCB.
+
+A fantastic project for beginners to learn to solder, veteran's of the hobby who want to add an easy macro-pad to their collection, and everyone in between.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Make example for this keyboard (after setting up your build environment):
+
+    make launchpad/rev1: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.
+
+# Under Glow
+
+![Underglow](https://i.imgur.com/3zFIOmu.jpg)
+
+SpaceCat now provides an underglow add-on kit. Please refer to the picture above for wiring.
+
+Make example for this keyboard (after setting up your build environment):
+
+    make launchpad/rev1:default_rgb
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+Due to PCB tolerance issues outside of our control, the snap-apart legs included on the PCB may need extra padding to prevent a small amount of wobbling once placed properly. We have included small, clear, and semi-permanent "glue dots" in each order (PCB Only -and- Full Kit) to help with this. You may also use plastic wrap, tape, Elmer's glue, hot glue, rubber cement, etc. We advise against using anything more "permanent" in case you wish to make changes to your Launch Pad in the future. It is also best to attach legs after all of your soldering and building is finished, to get the most accurate feel for your Launch Pad.
+
+-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
diff --git a/keyboards/launchpad/keymaps/default_rgb/rules.mk b/keyboards/launchpad/keymaps/default_rgb/rules.mk
new file mode 100644 (file)
index 0000000..164232f
--- /dev/null
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.
\ No newline at end of file
diff --git a/keyboards/lazydesigners/the60/config.h b/keyboards/lazydesigners/the60/config.h
new file mode 100644 (file)
index 0000000..a767d1d
--- /dev/null
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x0060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    LazyDesigners
+#define PRODUCT         THE60
+#define DESCRIPTION     A 60% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { B5, D0, D1, D2, D3, D4, D5, D6, D7, C6, C7, F4, F5, F6, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 6
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/lazydesigners/the60/info.json b/keyboards/lazydesigners/the60/info.json
new file mode 100644 (file)
index 0000000..4fef5a0
--- /dev/null
@@ -0,0 +1,79 @@
+{
+    "keyboard_name": "THE60",
+    "url": "http://lazydesigners.cn",
+    "maintainer": "qmk",
+    "width": 15,
+    "height": 5,
+    "layouts": {
+        "LAYOUT_split_spc_split_bspc": {
+            "key_count": 66,
+            "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":"Home", "x":13, "y":0},
+              {"label":"Del", "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, "w":1.5},
+              {"label":"}", "x":13, "y":1},
+              {"label":"{", "x":14, "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":"Enter", "x":10.75, "y":2, "w":2.25},
+              {"label":":", "x":13, "y":2},
+              {"label":"\"", "x":14, "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":"Shift", "x":11.25, "y":3, "w":1.75},
+              {"label":"Up", "x":13, "y":3},
+              {"label":"/", "x":14, "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},
+              {"x":3.75, "y":4, "w":2.25},
+              {"x":6, "y":4, "w":2.75},
+              {"label":"Alt", "x":8.75, "y":4, "w":1.25},
+              {"label":"Menu", "x":10, "y":4},
+              {"label":"Fn", "x":11, "y":4},
+              {"label":"Left", "x":12, "y":4},
+              {"label":"Down", "x":13, "y":4},
+              {"label":"Right", "x":14, "y":4}]
+        }
+    }
+}
diff --git a/keyboards/lazydesigners/the60/keymaps/default/keymap.c b/keyboards/lazydesigners/the60/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..8a95b44
--- /dev/null
@@ -0,0 +1,54 @@
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+  _QWERTY,
+  _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,--------------------------------------------------------------------------.
+ * |Esc | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 0  | -  | =  |Home|Del |
+ * |--------------------------------------------------------------------------|
+ * |  Tab  | Q  | W  | E  | R  | T  | Y  | U  | I  | O  | P  | BsPc | [  | ]  |
+ * |--------------------------------------------------------------------------|
+ * |CapsLock | A  | S  | D  | F  | G  | H  | J  | K  | L  |  Enter  | ;  | '  |
+ * |--------------------------------------------------------------------------|
+ * |  Shift    | Z  | X  | C  | V  | B  | N  | M  | ,  | .  | Shift | Up | /  |
+ * |--------------------------------------------------------------------------|
+ * | Ctrl | Gui  | Alt  |  Space  |   Space   | Alt  |Menu| Fn |Left|Down|Rght|
+ * `--------------------------------------------------------------------------'
+ */
+
+[_QWERTY] = LAYOUT_split_spc_split_bspc(
+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_HOME, 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_BSPC,          KC_LBRC, KC_RBRC,
+KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_ENT,                    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_RSFT,                   KC_UP,   KC_SLSH,
+KC_LCTL, KC_LGUI, KC_LALT,       KC_SPACE,              KC_SPACE,                 KC_RALT, KC_APP, MO(_FN), KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+/* FN
+ * ,--------------------------------------------------------------------------.
+ * |RST |    |    |    |    |    |    |    |    |    |    |    |    |End |Ins |
+ * |--------------------------------------------------------------------------|
+ * |       |    |    |    |    |    |    |    |    |    |    |      |PgUp|PgDn|
+ * |--------------------------------------------------------------------------|
+ * |         |    |Prev|Play|Next|    |VolD|Mute|VolU|    |         |    |    |
+ * |--------------------------------------------------------------------------|
+ * |           |    |    |    |    |    |    |    |    |    |       |    |    |
+ * |--------------------------------------------------------------------------|
+ * |EEPRST|      |      |         |           |      |    |    |    |    |    |
+ * `--------------------------------------------------------------------------'
+ */
+
+[_FN] = LAYOUT_split_spc_split_bspc(
+RESET,   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_END,  KC_INS,
+XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          KC_PGUP, KC_PGDN,
+XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX,
+XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX,
+EEP_RST, XXXXXXX, XXXXXXX,       XXXXXXX,              XXXXXXX,                  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+)
+};
+
diff --git a/keyboards/lazydesigners/the60/keymaps/default/readme.md b/keyboards/lazydesigners/the60/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..7a5a10a
--- /dev/null
@@ -0,0 +1,32 @@
+# Default keymap for THE60
+
+
+## QWERTY (Normal) Layer
+```
+ ,--------------------------------------------------------------------------.
+ |Esc | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 0  | -  | =  |Home|Del |
+ |--------------------------------------------------------------------------|
+ |  Tab  | Q  | W  | E  | R  | T  | Y  | U  | I  | O  | P  | BsPc | [  | ]  |
+ |--------------------------------------------------------------------------|
+ |CapsLock | A  | S  | D  | F  | G  | H  | J  | K  | L  |  Enter  | ;  | '  |
+ |--------------------------------------------------------------------------|
+ |  Shift    | Z  | X  | C  | V  | B  | N  | M  | ,  | .  | Shift | Up | /  |
+ |--------------------------------------------------------------------------|
+ | Ctrl | Gui  | Alt  |  Space  |   Space   | Alt  |Menu| Fn |Left|Down|Rght|
+ `--------------------------------------------------------------------------'
+```
+
+## FN layer
+```
+ ,--------------------------------------------------------------------------.
+ |RST |    |    |    |    |    |    |    |    |    |    |    |    |End |Ins |
+ |--------------------------------------------------------------------------|
+ |       |    |    |    |    |    |    |    |    |    |    |      |PgUp|PgDn|
+ |--------------------------------------------------------------------------|
+ |         |    |Prev|Play|Next|    |VolD|Mute|VolU|    |         |    |    |
+ |--------------------------------------------------------------------------|
+ |           |    |    |    |    |    |    |    |    |    |       |    |    |
+ |--------------------------------------------------------------------------|
+ |EEPRST|      |      |         |           |      |    |    |    |    |    |
+ `--------------------------------------------------------------------------'
+```
diff --git a/keyboards/lazydesigners/the60/readme.md b/keyboards/lazydesigners/the60/readme.md
new file mode 100644 (file)
index 0000000..bf7cc77
--- /dev/null
@@ -0,0 +1,18 @@
+# THE60
+
+![THE60](https://cdn.discordapp.com/attachments/536190211240099840/549506683064287243/image0.jpg)
+
+A 60% custom PCB and case designed and produced by [LazyDesigners](http://lazydesigners.cn).  
+The PCB allows one to test a 40% layout in a 60% case.
+
+Keyboard Maintainer: QMK Community  
+Hardware Supported: THE60 PCB  
+Hardware Availability: Check for GBs on [Geekhack](https://geekhack.org) and on [LazyDesigner's homepage.](http://lazydesigners.cn)  
+
+Make example for this keyboard (after setting up your build environment):
+
+    make lazydesigners/the60:default:dfu
+
+To enter the bootloader, either short the pins on the PCB, use the RESET button on the FN layer or hold the Esc key while plugging in your keyboard.
+
+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/lazydesigners/the60/rules.mk b/keyboards/lazydesigners/the60/rules.mk
new file mode 100644 (file)
index 0000000..76fb44b
--- /dev/null
@@ -0,0 +1,51 @@
+# 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 = atmel-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
+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 = yes # Enable keyboard backlight functionality
diff --git a/keyboards/lazydesigners/the60/the60.c b/keyboards/lazydesigners/the60/the60.c
new file mode 100644 (file)
index 0000000..09eeb63
--- /dev/null
@@ -0,0 +1,2 @@
+#include "the60.h"
+
diff --git a/keyboards/lazydesigners/the60/the60.h b/keyboards/lazydesigners/the60/the60.h
new file mode 100644 (file)
index 0000000..e370846
--- /dev/null
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "quantum.h"
+
+/*
+ *  ,--------------------------------------------------------------------------.
+ *  |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
+ *  |--------------------------------------------------------------------------|
+ *  |       |    |    |    |    |    |    |    |    |    |    |      |    |    |
+ *  |--------------------------------------------------------------------------|
+ *  |         |    |    |    |    |    |    |    |    |    |         |    |    |
+ *  |--------------------------------------------------------------------------|
+ *  |           |    |    |    |    |    |    |    |    |    |       |    |    |
+ *  |--------------------------------------------------------------------------|
+ *  |      |      |      |         |           |      |    |    |    |    |    |
+ *  `--------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_split_spc_split_bspc( \
+  K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+  K100,       K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+  K200,       K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213,       \
+  K300,       K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,       \
+  K400,       K402, K403, K404,             K407,       K409, K410, K411, K412, K413, K414  \
+) { \
+  { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012,  K013,  K014 }, \
+  { K100,  KC_NO, K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  K111,  K112,  K113,  K114 }, \
+  { K200,  KC_NO, K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212,  K213,  KC_NO }, \
+  { K300,  KC_NO, K302,  K303,  K304,  K305,  K306,  K307,  K308,  K309,  K310,  K311,  K312,  K313,  KC_NO }, \
+  { K400,  KC_NO, K402,  K403,  K404,  KC_NO, KC_NO, K407,  KC_NO, K409,  K410,  K411,  K412,  K413,  K414 }  \
+}
+
diff --git a/keyboards/lets_split/keymaps/vim-mode/config.h b/keyboards/lets_split/keymaps/vim-mode/config.h
new file mode 100644 (file)
index 0000000..25512a5
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+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
+
+// comment the following lines if sounds are not desired
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+                              SONG(COLEMAK_SOUND), \
+                              SONG(DVORAK_SOUND) \
+                            }
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
diff --git a/keyboards/lets_split/keymaps/vim-mode/keymap.c b/keyboards/lets_split/keymaps/vim-mode/keymap.c
new file mode 100644 (file)
index 0000000..4b25aa5
--- /dev/null
@@ -0,0 +1,196 @@
+#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 layer_names {
+  _QWERTY = 0,
+  _COLEMAK = 1,
+  _DVORAK = 2,
+  _LOWER = 3,
+  _RAISE = 4,
+  _ADJUST = 16
+};
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  ADJUST,
+};
+
+// Fillers to make layering more clear
+
+// keys in multiple locations:
+//  - parenteses in both raise and lower
+//  - asterix in raise and twice on lower (normal and numpad)
+//  - minus/plus twice on lower (normal and numpad)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| PrtSc| GUI  | Alt  |Lower | Tab  |Space |Raise | VolDn| VolUp| Pl/Ps| Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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_LCTRL,KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_PSCR, KC_LGUI, KC_LALT, LOWER,   KC_TAB,  KC_SPC,  RAISE,   KC_VOLD, KC_VOLU, KC_MPLY, KC_MNXT  \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| PrtSc| GUI  | Alt  |Lower | Tab  |Space |Raise | VolDn| VolUp| Pl/Ps| Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+  KC_ESC,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC, \
+  KC_LCTL,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_PSCR, KC_LGUI, KC_LALT, LOWER,   KC_TAB,  KC_SPC,  RAISE,   KC_VOLD, KC_VOLU, KC_MPLY, KC_MNXT  \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   '  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| PrtSc| GUI  | Alt  |Lower | Tab  |Space |Raise | VolDn| VolUp| Pl/Ps| Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+  KC_ESC,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC, \
+  KC_LCTL,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
+  KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
+  ADJUST,  KC_PSCR, KC_LGUI, KC_LALT, LOWER,   KC_TAB,  KC_SPC,  RAISE,   KC_VOLD, KC_VOLU, KC_MPLY, KC_MNXT  \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |      |   *  |   (  |   )  |      |      |   7  |   8  |   9  |   *  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del  |   _  |   +  |   {  |   }  |      |      |   4  |   5  |   6  |   -  |  \   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   -  |   =  |   [  |   ]  |      |      |   1  |   2  |   3  |   +  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      | Alt  |      |             |      |   0  |   .  | Enter|      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+  KC_GRAVE,_______, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, KC_7,    KC_8,    KC_9,    KC_ASTR, _______, \
+  KC_DEL,  KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_4,    KC_5,    KC_6,    KC_MINS, KC_BSLS, \
+  KC_NLCK, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, _______, _______, KC_1,    KC_2,    KC_3,    KC_PLUS, _______, \
+  _______, _______, _______, KC_LALT, _______, _______, _______, _______, KC_0,    KC_DOT,  KC_ENT,  _______  \
+),
+
+/* Raise: featuring vim-style hjkl arrow keys
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  | Left | Down |  Up  |Right |      |  |   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |  F6  |  F7  |  F8  |  F9  |  F10 | Home | PgDn | PgUp | End  |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |  F11 |  F12 |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+  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_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_LEFT, KC_DOWN, KC_UP,  KC_RIGHT, _______, KC_PIPE, \
+  _______, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_HOME, KC_PGDN, KC_PGUP, KC_END,  _______, _______, \
+  _______, KC_F11,  KC_F12,  _______, _______, _______, _______, _______, _______, _______, _______, _______  \
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |QWERTY|Colemk|Dvorak|      | Prev | Pl/Ps| Next |      | Del  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      | Mute | VolDn| VolUp|      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] =  LAYOUT_ortho_4x12( \
+  _______, RESET,   _______,  QWERTY,  COLEMAK, DVORAK,  _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_DEL,  \
+  _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
+)
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/lets_split/keymaps/vim-mode/readme.md b/keyboards/lets_split/keymaps/vim-mode/readme.md
new file mode 100644 (file)
index 0000000..9bb6131
--- /dev/null
@@ -0,0 +1,22 @@
+# Vim-mode Keymap
+
+This layout is designed with the vim philosophy in mind: You should be able to do your work without lifting your hands off the keyboard. Some movement keys (like the arrow keys) have been directly borrowed from vim, and other keys (like the numpad) have been placed in easy-to-reach areas, following the vim philosophy.
+
+Based on the default keymap.
+
+## Features:
+
+* Vim-like `hjkl` arrow keys in raise layer.
+* Right-hand numpad in lower layer.
+* All brackets and the most frequently used operators are intuitively handled in the lower layer for easy access.
+* Ctrl is just to the left of the left-hand pinky.
+* The raise layer provides the symbol bar on the first row that you're used to.
+* Media keys available in adjust layer (complete) and in the bottom-right corner of the default layer (frequently used).
+* The two keys that are traditionally the keys for `space` behave differently. The right-hand key inserts a space. The left-hand key inserts a tab. This is intuitive: Both keys that would normally make up the spacebar are increasing the space, but in different manners.
+
+
+## Some things to look out for:
+
+* Page up, page down, home, and end have been placed directly under the `hjkl` arrow keys, and each key moves the same direction as the key above it. (for instance, `h` moves left. Home has therefore been placed on `n`). You may ask why this was done instead of placing page down on `f` and page up on `b`. Here's why:
+  * In short, `f` and `b` are in prime locations for other types of keys, and using those keys for page down and page up would interrupt the space available for other keys. Using vim-style `f` and `b` would require either divide up the list of function keys with unrelated keys, which is unintuitive, or move all the function keys to another later, requiring restructuring that does not lend itself to an intuitive layout.
+* Audio is not tested. If it doesn't work, please open an issue.
diff --git a/keyboards/lets_split/keymaps/vim-mode/rules.mk b/keyboards/lets_split/keymaps/vim-mode/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/lets_split_eh/keymaps/msiu/config.h b/keyboards/lets_split_eh/keymaps/msiu/config.h
new file mode 100644 (file)
index 0000000..526c083
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+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
diff --git a/keyboards/lets_split_eh/keymaps/msiu/keymap.c b/keyboards/lets_split_eh/keymaps/msiu/keymap.c
new file mode 100644 (file)
index 0000000..af5c982
--- /dev/null
@@ -0,0 +1,195 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _DVORAK 1
+
+#define _LOWER 3
+#define _RAISE 4
+
+#define _NUMB 14
+#define _FUNC 15
+#define _ADJUST 16
+
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  DVORAK,
+  LOWER,
+  RAISE,
+  ADJUST
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl |Hyper | Alt  | GUI  |Lower | Func |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT( \
+  LT(_NUMB, KC_TAB),   KC_Q,    KC_W,    KC_E,    KC_R,  KC_T,      KC_Y,   KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  LCTL_T(KC_ESC),      KC_A,    KC_S,    KC_D,    KC_F,  KC_G,      KC_H,   KC_J,  KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSFT,             KC_Z,    KC_X,    KC_C,    KC_V,  KC_B,      KC_N,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,  \
+  KC_LCTL,             KC_HYPR, KC_LALT, KC_LGUI, LOWER, MO(_FUNC), KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
+),
+
+// Dvorak
+[_DVORAK] = LAYOUT( \
+  _______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,     KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______, \
+  _______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,     KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
+  _______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,     KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______ , \
+  _______, _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
+),
+
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      | Mute |      |  |   |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT( \
+  KC_TILD, KC_EXLM,  KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,  \
+  _______, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+  _______, KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE, \
+  _______, _______,  _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT  \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   4  |   5  |   6  |   +  |  F5  |  F6  |   -  |   =  |   [  |   ]  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |Enter |   7  |   8  |   9  |   -  |  F11 |  F12 |ISO # |ISO / | Mute |      |   \  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |   ,  |   0  |  .   |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = 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_4,    KC_5,    KC_6,   KC_PLUS, KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
+  _______, KC_7,    KC_8,    KC_9,   KC_MINS, KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE, \
+  _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT  \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Taskmg|      |      |      |      |      |      |      |RGBVAI|RGBSAI|RGBHUI|caltde|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |Qwerty|RGBVAD|RGBSAD|RGBHUD|RGBTOG|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |BLSTEP|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      | RESET|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+  RGB_TOG, RGB_VAI, RGB_SAI, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, \
+  RGB_MOD, RGB_VAD, RGB_SAD, RGB_HUD, _______, _______, _______, QWERTY,  DVORAK,  _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET    \
+),
+
+/* FUNC
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |  Up  |      |      |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      | Left | Down |Right |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Caps |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = LAYOUT( \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, KC_PSCR, _______, \
+  _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
+),
+
+// Numpad
+[_NUMB] = LAYOUT( \
+  _______, _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, KC_BSPC,  \
+  _______, _______, _______, _______, _______, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______,  \
+  _______, _______, _______, _______, _______, _______, _______, KC_1,    KC_2,    KC_3,    _______, _______,  \
+  _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    _______, _______, _______  \
+)
+
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    // case QWERTY:
+    //   if (record->event.pressed) {
+    //     persistent_default_layer_set(1UL<<_QWERTY);
+    //   }
+    //   return false;
+    //   break;
+    case QWERTY:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
index 8893d122e04be2b5675204802a059c4321f8fc73..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 8893d122e04be2b5675204802a059c4321f8fc73..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 8893d122e04be2b5675204802a059c4321f8fc73..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 8893d122e04be2b5675204802a059c4321f8fc73..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index b88ec06bf41fd2bab2f29a32243dc6f402a86b75..fb1cdf3962a1dff493b83725c1b00b0407717e03 100644 (file)
@@ -24,11 +24,5 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define USE_I2C
 #define USE_SERIAL
 
-#ifdef USE_Link_Time_Optimization
-  // LTO has issues with macros (action_get_macro) and "functions" (fn_actions),
-  //  so just disable them
-  #define NO_ACTION_MACRO
-  #define NO_ACTION_FUNCTION
-
-  #define DISABLE_LEADER
-#endif // USE_Link_Time_Optimization
\ No newline at end of file
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
index 5ff5dc31825447fb5b269d8a98bf27575dfb3d20..b8dda17d535d25a206f1f471e51db96aee2335b4 100644 (file)
@@ -21,7 +21,7 @@ extern uint8_t is_master;
 #define _QWERTY 0
 #define _LOWER 1
 #define _RAISE 2
-#define _ADJUST 16
+#define _ADJUST 3
 
 enum custom_keycodes {
   QWERTY = SAFE_RANGE,
@@ -111,7 +111,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  *                   | LAlt | LGUI |LOWER | /Space  /       \Enter \  |RAISE |BackSP| RGUI |
  *                   |      |      |      |/       /         \      \ |      |      |      |
  *                   `----------------------------'           '------''--------------------'
- */ 
+ */
   [_ADJUST] = LAYOUT( \
   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
@@ -235,4 +235,4 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
         break;
   }
   return true;
-}
\ No newline at end of file
+}
diff --git a/keyboards/lily58/rev1/info.json b/keyboards/lily58/rev1/info.json
new file mode 100644 (file)
index 0000000..4a3568c
--- /dev/null
@@ -0,0 +1,18 @@
+{
+    "keyboard_name": "Lily58", 
+    "url": "", 
+    "maintainer": "F_YUUCHI", 
+    "width": 16.5, 
+    "height": 5.25, 
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {"x":0, "y":0.5}, {"x":1, "y":0.375}, {"x":2, "y":0.125}, {"x":3, "y":0}, {"x":4, "y":0.125}, {"x":5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.5},
+                {"x":0, "y":1.5}, {"x":1, "y":1.375}, {"x":2, "y":1.125}, {"x":3, "y":1}, {"x":4, "y":1.125}, {"x":5, "y":1.25}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.5},
+                {"x":0, "y":2.5}, {"x":1, "y":2.375}, {"x":2, "y":2.125}, {"x":3, "y":2}, {"x":4, "y":2.125}, {"x":5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.5},
+                {"x":0, "y":3.5}, {"x":1, "y":3.375}, {"x":2, "y":3.125}, {"x":3, "y":3}, {"x":4, "y":3.125}, {"x":5, "y":3.25}, {"x":6, "y":2.75}, {"x":9.5, "y":2.75}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.5},
+                {"x":2.5, "y":4.125}, {"x":3.5, "y":4.15}, {"x":4.5, "y":4.25}, {"x":6, "y":4.25, "h":1.5}, {"x":9.5, "y":4.25, "h":1.5}, {"x":11, "y":4.25}, {"x":12, "y":4.15}, {"x":13, "y":4.15}
+            ]
+        }
+    }
+}
index f6b922eeac2f3f1346156ca412422c5e524362f0..f2947c81cc0ac4594927be30f3f0f61db676c880 100644 (file)
@@ -65,9 +65,7 @@ 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. 
-SUBPROJECT_rev1 = no
-USE_I2C = yes
+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
 
index 0c2fb62b04b4364b552b191b63c0dcf8a17e9e36..232239609986e31418ecfd3acbced79ac20b9c67 100644 (file)
@@ -1,7 +1,4 @@
-
-#include "m10a.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
 
 extern keymap_config_t keymap_config;
 
index 1acd232c99ec9da3bc6bbb1e5af201f067178a76..6d8225d74e95d47805efe9c613fecce8d5e2c27e 100644 (file)
@@ -1,22 +1,19 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
+/* 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"
 
@@ -28,37 +25,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define PRODUCT         maxipad
 #define DESCRIPTION     A custom keyboard
 
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 6
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-//Pro micro pinout
-       #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
-       #define MATRIX_COL_PINS { F4, C6, D7, F5, B4, B5 }
-       #define UNUSED_PINS
-//Teensy 2 pinout
-       //#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 }
-       //#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 }
-       //#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
 //#define MATRIX_HAS_GHOST
 
 /* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
+//#define BACKLIGHT_LEVELS 3
 
 /* Set 0 if debouncing isn't needed */
 #define DEBOUNCING_DELAY 5
@@ -86,4 +57,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 //#define NO_ACTION_MACRO
 //#define NO_ACTION_FUNCTION
 
-#endif
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
index 3ee4830c47b8d6374117e95687a4021ca7e87055..84daa5aba4af0a06621a467513c0e0f1b69d73c2 100644 (file)
@@ -5,8 +5,11 @@
   "width": 6,
   "height": 5,
   "layouts": {
-      "LAYOUT": {
+      "LAYOUT_grid": {
           "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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "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":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}]
-      }
+      },
+      "LAYOUT_1x2uC": {
+        "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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "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":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"w": 2, "x":4, "y":4}]
+    }
   }
 }
diff --git a/keyboards/maxipad/keymaps/default/config.h b/keyboards/maxipad/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..08c234a
--- /dev/null
@@ -0,0 +1,19 @@
+/* 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
+
+// place overrides here
index 5cec84c5457c1a6de7b8fe5cf1735a49105ff2fc..0971569319a5f64e98b8168860b5c1a2cd3e73b4 100644 (file)
@@ -1,23 +1,33 @@
-#include "maxipad.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/>.
+ */
+#include QMK_KEYBOARD_H
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT( /* Base */
-  KC_ESC,  KC_1,    KC_2,  KC_3,  KC_4,  KC_5, \
-  KC_TAB,  KC_Q,    KC_W,  KC_E,  KC_R,  KC_T, \
-  MO(1),   KC_A,    KC_S,  KC_D,  KC_F,  KC_G, \
-  KC_LSFT, KC_Z,    KC_X,  KC_C,  KC_V,  KC_B, \
-  KC_LCTL, KC_LALT, MO(1), KC_ENT,KC_GRV,KC_SPC \
-),
-[1] = LAYOUT(
-  KC_GRV,  KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, \
-  KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
-  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,  KC_SPC   \
-),
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
-{
-    return MACRO_NONE;
+  [0] = LAYOUT( /* Base */
+    KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    \
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    \
+    MO(1),   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    \
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    \
+    KC_LCTL, KC_LALT, MO(1),   KC_ENT,  KC_GRV,  KC_SPC   \
+  ),
+  [1] = LAYOUT(
+    KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   \
+    _______, _______, KC_UP,   _______, _______, _______, \
+    _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \
+    _______, _______, _______, _______, _______, _______, \
+    _______, _______, _______, _______, _______, _______  \
+  ),
 };
diff --git a/keyboards/maxipad/keymaps/default/readme.md b/keyboards/maxipad/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..a6c0d4a
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for maxipad
\ No newline at end of file
index a193b112b91c44568ba286d0b562dd6890624929..44a0c2b7428db463d2d19a440b68b985f995e013 100644 (file)
@@ -1 +1,16 @@
+/* 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/>.
+ */
 #include "maxipad.h"
\ No newline at end of file
index 613f7df22e3e947c6a8388eba55f8461a5b56e30..e2a08050538fae608c46a28594b59db41654ed11 100644 (file)
@@ -1,13 +1,39 @@
-#ifndef MAXIPAD_H
-#define MAXIPAD_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"
 
-// This a shortcut to help you visually see your layout.
-// The following is an example using the Planck MIT layout
-// The first section contains all of the arguements
-// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
+#define ___ KC_NO
+
+#ifdef KEYBOARD_maxipad_promicro
+    #include "promicro.h"
+#elif KEYBOARD_maxipad_teensy2
+    #include "teensy2.h"
+#endif
+
+/* 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_grid( \
     k00, k01, k02, k03, k04, k05, \
     k10, k11, k12, k13, k14, k15, \
     k20, k21, k22, k23, k24, k25, \
     { k40, k41, k42, k43, k44, k45 } \
 }
 
-#endif
+#define LAYOUT_1x2uC( \
+    k00, k01, k02, k03, k04, k05, \
+    k10, k11, k12, k13, k14, k15, \
+    k20, k21, k22, k23, k24, k25, \
+    k30, k31, k32, k33, k34, k35, \
+    k40, k41, k42, k43,    k44   \
+) \
+{ \
+    { k00, k01, k02, k03, k04, k05 }, \
+    { k10, k11, k12, k13, k14, k15 }, \
+    { k20, k21, k22, k23, k24, k25 }, \
+    { k30, k31, k32, k33, k34, k35 }, \
+    { k40, k41, k42, k43, ___, k44 } \
+}
+
+#define LAYOUT LAYOUT_grid
+#define LAYOUT_ortho_5x6 LAYOUT_grid
diff --git a/keyboards/maxipad/promicro/config.h b/keyboards/maxipad/promicro/config.h
new file mode 100644 (file)
index 0000000..008e792
--- /dev/null
@@ -0,0 +1,39 @@
+/* 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"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+#define MATRIX_COL_PINS { F4, C6, D7, F5, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/maxipad/promicro/promicro.c b/keyboards/maxipad/promicro/promicro.c
new file mode 100644 (file)
index 0000000..4ecd974
--- /dev/null
@@ -0,0 +1,16 @@
+/* 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/>.
+ */
+#include "maxipad.h"
diff --git a/keyboards/maxipad/promicro/promicro.h b/keyboards/maxipad/promicro/promicro.h
new file mode 100644 (file)
index 0000000..8f1419c
--- /dev/null
@@ -0,0 +1,20 @@
+/* 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 "maxipad.h"
+#include "quantum.h"
+
diff --git a/keyboards/maxipad/promicro/rules.mk b/keyboards/maxipad/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
index b62afdf34315f1836d5bdc1c2eae9e64b5a9148d..65661b065b3d68e2248913869032154c0c9ae858 100644 (file)
@@ -1,17 +1,27 @@
 # Maxipad
 
-## Quantum MK Firmware
+![Maxipad](https://images.bigcartel.com/product_images/193297217/product_image.jpg)
 
-For the full Quantum feature list, see [the parent readme.md](/readme.md).
+5 x 6 Gamepad/Macropad PCBs from /u/wootpatoot
 
-If you are using a pro micro then make sure to enable USE_PRO_MICRO in the makefile
-Change the config.h pinout to match your mcu!!
+- Multiple layouts supported
+  - Full-grid
+  - 2u thumb-key (the 2u only works in the bottom right position).
+- Multiple controllers supported
+  - Pro Micro
+  - PJRC Teensy 2.0
 
-Depending on which keymap you would like to use, you will have to compile slightly differently.
+Keyboard Maintainer: QMK Community  
+Hardware Supported: Maxipad PCB  
+Hardware Availability: [switchtop](http://www.switchtop.com/product/gamepad-macropad-pcbs)
 
-### Default
+Make example for this keyboard (after setting up your build environment):
 
-To build with the default keymap, simply run `make maxipad:default`.
+    make maxipad:default
 
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
+If you would like to use one of the alternative controllers:
+
+    make maxipad/promicro:default
+    make maxipad/teensy2: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 31be1924fad3b76abbff7f3961a67a9c8e626741..735c7af26d694d6de313b45217e36e2ef755480b 100644 (file)
@@ -1,76 +1,22 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-#     This will define a symbol, F_CPU, in all source code files equal to the
-#     processor frequency in Hz. You can then use this symbol in your source code to
-#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-#     automatically to create a 32-bit value in your source code.
-#
-#     This will be an integer division of F_USB below, as it is sourced by
-#     F_USB after it has run through any CPU prescalers. Note that this value
-#     does not *change* the processor frequency - it should merely be updated to
-#     reflect the processor speed set externally so that the code can use accurate
-#     software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-#     This will define a symbol, F_USB, in all source code files equal to the
-#     input clock frequency (before any prescaling is performed) in Hz. This value may
-#     differ from F_CPU if prescaling is used on the latter, and is required as the
-#     raw input clock is fed directly to the PLL sections of the AVR for high speed
-#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-#     at the end, this will be done automatically to create a 32-bit value in your
-#     source code.
-#
-#     If no clock division is performed on the input clock inside the AVR (via the
-#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-#   Teensy halfKay   512
-#   Teensy++ halfKay 1024
-#   Atmel DFU loader 4096
-#   LUFA bootloader  4096
-#   USBaspLoader     2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
 # Build Options
-#   comment out to disable the options.
+#   change yes to no to disable
 #
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes  # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
-CONSOLE_ENABLE = yes   # Console for debug(+400)
-COMMAND_ENABLE = yes    # Commands for debug and configuration
+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
 # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
-# NKRO_ENABLE = yes            # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-# BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
-# MIDI_ENABLE = YES            # MIDI controls
-# UNICODE_ENABLE = YES                 # Unicode
-# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
-USE_PRO_MICRO = yes
 SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
 # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = no            # USB Nkey Rollover
+NKRO_ENABLE = yes           # USB Nkey Rollover
 BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE = no            # MIDI controls
+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 = maxipad/promicro
diff --git a/keyboards/maxipad/teensy2/config.h b/keyboards/maxipad/teensy2/config.h
new file mode 100644 (file)
index 0000000..4e43920
--- /dev/null
@@ -0,0 +1,39 @@
+/* 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"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 }
+#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/maxipad/teensy2/rules.mk b/keyboards/maxipad/teensy2/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/maxipad/teensy2/teensy2.c b/keyboards/maxipad/teensy2/teensy2.c
new file mode 100644 (file)
index 0000000..4ecd974
--- /dev/null
@@ -0,0 +1,16 @@
+/* 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/>.
+ */
+#include "maxipad.h"
diff --git a/keyboards/maxipad/teensy2/teensy2.h b/keyboards/maxipad/teensy2/teensy2.h
new file mode 100644 (file)
index 0000000..acb213a
--- /dev/null
@@ -0,0 +1,19 @@
+/* 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 "maxipad.h"
+#include "quantum.h"
diff --git a/keyboards/mechkeys/mk60/config.h b/keyboards/mechkeys/mk60/config.h
new file mode 100644 (file)
index 0000000..9d6a256
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+Copyright 2019 MechMerlin
+
+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    Mechkeys
+#define PRODUCT         mechkeys mk60
+#define DESCRIPTION     A custom 60% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { B5, D0, D1, D2, D3, D4, D5, D6, D7, C6, C7, F4, F5, F6, F7 }
+#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 B6
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 6
+
+#define RGB_DI_PIN E6
+#ifdef RGB_DI_PIN
+  #define RGBLED_NUM 12
+  #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 DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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/mechkeys/mk60/info.json b/keyboards/mechkeys/mk60/info.json
new file mode 100644 (file)
index 0000000..06ed337
--- /dev/null
@@ -0,0 +1,83 @@
+{
+    "keyboard_name": "MK60",
+    "url": "",
+    "maintainer": "qmk",
+    "width": 15,
+    "height": 5,
+    "layouts": {
+      "LAYOUT": {
+        "key_count": 68,
+        "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":"K04", "x":4, "y":0},
+          {"label":"K05", "x":5, "y":0},
+          {"label":"K06", "x":6, "y":0},
+          {"label":"K07", "x":7, "y":0},
+          {"label":"K08", "x":8, "y":0},
+          {"label":"K09", "x":9, "y":0},
+          {"label":"K0A", "x":10, "y":0},
+          {"label":"K0B", "x":11, "y":0},
+          {"label":"K0C", "x":12, "y":0},
+          {"label":"K0D", "x":13, "y":0},
+          {"label":"K0E", "x":14, "y":0},
+          {"label":"K10", "x":0, "y":1, "w":1.5},
+          {"label":"K12", "x":1.5, "y":1},
+          {"label":"K13", "x":2.5, "y":1},
+          {"label":"K14", "x":3.5, "y":1},
+          {"label":"K15", "x":4.5, "y":1},
+          {"label":"K16", "x":5.5, "y":1},
+          {"label":"K17", "x":6.5, "y":1},
+          {"label":"K18", "x":7.5, "y":1},
+          {"label":"K19", "x":8.5, "y":1},
+          {"label":"K1A", "x":9.5, "y":1},
+          {"label":"K1B", "x":10.5, "y":1},
+          {"label":"K1C", "x":11.5, "y":1},
+          {"label":"K1D", "x":12.5, "y":1},
+          {"label":"K1E", "x":13.5, "y":1, "w":1.5},
+          {"label":"K20", "x":0, "y":2, "w":1.75},
+          {"label":"K22", "x":1.75, "y":2},
+          {"label":"K23", "x":2.75, "y":2},
+          {"label":"K24", "x":3.75, "y":2},
+          {"label":"K25", "x":4.75, "y":2},
+          {"label":"K26", "x":5.75, "y":2},
+          {"label":"K27", "x":6.75, "y":2},
+          {"label":"K28", "x":7.75, "y":2},
+          {"label":"K29", "x":8.75, "y":2},
+          {"label":"K2A", "x":9.75, "y":2},
+          {"label":"K2B", "x":10.75, "y":2},
+          {"label":"K2C", "x":11.75, "y":2},
+          {"label":"K2D", "x":12.75, "y":2, "w":2.25},
+          {"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":"K34", "x":4, "y":3},
+          {"label":"K35", "x":5, "y":3},
+          {"label":"K36", "x":6, "y":3},
+          {"label":"K37", "x":7, "y":3},
+          {"label":"K38", "x":8, "y":3},
+          {"label":"K39", "x":9, "y":3},
+          {"label":"K3A", "x":10, "y":3},
+          {"label":"K3B", "x":11, "y":3},
+          {"label":"K3C", "x":12, "y":3},
+          {"label":"K3D", "x":13, "y":3},
+          {"label":"K3E", "x":14, "y":3},
+          {"label":"K40", "x":0, "y":4, "w":1.75},
+          {"label":"K42", "x":1.75, "y":4, "w":1.25},
+          {"label":"K43", "x":3, "y":4, "w":1.25},
+          {"label":"K44", "x":4.25, "y":4, "w":1.25},
+          {"label":"K47", "x":5.5, "y":4, "w":3},
+          {"label":"K49", "x":8.5, "y":4, "w":1.5},
+          {"label":"K4A", "x":10, "y":4},
+          {"label":"K4B", "x":11, "y":4},
+          {"label":"K4C", "x":12, "y":4},
+          {"label":"K4D", "x":13, "y":4},
+          {"label":"K4E", "x":14, "y":4}
+        ]
+      }
+    }
+  }
+  
\ No newline at end of file
diff --git a/keyboards/mechkeys/mk60/keymaps/default/config.h b/keyboards/mechkeys/mk60/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..26c6d6a
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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/mechkeys/mk60/keymaps/default/keymap.c b/keyboards/mechkeys/mk60/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..ea566d4
--- /dev/null
@@ -0,0 +1,74 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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 {
+  QMKBEST = SAFE_RANGE,
+  QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [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_INS,  \
+    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_NO,   KC_Z,    \
+    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_LSFT, KC_UP,   KC_DEL,  KC_LCTL, KC_LGUI, KC_LALT, \
+    MO(1),   KC_SPC,  KC_RALT, KC_PGUP, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT  \
+  ),
+  [1] = 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_DEL,  KC_TRNS, \
+    BL_TOGG, BL_DEC,  BL_INC,  BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, \
+    RGB_MOD, RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS  \
+  ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QMKBEST:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        SEND_STRING("QMK is the best thing ever!");
+      } else {
+        // when keycode QMKBEST is released
+      }
+      break;
+    case QMKURL:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+      } else {
+        // when keycode QMKURL is released
+      }
+      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/mechkeys/mk60/keymaps/default/readme.md b/keyboards/mechkeys/mk60/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..8a01d94
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for mk60
diff --git a/keyboards/mechkeys/mk60/mk60.c b/keyboards/mechkeys/mk60/mk60.c
new file mode 100644 (file)
index 0000000..4c6a059
--- /dev/null
@@ -0,0 +1,50 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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 "mk60.h"
+
+void matrix_init_kb(void) {
+       // put your keyboard start-up code here
+       // runs once when the firmware starts up
+       setPinOutput(B7);
+
+       matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+       // put your looping keyboard code here
+       // runs every cycle (a lot)
+
+       matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+       // put your per-action keyboard code here
+       // runs for every action, just before processing by the firmware
+
+       return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+       // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+       if(IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)){
+               writePinLow(B7);
+       }else {
+               writePinHigh(B7);
+       }
+
+       led_set_user(usb_led);
+}
diff --git a/keyboards/mechkeys/mk60/mk60.h b/keyboards/mechkeys/mk60/mk60.h
new file mode 100644 (file)
index 0000000..66eb416
--- /dev/null
@@ -0,0 +1,41 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \
+    k10,      k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+    k20,      k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D,      \
+    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, \
+    k40,      k42, k43, k44,           k47,      k49, k4A, k4B, k4C, k4D, k4E \
+) \
+{ \
+    { k00, k01,   k02, k03, k04, k05,   k06,   k07, k08,   k09, k0A, k0B, k0C, k0D, k0E},   \
+    { k10, KC_NO, k12, k13, k14, k15,   k16,   k17, k18,   k19, k1A, k1B, k1C, k1D, k1E},   \
+    { k20, KC_NO, k22, k23, k24, k25,   k26,   k27, k28,   k29, k2A, k2B, k2C, k2D, KC_NO}, \
+    { k30, k31,   k32, k33, k34, k35,   k36,   k37, k38,   k39, k3A, k3B, k3C, k3D, k3E},   \
+    { k40, KC_NO, k42, k43, k44, KC_NO, KC_NO, k47, KC_NO, k49, k4A, k4B, k4C, k4D, k4E},   \
+}
diff --git a/keyboards/mechkeys/mk60/readme.md b/keyboards/mechkeys/mk60/readme.md
new file mode 100644 (file)
index 0000000..d309334
--- /dev/null
@@ -0,0 +1,13 @@
+# mechkeys mk60
+
+60% keyboard with RGB underglow and backlights
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)  
+Hardware Supported: MK60  
+Hardware Availability: The MK60 was discontinued by [mechkeys.ca](https://mechkeys.ca/)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make mk60: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/mechkeys/mk60/rules.mk b/keyboards/mechkeys/mk60/rules.mk
new file mode 100644 (file)
index 0000000..e5a48d8
--- /dev/null
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# 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 = 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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes        # 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 newline at end of file
index b4a1924c4f7278a41cc4474599a742f7df3584e3..315349803a09eb8efcea550439dce72f81d7e6f0 100644 (file)
@@ -29,7 +29,7 @@ $ brew cask install crosspack-avr
 $ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
 ```
 
-In order to use the `./program` script, which can reboot the board into
+In order to use the `./util/atmega32a_program.py` script, which can reboot the board into
 the bootloader, you'll need Python 2 with PyUSB installed:
 
 ```
index 4a0a4dc0a69864fb6bab46636608ecbc2004bfca..f9e446064a530f4e6fa671256b7303fbd6fdd4e6 100644 (file)
@@ -13,8 +13,7 @@ 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 "mechmini.h"
-#include "quantum.h"
+#include QMK_KEYBOARD_H
 
 #define _BL  0   // base layer
 #define _FN1 1  // function layer 1
index 29e125394bcde129dedaf2142480ad5c09f26efb..4f4cbda3f37e73f8bd6a2745a4c0d8849e837aac 100644 (file)
@@ -7,33 +7,47 @@
 */
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
   [_QWERTY] = LAYOUT_2u_space_ortho(
-    KC_LEAD, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_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, QUOTE,
-    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   KC_ENT,
-    M_PMOD,  LRALT,   M_SMOD,  LOWER,   RAISE,        KC_SPC,      KC_SLSH, KC_BSLS, KC_LEFT, KC_DOWN, KC_RGHT),
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+    M_PMOD,  LRALT,   M_SMOD,  LOWER,   RAISE,        KC_SPC,      MEDIA,   FUNCT,   XXXXXXX, GAME   , KC_LEAD),
 
   [_RAISE] = LAYOUT_2u_space_ortho(
-    GRAVE,   KC_1,    KC_2,    THREE,   KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______,
+    GRAVE,   _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, _______,
     _______, OBRACK,  CBRACK,  KC_EQL,  HYPHEN,  _______, _______, KC_4,    KC_5,    KC_6,    _______, KC_NLCK,
-    _______, _______, _______, CEDILLA, _______, KC_COMM, KC_PDOT, KC_1,    KC_2,    KC_3,    KC_PPLS, KC_PENT,
-    _______, _______, _______, KEEB,    _______,      _______,     _______, M_OS,    KC_PSLS, KC_PMNS, KC_PAST),
+    _______, _______, _______, CEDILLA, _______, KC_COMM, KC_PDOT, KC_1,    KC_2,    KC_3,    KC_BSLS, KC_PENT,
+    _______, _______, _______, KEEB,    _______,      _______,     KC_0,    KC_PSLS, KC_PMNS, KC_PPLS, KC_PAST),
 
   [_LOWER] = LAYOUT_2u_space_ortho(
-    KC_ESC,  _______, _______, _______, _______, _______, _______, _______, _______, _______, M_P_B,   M_C_A_D,
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-    KC_CAPS, KC_DEL,  _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
-    _______, _______, _______, _______, _______,      _______,     _______, _______, KC_HOME, KC_PGDN, KC_END),
+    _______, LRALT,   _______, _______, _______,      _______,     _______, _______, _______, _______, _______),
 
-  [_KEEB] = LAYOUT_2u_space_ortho(
+  [_MEDIA] = LAYOUT_2u_space_ortho(
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, KC_MUTE,
+    _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______,      KC_MPLY,     _______, _______, _______, _______, _______),
+
+  [_FUNCT] = LAYOUT_2u_space_ortho(
     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_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______,      _______,     _______, _______, M_SFT,   M_SPC,   M_OS   ),
+
+  [_KEEB] = LAYOUT_2u_space_ortho(
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
     _______, BL_TOGG, BL_STEP, BL_INC,  BL_DEC,  BL_BRTG, _______, _______, _______, _______, _______, _______,
     RGB_M_P, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______,
     RESET,   _______, _______, _______, _______,      _______,     _______, _______, _______, _______, _______),
 
-  [_LAZY] = LAYOUT_2u_space_ortho(
-    _______, _______, _______, _______, _______, M_TM,    _______, M_SNIPT, M_SHRUG, _______, _______, KC_MUTE,
-    _______, _______, _______, _______, _______, M_GGT,   _______, M_UF,    M_LOD,   M_REPO,  _______, _______,
-    _______, _______, _______, _______, _______, _______, _______, M_TF,    M_LENNY, _______, KC_VOLU, KC_MPLY,
-    _______, _______, _______, _______, _______,      _______,     M_CALC,  _______, KC_MPRV, KC_VOLD, KC_MNXT),
+  [_GAMING] = LAYOUT_2u_space_ortho(
+    KC_ESC,  KC_F13,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+    KC_TAB,  KC_F14,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+    KC_LSFT, KC_F15,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+    KC_LCTL, KC_F16,  KC_Z,    KC_X,    KC_C,         KC_SPC,      XXXXXXX, XXXXXXX, XXXXXXX, GAME,    XXXXXXX),
+
 };
index c1d5afa1ebaed6c3ceb0e81f2a44c2c4e499534e..64f65f7062e0293293894000aa3283dbf98c2821 100644 (file)
@@ -1,4 +1,4 @@
-BOOTMAGIC_ENABLE = no
+BOOTMAGIC_ENABLE = lite
 MOUSEKEY_ENABLE = no
 STENO_ENABLE = no
 EXTRAKEY_ENABLE = yes
@@ -6,7 +6,7 @@ CONSOLE_ENABLE = no
 COMMAND_ENABLE = no
 SLEEP_LED_ENABLE = no
 NKRO_ENABLE = yes
-BACKLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = no
 AUDIO_ENABLE = no
 RGBLIGHT_ENABLE = yes
 TAP_DANCE_ENABLE = yes
diff --git a/keyboards/mehkee96/program b/keyboards/mehkee96/program
deleted file mode 100644 (file)
index b777b91..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, Sebastian Kaim <sebb@sebb767.de>
-#
-# 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/>.
-
-from __future__ import print_function
-
-import os
-import sys
-import time
-import usb
-
-
-def checkForKeyboardInNormalMode():
-    """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found."""
-    return usb.core.find(idVendor=0x20A0, idProduct=0x422D)
-
-def checkForKeyboardInBootloaderMode():
-    """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise."""
-    return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None)
-
-def flashKeyboard(firmware_file):
-    """Calls bootloadHID to flash the given file to the device."""
-    print('Flashing firmware to device ...')
-    if os.system('bootloadHID -r "%s"' % firmware_file) == 0:
-        print('\nDone!')
-    else:
-        print('\nbootloadHID returned an error.')
-
-def printDeviceInfo(dev):
-    """Prints all infos for a given USB device"""
-    print('Device Information:')
-    print('  idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
-    print('  idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
-    print('Manufacturer: %s' % (dev.iManufacturer))
-    print('Serial: %s' % (dev.iSerialNumber))
-    print('Product: %s' % (dev.iProduct), end='\n\n')
-
-def sendDeviceToBootloaderMode(dev):
-    """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing."""
-    try:
-        dev.set_configuration()
-
-        request_type = usb.util.build_request_type(
-                usb.util.CTRL_OUT,
-                usb.util.CTRL_TYPE_CLASS,
-                usb.util.CTRL_RECIPIENT_DEVICE)
-
-        USBRQ_HID_SET_REPORT = 0x09
-        HID_REPORT_OPTION = 0x0301
-
-        dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5)
-    except usb.core.USBError:
-        # for some reason I keep getting USBError, but it works!
-        pass
-
-
-if len(sys.argv) < 2:
-    print('Usage: %s <firmware.hex>' % sys.argv[0])
-    sys.exit(1)
-
-kb = checkForKeyboardInNormalMode()
-
-if kb is not None:
-    print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='')
-    sendDeviceToBootloaderMode(kb)
-    print(' done.')
-    print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.")
-    print("      You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode")
-
-attempts = 12  # 60 seconds
-found = False
-for attempt in range(1, attempts + 1):
-    print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='')
-
-    if checkForKeyboardInBootloaderMode():
-        print('Found', end='\n\n')
-        flashKeyboard(sys.argv[1])
-        found = True
-        break
-    else:
-        print('Nothing.', end='')
-
-        if attempt != attempts:  # no need to wait on the last attempt
-            print(' Sleeping 5 seconds.', end='')
-            time.sleep(5)
-
-        # print a newline
-        print()
-
-if not found:
-    print("Couldn't find a flashable keyboard. Aborting.")
-    sys.exit(2)
-
index e6e7d4a588330607d6c0bf8b19cc8e92f6cce88f..f7fb397e25940f76d4929a22d6363936d30e1174 100644 (file)
@@ -32,4 +32,4 @@ CUSTOM_MATRIX = yes
 SRC = matrix.c i2c.c
 
 # programming options
-PROGRAM_CMD = ./keyboards/mehkee96/program $(TARGET).hex
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
index 5f5844a70a18f483d65a8b8a6c1d99bb0c7da04c..e3776d2eff170b7e4004874e0a77cc690417bf11 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
+// place overrides here
 
 // place overrides here
 #define MUSIC_MASK (keycode != KC_NO)
@@ -30,5 +29,3 @@
                                   SONG(DVORAK_SOUND) \
                                 }
 #endif
-
-#endif
index b25d789192a4d3fd4920a83359d56c7aba836263..5703999a04317e1b004a22c490aebc95aba68427 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "meira.h"
+#include QMK_KEYBOARD_H
 #include "lighting.h"
 
 #ifdef RGBLIGHT_ENABLE
index 88f08ee5656a8403952831d1f7cdcd13a18608dc..528beb168b76db1c4cff8f0fb080c71ed1391fea 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "meishi.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = LAYOUT( /* Base */
diff --git a/keyboards/melody96/keymaps/konstantin/config.h b/keyboards/melody96/keymaps/konstantin/config.h
new file mode 100644 (file)
index 0000000..4b511eb
--- /dev/null
@@ -0,0 +1,3 @@
+#pragma once
+
+#define LAYER_FN
diff --git a/keyboards/melody96/keymaps/konstantin/keymap.c b/keyboards/melody96/keymaps/konstantin/keymap.c
new file mode 100644 (file)
index 0000000..1150e5d
--- /dev/null
@@ -0,0 +1,78 @@
+#include QMK_KEYBOARD_H
+#include "konstantin.h"
+
+static const hsv_t *colors[] = { &GODSPEED_BLUE, &GODSPEED_YELLOW };
+static size_t cnum = sizeof colors / sizeof *colors;
+static size_t cidx = 0;
+
+void eeconfig_init_keymap(void) {
+  rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
+}
+
+enum keycodes_keymap {
+  RGB_SET = RANGE_KEYMAP,
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+  case RGB_SET:
+    if (record->event.pressed) {
+      cidx = (cidx + 1) % cnum;
+      rgblight_sethsv(colors[cidx]->h, colors[cidx]->s, colors[cidx]->v);
+    }
+    return false;
+
+  default:
+    return true;
+  }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /* Base layer
+   * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+   * │Esc│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│PSc│Ins│Hom│End│PgU│PgD│
+   * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+   * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │Del│NLk│P/ │P* │P- │
+   * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤
+   * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │P7 │P8 │P9 │   │
+   * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤P+ │
+   * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter  │P4 │P5 │P6 │   │
+   * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
+   * │LSft│RAG│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│ ↑ │P1 │P2 │P3 │   │
+   * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┼───┼───┤PEn│
+   * │LCtl│LGui│LAlt│         Space          │RAlGu│RCtrl│ ← │ ↓ │ → │P0 │P. │   │
+   * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┴───┴───┴───┘
+   */
+  [L_BASE] = 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_INS,  KC_HOME, KC_END,  KC_PGUP, KC_PGDN,
+    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_BSLS, KC_DEL,  KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSPC,          KC_P7,   KC_P8,   KC_P9,   XXXXXXX,
+    FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, KC_ENT,                    KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
+    KC_LSFT, RAL_RGU, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,          KC_UP,   KC_P1,   KC_P2,   KC_P3,   XXXXXXX,
+    KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             RAL_RGU, XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0,   KC_PDOT, KC_PENT
+  ),
+
+  /* Function layer
+   * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+   * │   │   │   │   │   │   │   │   │   │   │   │   │   │Sys│SLk│Pau│Brk│Top│Btm│
+   * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+   * │   │   │   │   │   │   │   │   │   │   │   │   │   │   │   │RTg│ ÷ │ × │ − │
+   * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┼───┼───┼───┤
+   * │ M4  │M2 │M↑ │M1 │M3 │M5 │   │UCM│   │Stp│Ply│Prv│Nxt│Clear│RH+│RS+│RV+│   │
+   * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┼───┼───┤RSt│
+   * │      │M← │M↓ │M→ │MW↑│   │   │   │   │   │   │   │        │RH-│RS-│RV-│   │
+   * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┼───┼───┼───┤
+   * │    │   │MA0│MA2│MW←│MW→│   │   │   │Vo-│Vo+│Mut│      │PgU│RMR│RMS│RMB│   │
+   * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┼───┼───┤RMP│
+   * │    │DtPR│DtNA│          MW↓           │     │ App │Hom│PgD│End│RM-│RM+│   │
+   * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┴───┴───┴───┘
+   */
+  [L_FN] = LAYOUT( \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_SYSR, KC_SLCK, KC_PAUS, KC_BRK,  TOP,     BOTTOM,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, DIVIDE,  TIMES,   MINUS,
+    KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD,  _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR,            RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX,
+    _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______, _______,                   RGB_HUD, RGB_SAD, RGB_VAD, RGB_SET,
+    _______, _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______,          KC_PGUP, RGB_M_R, RGB_M_SN,RGB_M_B, XXXXXXX,
+    _______, DST_P_R, DST_N_A,                            KC_WH_D,                            _______, XXXXXXX, KC_APP,  KC_HOME, KC_PGDN, KC_END,  RGB_RMOD,RGB_MOD, RGB_M_P
+  ),
+};
diff --git a/keyboards/melody96/keymaps/konstantin/rules.mk b/keyboards/melody96/keymaps/konstantin/rules.mk
new file mode 100644 (file)
index 0000000..47a859d
--- /dev/null
@@ -0,0 +1,10 @@
+BOOTMAGIC_ENABLE  = no
+COMMAND_ENABLE    = yes
+CONSOLE_ENABLE    = no
+EXTRAKEY_ENABLE   = yes
+MOUSEKEY_ENABLE   = yes
+NKRO_ENABLE       = yes
+TAP_DANCE_ENABLE  = yes
+UNICODEMAP_ENABLE = yes
+
+BACKLIGHT_ENABLE = no
index 2c852d181991103c54775584f2f4e3cce60eed4a..a3ed4f762a6eeed9c25e4d72489329e581caaa87 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 5166e06d834b6eb115bbe4002f904a67989dfed1..b2169947b7a9290bdb9faff3eb763f1dc8e3292e 100644 (file)
@@ -2,7 +2,6 @@
 
 #pragma once
 
-
 #define EE_HANDS
 #define IGNORE_MOD_TAP_INTERRUPT
 #define ONESHOT_TIMEOUT 1000
index e8b1ca1b53bb500ead48cf24e981a10f126426b3..e93a09f64a6dc287e23836f9016bd73a62f977bc 100644 (file)
@@ -5,7 +5,7 @@
 
 extern keymap_config_t keymap_config;
 
-enum custom_layers {
+enum my_layers {
   _CMK_DHM,
   _QWERTY,
   _SYS,
@@ -15,7 +15,7 @@ enum custom_layers {
   _SYM
 };
 
-enum custom_keycodes {
+enum my_keycodes {
   CMK_DHM = SAFE_RANGE,
   QWERTY,
   SYS,
@@ -25,34 +25,30 @@ enum custom_keycodes {
   SYM
 };
 
-typedef struct {
-  bool is_press_action;
-  int state;
-} tap;
-
-enum {
-  SINGLE_TAP = 1,
-  SINGLE_HOLD = 2,
-  DOUBLE_SINGLE_TAP = 3
-};
-
-enum {
-  ALT_OP = 0,
-  CTL_CCB,
-  GUI_CP,
-  SFT_OCB,
+enum td_keycodes {
+  ALT_LP,
+  CTL_RCB,
+  GUI_RP,
+  SFT_LCB,
   SFT_PLS
 };
 
+typedef enum {
+  SINGLE_TAP,
+  SINGLE_HOLD,
+  DOUBLE_SINGLE_TAP
+} td_state_t;
+
+static td_state_t td_state;
 int cur_dance (qk_tap_dance_state_t *state);
-void altop_finished (qk_tap_dance_state_t *state, void *user_data);
-void altop_reset (qk_tap_dance_state_t *state, void *user_data);
-void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data);
-void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data);
-void guicp_finished (qk_tap_dance_state_t *state, void *user_data);
-void guicp_reset (qk_tap_dance_state_t *state, void *user_data);
-void sftocb_finished (qk_tap_dance_state_t *state, void *user_data);
-void sftocb_reset (qk_tap_dance_state_t *state, void *user_data);
+void altlp_finished (qk_tap_dance_state_t *state, void *user_data);
+void altlp_reset (qk_tap_dance_state_t *state, void *user_data);
+void ctlrcb_finished (qk_tap_dance_state_t *state, void *user_data);
+void ctlrcb_reset (qk_tap_dance_state_t *state, void *user_data);
+void guirp_finished (qk_tap_dance_state_t *state, void *user_data);
+void guirp_reset (qk_tap_dance_state_t *state, void *user_data);
+void sftlcb_finished (qk_tap_dance_state_t *state, void *user_data);
+void sftlcb_reset (qk_tap_dance_state_t *state, void *user_data);
 void sftpls_finished (qk_tap_dance_state_t *state, void *user_data);
 void sftpls_reset (qk_tap_dance_state_t *state, void *user_data);
 
@@ -62,7 +58,7 @@ void sftpls_reset (qk_tap_dance_state_t *state, void *user_data);
 #define ALT_D LALT_T(KC_D)
 #define ALT_E LALT_T(KC_E)
 #define ALT_K LALT_T(KC_K)
-#define ALT_OB LALT_T(KC_LBRC)
+#define ALT_LB LALT_T(KC_LBRC)
 #define ALT_S LALT_T(KC_S)
 #define CTRL_2 LCTL_T(KC_2)
 #define CTRL_4 LCTL_T(KC_4)
@@ -77,7 +73,7 @@ void sftpls_reset (qk_tap_dance_state_t *state, void *user_data);
 #define GUI_1 LGUI_T(KC_1)
 #define GUI_4 LGUI_T(KC_4)
 #define GUI_7 LGUI_T(KC_7)
-#define GUI_CB LGUI_T(KC_RBRC)
+#define GUI_RB LGUI_T(KC_RBRC)
 #define GUI_F LGUI_T(KC_F)
 #define GUI_J LGUI_T(KC_J)
 #define GUI_N LGUI_T(KC_N)
@@ -153,7 +149,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * If you use QWERTY + the Vanilla numbers primarily, change NUMLK_E to NUMLK_N here.
  *
  * ,----------------------------------.           ,----------------------------------.
- * | RESET|DEBUG |QWERTY|CMKDHM|      |           |      | VOL--| VOL++|      |      |
+ * | RESET|DEBUG |QWERTY|CMKDHM|      |           |      | VOL--| VOL++|BRITE-|BRITE+|
  * |------+------+------+------+------|           |------+------+------+------+------|
  * | SHIFT| CTRL |  ALT |  GUI |NAV LK|           | POWER| VOL- | VOL+ | MUTE | MPLY |
  * |------+------+------+------+------|           |------+------+------+------+------|
@@ -166,10 +162,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  *                                `------'    `------'
  */
 [_SYS] = LAYOUT( \
-  RESET,   DEBUG,   QWERTY,  CMK_DHM, _______,       _______,  KC__VOLDOWN, KC__VOLUP, _______,  _______, \
-  KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK,        KC_POWER, VOL_DN,      VOL_UP,    KC__MUTE, KC_MPLY, \
-  _______, _______, AU_OFF,  AU_ON,   _______,       _______,  NUMLK_E,     KC_MRWD,   KC_MFFD,  _______, \
-                    _______, _______, _______,       _______,  _______,     _______                       \
+  RESET,   DEBUG,   QWERTY,  CMK_DHM, _______,       _______,  KC_VOLD, KC_VOLU, KC_BRID,  KC_BRIU, \
+  KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK,        KC_POWER, VOL_DN,  VOL_UP,  KC__MUTE, KC_MPLY, \
+  _______, _______, AU_OFF,  AU_ON,   _______,       _______,  NUMLK_E, KC_MRWD, KC_MFFD,  _______, \
+                    _______, _______, _______,       _______,  _______, _______                     \
 ),
 
 /* Navigation + mouse keys
@@ -201,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------|           |------+------+------+------+------|
  * | SFT/7| CTL/5| ALT/3| GUI/1|   9  |           |   8  | GUI/0| ALT/2| CTL/4| SFT/6|
  * |------+------+------+------+------|           |------+------+------+------+------|
- * |      |      |  F11 |  F12 | BSPC |           |  DEL |NUM LK|      |      |      |
+ * |  F11 |  F12 |   -  | SPACE| BSPC |           |  DEL |NUM LK|      |      |   /  |
  * `----------------------------------'           `----------------------------------'
  *                  ,--------------------.    ,--------------------.
  *                  |      | TAB  |      |    |      |      |      |
@@ -212,7 +208,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [_NUM_E] = LAYOUT( \
   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,         KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  \
   SFT_7,   CTRL_5,  ALT_3,   GUI_1,   KC_9,          KC_8,    GUI_0,   ALT_2,   CTRL_4,  SFT_6,   \
-  _______, _______, KC_F11,  KC_F12,  KC_BSPC,       KC_DEL,  NUMLK_E, _______, _______, _______, \
+  KC_F11,  KC_F12,  KC_MINS, KC_SPC,  KC_BSPC,       KC_DEL,  NUMLK_E, _______, _______, KC_SLSH, \
                     _______, KC_TAB,  KC_ESC,        _______, _______, _______                    \
 ),
 
@@ -223,7 +219,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |------+------+------+------+------|           |------+------+------+------+------|
  * | SFT/1| CTL/2| ALT/3| GUI/4|   5  |           |   6  | GUI/7| ALT/8| CTL/9| SFT/0|
  * |------+------+------+------+------|           |------+------+------+------+------|
- * |      |      |  F11 |  F12 | BSPC |           |  DEL |NUM LK|      |      |      |
+ * |  F11 |  F12 |   -  | SPACE| BSPC |           |  DEL |NUM LK|      |      |   /  |
  * `----------------------------------'           `----------------------------------'
  *                  ,--------------------.    ,--------------------.
  *                  |      | TAB  |      |    |      |      |      |
@@ -232,10 +228,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  *                                `------'    `------'
  */
 [_NUM_N] = LAYOUT( \
-  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,         KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,   \
-  SFT_1,   CTRL_2,  ALT_3,   GUI_4,   KC_5,          KC_6,    GUI_7,   ALT_8,   CTRL_9,  SFT_0,    \
-  _______, _______, KC_F11,  KC_F12,  KC_BSPC,       KC_DEL,  NUMLK_N, _______, _______, _______,  \
-                    _______, KC_TAB,  KC_ESC,        _______, _______, _______                     \
+  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,         KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  \
+  SFT_1,   CTRL_2,  ALT_3,   GUI_4,   KC_5,          KC_6,    GUI_7,   ALT_8,   CTRL_9,  SFT_0,   \
+  KC_F11,  KC_F12,  KC_MINS, KC_SPC,  KC_BSPC,       KC_DEL,  NUMLK_N, _______, _______, KC_SLSH, \
+                    _______, KC_TAB,  KC_ESC,        _______, _______, _______                    \
 ),
 
 
@@ -256,7 +252,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [_SYM] = LAYOUT( \
   KC_EXLM,     KC_AT,   KC_HASH,    KC_DLR,     KC_PERC,       KC_CIRC, KC_AMPR, KC_ASTR, KC_QUES,     KC_QUOT,     \
-  TD(SFT_PLS), CTRL_EQ, TD(ALT_OP), TD(GUI_CP), KC_DQT,        KC_COLN, GUI_CB,  ALT_OB,  TD(CTL_CCB), TD(SFT_OCB), \
+  TD(SFT_PLS), CTRL_EQ, TD(ALT_LP), TD(GUI_RP), KC_DQT,        KC_COLN, GUI_RB,  ALT_LB,  TD(CTL_RCB), TD(SFT_LCB), \
   KC_LT,       KC_PIPE, KC_MINS,    KC_GT,      KC_BSLS,       KC_GRV,  KC_UNDS, KC_SLSH, KC_TILD,     KC_SCLN,     \
                         _______,    MAC_EN,     _______,       _______, MAC_EM,  _______                            \
 )
@@ -286,203 +282,153 @@ int cur_dance (qk_tap_dance_state_t *state) {
     else return SINGLE_HOLD;
   }
   if (state->count == 2) return DOUBLE_SINGLE_TAP;
-  else return 8;
+  else return 3;
 }
 
-static tap altop_tap_state = {
-  .is_press_action = true,
-  .state = 0
-};
-
-void altop_finished (qk_tap_dance_state_t *state, void *user_data) {
-  altop_tap_state.state = cur_dance(state);
-  switch (altop_tap_state.state) {
+void altlp_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_state = cur_dance(state);
+  switch (td_state) {
     case SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      register_code(KC_9);
+      register_code16(KC_LPRN);
       break;
     case SINGLE_HOLD:
       register_mods(MOD_BIT(KC_LALT));
       break;
     case DOUBLE_SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      tap_code(KC_9);
-      register_code(KC_9);
+      tap_code16(KC_LPRN);
+      register_code16(KC_LPRN);
   }
 }
 
-void altop_reset (qk_tap_dance_state_t *state, void *user_data) {
-  switch (altop_tap_state.state) {
+void altlp_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (td_state) {
     case SINGLE_TAP:
-      unregister_code(KC_9);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_LPRN);
       break;
     case SINGLE_HOLD:
       unregister_mods(MOD_BIT(KC_LALT));
       break;
     case DOUBLE_SINGLE_TAP:
-      unregister_code(KC_9);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_LPRN);
   }
-  altop_tap_state.state = 0;
 }
 
-static tap ctlccb_tap_state = {
-  .is_press_action = true,
-  .state = 0
-};
-
-void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data) {
-  ctlccb_tap_state.state = cur_dance(state);
-  switch (ctlccb_tap_state.state) {
+void ctlrcb_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_state = cur_dance(state);
+  switch (td_state) {
     case SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      register_code(KC_RBRC);
+      register_code16(KC_RCBR);
       break;
     case SINGLE_HOLD:
       register_mods(MOD_BIT(KC_LCTL));
       break;
     case DOUBLE_SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      tap_code(KC_RBRC);
-      register_code(KC_RBRC);
+      tap_code16(KC_RCBR);
+      register_code16(KC_RCBR);
   }
 }
 
-void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data) {
-  switch (ctlccb_tap_state.state) {
+void ctlrcb_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (td_state) {
     case SINGLE_TAP:
-      unregister_code(KC_RBRC);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_RCBR);
       break;
     case SINGLE_HOLD:
       unregister_mods(MOD_BIT(KC_LCTL));
       break;
     case DOUBLE_SINGLE_TAP:
-      unregister_code(KC_RBRC);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_RCBR);
   }
-  ctlccb_tap_state.state = 0;
 }
 
-static tap guicp_tap_state = {
-  .is_press_action = true,
-  .state = 0
-};
-
-void guicp_finished (qk_tap_dance_state_t *state, void *user_data) {
-  guicp_tap_state.state = cur_dance(state);
-  switch (guicp_tap_state.state) {
+void guirp_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_state = cur_dance(state);
+  switch (td_state) {
     case SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      register_code(KC_0);
+      register_code16(KC_RPRN);
       break;
     case SINGLE_HOLD:
       register_mods(MOD_BIT(KC_LGUI));
       break;
     case DOUBLE_SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      tap_code(KC_0);
-      register_code(KC_0);
+      tap_code16(KC_RPRN);
+      register_code16(KC_RPRN);
   }
 }
 
-void guicp_reset (qk_tap_dance_state_t *state, void *user_data) {
-  switch (guicp_tap_state.state) {
+void guirp_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (td_state) {
     case SINGLE_TAP:
-      unregister_code(KC_0);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_RPRN);
       break;
     case SINGLE_HOLD:
       unregister_mods(MOD_BIT(KC_LGUI));
       break;
     case DOUBLE_SINGLE_TAP:
-      unregister_code(KC_0);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_RPRN);
   }
-  guicp_tap_state.state = 0;
 }
 
-static tap sftocb_tap_state = {
-  .is_press_action = true,
-  .state = 0
-};
-
-void sftocb_finished (qk_tap_dance_state_t *state, void *user_data) {
-  sftocb_tap_state.state = cur_dance(state);
-  switch (sftocb_tap_state.state) {
+void sftlcb_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_state = cur_dance(state);
+  switch (td_state) {
     case SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      register_code(KC_LBRC);
+      register_code16(KC_LCBR);
       break;
     case SINGLE_HOLD:
       register_mods(MOD_BIT(KC_LSFT));
       break;
     case DOUBLE_SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      tap_code(KC_LBRC);
-      register_code(KC_LBRC);
+      tap_code16(KC_LCBR);
+      register_code16(KC_LCBR);
   }
 }
 
-void sftocb_reset (qk_tap_dance_state_t *state, void *user_data) {
-  switch (sftocb_tap_state.state) {
+void sftlcb_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (td_state) {
     case SINGLE_TAP:
-      unregister_code(KC_LBRC);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_LCBR);
       break;
     case SINGLE_HOLD:
       unregister_mods(MOD_BIT(KC_LSFT));
       break;
     case DOUBLE_SINGLE_TAP:
-      unregister_code(KC_LBRC);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_LCBR);
   }
-  sftocb_tap_state.state = 0;
 }
 
-static tap sftpls_tap_state = {
-  .is_press_action = true,
-  .state = 0
-};
-
 void sftpls_finished (qk_tap_dance_state_t *state, void *user_data) {
-  sftpls_tap_state.state = cur_dance(state);
-  switch (sftpls_tap_state.state) {
+  td_state = cur_dance(state);
+  switch (td_state) {
     case SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      register_code(KC_EQL);
+      register_code16(KC_PLUS);
       break;
     case SINGLE_HOLD:
       register_mods(MOD_BIT(KC_LSFT));
       break;
     case DOUBLE_SINGLE_TAP:
-      register_mods(MOD_BIT(KC_LSFT));
-      tap_code(KC_EQL);
-      register_code(KC_EQL);
+      tap_code16(KC_PLUS);
+      register_code16(KC_PLUS);
   }
 }
 
 void sftpls_reset (qk_tap_dance_state_t *state, void *user_data) {
-  switch (sftpls_tap_state.state) {
+  switch (td_state) {
     case SINGLE_TAP:
-      unregister_code(KC_EQL);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_PLUS);
       break;
     case SINGLE_HOLD:
       unregister_mods(MOD_BIT(KC_LSFT));
       break;
     case DOUBLE_SINGLE_TAP:
-      unregister_code(KC_EQL);
-      unregister_mods(MOD_BIT(KC_LSFT));
+      unregister_code16(KC_PLUS);
   }
-  sftpls_tap_state.state = 0;
 }
 
 qk_tap_dance_action_t tap_dance_actions[] = {
-  [ALT_OP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altop_finished, altop_reset),
-  [CTL_CCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctlccb_finished, ctlccb_reset),
-  [GUI_CP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, guicp_finished, guicp_reset),
-  [SFT_OCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftocb_finished, sftocb_reset),
+  [ALT_LP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altlp_finished, altlp_reset),
+  [CTL_RCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctlrcb_finished, ctlrcb_reset),
+  [GUI_RP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, guirp_finished, guirp_reset),
+  [SFT_LCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftlcb_finished, sftlcb_reset),
   [SFT_PLS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftpls_finished, sftpls_reset)
 };
index 5ed4c5446eb87179501c6e31b0da6a2bb5af0e98..2a74d95536b3c8f82057cb534aa1d52b4e2a5296 100644 (file)
@@ -1,4 +1,5 @@
 # dustypomerleau, Minidox rules
 
+EXTRAKEY_ENABLE = yes
 MOUSEKEY_ENABLE = yes
 TAP_DANCE_ENABLE = yes
index df06a26206275869d2d375ddbeec92b353ffcf10..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
\ No newline at end of file
index 9f9a9fc10798467696dd4ed004ee254a402539d6..6c3e30ef7b5c0f80ea01366067383e3649098a74 100644 (file)
@@ -1,5 +1,6 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
+
+// place overrides here
 
 #define TAPPING_TERM 200
 
@@ -7,5 +8,3 @@
 #define RGBLIGHT_HUE_STEP 12
 #define RGBLIGHT_SAT_STEP 15
 #define RGBLIGHT_VAL_STEP 18
-
-#endif
diff --git a/keyboards/mt980/config.h b/keyboards/mt980/config.h
new file mode 100644 (file)
index 0000000..88c25a5
--- /dev/null
@@ -0,0 +1,52 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Wheat Field Peripherals
+#define PRODUCT         MT980
+#define DESCRIPTION     Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 9
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B7, B3, B2, B1, B0, E6, F0, F1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 24
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 185
+#endif
+
+/* Place bootmagic key on Esc */
+#define BOOTMAGIC_LITE_ROW 5
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/mt980/info.json b/keyboards/mt980/info.json
new file mode 100644 (file)
index 0000000..f71d022
--- /dev/null
@@ -0,0 +1,117 @@
+{
+  "keyboard_name": "mt980",
+  "url": "https://shop110310565.taobao.com",
+  "maintainer": "walkerstop",
+  "width": 19.5,
+  "height": 6.75,
+  "layouts": {
+    "LAYOUT": {
+      "key_count": 103,
+      "layout": [
+        {"label":"K50", "x":0, "y":0},
+        {"label":"K52", "x":1.25, "y":0},
+        {"label":"K53", "x":2.25, "y":0},
+        {"label":"K54", "x":3.25, "y":0},
+        {"label":"K55", "x":4.25, "y":0},
+        {"label":"K57", "x":5.5, "y":0},
+        {"label":"K58", "x":6.5, "y":0},
+        {"label":"KB8", "x":7.5, "y":0},
+        {"label":"KB7", "x":8.5, "y":0},
+        {"label":"KB5", "x":9.75, "y":0},
+        {"label":"KB4", "x":10.75, "y":0},
+        {"label":"KB3", "x":11.75, "y":0},
+        {"label":"KB6", "x":12.75, "y":0},
+        {"label":"K51", "x":14, "y":0},
+        {"label":"KB2", "x":15.5, "y":0},
+        {"label":"KB1", "x":16.5, "y":0},
+        {"label":"KB0", "x":17.5, "y":0},
+        {"label":"K63", "x":18.5, "y":0},
+        {"label":"K40", "x":0, "y":1.5},
+        {"label":"K41", "x":1, "y":1.5},
+        {"label":"K42", "x":2, "y":1.5},
+        {"label":"K43", "x":3, "y":1.5},
+        {"label":"K44", "x":4, "y":1.5},
+        {"label":"K45", "x":5, "y":1.5},
+        {"label":"K46", "x":6, "y":1.5},
+        {"label":"K47", "x":7, "y":1.5},
+        {"label":"K48", "x":8, "y":1.5},
+        {"label":"KA8", "x":9, "y":1.5},
+        {"label":"KA7", "x":10, "y":1.5},
+        {"label":"KA5", "x":11, "y":1.5},
+        {"label":"KA4", "x":12, "y":1.5},
+        {"label":"KA3", "x":13, "y":1.5},
+        {"label":"KA6", "x":14, "y":1.5},
+        {"label":"KA2", "x":15.5, "y":1.5},
+        {"label":"KA1", "x":16.5, "y":1.5},
+        {"label":"KA0", "x":17.5, "y":1.5},
+        {"label":"K64", "x":18.5, "y":1.5},
+        {"label":"K30", "x":0, "y":2.5, "w":1.5},
+        {"label":"K31", "x":1.5, "y":2.5},
+        {"label":"K32", "x":2.5, "y":2.5},
+        {"label":"K33", "x":3.5, "y":2.5},
+        {"label":"K34", "x":4.5, "y":2.5},
+        {"label":"K35", "x":5.5, "y":2.5},
+        {"label":"K36", "x":6.5, "y":2.5},
+        {"label":"K37", "x":7.5, "y":2.5},
+        {"label":"K38", "x":8.5, "y":2.5},
+        {"label":"K98", "x":9.5, "y":2.5},
+        {"label":"K97", "x":10.5, "y":2.5},
+        {"label":"K95", "x":11.5, "y":2.5},
+        {"label":"K94", "x":12.5, "y":2.5},
+        {"label":"K84", "x":13.5, "y":2.5, "w":1.5},
+        {"label":"K96", "x":15.5, "y":2.5},
+        {"label":"K92", "x":16.5, "y":2.5},
+        {"label":"K91", "x":17.5, "y":2.5},
+        {"label":"K90", "x":18.5, "y":2.5},
+        {"label":"K20", "x":0, "y":3.5, "w":1.75},
+        {"label":"K21", "x":1.75, "y":3.5},
+        {"label":"K22", "x":2.75, "y":3.5},
+        {"label":"K23", "x":3.75, "y":3.5},
+        {"label":"K24", "x":4.75, "y":3.5},
+        {"label":"K25", "x":5.75, "y":3.5},
+        {"label":"K26", "x":6.75, "y":3.5},
+        {"label":"K27", "x":7.75, "y":3.5},
+        {"label":"K28", "x":8.75, "y":3.5},
+        {"label":"K88", "x":9.75, "y":3.5},
+        {"label":"K87", "x":10.75, "y":3.5},
+        {"label":"K85", "x":11.75, "y":3.5},
+        {"label":"K93", "x":12.75, "y":3.5, "w":2.25},
+        {"label":"K86", "x":15.5, "y":3.5},
+        {"label":"K82", "x":16.5, "y":3.5},
+        {"label":"K81", "x":17.5, "y":3.5},
+        {"label":"K80", "x":18.5, "y":3.5},
+        {"label":"K10", "x":0, "y":4.5, "w":1.25},
+        {"label":"K11", "x":1.25, "y":4.5},
+        {"label":"K12", "x":2.25, "y":4.5},
+        {"label":"K13", "x":3.25, "y":4.5},
+        {"label":"K14", "x":4.25, "y":4.5},
+        {"label":"K15", "x":5.25, "y":4.5},
+        {"label":"K16", "x":6.25, "y":4.5},
+        {"label":"K17", "x":7.25, "y":4.5},
+        {"label":"K18", "x":8.25, "y":4.5},
+        {"label":"K78", "x":9.25, "y":4.5},
+        {"label":"K77", "x":10.25, "y":4.5},
+        {"label":"K75", "x":11.25, "y":4.5},
+        {"label":"K74", "x":12.25, "y":4.5, "w":1.75},
+        {"label":"K73", "x":14.25, "y":4.75},
+        {"label":"K76", "x":15.5, "y":4.5},
+        {"label":"K72", "x":16.5, "y":4.5},
+        {"label":"K71", "x":17.5, "y":4.5},
+        {"label":"K70", "x":18.5, "y":4.5},
+        {"label":"K00", "x":0, "y":5.5, "w":1.25},
+        {"label":"K01", "x":1.25, "y":5.5},
+        {"label":"K02", "x":2.25, "y":5.5, "w":1.25},
+        {"label":"K06", "x":3.5, "y":5.5, "w":6.25},
+        {"label":"K08", "x":9.75, "y":5.5},
+        {"label":"K07", "x":10.75, "y":5.5},
+        {"label":"K05", "x":11.75, "y":5.5, "w":1.25},
+        {"label":"K04", "x":13.25, "y":5.75},
+        {"label":"K03", "x":14.25, "y":5.75},
+        {"label":"K66", "x":15.25, "y":5.75},
+        {"label":"K62", "x":16.5, "y":5.5},
+        {"label":"K61", "x":17.5, "y":5.5},
+        {"label":"K60", "x":18.5, "y":5.5}
+      ]
+    }
+  }
+}
diff --git a/keyboards/mt980/keymaps/default/keymap.c b/keyboards/mt980/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..504233a
--- /dev/null
@@ -0,0 +1,21 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = 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_NO,              KC_INS,   KC_PSCR,  KC_PGUP,  KC_PGDN,
+    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_BSPC,  KC_NLCK,  KC_PSLS,  KC_PAST,  KC_PMNS,
+    KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,            KC_P7,    KC_P8,    KC_P9,    KC_PPLS,
+    KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,  KC_ENT,                       KC_P4,    KC_P5,    KC_P6,    KC_PPLS,
+    KC_LSFT,  KC_LSFT,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,  KC_UP,              KC_P1,    KC_P2,    KC_P3,    KC_PENT,
+    KC_LCTL,  KC_LGUI,  KC_LALT,                      KC_SPC,                                 KC_RALT,  MO(1),    KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT,            KC_P0,    KC_PDOT,  KC_PENT),
+
+  [1] = 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_PAUSE, KC_SLCK,  KC_HOME,  KC_END,
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_TOG,  RESET,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_VAI,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,
+    KC_TRNS,  KC_TRNS,  KC_TRNS,                      RESET,                                  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_MOD,            KC_TRNS,  KC_TRNS,  KC_TRNS)
+
+};
diff --git a/keyboards/mt980/keymaps/walker/config.h b/keyboards/mt980/keymaps/walker/config.h
new file mode 100644 (file)
index 0000000..0bd3959
--- /dev/null
@@ -0,0 +1,5 @@
+#pragma once
+
+#define TAPPING_TERM 200
+#define ONESHOT_TAP_TOGGLE 5
+#define ONESHOT_TIMEOUT 5000
diff --git a/keyboards/mt980/keymaps/walker/keymap.c b/keyboards/mt980/keymaps/walker/keymap.c
new file mode 100644 (file)
index 0000000..83a3fb8
--- /dev/null
@@ -0,0 +1,168 @@
+#include "mt980.h"
+
+bool numlock_on = true;
+
+typedef struct {
+  bool is_press_action;
+  int state;
+} tap;
+
+enum {
+  SINGLE_TAP = 1,
+  SINGLE_HOLD = 2,
+  DOUBLE_TAP = 3,
+  DOUBLE_HOLD = 4,
+  TRIPLE_TAP = 5,
+  TRIPLE_HOLD = 6
+};
+
+enum {
+  ALT_L1 = 0
+};
+
+int cur_dance (qk_tap_dance_state_t *state);
+void alt_finished (qk_tap_dance_state_t *state, void *user_data);
+void alt_reset (qk_tap_dance_state_t *state, void *user_data);
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = 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_NO,              KC_INS,   KC_PSCR,  KC_PGUP,  KC_PGDN, 
+    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_BSPC,  KC_NLCK,  KC_PSLS,  KC_PAST,  KC_PMNS,
+    KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,            KC_P7,    KC_P8,    KC_P9,    KC_PPLS,
+    KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,  KC_ENT,                       KC_P4,    KC_P5,    KC_P6,    KC_PPLS,
+    KC_LSFT,  KC_LSFT,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,  KC_UP,              KC_P1,    KC_P2,    KC_P3,    KC_PENT,
+    KC_LCTL,  KC_LGUI,  TD(ALT_L1),                   KC_SPC,                                 KC_RALT,  MO(1),    KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT,            KC_P0,    KC_PDOT,  KC_PENT),
+
+  [1] = 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_PAUSE, KC_SLCK,  KC_HOME,  KC_END,   
+    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,   RGB_TOG,  RESET,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
+    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_VAI,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
+    KC_TRNS,  KC_TRNS,  KC_TRNS,                      RESET,                                  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_MOD,            KC_TRNS,  KC_TRNS,  KC_TRNS)  
+
+};
+
+int cur_dance (qk_tap_dance_state_t *state) {
+  if (state->count == 1) {
+    if (state->pressed) return SINGLE_HOLD;
+    else return SINGLE_TAP;
+  }
+  else if (state->count == 2) {
+    if (state->pressed) return DOUBLE_HOLD;
+    else return DOUBLE_TAP;
+  }
+  else if (state->count == 3) {
+    if (state->interrupted || !state->pressed)  return TRIPLE_TAP;
+    else return TRIPLE_HOLD;
+  }
+  else return 8;
+}
+
+static tap alttap_state = {
+  .is_press_action = true,
+  .state = 0
+};
+
+void alt_finished (qk_tap_dance_state_t *state, void *user_data) {
+  alttap_state.state = cur_dance(state);
+  switch (alttap_state.state) {
+    case SINGLE_TAP: set_oneshot_layer(1, ONESHOT_START); clear_oneshot_layer_state(ONESHOT_PRESSED); break;
+    case SINGLE_HOLD: register_code(KC_LALT); break;
+    case DOUBLE_TAP: set_oneshot_layer(1, ONESHOT_START); set_oneshot_layer(1, ONESHOT_PRESSED); break;
+    case DOUBLE_HOLD: register_code(KC_LALT); layer_on(1); break;
+  }
+}
+
+void alt_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (alttap_state.state) {
+    case SINGLE_TAP: break;
+    case SINGLE_HOLD: unregister_code(KC_LALT); break;
+    case DOUBLE_TAP: break;
+    case DOUBLE_HOLD: layer_off(1); unregister_code(KC_LALT); break;
+  }
+  alttap_state.state = 0;
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [ALT_L1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,alt_finished, alt_reset)
+};
+
+void led_set_keymap(uint8_t usb_led) {
+  if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+    numlock_on = true;
+  }
+  else {
+    numlock_on = false;
+  }
+}
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+
+  switch (keycode) {
+    case KC_TRNS:
+    case KC_NO:
+      /* Always cancel one-shot layer when another key gets pressed */
+      if (record->event.pressed && is_oneshot_layer_active())
+      clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
+      return true;
+    case RESET:
+      /* Don't allow reset from oneshot layer state */
+      if (record->event.pressed && is_oneshot_layer_active()) {
+        clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
+        return false;
+      }
+      return true;
+    case KC_PPLS:
+      if (!numlock_on) {
+        if (is_oneshot_layer_active() || layer_state & 0x2) {
+          if (record->event.pressed)
+            register_code(KC_HOME);
+          else
+            unregister_code(KC_HOME);
+          clear_oneshot_layer_state(ONESHOT_START);
+        }
+        else {
+          if (record->event.pressed)
+            register_code(KC_PGUP);
+          else
+            unregister_code(KC_PGUP);
+        }
+        return false;
+      }
+      return true;
+    case KC_PENT:
+      if (!numlock_on) {
+        if (is_oneshot_layer_active() || layer_state & 0x2) {
+          if (record->event.pressed)
+            register_code(KC_END);
+          else
+            unregister_code(KC_END);
+          clear_oneshot_layer_state(ONESHOT_START);
+        }
+        else {
+          if (record->event.pressed)
+            register_code(KC_PGDN);
+          else
+            unregister_code(KC_PGDN);
+        }
+        return false;
+      }
+      return true;
+    case KC_NLCK:
+      /* Shift + NumLock will be treated as shift-Insert */
+      if ((keyboard_report->mods & MOD_BIT (KC_LSFT)) || (keyboard_report->mods & MOD_BIT (KC_RSFT))) {
+        if (record->event.pressed) {
+          register_code(KC_INS);
+          unregister_code(KC_INS);
+        }
+        return false;
+      }
+      else
+        return true;
+    default:
+      return true;
+  }
+  return true;
+}
diff --git a/keyboards/mt980/keymaps/walker/rules.mk b/keyboards/mt980/keymaps/walker/rules.mk
new file mode 100644 (file)
index 0000000..e5ddcae
--- /dev/null
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/mt980/mt980.c b/keyboards/mt980/mt980.c
new file mode 100644 (file)
index 0000000..5461a3b
--- /dev/null
@@ -0,0 +1,65 @@
+#include "mt980.h"
+
+__attribute__ ((weak))
+void matrix_init_keymap(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_keymap(void) {}
+
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+__attribute__ ((weak))
+uint32_t layer_state_set_keymap (uint32_t state) {
+  return state;
+}
+__attribute__ ((weak))
+void led_set_keymap(uint8_t usb_led) {}
+
+void matrix_init_user(void) {
+  matrix_init_keymap();
+}
+
+void matrix_scan_user(void) {
+  matrix_scan_keymap();
+}
+
+void keyboard_pre_init_user(void) {
+  /* Set NUMLOCK indicator pin as output */
+  setPinOutput(C6);
+  /* Set CAPSLOCK indicator pin as output */
+  setPinOutput(C7);
+  /* Set SCROLLOCK indicator pin as output */
+  setPinOutput(B5);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return process_record_keymap(keycode, record);
+}
+
+void led_set_user(uint8_t usb_led) {
+
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    writePinLow(C6);
+  }
+  else {
+    writePinHigh(C6);
+  }
+
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinLow(C7);
+  }
+  else {
+    writePinHigh(C7);
+  }
+
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinLow(B5);
+  }
+  else {
+    writePinHigh(B5);
+  }
+
+  led_set_keymap(usb_led);
+}
diff --git a/keyboards/mt980/mt980.h b/keyboards/mt980/mt980.h
new file mode 100644 (file)
index 0000000..d9804b3
--- /dev/null
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+  K050, K052, K053, K054, K055, K057, K058, K118, K117, K115, K114, K113, K116, K051,       K112, K111, K110, K063, \
+  K040, K041, K042, K043, K044, K045, K046, K047, K048, K108, K107, K105, K104, K103, K106, K102, K101, K100, K064, \
+  K030, K031, K032, K033, K034, K035, K036, K037, K038, K098, K097, K095, K094, K084,       K096, K092, K091, K090, \
+  K020, K021, K022, K023, K024, K025, K026, K027, K028, K088, K087, K085, K093,             K086, K082, K081, K080, \
+  K010, K011, K012, K013, K014, K015, K016, K017, K018, K078, K077, K075, K074,       K073, K076, K072, K071, K070, \
+  K000, K001, K002,                   K006,                   K008, K007, K005, K004, K003, K066, K062, K061, K060  \
+) { \
+  { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008 }, \
+  { K010,  K011,  K012,  K013,  K014,  K015,  K016,  K017,  K018 }, \
+  { K020,  K021,  K022,  K023,  K024,  K025,  K026,  K027,  K028 }, \
+  { K030,  K031,  K032,  K033,  K034,  K035,  K036,  K037,  K038 }, \
+  { K040,  K041,  K042,  K043,  K044,  K045,  K046,  K047,  K048 }, \
+  { K050,  K051,  K052,  K053,  K054,  K055,  KC_NO, K057,  K058 }, \
+  { K060,  K061,  K062,  K063,  K064,  KC_NO, K066,  KC_NO, KC_NO}, \
+  { K070,  K071,  K072,  K073,  K074,  K075,  K076,  K077,  K078 }, \
+  { K080,  K081,  K082,  KC_NO, K084,  K085,  K086,  K087,  K088 }, \
+  { K090,  K091,  K092,  K093,  K094,  K095,  K096,  K097,  K098 }, \
+  { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108 }, \
+  { K110,  K111,  K112,  K113,  K114,  K115,  K116,  K117,  K118 }  \
+}
diff --git a/keyboards/mt980/readme.md b/keyboards/mt980/readme.md
new file mode 100644 (file)
index 0000000..7bc27c9
--- /dev/null
@@ -0,0 +1,14 @@
+# mt980
+
+A mechanical keyboard PCB in the same layout as the Leopold FC980M, sold by Wheat Field Peripherals on Taobao.  This PCB requires soldering, except for the arrow cluster and the Escape key switches, which use Kailh hot swap sockets.
+
+Keyboard Maintainer: [walkerstop](https://github.com/walkerstop)  
+Hardware Supported: mt980  
+Hardware Availability: Taobao store https://shop110310565.taobao.com   
+
+Make example for this keyboard (after setting up your build environment):
+
+    make mt980: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/mt980/rules.mk b/keyboards/mt980/rules.mk
new file mode 100644 (file)
index 0000000..9a7718a
--- /dev/null
@@ -0,0 +1,55 @@
+# 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 = atmel-dfu
+
+# Build Options
+#   comment out to disable the options.
+#
+
+BOOTMAGIC_ENABLE = lite   # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no    # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no    # Audio control and System control(+450)
+CONSOLE_ENABLE = no     # Console for debug(+400)
+COMMAND_ENABLE = no     # Commands for debug and configuration
+SLEEP_LED_ENABLE = no   # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes       # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+KEY_LOCK_ENABLE = no
index 9f8622579946c47aa17cd776c98b1a9aec86094b..bfbdb62297d784accc8a61e215eccaec1c3a846b 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
diff --git a/keyboards/mxss/rgblight.h b/keyboards/mxss/rgblight.h
new file mode 100644 (file)
index 0000000..5205974
--- /dev/null
@@ -0,0 +1,166 @@
+/* Copyright 2017 Yang Liu
+ *
+ * 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 RGBLIGHT_H
+#define RGBLIGHT_H
+
+#ifdef RGBLIGHT_ANIMATIONS
+       #define RGBLIGHT_MODES 35
+#else
+       #define RGBLIGHT_MODES 1
+#endif
+
+#ifndef RGBLIGHT_EFFECT_BREATHE_CENTER
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1-2.7
+#endif
+
+#ifndef RGBLIGHT_EFFECT_BREATHE_MAX
+#define RGBLIGHT_EFFECT_BREATHE_MAX 255   // 0-255
+#endif
+
+#ifndef RGBLIGHT_EFFECT_SNAKE_LENGTH
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4
+#endif
+
+#ifndef RGBLIGHT_EFFECT_KNIGHT_LENGTH
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3
+#endif
+
+#ifndef RGBLIGHT_EFFECT_KNIGHT_OFFSET
+#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 0
+#endif
+
+#ifndef RGBLIGHT_EFFECT_KNIGHT_LED_NUM
+#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM RGBLED_NUM
+#endif
+
+#ifndef RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL
+#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 1000
+#endif
+
+#ifndef RGBLIGHT_EFFECT_CHRISTMAS_STEP
+#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 2
+#endif
+
+#ifndef RGBLIGHT_HUE_STEP
+#define RGBLIGHT_HUE_STEP 10
+#endif
+#ifndef RGBLIGHT_SAT_STEP
+#define RGBLIGHT_SAT_STEP 17
+#endif
+#ifndef RGBLIGHT_VAL_STEP
+#define RGBLIGHT_VAL_STEP 17
+#endif
+
+#define RGBLED_TIMER_TOP F_CPU/(256*64)
+// #define RGBLED_TIMER_TOP 0xFF10
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "eeconfig.h"
+#ifndef RGBLIGHT_CUSTOM_DRIVER
+#include "ws2812.h"
+#endif
+#include "rgblight_types.h"
+#include "rgblight_list.h"
+
+extern LED_TYPE led[RGBLED_NUM];
+
+extern const uint8_t RGBLED_BREATHING_INTERVALS[4] PROGMEM;
+extern const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_SNAKE_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_KNIGHT_INTERVALS[3] PROGMEM;
+extern const uint16_t RGBLED_RGBTEST_INTERVALS[1] PROGMEM;
+
+typedef union {
+  uint32_t raw;
+  struct {
+    bool     enable  :1;
+    uint8_t  mode    :6;
+    uint16_t hue     :9;
+    uint8_t  sat     :8;
+    uint8_t  val     :8;
+    uint8_t  speed   :8;//EECONFIG needs to be increased to support this
+  };
+} rgblight_config_t;
+
+void rgblight_init(void);
+void rgblight_increase(void);
+void rgblight_decrease(void);
+void rgblight_toggle(void);
+void rgblight_enable(void);
+void rgblight_disable(void);
+void rgblight_step(void);
+void rgblight_step_reverse(void);
+uint8_t rgblight_get_mode(void);
+void rgblight_mode(uint8_t mode);
+void rgblight_set(void);
+void rgblight_update_dword(uint32_t dword);
+void rgblight_increase_hue(void);
+void rgblight_decrease_hue(void);
+void rgblight_increase_sat(void);
+void rgblight_decrease_sat(void);
+void rgblight_increase_val(void);
+void rgblight_decrease_val(void);
+void rgblight_increase_speed(void);
+void rgblight_decrease_speed(void);
+void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val);
+uint16_t rgblight_get_hue(void);
+uint8_t rgblight_get_sat(void);
+uint8_t rgblight_get_val(void);
+void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b);
+void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index);
+void rgblight_sethsv_at(uint16_t hue, uint8_t sat, uint8_t val, uint8_t index);
+
+uint32_t eeconfig_read_rgblight(void);
+void eeconfig_update_rgblight(uint32_t val);
+void eeconfig_update_rgblight_default(void);
+void eeconfig_debug_rgblight(void);
+
+void rgb_matrix_increase(void);
+void rgb_matrix_decrease(void);
+
+void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
+void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1);
+
+void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
+void rgblight_mode_noeeprom(uint8_t mode);
+void rgblight_toggle_noeeprom(void);
+void rgblight_enable_noeeprom(void);
+void rgblight_disable_noeeprom(void);
+
+void rgblight_sethsv_eeprom_helper(uint16_t hue, uint8_t sat, uint8_t val, bool write_to_eeprom);
+void rgblight_mode_eeprom_helper(uint8_t mode, bool write_to_eeprom);
+
+
+#define EZ_RGB(val) rgblight_show_solid_color((val >> 16) & 0xFF, (val >> 8) & 0xFF, val & 0xFF)
+void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b);
+
+void rgblight_task(void);
+
+void rgblight_timer_init(void);
+void rgblight_timer_enable(void);
+void rgblight_timer_disable(void);
+void rgblight_timer_toggle(void);
+void rgblight_effect_breathing(uint8_t interval);
+void rgblight_effect_rainbow_mood(uint8_t interval);
+void rgblight_effect_rainbow_swirl(uint8_t interval);
+void rgblight_effect_snake(uint8_t interval);
+void rgblight_effect_knight(uint8_t interval);
+void rgblight_effect_christmas(void);
+void rgblight_effect_rgbtest(void);
+
+#endif
diff --git a/keyboards/niu_mini/keymaps/yttyx/README.md b/keyboards/niu_mini/keymaps/yttyx/README.md
new file mode 100644 (file)
index 0000000..a48bdcc
--- /dev/null
@@ -0,0 +1,92 @@
+# Overview
+
+This layout is based on Balance Twelve (mirror variant) by Sasha Viminitz. Please see [this page](https://mathematicalmulticore.wordpress.com/the-keyboard-layout-project/) 
+for more information. It's designed for left-handers who use their right hand for the mouse.
+
+## To build
+
+```
+make niu_mini:yttyx
+```
+
+## To flash (example)
+
+```
+sudo dfu-programmer atmega32u4 erase
+sudo dfu-programmer atmega32u4 flash niu_mini_yttyx.hex --debug 6
+sudo dfu-programmer atmega32u4 launch
+```
+
+## Layers
+
+### Base:
+
+    .--------.-------.-------.-------.--------.                           .-------.-------.-------.-------.------.
+    | P      | L     | C     | D     | W      |                           | U     | O     | Y     | K     | Q    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | N      | R     | S     | T     | M      |                           | A     | E     | I     | H     | V    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | Z Sft  | J Ctl | F Alt | G     | B      |                           | ,     | . Alt | ; Ctl | X Sft | Sup  |
+    '--------'-------'-------+-------+--------+-----.               .-----+-------+-------+-------'-------'------'
+                             | BS P1 | Spc P2 | P3  |               |     | Sft   |       |
+                             '-------'--------'-----'               '-----'-------'-------'
+
+### P1: Punctuation (1)
+
+    .--------.-------.-------.-------.-------.                              .------.-------.-------.-------.------.
+    | Esc    |       |       |       |       |                              | |    | /     | ^     | £     |  ~   |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Tab    |       |       |       |       |                              | &    | \     | `     | $     | Ent  |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Sft    | Ctl   | Alt   | Del   |       |                              | %    | Alt   | Ctl   | Sft   | Sup  |
+    '--------'-------'-------+-------+-------+-----.                  .-----+------+-------+-------'-------'------'
+                             | P1    |       |     |                  |     | Sft  |       |
+                             '-------'-------'-----'                  '-----'------'-------'
+
+### P2: Punctuation (2)
+
+    .-------.-------.-------.-------.-------.                               .-------.-------.-------.-------.------.
+    | Esc   |       | NC    | FV    |       |                               | (     | )     | "     | ?     |      |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Tab   | Ctl-X | Ctl-C | Ctl-V | Ctl-Z |                               | {     | }     | '     | !     | Ent  |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   | Ent   |                               | #     | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                   .-----+-------+-------+-------'-------'------'
+                            | BS    | P2    |     |                   |     | Sft   |       |
+                            '-------'-------'-----'                   '-----'-------'-------'
+
+### P3: Punctuation (3)
+
+    .-------.-------.-------.-------.-------.                             .------.-------.-------.-------.------.
+    | Esc   |       | Break | Pscr  | ScLk  |                             | <    | >     | +     | _     | =    |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Tab   |       |       | Caps  |       |                             | [    | ]     | *     | -     | Ent  |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   |       |                             | @    | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                 .-----+------+-------+-------'-------'------'
+                            | BS    |       | P3  |                 |     | Sft  |       |
+                            '-------'-------'-----'                 '-----'------'-------'
+
+### Numerals / Cursor control
+
+    .-------.-------.-------.------.-------.                              .------.-------.-------.------.------.
+    | 1     | 2     | 3     | 4    | 5     |                              | Home | Up    | End   | PgUp |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | 6     | 7     | 8     | 9    | 0     |                              | Left | Down  | Right | PgDn |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | Sft   | Ctl   | Alt   | Del  | .     |                              | Ins  | Alt   | Ctl   | Sft  | Sup  |
+    '-------'-------'-------+------+-------+-----.                  .-----+------+-------+-------'------'------'
+                            | BS   | BA    |     |                  |     | Sft  |       |
+                            '------'-------'-----'                  '-----'------'-------'
+
+### FV: Function keys / Cursor control (Vim)
+
+    .-------.------.-------.-----.-------.                                .------.-------.-----.-------.------.
+    | F1    | F2   | F3    | F4  | F5    |                                | 0    | K     | $   | Ctl-B |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | F6    | F7   | F8    | F9  | F10   |                                | H    | J     | L   | Ctl-F |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | Sft   | Ctl  | Alt   | F11 | F12   |                                |      | Alt   | Ctl | Sft   | Sup  |
+    '-------'------'-------+-----+-------+-----.                    .-----+------+-------+-----'-------'------'
+                           | BS  | BA    |     |                    |     | Sft  |       |
+                           '-----'-------'-----'                    '-----'------'-------'
diff --git a/keyboards/niu_mini/keymaps/yttyx/config.h b/keyboards/niu_mini/keymaps/yttyx/config.h
new file mode 100644 (file)
index 0000000..b9e113e
--- /dev/null
@@ -0,0 +1,4 @@
+#pragma once
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/niu_mini/keymaps/yttyx/keymap.c b/keyboards/niu_mini/keymaps/yttyx/keymap.c
new file mode 100644 (file)
index 0000000..e299a53
--- /dev/null
@@ -0,0 +1,141 @@
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+  BA,           // Base (Balance Twelve mirror variant)
+  P1,           // Punctuation (1)
+  P2,           // Punctuation (2)
+  P3,           // Punctuation (2)
+  NC,           // Numerals / Cursor control
+  FV            // Function keys / Cursor control (Vim)
+};
+
+// Abbreviations - base
+#define KX_P1_BSPC      LT(P1, KC_BSPC)
+#define KX_P2_SPC       LT(P2, KC_SPC)
+
+#define KX_SFT_Z        MT(MOD_LSFT, KC_Z)
+#define KX_CTL_J        MT(MOD_LCTL, KC_J)
+#define KX_ALT_F        MT(MOD_LALT, KC_F)
+
+#define KX_ALT_DOT      MT(MOD_LALT, KC_DOT)
+#define KX_CTL_SCLN     MT(MOD_LCTL, KC_SCLN)
+#define KX_SFT_X        MT(MOD_LSFT, KC_X)
+
+#define KX_AT           LSFT(KC_QUOT)
+#define KX_DQUOT        LSFT(KC_2)
+#define KX_PIPE         LSFT(KC_NUBS)
+#define KX_TILDA        LSFT(KC_NUHS)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /*
+    .--------.-------.-------.-------.--------.                           .-------.-------.-------.-------.------.
+    | P      | L     | C     | D     | W      |                           | U     | O     | Y     | K     | Q    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | N      | R     | S     | T     | M      |                           | A     | E     | I     | H     | V    |
+    |--------+-------+-------+-------+--------|                           |-------+-------+-------+-------+------|
+    | Z Sft  | J Ctl | F Alt | G     | B      |                           | ,     | . Alt | ; Ctl | X Sft | Sup  |
+    '--------'-------'-------+-------+--------+-----.               .-----+-------+-------+-------'-------'------'
+                             | BS P1 | Spc P2 | P3  |               |     | Sft   |       |
+                             '-------'--------'-----'               '-----'-------'-------'
+  */                                                               
+  [BA] = LAYOUT(                                                   
+    KC_P,     KC_L,     KC_C,     KC_D,       KC_W,      XXXXXXX,   XXXXXXX, KC_U,    KC_O,       KC_Y,        KC_K,     KC_Q,
+    KC_N,     KC_R,     KC_S,     KC_T,       KC_M,      XXXXXXX,   XXXXXXX, KC_A,    KC_E,       KC_I,        KC_H,     KC_V,
+    KX_SFT_Z, KX_CTL_J, KX_ALT_F, KC_G,       KC_B,      XXXXXXX,   XXXXXXX, KC_COMM, KX_ALT_DOT, KX_CTL_SCLN, KX_SFT_X, KC_LGUI,
+    XXXXXXX,  XXXXXXX,  XXXXXXX,  KX_P1_BSPC, KX_P2_SPC, MO(P3),    XXXXXXX, KC_RSFT, XXXXXXX,    XXXXXXX,     XXXXXXX,  XXXXXXX
+  ),
+
+  /* P1: Punctuation (1)
+    .--------.-------.-------.-------.-------.                              .------.-------.-------.-------.------.
+    | Esc    |       |       |       |       |                              | |    | /     | ^     | £     |  ~   |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Tab    |       |       |       |       |                              | &    | \     | `     | $     | Ent  |
+    |--------+-------+-------+-------+-------|                              |------+-------+-------+-------+------|
+    | Sft    | Ctl   | Alt   | Del   |       |                              | %    | Alt   | Ctl   | Sft   | Sup  |
+    '--------'-------'-------+-------+-------+-----.                  .-----+------+-------+-------'-------'------'
+                             | P1    |       |     |                  |     | Sft  |       |
+                             '-------'-------'-----'                  '-----'------'-------'
+  */
+  [P1] = LAYOUT(       
+    KC_ESC,  XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX, XXXXXXX, KX_PIPE, KC_SLSH, KC_CIRC, KC_HASH, KX_TILDA,  
+    KC_TAB,  XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX,    XXXXXXX, XXXXXXX, KC_AMPR, KC_NUBS, KC_GRV,  KC_DLR,  KC_ENT,
+    KC_LSFT, KC_LCTL,    KC_LALT,    KC_DEL,     XXXXXXX,    XXXXXXX, XXXXXXX, KC_PERC, KC_LALT, KC_LCTL, KC_LSFT, _______,
+    XXXXXXX, XXXXXXX,    XXXXXXX,    _______,    XXXXXXX,    XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
+
+  /* P2: Punctuation (2)
+    .-------.-------.-------.-------.-------.                               .-------.-------.-------.-------.------.
+    | Esc   |       | NC    | FV    |       |                               | (     | )     | "     | ?     |      |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Tab   | Ctl-X | Ctl-C | Ctl-V | Ctl-Z |                               | {     | }     | '     | !     | Ent  |
+    |-------+-------+-------+-------+-------|                               |-------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   | Ent   |                               | #     | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                   .-----+-------+-------+-------'-------'------'
+                            | BS    | P2    |     |                   |     | Sft   |       |
+                            '-------'-------'-----'                   '-----'-------'-------'
+  */
+  [P2] = LAYOUT(
+    KC_ESC,  XXXXXXX,    TO(NC),     TO(FV),     XXXXXXX,    XXXXXXX, XXXXXXX, KC_LPRN, KC_RPRN, KX_DQUOT, KC_QUES, XXXXXXX,
+    KC_TAB,  LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_Z), XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_QUOT,  KC_EXLM, KC_ENT,
+    KC_LSFT, KC_LCTL,    KC_LALT,    KC_DEL,     KC_ENT,     XXXXXXX, XXXXXXX, KC_NUHS, KC_LALT, KC_LCTL,  KC_LSFT, _______,
+    XXXXXXX, XXXXXXX,    XXXXXXX,    KC_BSPC,    _______,    XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX
+  ),
+
+  /* P3: Punctuation (3)
+    .-------.-------.-------.-------.-------.                             .------.-------.-------.-------.------.
+    | Esc   |       | Break | Pscr  | ScLk  |                             | <    | >     | +     | _     | =    |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Tab   |       |       | Caps  |       |                             | [    | ]     | *     | -     | Ent  |
+    |-------+-------+-------+-------+-------|                             |------+-------+-------+-------+------|
+    | Sft   | Ctl   | Alt   | Del   |       |                             | @    | Alt   | Ctl   | Sft   | Sup  |
+    '-------'-------'-------+-------+-------+-----.                 .-----+------+-------+-------'-------'------'
+                            | BS    |       | P3  |                 |     | Sft  |       |
+                            '-------'-------'-----'                 '-----'------'-------'
+  */
+  [P3] = LAYOUT(
+    KC_ESC,  XXXXXXX, KC_BRK,  KC_PSCR, KC_SLCK, XXXXXXX,           XXXXXXX, KC_LABK, KC_RABK, KC_PLUS, KC_UNDS, KC_EQL,
+    KC_TAB,  XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, XXXXXXX,           XXXXXXX, KC_LBRC, KC_RBRC, KC_ASTR, KC_MINS, KC_ENT,
+    KC_LSFT, KC_LCTL, KC_LALT, KC_DEL,  XXXXXXX, XXXXXXX,           XXXXXXX, KX_AT,   KC_LALT, KC_LCTL, KC_LSFT, _______,
+    XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, XXXXXXX, _______,           XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
+
+  /* NC: Numerals / Cursor control
+    .-------.-------.-------.------.-------.                              .------.-------.-------.------.------.
+    | 1     | 2     | 3     | 4    | 5     |                              | Home | Up    | End   | PgUp |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | 6     | 7     | 8     | 9    | 0     |                              | Left | Down  | Right | PgDn |      |
+    |-------+-------+-------+------+-------|                              |------+-------+-------+------+------|
+    | Sft   | Ctl   | Alt   | Del  | .     |                              | Ins  | Alt   | Ctl   | Sft  | Sup  |
+    '-------'-------'-------+------+-------+-----.                  .-----+------+-------+-------'------'------'
+                            | BS   | BA    |     |                  |     | Sft  |       |
+                            '------'-------'-----'                  '-----'------'-------'
+  */
+  [NC] = LAYOUT(
+    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   XXXXXXX,            XXXXXXX, KC_HOME, KC_UP,   KC_END,  KC_PGUP, XXXXXXX,
+    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,   XXXXXXX,            XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX,
+    KC_LSFT, KC_LCTL, KC_LALT, KC_DEL,  KC_DOT, XXXXXXX,            XXXXXXX, KC_INS,  KC_LALT, KC_LCTL, KC_LSFT, _______,
+    XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, TO(BA), XXXXXXX,            XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+  ),
+
+  /* FV: Function keys / Cursor control (Vim)
+    .-------.------.-------.-----.-------.                                .------.-------.-----.-------.------.
+    | F1    | F2   | F3    | F4  | F5    |                                | 0    | K     | $   | Ctl-B |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | F6    | F7   | F8    | F9  | F10   |                                | H    | J     | L   | Ctl-F |      |
+    |-------+------+-------+-----+-------|                                |------+-------+-----+-------+------|
+    | Sft   | Ctl  | Alt   | F11 | F12   |                                |      | Alt   | Ctl | Sft   | Sup  |
+    '-------'------'-------+-----+-------+-----.                    .-----+------+-------+-----'-------'------'
+                           | BS  | BA    |     |                    |     | Sft  |       |
+                           '-----'-------'-----'                    '-----'------'-------'
+  */
+  [FV] = LAYOUT(
+    KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  XXXXXXX,            XXXXXXX, KC_0,    KC_K,    KC_DLR,   LCTL(KC_B), XXXXXXX,
+    KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10, XXXXXXX,            XXXXXXX, KC_H,    KC_J,    KC_L,     LCTL(KC_F), XXXXXXX,
+    KC_LSFT, KC_LCTL, KC_LALT, KC_F11,  KC_F12, XXXXXXX,            XXXXXXX, XXXXXXX, KC_LALT, KC_LCTL,  KC_LSFT,    _______,
+    XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, TO(BA), XXXXXXX,            XXXXXXX, _______, XXXXXXX, XXXXXXX,  XXXXXXX,    XXXXXXX
+  )
+
+};
+
diff --git a/keyboards/niu_mini/keymaps/yttyx/rules.mk b/keyboards/niu_mini/keymaps/yttyx/rules.mk
new file mode 100644 (file)
index 0000000..d8b21aa
--- /dev/null
@@ -0,0 +1,10 @@
+# Build Options
+AUDIO_ENABLE = no
+CONSOLE_ENABLE = no
+EXTRAKEY_ENABLE = no
+MIDI_ENABLE = no
+MOUSEKEY_ENABLE = no
+NKRO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+STENO_ENABLE = no
+VIRTSER_ENABLE = no
index a158004977429c501f70cf76e0bb5b2437355bb4..bf5438657a3ce3b2df6c0033e0a1ec5c82155cf7 100644 (file)
@@ -1,5 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "action_layer.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
diff --git a/keyboards/org60/keymaps/jarred/keymap.c b/keyboards/org60/keymaps/jarred/keymap.c
new file mode 100644 (file)
index 0000000..3397a19
--- /dev/null
@@ -0,0 +1,25 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _NV 1
+
+// HHKB Layout
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QW] = 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_BSLS,  KC_GRV, \
+      KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,    KC_P,    KC_LBRC,  KC_RBRC,          KC_BSPC, \
+      MO(_NV), KC_A,    KC_S,    KC_D,    KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,    KC_SCLN, KC_QUOT,  XXXXXXX,           KC_ENT, \
+      KC_LSFT, XXXXXXX, KC_Z,    KC_X,    KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM, KC_DOT,  KC_SLSH,  XXXXXXX, KC_RSFT,  KC_ENT, \
+      XXXXXXX, KC_LCTL, KC_LGUI,                          KC_SPC,                          XXXXXXX, KC_RALT,  XXXXXXX, KC_RCTL, XXXXXXX),
+
+  [_NV] = 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_DEL ,KC_BSPC,_______,KC_HOME,KC_UP  ,KC_END , KC_INS , _______,  _______,          _______, \
+      _______, _______, _______, KC_LSFT,KC_LCTL, KC_ENT, _______,KC_LEFT,KC_DOWN,KC_RGHT, KC_DEL , KC_DEL ,  _______,          _______, \
+      _______, _______, _______, _______, _______,_______,_______,_______,KC_PGUP,KC_PGDN, _______, _______,  _______, _______, _______, \
+      _______, _______, _______,                          _______,                         _______, _______,  _______,   RESET, _______),
+
+};
+
+
index 3df957b84c5c5c3264cf1f6d9b5e1e660e1927ae..ce4538b08a24a912b65f59285a0a04031cc89507 100644 (file)
@@ -19,10 +19,7 @@ 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_common.h"
+#pragma once
 
 /* Use I2C or Serial, not both */
 
@@ -44,6 +41,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
                                   SONG(DVORAK_SOUND) \
                                 }
 #endif
-
-
-#endif
index a3828f7d5d6e9b7b981fd73ece9cd60535224c27..09b8f1bc73a173027f3d792294dd121cdcbf812b 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
diff --git a/keyboards/plaid/config.h b/keyboards/plaid/config.h
new file mode 100644 (file)
index 0000000..efef3ca
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+Copyright 2019 Takuya Urakawa (dm9records.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 */
+/* VID & PID from vusb project, see tmk_core/protocol/vusb/USB-IDs-for-free.txt"*/
+#define VENDOR_ID 0x16c0
+#define PRODUCT_ID 0x27db
+#define DEVICE_VER 0x0002
+#define MANUFACTURER dm9records
+#define PRODUCT plaid
+#define DESCRIPTION 12x4 ortholinear keyboard with through hole components
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { B4, B5, B3, D4 }
+#define MATRIX_COL_PINS { B0, D7, D6, D5, B2, B1, C0, C1, C2, C3, D1, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define NO_UART 1
+
+/*
+ * 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
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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/plaid/info.json b/keyboards/plaid/info.json
new file mode 100644 (file)
index 0000000..13bd05c
--- /dev/null
@@ -0,0 +1,113 @@
+{
+  "keyboard_name": "Plaid // Through Hole",
+  "keyboard_folder": "planid",
+  "url": "https://github.com/hsgw/plaid",
+  "maintainer": "hsgw",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT_plaid_mit": {
+      "key_count": 47,
+      "layout": [
+        { "w": 1, "x": 0, "y": 0 },
+        { "w": 1, "x": 1, "y": 0 },
+        { "w": 1, "x": 2, "y": 0 },
+        { "w": 1, "x": 3, "y": 0 },
+        { "w": 1, "x": 4, "y": 0 },
+        { "w": 1, "x": 5, "y": 0 },
+        { "w": 1, "x": 6, "y": 0 },
+        { "w": 1, "x": 7, "y": 0 },
+        { "w": 1, "x": 8, "y": 0 },
+        { "w": 1, "x": 9, "y": 0 },
+        { "w": 1, "x": 10, "y": 0 },
+        { "w": 1, "x": 11, "y": 0 },
+        { "w": 1, "x": 0, "y": 1 },
+        { "w": 1, "x": 1, "y": 1 },
+        { "w": 1, "x": 2, "y": 1 },
+        { "w": 1, "x": 3, "y": 1 },
+        { "w": 1, "x": 4, "y": 1 },
+        { "w": 1, "x": 5, "y": 1 },
+        { "w": 1, "x": 6, "y": 1 },
+        { "w": 1, "x": 7, "y": 1 },
+        { "w": 1, "x": 8, "y": 1 },
+        { "w": 1, "x": 9, "y": 1 },
+        { "w": 1, "x": 10, "y": 1 },
+        { "w": 1, "x": 11, "y": 1 },
+        { "w": 1, "x": 0, "y": 2 },
+        { "w": 1, "x": 1, "y": 2 },
+        { "w": 1, "x": 2, "y": 2 },
+        { "w": 1, "x": 3, "y": 2 },
+        { "w": 1, "x": 4, "y": 2 },
+        { "w": 1, "x": 5, "y": 2 },
+        { "w": 1, "x": 6, "y": 2 },
+        { "w": 1, "x": 7, "y": 2 },
+        { "w": 1, "x": 8, "y": 2 },
+        { "w": 1, "x": 9, "y": 2 },
+        { "w": 1, "x": 10, "y": 2 },
+        { "w": 1, "x": 11, "y": 2 },
+        { "w": 1, "x": 0, "y": 3 },
+        { "w": 1, "x": 1, "y": 3 },
+        { "w": 1, "x": 2, "y": 3 },
+        { "w": 1, "x": 3, "y": 3 },
+        { "w": 1, "x": 4, "y": 3 },
+        { "w": 2, "x": 5, "y": 3 },
+        { "w": 1, "x": 7, "y": 3 },
+        { "w": 1, "x": 8, "y": 3 },
+        { "w": 1, "x": 9, "y": 3 },
+        { "w": 1, "x": 10, "y": 3 },
+        { "w": 1, "x": 11, "y": 3 } ]
+    },
+    "LAYOUT_plaid_grid": {
+      "key_count": 48,
+      "layout": [
+        { "w": 1, "x": 0, "y": 0 },
+        { "w": 1, "x": 1, "y": 0 },
+        { "w": 1, "x": 2, "y": 0 },
+        { "w": 1, "x": 3, "y": 0 },
+        { "w": 1, "x": 4, "y": 0 },
+        { "w": 1, "x": 5, "y": 0 },
+        { "w": 1, "x": 6, "y": 0 },
+        { "w": 1, "x": 7, "y": 0 },
+        { "w": 1, "x": 8, "y": 0 },
+        { "w": 1, "x": 9, "y": 0 },
+        { "w": 1, "x": 10, "y": 0 },
+        { "w": 1, "x": 11, "y": 0 },
+        { "w": 1, "x": 0, "y": 1 },
+        { "w": 1, "x": 1, "y": 1 },
+        { "w": 1, "x": 2, "y": 1 },
+        { "w": 1, "x": 3, "y": 1 },
+        { "w": 1, "x": 4, "y": 1 },
+        { "w": 1, "x": 5, "y": 1 },
+        { "w": 1, "x": 6, "y": 1 },
+        { "w": 1, "x": 7, "y": 1 },
+        { "w": 1, "x": 8, "y": 1 },
+        { "w": 1, "x": 9, "y": 1 },
+        { "w": 1, "x": 10, "y": 1 },
+        { "w": 1, "x": 11, "y": 1 },
+        { "w": 1, "x": 0, "y": 2 },
+        { "w": 1, "x": 1, "y": 2 },
+        { "w": 1, "x": 2, "y": 2 },
+        { "w": 1, "x": 3, "y": 2 },
+        { "w": 1, "x": 4, "y": 2 },
+        { "w": 1, "x": 5, "y": 2 },
+        { "w": 1, "x": 6, "y": 2 },
+        { "w": 1, "x": 7, "y": 2 },
+        { "w": 1, "x": 8, "y": 2 },
+        { "w": 1, "x": 9, "y": 2 },
+        { "w": 1, "x": 10, "y": 2 },
+        { "w": 1, "x": 11, "y": 2 },
+        { "w": 1, "x": 0, "y": 3 },
+        { "w": 1, "x": 1, "y": 3 },
+        { "w": 1, "x": 2, "y": 3 },
+        { "w": 1, "x": 3, "y": 3 },
+        { "w": 1, "x": 4, "y": 3 },
+        { "w": 1, "x": 5, "y": 3 },
+        { "w": 1, "x": 6, "y": 3 },
+        { "w": 1, "x": 7, "y": 3 },
+        { "w": 1, "x": 8, "y": 3 },
+        { "w": 1, "x": 9, "y": 3 },
+        { "w": 1, "x": 10, "y": 3 },
+        { "w": 1, "x": 11, "y": 3 } ]
+    }
+  }
+}
diff --git a/keyboards/plaid/keymaps/default/config.h b/keyboards/plaid/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..5733b9e
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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
+
+// place overrides here
diff --git a/keyboards/plaid/keymaps/default/keymap.c b/keyboards/plaid/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..f27abb0
--- /dev/null
@@ -0,0 +1,222 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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
+
+extern keymap_config_t keymap_config;
+
+enum plaid_layers {
+  _QWERTY,
+  _COLEMAK,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _PLOVER,
+  _ADJUST
+};
+
+enum plaid_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_plaid_grid(
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_plaid_grid(
+    KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC,
+    KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_plaid_grid(
+    KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
+    KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT ,
+    KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home | End  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_plaid_grid(
+    KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_BSPC,
+    KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END,  _______,
+    _______, _______, _______, _______, _______, _______, _______, _______,    KC_MNXT,    KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Up |Pg Dn |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_plaid_grid(
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
+    KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = LAYOUT_plaid_grid(
+    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   ,
+    XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
+    XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_plaid_grid(
+    _______, RESET,   DEBUG,    RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______,
+    _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        print("mode just switched to qwerty and this is a huge string\n");
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/plaid/keymaps/default/readme.md b/keyboards/plaid/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..6f68e46
--- /dev/null
@@ -0,0 +1,2 @@
+# The default keymap for plaid
+folk from planck
diff --git a/keyboards/plaid/plaid.c b/keyboards/plaid/plaid.c
new file mode 100644 (file)
index 0000000..28f56d7
--- /dev/null
@@ -0,0 +1,43 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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 "plaid.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/plaid/plaid.h b/keyboards/plaid/plaid.h
new file mode 100644 (file)
index 0000000..4ebdcea
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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_plaid_mit( \
+       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_plaid_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, 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 KC_KEYMAP( \
+       k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+       k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+       k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+       k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \
+       ) \
+       LAYOUT_plaid_grid( \
+               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_plaid_grid
+#define LAYOUT_ortho_4x12 LAYOUT_plaid_grid
+#define KC_LAYOUT_ortho_4x12 KC_KEYMAP
diff --git a/keyboards/plaid/readme.md b/keyboards/plaid/readme.md
new file mode 100644 (file)
index 0000000..dd49ecb
--- /dev/null
@@ -0,0 +1,23 @@
+# plaid // Through Hole
+
+![plaid](https://i.imgur.com/tTi9yR9h.jpg)
+
+12x4 ortholinear keyboard with only through hole components.   
+
+Keyboard Maintainer: [hsgw](https://github.com/hsgw)  
+Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/hsgw/plaid)  
+Hardware Availability: Group buy in r/mk
+
+Make example for this keyboard (after setting up your build environment):
+    make plaid:default
+
+Flash firmware:
+    // In bootloader mode
+    make plaid:default:program
+
+## Bootloader
+use usbasploader in my repository.
+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/plaid/rules.mk b/keyboards/plaid/rules.mk
new file mode 100644 (file)
index 0000000..3d66334
--- /dev/null
@@ -0,0 +1,101 @@
+# MCU name
+#MCU = at90usb1286
+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 selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   atmega32a    bootloadHID
+#
+# This uses usbaspbootloader
+# 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
+OPT_DEFS += -DBOOTLOADER_SIZE=2048
+
+# Flash program via avrdude, but default command is not suitable.
+# You can use plaid: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)
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+
+LAYOUTS = ortho_4x12 planck_mit planck_grid
+LAYOUTS_HAS_RGB = no
diff --git a/keyboards/plaid/usbconfig.h b/keyboards/plaid/usbconfig.h
new file mode 100644 (file)
index 0000000..ea9fdd8
--- /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     'd','m','9','r','e','c','o','r','d','s'
+#define USB_CFG_VENDOR_NAME_LEN 10
+/* 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     'P', 'l', 'a', 'i', 'd'
+#define USB_CFG_DEVICE_NAME_LEN 5
+/* 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   'd','m','9','r','e','c','o','r','d','s','.','c','o','m',':','p','1'
+#define USB_CFG_SERIAL_NUMBER_LEN   17
+/* 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/planck/keymaps/callum/config.h b/keyboards/planck/keymaps/callum/config.h
new file mode 100644 (file)
index 0000000..49f61de
--- /dev/null
@@ -0,0 +1,7 @@
+#define MOUSEKEY_DELAY             0
+#define MOUSEKEY_INTERVAL          16
+#define MOUSEKEY_MAX_SPEED         10
+#define MOUSEKEY_TIME_TO_MAX       60
+#define MOUSEKEY_WHEEL_DELAY       0
+#define MOUSEKEY_WHEEL_MAX_SPEED   8
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 60
index eca83d832025df3b2941c72251a69ea18f78bae6..02456aa7d8b654a6db66d4c4d3936ddcb49ace8f 100644 (file)
@@ -13,6 +13,7 @@ enum planck_layers {
     _SYMB,
     _MOVE,
     _FUNC,
+    _MOUSE,
 };
 
 enum planck_keycodes {
@@ -21,6 +22,7 @@ enum planck_keycodes {
     SYMB,
     MOVE,
     FUNC,
+    MOUSE,
 };
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -101,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
      * |     |  ~  |  `  |  +  |  =  |  |  |  \  |  [  |  ]  |  {  |  }  |     |
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |     |     |     |     |     |     |
+     * |     |     |     |     |     |     |     |Mouse|     |     |     |     |
      * `-----------------------------------------------------------------------'
      */
     [_SYMB] = {
@@ -122,41 +124,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         },
         {
             _______,      _______,      _______,      _______,
-            _______,      _______,      _______,      _______,
+            _______,      _______,      _______,      MOUSE,
             _______,      _______,      _______,      _______
         }
     },
 
     /* MOVE
      * ,-----------------------------------------------------------------------.
-     * |     |     |     |     |     |     |     |Home | Up  | End |     | Esc |
+     * |     |     |     |     |     |     |CtrUp|Home | Up  | End |Caps | Esc |
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |     |Left |Down |Right|Caps | Del |
+     * |     |     |     |     |     |     |SpaL |Left |Down |Right|SpaR | Del |
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |     |PgDn |PgUp |TabL |TabR |     |
+     * |     |     |     |     |     |     |CtrDn|PgDn |PgUp |TabL |TabR |     |
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |     |     |     |     |     |     |     |     |     |
+     * |     |     |     |     |Mouse|     |     |     |     |     |     |     |
      * `-----------------------------------------------------------------------'
      */
     [_MOVE] = {
         {
             AC(KC_A),     AC(KC_B),     AC(KC_C),     AC(KC_D),
-            AC(KC_E),     AC(KC_F),     XXXXXXX,      KC_HOME,
-            KC_UP,        KC_END,       XXXXXXX,      KC_ESC
+            AC(KC_E),     AC(KC_F),     C(KC_UP),     KC_HOME,
+            KC_UP,        KC_END,       KC_CAPS,      KC_ESC
         },
         {
             AC(KC_G),     AC(KC_H),     AC(KC_I),     AC(KC_J),
-            AC(KC_K),     AC(KC_L),     XXXXXXX,      KC_LEFT,
-            KC_DOWN,      KC_RGHT,      KC_CAPS,      KC_DEL
+            AC(KC_K),     AC(KC_L),     C(KC_LEFT),   KC_LEFT,
+            KC_DOWN,      KC_RGHT,      C(KC_RIGHT),  KC_DEL
         },
         {
             _______,      AC(KC_M),     AC(KC_N),     AC(KC_O),
-            AC(KC_P),     AC(KC_Q),     XXXXXXX,      KC_PGDN,
+            AC(KC_P),     AC(KC_Q),     C(KC_DOWN),   KC_PGDN,
             KC_PGUP,      SC(KC_TAB),   C(KC_TAB),    _______
         },
         {
             _______,      _______,      _______,      _______,
-            _______,      _______,      _______,      _______,
+            MOUSE,        _______,      _______,      _______,
             _______,      _______,      _______,      _______
         }
     },
@@ -167,7 +169,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
      * |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
-     * |     |     |     |TabL |TabR |     |     |     |     |Clmak|Qwrty|     |
+     * |     |     |Home |TabL |TabR |End  |     |     |     |Clmak|Qwrty|     |
      * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
      * |     |     |     |     |Prev |Mute |Play |Next |     |     |     |     |
      * `-----------------------------------------------------------------------'
@@ -184,8 +186,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
             KC_F18,       KC_F19,       KC_F20,       KC_VOLD
         },
         {
-            _______,      XXXXXXX,      XXXXXXX,      SC(KC_TAB),
-            C(KC_TAB),    XXXXXXX,      XXXXXXX,      XXXXXXX,
+            _______,      XXXXXXX,      KC_HOME,      SC(KC_TAB),
+            C(KC_TAB),    KC_END,       XXXXXXX,      XXXXXXX,
             XXXXXXX,      COLEMAK,      QWERTY,       _______
         },
         {
@@ -193,6 +195,40 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
             KC_MPRV,      KC_MUTE,      KC_MPLY,      KC_MNXT,
             _______,      _______,      _______,      _______
         }
+    },
+
+    /* MOUSE
+     * ,-----------------------------------------------------------------------.
+     * |     |     |     |     |     |     |     | ScL |Up   | ScR |     |     |
+     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
+     * |     | B4  | B3  | B2  | B1  |     |     |Left |Down |Right|     |     |
+     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
+     * |     |     | Ac0 | Ac1 | Ac2 |     |     | ScD | ScU |     |     |     |
+     * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
+     * |     |     |     |     |     |     |     |     |     |     |     |     |
+     * `-----------------------------------------------------------------------'
+     */
+    [_MOUSE] = {
+        {
+            _______,      _______,      C(KC_LEFT),   C(KC_UP),
+            C(KC_RIGHT),  _______,      _______,      KC_WH_L,
+            KC_MS_U,      KC_WH_R,      _______,      _______
+        },
+        {
+            _______,      KC_BTN4,      KC_BTN3,      KC_BTN2,
+            KC_BTN1,      _______,      _______,      KC_MS_L,
+            KC_MS_D,      KC_MS_R,      _______,      _______
+        },
+        {
+            _______,      _______,      KC_ACL0,      KC_ACL1,
+            KC_ACL2,      _______,      _______,      KC_WH_D,
+            KC_WH_U,      _______,      _______,      _______
+        },
+        {
+            _______,      _______,      _______,      _______,
+            _______,      _______,      _______,      _______,
+            _______,      _______,      _______,      _______
+        }
     }
 };
 
@@ -250,6 +286,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
                 layer_off(_FUNC);
             }
             return false;
+        case MOUSE:
+            if (record->event.pressed) {
+                layer_on(_MOUSE);
+            } else {
+                layer_off(_MOUSE);
+            }
+            return false;
 
         // Override the defualt auto shifted symbols to use SEND_STRING
         // See https://github.com/qmk/qmk_firmware/issues/4072
index 176211cd4bcee3589c92c74b16df0c12b4a2ce11..99b6dfbeff00f28a7c7aee1251adf3e96de816d9 100644 (file)
@@ -17,68 +17,7 @@ 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.
 
-Keys are arranged as follows. Blank keys below may actually contain
-undocumented shortcuts specific to my workflow. The base layer can be set to
-colemak or qwerty (from the function layer).
+A layout graphic can be found [here][keyboard-layout-editor] (excludes window
+management keys).
 
-```
-/* 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 |Super| Alt |Ctrl |SYMB |Enter|Space|MOVE |Ctrl | Alt |Super|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 |Super| Alt |Ctrl |SYMB |Enter|Space|MOVE |Ctrl | Alt |Super|FUNC |
- * `-----------------------------------------------------------------------'
- */
-
-/* SYMB
- * ,-----------------------------------------------------------------------.
- * | Esc |  1  |  2  |  3  |  4  |  5  |  6  |  7  |  8  |  9  |  0  |     |
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * | Del |  !  |  @  |  #  |  $  |  %  |  ^  |  &  |  *  |  (  |  )  |     |
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * |     |  ~  |  `  |  +  |  =  |  |  |  \  |  [  |  ]  |  {  |  }  |     |
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * |     |     |     |     |     |     |     |     |     |     |     |     |
- * `-----------------------------------------------------------------------'
- */
-
-/* MOVE
- * ,-----------------------------------------------------------------------.
- * |     |     |     |     |     |     |     |Home | Up  | End |     | Esc |
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * |     |     |     |     |     |     |     |Left |Down |Right|Caps | Del |
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * |     |     |     |     |     |     |     |PgDn |PgUp |     |     |     |
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * |     |     |     |     |     |     |     |     |     |     |     |     |
- * `-----------------------------------------------------------------------'
- */
-
-/* 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|
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * |     | F21 | F22 | F23 | F24 |     |     |     |     |COLMK|QWRTY|     |
- * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * |     |     |     |     |Prev |Mute |Play |Next |     |     |     |     |
- * `-----------------------------------------------------------------------'
- */
- ```
+[keyboard-layout-editor]: http://www.keyboard-layout-editor.com/#/gists/ade5ec1f814bf83046489a4b632575ff
index 25d398f0806de95fa1d06cff1f44df407540327d..4774c2c41781e6489969643f6cfb7ab9a0ad83bb 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 = no        # Mouse keys(+4700)
+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
diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md
deleted file mode 100644 (file)
index e55b130..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-cbbrowne custom keyboard
-==============================
-
-Due to cbbrowne@acm.org
-Christopher Browne
-
-This was originally based on the default keyboard map, but I have been
-doing sundry experimentation:
-
-1. Useful Experiments
-----------------------------------------
-
- * It made sense to mess around some with keyboard maps.
-   - I added a keypad, originally based on keymaps/numpad.c, but
-     mighty substantially revised, as that one seems to be rotated 90
-     degrees from usual conventions for number pads
- * The keypad layer also includes some sample "hacks" of cool things,
-   all using actions attached in using the function action_get_macro()
-   - Key [1][2] aka "q" types out my name, cbbrowne, as a fun example
-     of a key generating a bunch of keystrokes.  The keystroke is
-     sufficiently inconvenient that it isn't terribly practical for me
-     to use it, but hey, it shows how others might use this facility
-     in a more useful context.
-   - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random
-   - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random
-   - Key [1][3] aka "e" spits out the keymap version number
-  * Trying out sgoodwin's "hold Enter down to get Shift"
-    - Liking this Quite Well Enough...
-    - Applied this to both Shift and Quote
-    - It seems likely that Alt should get a right-hand-side, akin to this...
-    - Alt needs to move, and get a RHS
-      - Hence ALTRIGHT, and shifted ROT_LED over
-      - Emacs likes this!!!  :-)
-    - I'm suspicious that I'll want to shift ROT_LED another location over,
-      so some modifier can replace the OS/KC_LGUI key
-  * I have added an alternate ADJUST layer that is activated via update_tri_layer()
-    - e.g. - LOWER+RAISE simultaneously
-    - This seems entirely more useful for handling my "special keys"
-      like the random numbers, user name, and such, than the keypad layer
-  * The _ADJUST layer provides a good place to have RESET
-    - But this isn't strictly enough; I want RESET somewhat accessible from
-      main layer lest an error hide that layer
-    - I never use the OS/KC_LGUI key (that's Command on MacOS, Windows
-      Key on Windows), so that's a good place to have it as a chord of
-      some sort
-        
-
-2. Some code structure ideas
----------------------------------------------------
-
-   Each layer is given a name to aid in readability, which is then
-   used in the keymap matrix below.  The underscores do not denote
-   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 could also skip them entirely and just use numbers, though that
-   means needing to manage the numbers.
-
-   It is preferable to keep the symbols short so that a line worth of
-   key mappings fits compactly onto a line of code.  It might be an
-   interesting idea to express the maps rotated 90%, so that you
-   only need to fit 4 symbols onto each line, rather than 12.
-
-   I use enums to manage layer IDs and macro IDs so that I don't need
-   to care (beyond "start at 0", and arguably even that's not needed)
-   about their values.
-
-3. Things I did not like about the default mapping
----------------------------------------------------------
-
-   * I found control too hard to get to.  I use it more than Tab, so
-     switched it there.
-   * Having dash on [lower-j] is a bit nonintuitive, but may be OK
-   * I switched ESC/TAB/M(0) around
-   * I'm suspicious that I want to shift M(0) from [4][1] to [4][2],
-     and shift ESC off the first column so KC_LCTL and KC_LALT can
-     be on the first column.
-   * I needed to swap ' and ENTER
-
-4. Unuseful experiments
----------------------------------------------------------
-
-I have tried some things out that didn't turn out particularly well.
-I'll note some of these for posterity, hopefully helpful in not doing
-unwise things again...
-
-   * I tried added Workman alongside Dvorak and Colemak
-     - Boy, oh boy, these don't help!!!
-     - I have done 30 years of learning of Emacs key mappings, and
-       these alternative keyboards massively mess me up
-
-   * Space Cadet Shift; switching L_SHIFT to KC_LSP0, so that when I
-     just hit SHIFT, I get a left parens.  In principle, this is great
-     for Lisping.
-     - Unfortunately, there are times when mouse interfaces use SHIFT
-       to allow selecting multiple items, and this really interferes
-        with that
-
-5. TODO
----------------------------------------------------------
-
-  * I use tmux quite a lot; the mollat keymap seems to have some
-    interesting helpers.  It might be interesting to add a "tmux
-    layer," or to have a few keys in a layer oriented towards that
-    - Keys for...
-      - Picking windows 0 thru 8
-      - next/prev/new window
-  * The mollat tmux layer also suggests some thoughts about Emacs
-    helpers.    
-  * I do not presently have anything that handles X11 screen
-    switching, as with Control-Alt-various
-  * I ought to probably look into KC_LEAD, to have some key combos
-    that do not need to be concurrent
-  * The jeebak keymap seems to have some neat ideas:
-    - Number layer which is aggressive about having numbers in several places
-    - TouchCursor layer seems interesting
-      - It sets up a layer with cursor keys on the home keys
-  * The jeremy-dev keymap has some very interesting concepts
-    - Shift hands outwards; the special keys go in the center
-    - Symbol layer has some compound keys for C operators like /=, *=, -=, +=, ...
-    - This is likely what I'll use for my XD75re, and maybe I'll fork a
-      planck keymap for similar
diff --git a/keyboards/planck/keymaps/cbbrowne/readme.org b/keyboards/planck/keymaps/cbbrowne/readme.org
new file mode 100644 (file)
index 0000000..2b10058
--- /dev/null
@@ -0,0 +1,117 @@
+* cbbrowne custom keyboard
+
+  Due to cbbrowne@acm.org
+  Christopher Browne
+
+  This was originally based on the default keyboard map, but I have
+  been doing sundry experimentation:
+
+** Useful Experiments
+
+ - It made sense to mess around some with keyboard maps.
+   - I added a keypad, originally based on keymaps/numpad.c, but
+     mighty substantially revised, as that one seems to be rotated 90
+     degrees from usual conventions for number pads
+ - The keypad layer also includes some sample "hacks" of cool things,
+   all using actions attached in using the function action_get_macro()
+   - Key [1][2] aka "q" types out my name, cbbrowne, as a fun example
+     of a key generating a bunch of keystrokes.  The keystroke is
+     sufficiently inconvenient that it isn't terribly practical for me
+     to use it, but hey, it shows how others might use this facility
+     in a more useful context.
+   - Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random
+   - Key [3][2] aka "z" uses a random number generator to select a letter a-z at random
+   - Key [1][3] aka "e" spits out the keymap version number
+  - Trying out sgoodwin's "hold Enter down to get Shift"
+    - Liking this Quite Well Enough...
+    - Applied this to both Shift and Quote
+    - It seems likely that Alt should get a right-hand-side, akin to this...
+    - Alt needs to move, and get a RHS
+      - Hence ALTRIGHT, and shifted ROT_LED over
+      - Emacs likes this!!!  :-)
+    - I'm suspicious that I'll want to shift ROT_LED another location over,
+      so some modifier can replace the OS/KC_LGUI key
+  - I have added an alternate ADJUST layer that is activated via update_tri_layer()
+    - e.g. - LOWER+RAISE simultaneously
+    - This seems entirely more useful for handling my "special keys"
+      like the random numbers, user name, and such, than the keypad layer
+  - The _ADJUST layer provides a good place to have RESET
+    - But this isn't strictly enough; I want RESET somewhat accessible from
+      main layer lest an error hide that layer
+    - I never use the OS/KC_LGUI key (that's Command on MacOS, Windows
+      Key on Windows), so that's a good place to have it as a chord of
+      some sort
+        
+
+** Some code structure ideas
+
+   Each layer is given a name to aid in readability, which is then
+   used in the keymap matrix below.  The underscores do not denote
+   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 could also skip them entirely and just use numbers, though that
+   means needing to manage the numbers.
+
+   It is preferable to keep the symbols short so that a line worth of
+   key mappings fits compactly onto a line of code.  It might be an
+   interesting idea to express the maps rotated 90%, so that you
+   only need to fit 4 symbols onto each line, rather than 12.
+
+   I use enums to manage layer IDs and macro IDs so that I don't need
+   to care (beyond "start at 0", and arguably even that's not needed)
+   about their values.
+
+** Things I did not like about the default mapping
+
+
+   - I found control too hard to get to.  I use it more than Tab, so
+     switched it there.
+   - Having dash on [lower-j] is a bit nonintuitive, but may be OK
+   - I switched ESC/TAB/M(0) around
+   - I'm suspicious that I want to shift M(0) from [4][1] to [4][2],
+     and shift ESC off the first column so KC_LCTL and KC_LALT can
+     be on the first column.
+   - I needed to swap ' and ENTER
+
+** Unuseful experiments
+
+I have tried some things out that didn't turn out particularly well.
+I'll note some of these for posterity, hopefully helpful in not doing
+unwise things again...
+
+   - I tried added Workman alongside Dvorak and Colemak
+     - Boy, oh boy, these don't help!!!
+     - I have done 30 years of learning of Emacs key mappings, and
+       these alternative keyboards massively mess me up
+
+   - Space Cadet Shift; switching L_SHIFT to KC_LSP0, so that when I
+     just hit SHIFT, I get a left parens.  In principle, this is great
+     for Lisping.
+     - Unfortunately, there are times when mouse interfaces use SHIFT
+       to allow selecting multiple items, and this really interferes
+        with that
+
+** TODO
+
+  - I use tmux quite a lot; the mollat keymap seems to have some
+    interesting helpers.  It might be interesting to add a "tmux
+    layer," or to have a few keys in a layer oriented towards that
+    - Keys for...
+      - Picking windows 0 thru 8
+      - next/prev/new window
+  - The mollat tmux layer also suggests some thoughts about Emacs
+    helpers.    
+  - I do not presently have anything that handles X11 screen
+    switching, as with Control-Alt-various
+  - I ought to probably look into KC_LEAD, to have some key combos
+    that do not need to be concurrent
+  - The jeebak keymap seems to have some neat ideas:
+    - Number layer which is aggressive about having numbers in several places
+    - TouchCursor layer seems interesting
+      - It sets up a layer with cursor keys on the home keys
+  - The jeremy-dev keymap has some very interesting concepts
+    - Shift hands outwards; the special keys go in the center
+    - Symbol layer has some compound keys for C operators like /=, *=, -=, +=, ...
+    - This is likely what I'll use for my XD75re, and maybe I'll fork a
+      planck keymap for similar
diff --git a/keyboards/planck/keymaps/dcompact/README.md b/keyboards/planck/keymaps/dcompact/README.md
deleted file mode 100644 (file)
index d3e4c7a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# DCompact Layout
-
-**Dvorak, Layered, Mouse-Enabled, Compact -- now with Plover~**
-
-_See [the layout source](keymap.c) for the actual layout_
-
-## Goals
-
-The following are the goals kept in mind when designing the DCompact
-layout:
-
-- Provide minimal travel distance when typing English or coding
-- Consistent muscle memory translation from standard QWERTY
-- Stateless typing experience
-- OS-agnostic features, macros, and key placement
-- Minimize dependence on mouse usage
-
-These are generally all met or balanced within reason. This layout is
-not intended at all to be a familiar layout for much of anyone (except
-maybe those who already type in Dvorak) -- this is meant to amplify the
-best parts of having limited, ortholinear keys with layering.
-
-## As Reference Material
-
-If you're reading this hoping to find reference material to implement
-your own layout, then please feel free to copy over this layout and
-make edits where you see fit. I removed a lot of the features I felt
-extraneous to my usage and simplified style where I felt needed. This
-would hopefully mean that my code should feel like a good base to
-develop from for those new to QMK.
-
-_Remember that settings defined in the layout directory override and
-merge with those in the keyboard folder_
-
-## Relevant Links
-
-- ![Online Dvorak Layout Trainer](https://learn.dvorak.nl/)
-- ![Dvorak Wikipedia Page](https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard)
-- ![QMK Docs](https://docs.qmk.fm/#/)
-- ![QMK KeyCode Reference](https://docs.qmk.fm/#/keycodes)
-
-## Contact
-
-Maintainer: [Dan](https://github.com/loksonarius)
-
index 79c9831509a1b7ccb218ba5014872dbc0074d7a7..0893059a0d43f687b9a197406509053c2e0ba5b0 100644 (file)
@@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   {  KC_TAB, KC_QUOT, KC_COMM,  KC_DOT,    KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L, KC_SLSH},
   {  KC_ESC,    KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S, KC_MINS},
   { DEL_SHF, KC_SCLN,    KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z, KC_BSPC},
-  { KC_LCTL,  PLOVER, KC_LGUI, KC_LALT,   LOWER,  KC_LSFT,  KC_SPC,   RAISE, KC_RALT, KC_RGUI,    FUNC,  KC_ENT}
+  { KC_LCTL,  PLOVER, KC_LGUI, KC_LALT,   LOWER,  KC_LSFT,  KC_SPC,  RAISE, KC_RALT, KC_RGUI,    FUNC,  KC_ENT}
 },
 
 /* Lower
diff --git a/keyboards/planck/keymaps/dcompact/readme.md b/keyboards/planck/keymaps/dcompact/readme.md
new file mode 100644 (file)
index 0000000..cd88c3f
--- /dev/null
@@ -0,0 +1,45 @@
+# DCompact Layout
+
+**Dvorak, Layered, Mouse-Enabled, Compact -- now with Plover~**
+
+_See [the layout source](keymap.c) for the actual layout_
+
+## Goals
+
+The following are the goals kept in mind when designing the DCompact
+layout:
+
+- Provide minimal travel distance when typing English or coding
+- Consistent muscle memory translation from standard QWERTY
+- Stateless typing experience
+- OS-agnostic features, macros, and key placement
+- Minimize dependence on mouse usage
+
+These are generally all met or balanced within reason. This layout is
+not intended at all to be a familiar layout for much of anyone (except
+maybe those who already type in Dvorak) -- this is meant to amplify the
+best parts of having limited, ortholinear keys with layering.
+
+## As Reference Material
+
+If you're reading this hoping to find reference material to implement
+your own layout, then please feel free to copy over this layout and
+make edits where you see fit. I removed a lot of the features I felt
+extraneous to my usage and simplified style where I felt needed. This
+would hopefully mean that my code should feel like a good base to
+develop from for those new to QMK.
+
+_Remember that settings defined in the layout directory override and
+merge with those in the keyboard folder_
+
+## Relevant Links
+
+- [Online Dvorak Layout Trainer](https://learn.dvorak.nl/)
+- [Dvorak Wikipedia Page](https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard)
+- [QMK Docs](https://docs.qmk.fm/#/)
+- [QMK KeyCode Reference](https://docs.qmk.fm/#/keycodes)
+
+## Contact
+
+Maintainer: [Dan](https://github.com/loksonarius)
+
diff --git a/keyboards/planck/keymaps/dsanchezseco/config.h b/keyboards/planck/keymaps/dsanchezseco/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/dsanchezseco/keymap.c b/keyboards/planck/keymaps/dsanchezseco/keymap.c
new file mode 100644 (file)
index 0000000..311cc11
--- /dev/null
@@ -0,0 +1,116 @@
+/* Copyright 2015-2017 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/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  DVORAK,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  |  /   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  -   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt  | GUI  |Lower |    Space    | Bksp |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_planck_grid(
+    KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH,
+    KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINUS,
+    KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT,
+    KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC, KC_SPC,  KC_BSPC, RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home | End  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | AltGr|      |      |             | Del  |      | Play | Vol- | Vol+ | Next |
+ * `-----------------------------------------------------------------------------------'
+ *          ^-- sticky
+ */
+[_LOWER] = LAYOUT_planck_grid(
+    KC_TILD, KC_EXLM,       KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, KC_BSPC,
+    KC_DEL,  KC_F1,         KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE,
+    _______, KC_F7,         KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS),    KC_HOME, KC_END,  KC_ENT,
+    _______, OSM(MOD_RALT), _______, _______, _______, _______, KC_DEL,  _______,    KC_MPLY,    KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Up |Pg Dn |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | AltGr|      |      |             | Del  |      | Play | Vol- | Vol+ | Next |
+ * `-----------------------------------------------------------------------------------'
+ *          ^-- sticky
+ */
+[_RAISE] = LAYOUT_planck_grid(
+    KC_GRV,  KC_1,          KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
+    KC_DEL,  KC_F1,         KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+    _______, KC_F7,         KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, KC_ENT,
+    _______, OSM(MOD_RALT), _______, _______, _______, _______, KC_DEL,  _______, KC_MPLY, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|      |      |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+    _______, RESET,   DEBUG,   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD,  RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______, _______,  _______, _______, _______,
+    _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______
+)
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/planck/keymaps/dsanchezseco/readme.md b/keyboards/planck/keymaps/dsanchezseco/readme.md
new file mode 100644 (file)
index 0000000..de9680b
--- /dev/null
@@ -0,0 +1,2 @@
+# The Default Planck Layout
+
diff --git a/keyboards/planck/keymaps/dsanchezseco/rules.mk b/keyboards/planck/keymaps/dsanchezseco/rules.mk
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index 6697c4ea482eb250297c41faa72ebe66b44da736..5911669086cf1aa4cbadb122d7c3014d072a7cff 100644 (file)
@@ -19,6 +19,7 @@
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [_QW] = LAYOUT_planck_grid_wrapper(QWERTY_4x12),
+    [_GAME] = LAYOUT_planck_grid_wrapper(GAME_4x12),
     [_LW] = LAYOUT_planck_grid_wrapper(LOWER_4x12),
     [_NV] = LAYOUT_planck_grid_wrapper(NAV_4x12),
     [_NP] = LAYOUT_planck_grid_wrapper(NUMPAD_4x12),
@@ -30,4 +31,4 @@ void rgb_matrix_indicators_user(void) {
     // Disable light in middle of 2U position
     rgb_matrix_set_color(42, 0, 0, 0);
 }
-#endif
\ No newline at end of file
+#endif
diff --git a/keyboards/planck/keymaps/juno/config.h b/keyboards/planck/keymaps/juno/config.h
new file mode 100644 (file)
index 0000000..eae636c
--- /dev/null
@@ -0,0 +1,41 @@
+#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
+
+// Reduce power consumption for iOS compatibility
+#define USB_MAX_POWER_CONSUMPTION 100
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/juno/keymap.c b/keyboards/planck/keymaps/juno/keymap.c
new file mode 100644 (file)
index 0000000..a34a9e9
--- /dev/null
@@ -0,0 +1,444 @@
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _COLEMAK,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _PLOVER,
+  _ADJUST,
+  
+  _FN1,
+  _DPAD,
+  _DPADNUM
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  BACKLIT,
+  EXT_PLV,
+  
+  FN1,
+  DP_ON,
+  DP_OFF
+};
+
+#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  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  App | Ctrl | GUI  |  Alt |Lower |   SpaceFn   |Raise | Left | Down |  Up  |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_SLSH, RSFT_T(KC_ENT),
+       KC_APP,  KC_LCTL, KC_LGUI, KC_LALT, LOWER,   LT(_FN1, KC_SPC), 
+                                                                                          LT(_FN1, KC_SPC), RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT 
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = 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_BSPC,
+    KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
+    BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_planck_grid(
+    KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC,
+    KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
+    KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT ,
+    BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+    KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+    KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______,  _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______,
+    KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = LAYOUT_planck_grid(
+    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   ,
+    XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
+    XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+    _______, RESET,   DEBUG,    RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______,
+    _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+// Two personal additional layers below
+
+/* Personal custom Fn layer
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Vol+ | PgUp |  Up  | PdDn | Ins  |      |      |  Up  |      | PScr |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      | Vol- | Left | Down | Right| Home |      | Left | Down |Right |      | Del  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | Prev | Play | Next | Brite| End  |      |      | Vol- | Vol+ | Mute |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Caps |      |      |      |      |    Space    |      | DP_ON|      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FN1] = LAYOUT_planck_grid(
+       _______, KC_VOLU, KC_PGUP, KC_UP,   KC_PGDN, KC_INS,  _______, _______, KC_UP,   _______, KC_PSCR, _______,
+       _______, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL ,
+       _______, KC_MPRV, KC_MPLY, KC_MNXT, BACKLIT, KC_END,  _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______,
+       KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DP_ON,   _______, _______, _______
+),
+
+/* DPAD layer, to activate arrow cluster at the bottom right corner
+
+ * ,-----------------------------------------------------------------------------------.
+ * | 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  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  |      |DNUM  |    Space    |      |DP_OFF| Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_DPAD] = 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_ENT ,
+       KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, MO(_DPADNUM),
+                                                                                                KC_SPC,  KC_SPC,  LOWER,   DP_OFF,  KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+// Extended layer for weapon switching
+
+[_DPADNUM] = LAYOUT_planck_grid(
+       XXXXXXX, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    XXXXXXX,
+       XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
+       _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,
+       _______, _______, _______, XXXXXXX, MO(_DPADNUM),
+                                                                                                XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+  
+  // Borrowing audio from unused audio
+  // Caps Lock on and off sound too similar
+  
+  float caps_song_on[][2] = SONG(NUM_LOCK_ON_SOUND);
+  float caps_song_off[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+
+  float dpad_song_on[][2] = SONG(ZELDA_PUZZLE);
+  float dpad_song_off[][2] = SONG(SONIC_RING);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+
+  // LED control, lighting up when Fn layer is activated
+  
+  state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+  
+  switch (biton32(state)) {
+    case _QWERTY:
+      backlight_set(0);
+      break;
+    case _FN1:
+      backlight_set(3);
+      break;
+       case _DPAD:
+      backlight_set(3);
+      break;
+  }
+
+  return state;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        print("mode just switched to qwerty and this is a huge string\n");
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+        #ifdef KEYBOARD_planck_rev5
+          PORTE &= ~(1<<6);
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+        #ifdef KEYBOARD_planck_rev5
+          PORTE |= (1<<6);
+        #endif
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_SONG(plover_song);
+        #endif
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+         
+         
+// Play audio upon switching Caps Lock and custom layers
+
+       case KC_CAPS:
+               if (record->event.pressed) {
+                       #ifdef AUDIO_ENABLE
+                       if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+                               PLAY_SONG(caps_song_off);
+                       } else {
+                               PLAY_SONG(caps_song_on);
+                       }
+                       #endif
+               }
+               return true;
+               
+       case DP_ON:
+               if (record->event.pressed) {
+                       
+               } else {
+                       #ifdef AUDIO_ENABLE
+                       PLAY_SONG(dpad_song_on);
+                       #endif
+                       
+                       layer_off(_FN1);
+                       layer_on(_DPAD);
+               }
+               
+       case DP_OFF:
+               if (record->event.pressed) {
+                       #ifdef AUDIO_ENABLE     
+                       PLAY_SONG(dpad_song_off);
+                       #endif
+                       
+                       layer_off(_DPAD);       
+               }
+    }
+  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) {
+      register_code(KC_PGDN);
+      unregister_code(KC_PGDN);
+    } else {
+      register_code(KC_PGUP);
+      unregister_code(KC_PGUP);
+    }
+  }
+}
+
+void dip_update(uint8_t index, bool active) {
+  switch (index) {
+    case 0:
+      if (active) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_song);
+        #endif
+        layer_on(_ADJUST);
+      } else {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_ADJUST);
+      }
+      break;
+    case 1:
+      if (active) {
+        muse_mode = true;
+      } else {
+        muse_mode = false;
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+        #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;
+  }
+}
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/juno/readme.md b/keyboards/planck/keymaps/juno/readme.md
new file mode 100644 (file)
index 0000000..a93a064
--- /dev/null
@@ -0,0 +1,8 @@
+# Juno Layout
+created by Juno Nguyen
+juno.ngx@gmail.com
+
+## Feature:
+* Pok3r-inspired functional layer.
+* Rearranged numerics for maximum efficiency.
+
diff --git a/keyboards/planck/keymaps/juno/rules.mk b/keyboards/planck/keymaps/juno/rules.mk
new file mode 100644 (file)
index 0000000..e9f1b13
--- /dev/null
@@ -0,0 +1,10 @@
+BACKLIGHT_ENABLE = yes
+
+SRC += muse.c
+
+MIDI_ENABLE=no
+RGBLIGHT_ENABLE = no
+MOUSEKEY_ENABLE = no   # Mouse keys
+EXTRAKEY_ENABLE = yes  # Audio control and System control
+CONSOLE_ENABLE = no            # Console for debug
+COMMAND_ENABLE = no            # Commands for debug and configuration
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/msiu/config.h b/keyboards/planck/keymaps/msiu/config.h
new file mode 100644 (file)
index 0000000..40e399a
--- /dev/null
@@ -0,0 +1,40 @@
+#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/msiu/keymap.c b/keyboards/planck/keymaps/msiu/keymap.c
new file mode 100644 (file)
index 0000000..aea59e8
--- /dev/null
@@ -0,0 +1,208 @@
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _NUMB,
+  _FUNC,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  DVORAK,
+  BACKLIT,
+  EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT_planck_grid(
+  LT(_NUMB, KC_TAB),   KC_Q,    KC_W,    KC_E,    KC_R,  KC_T,      KC_Y,   KC_U,  KC_I,    KC_O,    KC_P,    KC_BSPC,
+  LCTL_T(KC_ESC),      KC_A,    KC_S,    KC_D,    KC_F,  KC_G,      KC_H,   KC_J,  KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+  KC_LSFT,             KC_Z,    KC_X,    KC_C,    KC_V,  KC_B,      KC_N,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,
+  KC_LCTL,             KC_HYPR, KC_LALT, KC_LGUI, LOWER, MO(_FUNC), KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
+),
+
+[_DVORAK] = LAYOUT_planck_grid(
+  _______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,     KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______,
+  _______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,     KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
+  _______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,     KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______,
+  _______, _______,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_LOWER] = LAYOUT_planck_grid(
+  KC_TILD, KC_EXLM,  KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+  _______, KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+  _______, KC_F7,    KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
+  _______, _______,  _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+[_RAISE] = LAYOUT_planck_grid(
+  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_4,    KC_5,    KC_6,   KC_PLUS, KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+  _______, KC_7,    KC_8,    KC_9,   KC_MINS, KC_F11,  KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE,
+  _______, _______, _______, _______, _______, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+[_ADJUST] = LAYOUT_planck_grid(
+    _______, _______, DEBUG,   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  DVORAK,  _______, _______, _______,
+    _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF,_______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET
+),
+
+[_FUNC] = LAYOUT_planck_grid(
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______, KC_PSCR, _______,
+  _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_NUMB] = LAYOUT_planck_grid(
+  _______, _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, KC_BSPC,
+  _______, _______, _______, _______, _______, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, KC_1,    KC_2,    KC_3,    _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    _______, _______, _______
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        print("mode just switched to qwerty and this is a huge string\n");
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        set_single_persistent_default_layer(_DVORAK);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+        #ifdef KEYBOARD_planck_rev5
+          PORTE &= ~(1<<6);
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+        #ifdef KEYBOARD_planck_rev5
+          PORTE |= (1<<6);
+        #endif
+      }
+      return false;
+      break;
+  }
+  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) {
+      register_code(KC_PGDN);
+      unregister_code(KC_PGDN);
+    } else {
+      register_code(KC_PGUP);
+      unregister_code(KC_PGUP);
+    }
+  }
+}
+
+void dip_update(uint8_t index, bool active) {
+  switch (index) {
+    case 0:
+      if (active) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_song);
+        #endif
+        layer_on(_ADJUST);
+      } else {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_ADJUST);
+      }
+      break;
+    case 1:
+      if (active) {
+        muse_mode = true;
+      } else {
+        muse_mode = false;
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+        #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;
+  }
+}
diff --git a/keyboards/planck/keymaps/msiu/readme.md b/keyboards/planck/keymaps/msiu/readme.md
new file mode 100644 (file)
index 0000000..de9680b
--- /dev/null
@@ -0,0 +1,2 @@
+# The Default Planck Layout
+
diff --git a/keyboards/planck/keymaps/msiu/rules.mk b/keyboards/planck/keymaps/msiu/rules.mk
new file mode 100644 (file)
index 0000000..dcf16be
--- /dev/null
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/rjhilgefort/config.h b/keyboards/planck/keymaps/rjhilgefort/config.h
new file mode 100644 (file)
index 0000000..672c5d5
--- /dev/null
@@ -0,0 +1,35 @@
+#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
diff --git a/keyboards/planck/keymaps/rjhilgefort/keymap.c b/keyboards/planck/keymaps/rjhilgefort/keymap.c
new file mode 100644 (file)
index 0000000..455aa5a
--- /dev/null
@@ -0,0 +1,153 @@
+/* Copyright 2015-2017 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/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _LOWER,
+  _RAISE,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  // QWERTY = SAFE_RANGE,
+  BACKLIT,
+  EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+#define CTRL_ESC MT(MOD_LCTL, KC_ESC)
+#define HYPER LCTL(LALT(QK_LGUI))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+* ,-------------------------------------------------------------------------------------------------------.
+* | Tab    |    Q   |    W   |    E   |    R   |   T   |   Y   |   U  |    I   |    O   |   P    | Bksp   |
+* |--------+--------+--------+--------+--------+-------+-------+------+--------+--------+--------+--------|
+* | Ct/Esc |    A   |    S   |    D   |    F   |   G   |   H   |   J  |    K   |    L   |   ;    |  "     |
+* |--------+--------+--------+--------+--------+-------+-------+------+--------+--------+--------+--------|
+* | Shift  |    Z   |    X   |    C   |    V   |   B   |   N   |   M  |    ,   |    .   |   /    | Enter  |
+* |--------+--------+--------+--------+--------+-------+-------+------+--------+--------+--------+--------|
+* |        |  Ctrl  | Raise  |   Alt  |   GUI  |     Space     | Lowr | Hyper  |        |        | Raise  |
+* `-------------------------------------------------------------------------------------------------------'
+*/
+[_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_BSPC},
+  {CTRL_ESC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_H,   KC_J,  KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {KC_LSFT,  KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_N,   KC_M,  KC_COMM, KC_DOT,  KC_SLSH, KC_ENT },
+  {_______,  KC_LCTL, RAISE,   KC_LALT, KC_LGUI, KC_SPC, KC_SPC, LOWER, HYPER,   _______, _______, RAISE  }
+),
+
+/* Lower
+* ,-----------------------------------------------------------------------------------------------------------.
+* |       |   \    |   /    |   [    |   ]    |   ~    |   |    |   =    |   +    |    -    |    _   |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+---------+--------+--------|
+* |       |   {    |   }    |   (    |   )    |   `    |   ←    |   ↓    |   ↑    |    →    |  Alt   |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+---------+--------+--------|
+* |       |   !    |   @    |   #    |   $    |   %    |   ^    |   &    |   *    |    (    |    )   |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+---------+--------+--------|
+* |       |        |        |        |        |                 |        |        |         |        |        |
+* `-----------------------------------------------------------------------------------------------------------'
+*/
+[_LOWER] = LAYOUT_planck_grid(
+  {_______, KC_BSLS, KC_SLSH, KC_LBRC, KC_RBRC, KC_TILD, KC_PIPE, KC_EQL,  KC_PLUS, KC_MINS,  KC_UNDS, _______},
+  {_______, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_GRV,  KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT, KC_LALT, _______},
+  {_______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN,  KC_RPRN, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______}
+),
+
+/* Raise
+* ,----------------------------------------------------------------------------------------------------------.
+* |       |        |        |        |        |        |        |   7    |   8    |   9    |        |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+* |       | VolMte | Vol -  | Vol +  | Ply/Pse|        |        |   4    |   5    |   6    |        |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+* |       | Trak ← | Trak → | Scrn - | Scrn + |        |        |   1    |   2    |   3    |        |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+* |       |        |        |        |        |                 |        |   0    |   .    |        |        |
+* `----------------------------------------------------------------------------------------------------------'
+*/
+[_RAISE] = LAYOUT_planck_grid(
+  {_______, _______, _______, _______, _______, _______, _______, KC_7,    KC_8,    KC_9,    _______, _______},
+  {_______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, KC_4,    KC_5,    KC_6,    _______, _______},
+  {_______, KC_MRWD, KC_MFFD, KC_SLCK, KC_PAUS, _______, _______, KC_1,    KC_2,    KC_3,    _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, KC_0,    KC_0,    KC_DOT,  _______, _______}
+),
+
+/* Adjust (Lower + Raise)
+ * ,----------------------------------------------------------------------------------------------------------.
+ * |       | Reset  |        |        |        |        |        |        |        |        |        | Del    |
+ * |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |       |        | MuMod  | AudOn  | AudOff |        |        | Qwerty |        |        |        |        |
+ * |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |       | Voice- | Voice+ | MusOn  | Musoff | MIDIon | MIDIof | TermOn | TermOff|        |        |        |
+ * |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |       |        |        |        |        |                 |        |        |        |        |        |
+ * `----------------------------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+  {_______, RESET,   _______, _______, _______, _______, _______, _______, _______,  _______, _______, KC_DEL },
+  {_______, _______, MU_MOD,  AU_ON,   AU_OFF,  _______, _______, QWERTY,  _______,  _______, _______, _______},
+  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______}
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool music_mask_user(uint16_t keycode) {
+  switch (keycode) {
+    case RAISE:
+    case LOWER:
+      return false;
+    default:
+      return true;
+  }
+}
+
+/*
+* Example
+* ,----------------------------------------------------------------------------------------------------------.
+* |       |        |        |        |        |        |        |        |        |        |        |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+* |       |        |        |        |        |        |        |        |        |        |        |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+* |       |        |        |        |        |        |        |        |        |        |        |        |
+* |-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+* |       |        |        |        |        |                 |        |        |        |        |        |
+* `----------------------------------------------------------------------------------------------------------'
+*
+[_EXAMPLE] = LAYOUT_planck_grid(
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+),
+*/
diff --git a/keyboards/planck/keymaps/rjhilgefort/readme.md b/keyboards/planck/keymaps/rjhilgefort/readme.md
new file mode 100644 (file)
index 0000000..f446a76
--- /dev/null
@@ -0,0 +1,63 @@
+# [🐦 @rjhilgefort](https://twitter.com/rjhilgefort) Planck Layout
+
+A simple and practical layout featuring:
+
+- Hyper Key === CTRL + ALT + GUI 
+- Ctrl/Esc key that is CTRL when held and ESC when tapped
+- Symbols layer that focuses on coding
+- Numpad + media layer
+
+![Imgur](https://i.imgur.com/elygxAb.jpg)
+
+
+## Main
+```
+,-------------------------------------------------------------------------------------------------------.
+| Tab    |    Q   |    W   |    E   |    R   |   T   |   Y   |   U  |    I   |    O   |   P    | Bksp   |
+|--------|--------|--------|--------|--------|-------|-------|------|--------|--------|--------|--------|
+| Ct/Esc |    A   |    S   |    D   |    F   |   G   |   H   |   J  |    K   |    L   |   ;    |  "     |
+|--------|--------|--------|--------|--------|-------|-------|------|--------|--------|--------|--------|
+| Shift  |    Z   |    X   |    C   |    V   |   B   |   N   |   M  |    ,   |    .   |   /    | Enter  |
+|--------|--------|--------|--------|--------|-------|-------|------|--------|--------|--------|--------|
+|        |  Ctrl  | Raise  |   Alt  |   GUI  |     Space     | Lowr | Hyper  |        |        | Raise  |
+`-------------------------------------------------------------------------------------------------------'
+```
+
+## Lower
+```
+,-----------------------------------------------------------------------------------------------------------.
+|       |   \    |   /    |   [    |   ]    |   ~    |   |    |   =    |   +    |    -    |    _   |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|---------|--------|--------|
+|       |   {    |   }    |   (    |   )    |   `    |   ←    |   ↓    |   ↑    |    →    |  Alt   |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|---------|--------|--------|
+|       |   !    |   @    |   #    |   $    |   %    |   ^    |   &    |   *    |    (    |    )   |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|---------|--------|--------|
+|       |        |        |        |        |                 |        |        |         |        |        |
+`-----------------------------------------------------------------------------------------------------------'
+```
+
+## Raise
+```
+,----------------------------------------------------------------------------------------------------------.
+|       |        |        |        |        |        |        |   7    |   8    |   9    |        |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|
+|       | VolMte | Vol -  | Vol +  | Ply/Pse|        |        |   4    |   5    |   6    |        |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|
+|       | Trak ← | Trak → | Scrn - | Scrn + |        |        |   1    |   2    |   3    |        |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|
+|       |        |        |        |        |                 |        |   0    |   .    |        |        |
+`----------------------------------------------------------------------------------------------------------'
+```
+
+## Adjust (Lower + Raise)
+```
+,----------------------------------------------------------------------------------------------------------.
+|       | Reset  |        |        |        |        |        |        |        |        |        | Del    |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|
+|       |        | MuMod  | AudOn  | AudOff |        |        | Qwerty |        |        |        |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|
+|       | Voice- | Voice+ | MusOn  | Musoff | MIDIon | MIDIof | TermOn | TermOff|        |        |        |
+|-------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|
+|       |        |        |        |        |                 |        |        |        |        |        |
+`----------------------------------------------------------------------------------------------------------'
+```
diff --git a/keyboards/planck/keymaps/rjhilgefort/rules.mk b/keyboards/planck/keymaps/rjhilgefort/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
index d0750ee03a38a93a3d9a9d20ad2a4b13fb7539a3..3c0f08a9d9089998580bebe1b5accbb85d056c8e 100644 (file)
@@ -5,7 +5,7 @@ This is my qmk firmware for my keyboard. I grew tired of organizing the keycode
 array in plain text so I made it a literate .org file. I've never done this
 before, so bear with me.
 
-* Keymap
+* Layers
 
 #+BEGIN_COMMENT
 #+NAME: empty-layer
@@ -19,7 +19,7 @@ before, so bear with me.
 #+END_COMMENT
 
 This is my "pretty" org mode organized table for my main dvorak layer. If you
-don't use org mode, it won't be that exiting, but if you enjoy working in org
+don't use org mode, it won't be that exciting, but if you enjoy working in org
 mode, you can edit this table directly, and this file is tangled to the actual
 keymap. No more organizing spaces or converting to and from comments.
 
@@ -31,23 +31,45 @@ keymap. No more organizing spaces or converting to and from comments.
 | T_LGUI | T_LALT | UP   | DOWN | BSPC | TAB | ENT | SPC | LEFT | RIGHT | T_RALT | T_RGUI |
 |--------+--------+------+------+------+-----+-----+-----+------+-------+--------+--------|
 
+This qwerty layout is just so normal people can try out the board. Tap keys
+would need to be customized I think, more on that later. I also put another
+dvorak key here because I have nightmares of getting trapped in this forsaken
+layout.
+
+#+NAME: qwerty-layer
+|--------+--------+----+------+------+-----+-----+-----+------+-------+--------+--------|
+| T_LRSE | Q      | W  | E    | R    | T   | Y   | U   | I    | O     | P      | T_RRSE |
+| T_LSFT | A      | S  | D    | F    | G   | H   | J   | K    | L     | SCLN   | T_RSFT |
+| T_LCTL | Z      | X  | C    | V    | B   | N   | M   | COMM | DOT   | QUOT   | T_RCTL |
+| T_LGUI | T_LALT | UP | DOWN | BSPC | TAB | ENT | SPC | LEFT | RIGHT | T_RALT | DVORAK |
+|--------+--------+----+------+------+-----+-----+-----+------+-------+--------+--------|
+
 I tried to keep my layout bare bones, just what would be available on a normal
-keyboard, minus some keys I never used. The bottom left copies a normal
+keyboard, minus some keys I never used. This one secondary layer should cover a
+majority of the keys not found on the home layer. The bottom left copies a normal
 keyboards symbols from shifted numbers, and the rest is placed where convenient,
 with some considerations for one handed use, hence the shortcuts in the top
 left.
 
-#+TODO: qwerty layer for ma friends
-
 #+NAME: secondary-layer
-|----+--------+--------+--------+--------+------+------+----+--------+--------+-----+----|
-| -- | EZUNDO | EZCOPY | EZCUT  | EZPSTE | INS  | EQL  |  7 |      8 |      9 | F11 | -- |
-| -- | ESC    | CAPS   | PGUP   | PGDN   | F4   | ASTR |  4 |      5 |      6 | 0   | -- |
-| -- | EXLM   | AT     | HASH   | DLR    | PERC | CIRC |  1 |      2 |      3 | F12 | -- |
-| -- | --     | EZUP   | EZDOWN | --     | AMPR | PIPE | -- | EZLEFT | EZRGHT | --  | -- |
-|----+--------+--------+--------+--------+------+------+----+--------+--------+-----+----|
-
-But wait, we are missing several important keys!? yes, well, the modifier keys
+|--------+--------+--------+--------+--------+------+------+-----+--------+--------+-------+--------|
+| --     | EZUNDO | EZCOPY | EZCUT  | EZPSTE | INS  | EQL  |   7 |      8 |      9 | --    | --     |
+| EZSHFT | ESC    | CAPS   | PGUP   | PGDN   | HOME | ASTR |   4 |      5 |      6 | 0     | EZSHFT |
+| EZCTRL | EXLM   | AT     | HASH   | DLR    | PERC | CIRC |   1 |      2 |      3 | COM   | EZCTRL |
+| EZGUI  | EZALT  | EZUP   | EZDOWN | SPC    | AMPR | PIPE | END | EZLEFT | EZRGHT | EZALT | EZGUI  |
+|--------+--------+--------+--------+--------+------+------+-----+--------+--------+-------+--------|
+
+Basic command layer for one-shot macros and function keys.
+
+#+NAME: command-layer
+|----+-----+-----+-----+-----+--------+--------+------+-------+------+-----+----|
+| -- | F1  | F2  | F3  | F4  | F5     | F6     | F7   | F8    | F9   | F10 | -- |
+| -- | F11 | F12 | F13 | F14 | F15    | F16    | F17  | F18   | F19  | F20 | -- |
+| -- | F21 | F22 | F23 | F24 | QWERTY | DVORAK | USER | EMAIL | NAME | --  | -- |
+| -- | --  | --  | --  | --  | --     | --     | DIR  | --    | --   | --  | -- |
+|----+-----+-----+-----+-----+--------+--------+------+-------+------+-----+----|
+
+But wait, we are missing several important keys? well, yes, but the modifier keys
 all do other keys when tapped. More about that in the keymap section.
 
 * Keymap Conversion in Python
@@ -55,7 +77,7 @@ all do other keys when tapped. More about that in the keymap section.
 This python can convert that table into the array needed for the keymap file. It
 simply prepends every key with "KC_". I used to use a dictionary to convert some
 keys from the table into qmk keycodes, but the double convertion was
-unneccessary so I simply prepended all my macros with KC and moved all the
+unneccessary so I just prepended all my macros with KC and moved all the
 implementation to the `process-user-input` function.
 
 #+NAME:layer-to-array
@@ -84,54 +106,68 @@ return results
 
 * keymap.c
 
-Now that we have done all the hard work, lets layout our keymap file then define
-our macros.
-
-** Headers And Layer Declaration
+Now that we laid out our layout, lets lay out our kemap file.
 
 #+BEGIN_SRC C :noweb yes
 #include QMK_KEYBOARD_H
 
 extern keymap_config_t keymap_config;
 
-static uint16_t tap_timers[10]  = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-char last_mod = -1;
+#+END_SRC
 
-enum planck_layers {
-  _DVORAK,
-  _RISE
-};
+** Keycodes
 
+#+BEGIN_SRC C :noweb yes
 // where the 'T_' communicates how the key does something different when tapped.
 enum planck_keycodes {
-  DVORAK = SAFE_RANGE,
-  KC_T_LALT,
-  KC_T_RALT,
-  KC_T_LGUI,
-  KC_T_RGUI,
-  KC_T_LCTL,
-  KC_T_RCTL,
-  KC_T_LSFT,
-  KC_T_RSFT,
-  KC_T_LRSE,
-  KC_T_RRSE,
-  KC_EZRGHT,
-  KC_EZLEFT,
-  KC_EZUP,
-  KC_EZDOWN,
-  KC_EZUNDO,
-  KC_EZCOPY,
-  KC_EZCUT,
-  KC_EZPSTE
+//DVORAK = SAFE_RANGE,
+KC_T_LALT = SAFE_RANGE,
+KC_T_RALT,
+KC_T_LGUI,
+KC_T_RGUI,
+KC_T_LCTL,
+KC_T_RCTL,
+KC_T_LSFT,
+KC_T_RSFT,
+KC_T_LRSE,
+KC_T_RRSE,
+KC_EZRGHT,
+KC_EZLEFT,
+KC_EZUP,
+KC_EZDOWN,
+KC_EZUNDO,
+KC_EZCOPY,
+KC_EZCUT,
+KC_EZPSTE,
+KC_EZSHFT,
+KC_EZCTRL,
+KC_EZGUI,
+KC_EZALT,
+KC_DVORAK,
+KC_QWERTY,
+KC_USER,
+KC_EMAIL,
+KC_NAME,
+KC_DIR,
+KC_COM
 };
 
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
 #+END_SRC
 
 ** Import Key table
 
+#+BEGIN_SRC C :noweb yes
+enum planck_layers {
+_DVORAK,
+_QWERTY,
+_RISE,
+_COMMAND
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+#+END_SRC
+
 #+BEGIN_SRC C :noweb yes
 [_DVORAK] =
 
@@ -142,6 +178,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 #+END_SRC
 
+#+BEGIN_SRC C :noweb yes
+[_QWERTY] =
+
+#+END_SRC
+
+#+BEGIN_SRC C :noweb yes
+<<layer-to-array(qwerty-layer)>>
+
+#+END_SRC
+
 #+BEGIN_SRC C :noweb yes
 [_RISE] =
 
@@ -152,50 +198,96 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 #+END_SRC
 
-** Process User Input
-*** Tap Key Functionality
+#+BEGIN_SRC C :noweb yes
+[_COMMAND] =
 
-These methods define how I implemented the tap mechanic. Basically, I believe
-that /pressing/ any other key should be grounds for the hold functionality to be
-assumed. My natuaral typing style experiences no delays from my method.
+#+END_SRC
+
+#+BEGIN_SRC C :noweb yes
+<<layer-to-array(command-layer)>>
+
+#+END_SRC
 
 #+BEGIN_SRC C :noweb yes
 };
 
-void mod_press(uint16_t hold_code, int id) {
-    tap_timers[id] = timer_read();
-    last_mod = id;
-    register_code(hold_code);
+#+END_SRC
+
+** Tap Keys
+
+I don't like tap keys coming out on release. When modified, I often let go of
+the modifier too early because the tap button doesn't come out untill release. I
+guess you could save the state of the board on press and then apply it after the
+timer, but what I really want is the keys to come out on press when they can and
+when it is most useful. For me, that is when they are modified a single time. So
+I kind "locked" the board into only doing single modifiers, making them faster.
+Disadvantages are double modified keys must be done with one shot keys (its
+actually not that bad, it feels like emacs!) and triple modified keys are
+impossible at the moment.
+
+#+BEGIN_SRC C :noweb yes
+
+static uint16_t tap_timer = 0;
+char last_mod = 10;
+
+void mod_press(uint16_t tap_code, uint16_t hold_code, int id) {
+    // this first if body makes double modified keys impossible, but stops the
+    // delay when modifying a tap key which would result in the tap key not
+    // getting modified.
+    if (last_mod != id && last_mod != 10) {
+        tap_code16(tap_code);
+        last_mod = 10;
+    } else {
+        tap_timer = timer_read();
+        last_mod = id;
+        register_code(hold_code);
+    }
 }
 
 void mod_lift(uint16_t tap_code, uint16_t hold_code, int id) {
     unregister_code(hold_code);
-    if (last_mod == id && timer_elapsed(tap_timers[id]) < TAPPING_TERM) {
-      tap_code16(tap_code);
-      last_mod = -1;
+    if (last_mod == id && timer_elapsed(tap_timer) < TAPPING_TERM) {
+        tap_code16(tap_code);
+        last_mod = 10;
     }
 }
 
 #+END_SRC
 
-*** Set DVORAK layout
-
-The function that filter's user inputs and applies macros, the begginning is
-pretty basic, setting our main layer and configuring our secondary layer.
+** Process User Input
 
 #+BEGIN_SRC C :noweb yes
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  switch (keycode) {
-    case DVORAK:
-      if (record->event.pressed) {
-        set_single_persistent_default_layer(_DVORAK);
-      }
-      return false;
-      break;
+    switch (keycode) {
+#+END_SRC
+
+** Layouts
+
+Set Dvorak layout
+
+#+BEGIN_SRC C :noweb yes
+case KC_DVORAK:
+if (record->event.pressed) {
+    set_single_persistent_default_layer(_DVORAK);
+}
+return true;
+break;
+
+#+END_SRC
+
+Set Qwerty layout.
+
+#+BEGIN_SRC C :noweb yes
+case KC_QWERTY:
+if (record->event.pressed) {
+    set_single_persistent_default_layer(_QWERTY);
+}
+return true;
+break;
 
 #+END_SRC
 
-*** Alt  and ()
+** Alt and ()
 
 Left and right alt are ( and ) when tapped. I put them on alt instead of a more
 conveniant key like control because parentheses do not need to be shift modified
@@ -204,24 +296,24 @@ ever, unlike some other tap keys seen in the next sections.
 #+BEGIN_SRC C :noweb yes
 case KC_T_LALT:
 if (record->event.pressed) {
-  mod_press(KC_LALT, 0);
- } else {
-  mod_lift(S(KC_9), KC_LALT, 0);
- }
+    mod_press(S(KC_9), KC_LALT, 0);
+} else {
+    mod_lift(S(KC_9), KC_LALT, 0);
+}
 return false;
 break;
 case KC_T_RALT:
 if (record->event.pressed) {
-  mod_press(KC_RALT, 1);
- } else {
-  mod_lift(S(KC_0), KC_RALT, 1);
- }
+    mod_press(S(KC_0), KC_RALT, 1);
+} else {
+    mod_lift(S(KC_0), KC_RALT, 1);
+}
 return false;
 break;
 
 #+END_SRC
 
-*** Gui  and `\
+** Gui and `\
 
 I place gui in the bottom corner because I believe it is the hardest key to
 reach, so gui seemed like a good fit for a dedicated key that I never want to
@@ -231,24 +323,24 @@ number pad or shifted number keys.
 #+BEGIN_SRC C :noweb yes
 case KC_T_LGUI:
 if (record->event.pressed) {
-  mod_press(KC_LGUI, 2);
- } else {
-  mod_lift(KC_GRAVE, KC_LGUI, 2);
- }
+    mod_press(KC_GRAVE, KC_LGUI, 2);
+} else {
+    mod_lift(KC_GRAVE, KC_LGUI, 2);
+}
 return false;
 break;
 case KC_T_RGUI:
 if (record->event.pressed) {
-  mod_press(KC_RGUI, 3);
- } else {
-  mod_lift(KC_BSLASH, KC_RGUI, 3);
- }
+    mod_press(KC_BSLASH, KC_RGUI, 3);
+} else {
+    mod_lift(KC_BSLASH, KC_RGUI, 3);
+}
 return false;
 break;
 
 #+END_SRC
 
-*** Ctrl and []
+** Ctrl and []
 
 Left and right control are [] respectively when they are tapped, making { and }
 also very convenient.
@@ -256,24 +348,24 @@ also very convenient.
 #+BEGIN_SRC C :noweb yes
 case KC_T_LCTL:
 if (record->event.pressed) {
-  mod_press(KC_LCTL, 4);
- } else {
-  mod_lift(KC_LBRACKET, KC_LCTL, 4);
- }
+    mod_press(KC_LBRACKET, KC_LCTL, 4);
+} else {
+    mod_lift(KC_LBRACKET, KC_LCTL, 4);
+}
 return false;
 break;
 case KC_T_RCTL:
 if (record->event.pressed) {
-  mod_press(KC_RCTL, 5);
- } else {
-  mod_lift(KC_RBRACKET, KC_RCTL, 5);
- }
+    mod_press(KC_RBRACKET, KC_RCTL, 5);
+} else {
+    mod_lift(KC_RBRACKET, KC_RCTL, 5);
+}
 return false;
 break;
 
 #+END_SRC
 
-*** Shft and =-
+** Shft and =-
 
 I place shift on the home row, so having '-' right of my pinkie is standard, and
 it only felt natural to put its opposite, '=/+' on the other side. I put an
@@ -282,24 +374,24 @@ extra one on the right side in the secondary layer for the num pad.
 #+BEGIN_SRC C :noweb yes
 case KC_T_LSFT:
 if (record->event.pressed) {
-  mod_press(KC_LSFT, 6);
- } else {
-  mod_lift(KC_EQUAL, KC_LSFT, 6);
- }
+    mod_press(KC_EQUAL, KC_LSFT, 6);
+} else {
+    mod_lift(KC_EQUAL, KC_LSFT, 6);
+}
 return false;
 break;
 case KC_T_RSFT:
 if (record->event.pressed) {
-  mod_press(KC_RSFT, 7);
- } else {
-  mod_lift(KC_MINUS, KC_RSFT, 7);
- }
+    mod_press(KC_MINUS, KC_RSFT, 7);
+} else {
+    mod_lift(KC_MINUS, KC_RSFT, 7);
+}
 return false;
 break;
 
 #+END_SRC
 
-*** Rise, DEL, and /
+** Rise, DEL, and /
 
 I use the top corners as rise because I decided that I do not like using layers
 with my thumbs. It feels uncomfortable to hold keys down with the side of my
@@ -315,36 +407,78 @@ corner again mimicing a standard dvorak keyboard.
 #+BEGIN_SRC C :noweb yes
 case KC_T_LRSE:
 if (record->event.pressed) {
-  tap_timers[8] = timer_read();
-  last_mod = 8;
-  layer_on(_RISE);
- } else {
-  layer_off(_RISE);
-  if (last_mod == 8 && timer_elapsed(tap_timers[8]) < TAPPING_TERM) {
-    tap_code16(KC_DELETE);
-    last_mod = -1;
-  }
- }
+    tap_timer = timer_read();
+    last_mod = 8;
+    layer_on(_RISE);
+} else {
+    layer_off(_RISE);
+    if (last_mod == 8 && timer_elapsed(tap_timer) < TAPPING_TERM) {
+        tap_code16(KC_DELETE);
+        last_mod = 10;
+    }
+}
 return false;
 break;
 case KC_T_RRSE:
 if (record->event.pressed) {
-  tap_timers[9] = timer_read();
-  last_mod = 9;
-  layer_on(_RISE);
- } else {
-  layer_off(_RISE);
-  if (last_mod == 9 && timer_elapsed(tap_timers[9]) < TAPPING_TERM) {
-    tap_code16(KC_SLASH);
-    last_mod = -1;
-  }
- }
+    tap_timer = timer_read();
+    last_mod = 9;
+    layer_on(_RISE);
+} else {
+    layer_off(_RISE);
+    if (last_mod == 9 && timer_elapsed(tap_timer) < TAPPING_TERM) {
+        tap_code16(KC_SLASH);
+        last_mod = 10;
+    }
+}
 return false;
 break;
 
 #+END_SRC
 
-*** EZ keys
+** EZ Keys
+
+EZ or "easy" keys do things that can already be done on the board, but I want an
+easier way of doing them.
+
+*** One Shot Keys
+
+Since I made modified tap keys occur on press instead of release, I need one
+shot keys to press any key with more than one modifier.
+
+#+BEGIN_SRC C :noweb yes
+case KC_EZSHFT:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LSFT);
+    last_mod = 10;
+}
+return false;
+break;
+case KC_EZCTRL:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LCTL);
+    last_mod = 10;
+}
+return false;
+break;
+case KC_EZALT:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LALT);
+    last_mod = 10;
+}
+return false;
+break;
+case KC_EZGUI:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LGUI);
+    last_mod = 10;
+}
+return false;
+break;
+
+#+END_SRC
+
+*** Arrows
 
 I use ctrl+shift+arrows keys a lot, so when the layer key is pressed they became
 lazy versions of themselves with control and shift already pressed.
@@ -355,77 +489,134 @@ left hand like on a qwerty or colemek keyboard.
 #+BEGIN_SRC C :noweb yes
 case KC_EZRGHT:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_RGHT));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_RGHT));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
 case KC_EZLEFT:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_LEFT));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_LEFT));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
 case KC_EZDOWN:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_DOWN));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_DOWN));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
 case KC_EZUP:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_UP));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_UP));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
+#+END_SRC
+
+*** Undo, Copy, Cut, Paste
+
+#+BEGIN_SRC C :noweb yes
 case KC_EZUNDO:
 if (record->event.pressed) {
-  tap_code16(C(KC_Z));
-  last_mod = -1;
+    tap_code16(C(KC_Z));
+    last_mod = 10;
 }
 return false;
 break;
 case KC_EZCOPY:
 if (record->event.pressed) {
-  tap_code16(C(KC_C));
-  last_mod = -1;
+    tap_code16(C(KC_C));
+    last_mod = 10;
 }
 return false;
 break;
 case KC_EZCUT:
 if (record->event.pressed) {
-  tap_code16(C(KC_X));
-  last_mod = -1;
+    tap_code16(C(KC_X));
+    last_mod = 10;
 }
 return false;
 break;
 case KC_EZPSTE:
 if (record->event.pressed) {
-  tap_code16(C(KC_P));
-  last_mod = -1;
+    tap_code16(C(KC_V));
+    last_mod = 10;
+}
+return false;
+break;
+#+END_SRC
+
+** Commands
+
+Start command layer one shot
+
+#+BEGIN_SRC C :noweb yes
+case KC_COM:
+if (record->event.pressed) {
+    layer_on(_COMMAND);
+    set_oneshot_layer(_COMMAND, ONESHOT_START);
+    last_mod = 10;
+} else {
+    clear_oneshot_layer_state (ONESHOT_PRESSED);
 }
 return false;
 break;
 #+END_SRC
 
-*** Standard inputs interupt tap
+Just some strings I notice that I type a lot.
+
+#+BEGIN_SRC C :noweb yes
+case KC_USER:
+if (record->event.pressed) {
+    send_string("mhostley");
+    last_mod = 10;
+}
+return true;
+break;
+case KC_EMAIL:
+if (record->event.pressed) {
+    send_string("mhostley@gmail.com");
+    last_mod = 10;
+}
+return true;
+break;
+case KC_NAME:
+if (record->event.pressed) {
+    send_string("Samuel Jahnke");
+    last_mod = 10;
+}
+return true;
+break;
+case KC_DIR:
+if (record->event.pressed) {
+    send_string("home/mhostley/");
+    last_mod = 10;
+}
+return true;
+break;
+
+#+END_SRC
+
+** Standard inputs interupt tap
 
 Finally, if just a standard key is tapped, set the interupted flag.
+Keep this last.
 
 #+BEGIN_SRC C :noweb yes
-  }
-  last_mod = -1;
-  return true;
+}
+last_mod = 10;
+return true;
 }
 #+END_SRC
index 53760da7671518e66a303e59af51484eb5240b49..ff1424489fc0e8082dafe09e548b1fc254ae2f66 100644 (file)
@@ -2,36 +2,45 @@
 
 extern keymap_config_t keymap_config;
 
-static uint16_t tap_timers[10]  = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-char last_mod = -1;
-
-enum planck_layers {
-  _DVORAK,
-  _RISE
-};
-
 // where the 'T_' communicates how the key does something different when tapped.
 enum planck_keycodes {
-  DVORAK = SAFE_RANGE,
-  KC_T_LALT,
-  KC_T_RALT,
-  KC_T_LGUI,
-  KC_T_RGUI,
-  KC_T_LCTL,
-  KC_T_RCTL,
-  KC_T_LSFT,
-  KC_T_RSFT,
-  KC_T_LRSE,
-  KC_T_RRSE,
-  KC_EZRGHT,
-  KC_EZLEFT,
-  KC_EZUP,
-  KC_EZDOWN,
-  KC_EZUNDO,
-  KC_EZCOPY,
-  KC_EZCUT,
-  KC_EZPSTE
+//DVORAK = SAFE_RANGE,
+KC_T_LALT = SAFE_RANGE,
+KC_T_RALT,
+KC_T_LGUI,
+KC_T_RGUI,
+KC_T_LCTL,
+KC_T_RCTL,
+KC_T_LSFT,
+KC_T_RSFT,
+KC_T_LRSE,
+KC_T_RRSE,
+KC_EZRGHT,
+KC_EZLEFT,
+KC_EZUP,
+KC_EZDOWN,
+KC_EZUNDO,
+KC_EZCOPY,
+KC_EZCUT,
+KC_EZPSTE,
+KC_EZSHFT,
+KC_EZCTRL,
+KC_EZGUI,
+KC_EZALT,
+KC_DVORAK,
+KC_QWERTY,
+KC_USER,
+KC_EMAIL,
+KC_NAME,
+KC_DIR,
+KC_COM
+};
+
+enum planck_layers {
+_DVORAK,
+_QWERTY,
+_RISE,
+_COMMAND
 };
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -44,202 +53,307 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 { KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_T_RGUI}
 },
 
+[_QWERTY] =
+
+{{ KC_T_LRSE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_T_RRSE},
+{ KC_T_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_T_RSFT},
+{ KC_T_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, KC_T_RCTL},
+{ KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_DVORAK}
+},
+
 [_RISE] =
 
-{{ KC_TRANSPARENT, KC_EZUNDO, KC_EZCOPY, KC_EZCUT, KC_EZPSTE, KC_INS, KC_EQL, KC_7, KC_8, KC_9, KC_F11, KC_TRANSPARENT},
-{ KC_TRANSPARENT, KC_ESC, KC_CAPS, KC_PGUP, KC_PGDN, KC_F4, KC_ASTR, KC_4, KC_5, KC_6, KC_0, KC_TRANSPARENT},
-{ KC_TRANSPARENT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_1, KC_2, KC_3, KC_F12, KC_TRANSPARENT},
-{ KC_TRANSPARENT, KC_TRANSPARENT, KC_EZUP, KC_EZDOWN, KC_TRANSPARENT, KC_AMPR, KC_PIPE, KC_TRANSPARENT, KC_EZLEFT, KC_EZRGHT, KC_TRANSPARENT, KC_TRANSPARENT}
+{{ KC_TRANSPARENT, KC_EZUNDO, KC_EZCOPY, KC_EZCUT, KC_EZPSTE, KC_INS, KC_EQL, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_TRANSPARENT},
+{ KC_EZSHFT, KC_ESC, KC_CAPS, KC_PGUP, KC_PGDN, KC_HOME, KC_ASTR, KC_4, KC_5, KC_6, KC_0, KC_EZSHFT},
+{ KC_EZCTRL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_1, KC_2, KC_3, KC_COM, KC_EZCTRL},
+{ KC_EZGUI, KC_EZALT, KC_EZUP, KC_EZDOWN, KC_SPC, KC_AMPR, KC_PIPE, KC_END, KC_EZLEFT, KC_EZRGHT, KC_EZALT, KC_EZGUI}
+},
+
+[_COMMAND] =
+
+{{ KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRANSPARENT},
+{ KC_TRANSPARENT, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRANSPARENT},
+{ KC_TRANSPARENT, KC_F21, KC_F22, KC_F23, KC_F24, KC_QWERTY, KC_DVORAK, KC_USER, KC_EMAIL, KC_NAME, KC_TRANSPARENT, KC_TRANSPARENT},
+{ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_DIR, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT}
 },
 
 };
 
-void mod_press(uint16_t hold_code, int id) {
-    tap_timers[id] = timer_read();
-    last_mod = id;
-    register_code(hold_code);
+static uint16_t tap_timer = 0;
+char last_mod = 10;
+
+void mod_press(uint16_t tap_code, uint16_t hold_code, int id) {
+    // this first if body makes double modified keys impossible, but stops the
+    // delay when modifying a tap key which would result in the tap key not
+    // getting modified.
+    if (last_mod != id && last_mod != 10) {
+        tap_code16(tap_code);
+        last_mod = 10;
+    } else {
+        tap_timer = timer_read();
+        last_mod = id;
+        register_code(hold_code);
+    }
 }
 
 void mod_lift(uint16_t tap_code, uint16_t hold_code, int id) {
     unregister_code(hold_code);
-    if (last_mod == id && timer_elapsed(tap_timers[id]) < TAPPING_TERM) {
-      tap_code16(tap_code);
-      last_mod = -1;
+    if (last_mod == id && timer_elapsed(tap_timer) < TAPPING_TERM) {
+        tap_code16(tap_code);
+        last_mod = 10;
     }
 }
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  switch (keycode) {
-    case DVORAK:
-      if (record->event.pressed) {
-        set_single_persistent_default_layer(_DVORAK);
-      }
-      return false;
-      break;
+    switch (keycode) {
+
+case KC_DVORAK:
+if (record->event.pressed) {
+    set_single_persistent_default_layer(_DVORAK);
+}
+return true;
+break;
+
+case KC_QWERTY:
+if (record->event.pressed) {
+    set_single_persistent_default_layer(_QWERTY);
+}
+return true;
+break;
 
 case KC_T_LALT:
 if (record->event.pressed) {
-  mod_press(KC_LALT, 0);
- } else {
-  mod_lift(S(KC_9), KC_LALT, 0);
- }
+    mod_press(S(KC_9), KC_LALT, 0);
+} else {
+    mod_lift(S(KC_9), KC_LALT, 0);
+}
 return false;
 break;
 case KC_T_RALT:
 if (record->event.pressed) {
-  mod_press(KC_RALT, 1);
- } else {
-  mod_lift(S(KC_0), KC_RALT, 1);
- }
+    mod_press(S(KC_0), KC_RALT, 1);
+} else {
+    mod_lift(S(KC_0), KC_RALT, 1);
+}
 return false;
 break;
 
 case KC_T_LGUI:
 if (record->event.pressed) {
-  mod_press(KC_LGUI, 2);
- } else {
-  mod_lift(KC_GRAVE, KC_LGUI, 2);
- }
+    mod_press(KC_GRAVE, KC_LGUI, 2);
+} else {
+    mod_lift(KC_GRAVE, KC_LGUI, 2);
+}
 return false;
 break;
 case KC_T_RGUI:
 if (record->event.pressed) {
-  mod_press(KC_RGUI, 3);
- } else {
-  mod_lift(KC_BSLASH, KC_RGUI, 3);
- }
+    mod_press(KC_BSLASH, KC_RGUI, 3);
+} else {
+    mod_lift(KC_BSLASH, KC_RGUI, 3);
+}
 return false;
 break;
 
 case KC_T_LCTL:
 if (record->event.pressed) {
-  mod_press(KC_LCTL, 4);
- } else {
-  mod_lift(KC_LBRACKET, KC_LCTL, 4);
- }
+    mod_press(KC_LBRACKET, KC_LCTL, 4);
+} else {
+    mod_lift(KC_LBRACKET, KC_LCTL, 4);
+}
 return false;
 break;
 case KC_T_RCTL:
 if (record->event.pressed) {
-  mod_press(KC_RCTL, 5);
- } else {
-  mod_lift(KC_RBRACKET, KC_RCTL, 5);
- }
+    mod_press(KC_RBRACKET, KC_RCTL, 5);
+} else {
+    mod_lift(KC_RBRACKET, KC_RCTL, 5);
+}
 return false;
 break;
 
 case KC_T_LSFT:
 if (record->event.pressed) {
-  mod_press(KC_LSFT, 6);
- } else {
-  mod_lift(KC_EQUAL, KC_LSFT, 6);
- }
+    mod_press(KC_EQUAL, KC_LSFT, 6);
+} else {
+    mod_lift(KC_EQUAL, KC_LSFT, 6);
+}
 return false;
 break;
 case KC_T_RSFT:
 if (record->event.pressed) {
-  mod_press(KC_RSFT, 7);
- } else {
-  mod_lift(KC_MINUS, KC_RSFT, 7);
- }
+    mod_press(KC_MINUS, KC_RSFT, 7);
+} else {
+    mod_lift(KC_MINUS, KC_RSFT, 7);
+}
 return false;
 break;
 
 case KC_T_LRSE:
 if (record->event.pressed) {
-  tap_timers[8] = timer_read();
-  last_mod = 8;
-  layer_on(_RISE);
- } else {
-  layer_off(_RISE);
-  if (last_mod == 8 && timer_elapsed(tap_timers[8]) < TAPPING_TERM) {
-    tap_code16(KC_DELETE);
-    last_mod = -1;
-  }
- }
+    tap_timer = timer_read();
+    last_mod = 8;
+    layer_on(_RISE);
+} else {
+    layer_off(_RISE);
+    if (last_mod == 8 && timer_elapsed(tap_timer) < TAPPING_TERM) {
+        tap_code16(KC_DELETE);
+        last_mod = 10;
+    }
+}
 return false;
 break;
 case KC_T_RRSE:
 if (record->event.pressed) {
-  tap_timers[9] = timer_read();
-  last_mod = 9;
-  layer_on(_RISE);
- } else {
-  layer_off(_RISE);
-  if (last_mod == 9 && timer_elapsed(tap_timers[9]) < TAPPING_TERM) {
-    tap_code16(KC_SLASH);
-    last_mod = -1;
-  }
- }
+    tap_timer = timer_read();
+    last_mod = 9;
+    layer_on(_RISE);
+} else {
+    layer_off(_RISE);
+    if (last_mod == 9 && timer_elapsed(tap_timer) < TAPPING_TERM) {
+        tap_code16(KC_SLASH);
+        last_mod = 10;
+    }
+}
+return false;
+break;
+
+case KC_EZSHFT:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LSFT);
+    last_mod = 10;
+}
+return false;
+break;
+case KC_EZCTRL:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LCTL);
+    last_mod = 10;
+}
+return false;
+break;
+case KC_EZALT:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LALT);
+    last_mod = 10;
+}
+return false;
+break;
+case KC_EZGUI:
+if (record->event.pressed) {
+    set_oneshot_mods(MOD_LGUI);
+    last_mod = 10;
+}
 return false;
 break;
 
 case KC_EZRGHT:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_RGHT));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_RGHT));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
 case KC_EZLEFT:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_LEFT));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_LEFT));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
 case KC_EZDOWN:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_DOWN));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_DOWN));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
 case KC_EZUP:
 if (record->event.pressed) {
-  register_code(KC_LCTL);
-  tap_code16(S(KC_UP));
-  unregister_code(KC_LCTL);
-  last_mod = -1;
- }
+    register_code(KC_LCTL);
+    tap_code16(S(KC_UP));
+    unregister_code(KC_LCTL);
+    last_mod = 10;
+}
 return false;
 break;
+
 case KC_EZUNDO:
 if (record->event.pressed) {
-  tap_code16(C(KC_Z));
-  last_mod = -1;
+    tap_code16(C(KC_Z));
+    last_mod = 10;
 }
 return false;
 break;
 case KC_EZCOPY:
 if (record->event.pressed) {
-  tap_code16(C(KC_C));
-  last_mod = -1;
+    tap_code16(C(KC_C));
+    last_mod = 10;
 }
 return false;
 break;
 case KC_EZCUT:
 if (record->event.pressed) {
-  tap_code16(C(KC_X));
-  last_mod = -1;
+    tap_code16(C(KC_X));
+    last_mod = 10;
 }
 return false;
 break;
 case KC_EZPSTE:
 if (record->event.pressed) {
-  tap_code16(C(KC_P));
-  last_mod = -1;
+    tap_code16(C(KC_V));
+    last_mod = 10;
 }
 return false;
 break;
 
-  }
-  last_mod = -1;
-  return true;
+case KC_COM:
+if (record->event.pressed) {
+    layer_on(_COMMAND);
+    set_oneshot_layer(_COMMAND, ONESHOT_START);
+    last_mod = 10;
+} else {
+    clear_oneshot_layer_state (ONESHOT_PRESSED);
+}
+return false;
+break;
+
+case KC_USER:
+if (record->event.pressed) {
+    send_string("mhostley");
+    last_mod = 10;
+}
+return true;
+break;
+case KC_EMAIL:
+if (record->event.pressed) {
+    send_string("mhostley@gmail.com");
+    last_mod = 10;
+}
+return true;
+break;
+case KC_NAME:
+if (record->event.pressed) {
+    send_string("Samuel Jahnke");
+    last_mod = 10;
+}
+return true;
+break;
+case KC_DIR:
+if (record->event.pressed) {
+    send_string("home/mhostley/");
+    last_mod = 10;
+}
+return true;
+break;
+
+}
+last_mod = 10;
+return true;
 }
diff --git a/keyboards/planck/keymaps/tom/config.h b/keyboards/planck/keymaps/tom/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/tom/keymap.c b/keyboards/planck/keymaps/tom/keymap.c
new file mode 100644 (file)
index 0000000..abd7c8a
--- /dev/null
@@ -0,0 +1,297 @@
+/* Copyright 2015-2017 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/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _COLEMAK,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _PLOVER,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  PLOVER,
+  BACKLIT,
+  EXT_PLV
+};
+
+#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  |   ;  |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |  Up  |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise |   /  | 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_ENT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   KC_RSFT,
+    BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |  |   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home |  End |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Vol- | Vol+ |Brite-|Brite+|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+    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_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, KC_QUOT,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END,  _______,
+    _______, _______, _______, _______, _______, _______, _______, _______,    KC_VOLD,    KC_VOLU, KC_BRMD, KC_BRMU
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  |  \   |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Up |Pg Dn |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Vol- | Vol+ |Brite-|Brite+|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSLS,
+    KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_QUOT,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_BRMD, KC_BRMU
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|      |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+    _______, RESET,   DEBUG,   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD,  RGB_VAI, RGB_VAD, KC_DEL ,
+    _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  _______,  _______, _______, _______,
+    _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  TERM_ON, TERM_OFF, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______, _______
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        print("mode just switched to qwerty and this is a huge string\n");
+        set_single_persistent_default_layer(_QWERTY);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+        #ifdef KEYBOARD_planck_rev5
+          PORTE &= ~(1<<6);
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+        #ifdef KEYBOARD_planck_rev5
+          PORTE |= (1<<6);
+        #endif
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+  }
+  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 dip_update(uint8_t index, bool active) {
+  switch (index) {
+    case 0:
+      if (active) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_song);
+        #endif
+        layer_on(_ADJUST);
+      } else {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(plover_gb_song);
+        #endif
+        layer_off(_ADJUST);
+      }
+      break;
+    case 1:
+      if (active) {
+        muse_mode = true;
+      } else {
+        muse_mode = false;
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+        #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;
+  }
+}
+
+void rgb_matrix_indicators_user(void) {
+  #ifdef RGB_MATRIX_ENABLE
+  rgb_led led;
+  switch (biton32(layer_state)) {
+    case _RAISE:
+      for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+        led = g_rgb_leds[i];
+        if ( led.modifier ) {
+          rgb_matrix_set_color(i, 0x6B, 0x00, 0x80);
+        } else {
+          rgb_matrix_set_color(i, 0x00, 0xFF, 0x00);
+        }
+      }
+      break;
+
+    case _LOWER:
+      for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+        led = g_rgb_leds[i];
+        if ( led.modifier ) {
+          rgb_matrix_set_color(i, 0xFF, 0xA5, 0x00);
+        } else {
+          rgb_matrix_set_color(i, 0x00, 0x67, 0xC7);
+        }
+      }
+      break;
+
+    case _ADJUST:
+      for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+        rgb_matrix_set_color(i, 0xFF, 0x99, 0x00);
+      }
+      rgb_matrix_set_color(1, 0xFF, 0x00, 0x00);
+      break;
+
+    default:
+      break;
+  }
+  #endif
+}
diff --git a/keyboards/planck/keymaps/tom/readme.md b/keyboards/planck/keymaps/tom/readme.md
new file mode 100644 (file)
index 0000000..7e31e2a
--- /dev/null
@@ -0,0 +1,31 @@
+# tomholford's layout
+
+This layout is data-driven: I installed [WhatPulse](https://whatpulse.org/) a few months ago and generated a heatmap of the most frequently used keys. I also optimized for my most-used programming languages, and muscle memory.
+
+## Changes from Default
+
+### QWERTY
+
+- swap escape and tab
+- rearrange arrows in original layout
+- swap rshift and Enter
+- map / to original location of left arrow key
+
+### RAISE
+
+- move backslash to backspace
+- map quote to original location from qwerty layer
+- map brightness up / down to original location of left and up arrows
+- map volume up / down to original location of down and right arrows
+
+### LOWER
+
+- move pipe to backspace
+- map quote to original location from qwerty layer
+- map brightness up / down to original location of left and up arrows
+- map volume up / down to original location of down and right arrows
+
+
+## RGB LED
+
+- Illuminate when pressing RAISE, LOWER, or ADJUST ([source](https://www.reddit.com/r/olkb/comments/8wvk8s/custom_rgb_configuration_by_keycodelayer/))
diff --git a/keyboards/planck/keymaps/tom/rules.mk b/keyboards/planck/keymaps/tom/rules.mk
new file mode 100644 (file)
index 0000000..dcf16be
--- /dev/null
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/vxid/config.h b/keyboards/planck/keymaps/vxid/config.h
new file mode 100644 (file)
index 0000000..6f70f09
--- /dev/null
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/planck/keymaps/vxid/keymap.c b/keyboards/planck/keymaps/vxid/keymap.c
new file mode 100644 (file)
index 0000000..51d1daa
--- /dev/null
@@ -0,0 +1,49 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+  _QWERTY,
+  _LOWER,
+  _RAISE,
+  _ADJUST
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_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_ENT,
+    KC_LSFT, KC_Z,    KC_X,    KC_C,  KC_V,  KC_B,    KC_N,   KC_M,   KC_COMM, KC_DOT,  KC_SLSH, KC_BSLS,
+    KC_LCTL, KC_LGUI, KC_LALT, LOWER, RAISE, KC_MINS, KC_SPC, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT, KC_GRV
+),
+
+[_LOWER] = LAYOUT_planck_grid(
+    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   _______, _______, _______, _______, _______,  _______, KC_DEL,
+    _______, KC_F5,   KC_F6,   KC_F7,   KC_F8,   _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT, _______, _______,
+    _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______,  _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,  _______, _______
+),
+
+[_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_BSPC,
+    _______, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_ADJUST] = LAYOUT_planck_grid(
+    RESET,   DEBUG,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/planck/keymaps/vxid/readme.md b/keyboards/planck/keymaps/vxid/readme.md
new file mode 100644 (file)
index 0000000..9e0ae33
--- /dev/null
@@ -0,0 +1,13 @@
+# vxid planck layout
+
+## Layout
+
+This planck layout aims at proviging most symbols on the base layer while remaining usable.
+The minus and space keys become alt and gui modifiers when pressed.
+Arrow keys are located on hjkl on the lower layer.
+
+## Building
+
+```
+    make planck/rev6:vxid:dfu-util
+```
index 6d4843ff3ee5f51bc936588b2232291576645e74..f03e469d709bb576d3ec31cf81ed4cde635f6f4e 100644 (file)
@@ -28,32 +28,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* QwertSplitly
  * ,-----------------------------------------------------------------------------------.
- * |   1  |   2  |   3  |   4  |   5  |   -  |   =  |   6  |   7  |   8  |   9  |   0  |
+ * |   1  |   2  |   3  |   4  |   5  |   =  |   `  |   6  |   7  |   8  |   9  |   0  |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |   Q  |   W  |   E  |   R  |   T  |   [  |   ]  |   Y  |   U  |   I  |   O  |   P  |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
- * |   A  |   S  |   D  |   F  |   G  |   `  |   '  |   H  |   J  |   K  |   L  |   ;  |
+ * |   A  |   S  |   D  |   F  |   G  |   -  |   '  |   H  |   J  |   K  |   L  |   ;  |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |LShift|   Z  |   X  |   C  |   V  |   B  |   \  |   /  |   N  |   M  |   ,  |./RSft|
+ * |LShift|   Z  |   X  |   C  |   V  |   \  |   /  |   B  |   N  |   M  |   ,  |./RSft|
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |ESC/fn|LCtrl | LOpt | LCmd |Space | Tab  | BkSp |Space |En/Cmd|<-/fn |CRSR v|CRSR->|
  * `-----------------------------------------------------------------------------------'
  */
 [L_QWERTSPLITLY] = LAYOUT_preonic_grid( \
-  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINUS,KC_EQL,  KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    \
+  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_EQL  ,KC_GRAVE,KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    \
   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_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_GRAVE,KC_QUOTE,KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, \
-  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_BSLS, KC_SLASH,KC_N,    KC_M,    KC_COMM, MT_RSDOT,\
+  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_MINUS,KC_QUOTE,KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_BSLS, KC_SLASH,KC_B,    KC_N,    KC_M,    KC_COMM, MT_RSDOT,\
   LT_FNESC,KC_LCTL, KC_LALT, KC_LGUI, KC_SPC,  KC_TAB,  KC_BSPC, KC_SPC,  MT_RGENT,LT_FNLFT,KC_DOWN, KC_RIGHT \
 ),
 
 /* Fn
  * ,-----------------------------------------------------------------------------------.
- * |  F1  |  F2  |  F3  |  F4  |  F5  | Vol- | Vol+ |  F6  |  F7  |  F8  |  F9  |  F10 |
+ * |  F1  |  F2  |  F3  |  F4  |  F5  | Vol+ | Mute |  F6  |  F7  |  F8  |  F9  |  F10 |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
  * |  F11 |  F12 |  F13 |  F14 |  F15 |Track-|Track+|M:WhUp|M:Lclk| M:Up |M:Rclk| PgUp |
  * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Caps |^LPad |^DashB|^Help |^Drawr| Mute | |>|| |M:WhDn|M:Left|M:Down|M:Rght| PgDn |
+ * | Caps |^LPad |^DashB|^Help |^Drawr| Vol- | |>|| |M:WhDn|M:Left|M:Down|M:Rght| PgDn |
  * |------+------+------+------+------+------|------+------+------+------+------+------|
  * |RShift|^Menu |^SMenu|^Dock |^Tools|^Notif|  Ins |M:Slow|M:Norm|M:Fast| Home | End  |
  * |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -61,9 +61,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * `-----------------------------------------------------------------------------------'
  */
 [L_FN] = LAYOUT_preonic_grid( \
-  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_VOLD, KC_VOLU, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  \
+  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_VOLU, KC_MUTE, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  \
   KC_F11,  KC_F12,  KC_F13,  KC_F14,  KC_F15,  KC_MRWD, KC_MFFD, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_PGUP, \
-  KC_CAPS, MF_LPAD, MF_DASH, MF_HELP, MF_DRWR, KC_MUTE, KC_MPLY, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_PGDN, \
+  KC_CAPS, MF_LPAD, MF_DASH, MF_HELP, MF_DRWR, KC_VOLD, KC_MPLY, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_PGDN, \
   KC_RSFT, MF_MENU, MF_STAT, MF_DOCK, MF_TOOL, MF_NOTI, KC_INS,  KC_ACL0, KC_ACL1, KC_ACL2, KC_HOME, KC_END,  \
   _______, KC_RCTL, KC_RALT, KC_RGUI, _______, LS_TAB,  KC_DEL,  _______, KC_PENT, _______, KC_UP,   KC_LEFT  \
 )
@@ -93,14 +93,12 @@ void matrix_init_user(void) {
 
 void startup_user()
 {
-    _delay_ms(20); // gets rid of tick
     PLAY_SONG(tone_startup);
 }
 
 void shutdown_user()
 {
     PLAY_SONG(tone_goodbye);
-    _delay_ms(150);
     stop_all_notes();
 }
 
index a1bda9f6a2b300fc51762e00084227b13fe062ad..4c1c62721146f5b5711946201f03dac7185b161e 100644 (file)
@@ -1,4 +1,4 @@
-# Bucktooth v1.0 (Mac)
+# Bucktooth v2.0 (Mac)
 
 Bucktooth is an alternate layout that pushes the letters to the edges and puts most punctuation in the center. It's derived in part from my experience with Ergodox boards. I call the main layer layout QWERTSplitlY, you may notice the right side punctuation moving to the center and the control keys missing from the left.
 
@@ -6,13 +6,13 @@ Bucktooth is an alternate layout that pushes the letters to the edges and puts m
 
      QwertSplitly
      ,-----------------------------------------------------------------------------------.
-     |   1  |   2  |   3  |   4  |   5  |   -  |   =  |   6  |   7  |   8  |   9  |   0  |
+     |   1  |   2  |   3  |   4  |   5  |   +  |   `  |   6  |   7  |   8  |   9  |   0  |
      |------+------+------+------+------+------+------+------+------+------+------+------|
      |   Q  |   W  |   E  |   R  |   T  |   [  |   ]  |   Y  |   U  |   I  |   O  |   P  |
      |------+------+------+------+------+-------------+------+------+------+------+------|
-     |   A  |   S  |   D  |   F  |   G  |   `  |   '  |   H  |   J  |   K  |   L  |   ;  |
+     |   A  |   S  |   D  |   F  |   G  |   -  |   '  |   H  |   J  |   K  |   L  |   ;  |
      |------+------+------+------+------+------|------+------+------+------+------+------|
-     |LShift|   Z  |   X  |   C  |   V  |   B  |   \  |   /  |   N  |   M  |   ,  |./RSft|
+     |LShift|   Z  |   X  |   C  |   V  |   \  |   /  |   B  |   N  |   M  |   ,  |./RSft|
      |------+------+------+------+------+------+------+------+------+------+------+------|
      |ESC/fn|LCtrl | LOpt | LCmd |Space | Tab  | BkSp |Space |En/Cmd|<-/fn |CRSR v|CRSR->|
      `-----------------------------------------------------------------------------------'
@@ -24,6 +24,12 @@ That left shift is the only control or modifier key on the top four rows. All th
 
 With all control keys on the bottom row, the ESC key now lives in the bottom left and on my keyboard I actually put a very heavy keyswitch in that space to keep me from hitting it accidentally instead of ctrl. Hold it down and it becomes fn. I usually hit it with my whole hand since it is in the corner, without moving my fingers down to it.
 
+## Revision 2 Changes
+
+The move of B to the right side of the keyboard may be controversial but has felt more and more comfortable to me. Again if you split a staggered layout keyboard down a straight line B has more in common with Y than T. I don't understand breaking the board into left and right on anything but a vertical line despite the long history of bringing the staggered layout slewing left.
+
+Revision 2 also changes the positions of -, =, and ~ for better compatibility with sculpted profile keysets which offer a Dvorak set option that provides the middle row dash because a middle row backtick/tilde is not found anywhere.
+
 ## Function Layer
 
 There are no raise and lower or multiple function pages. The Preonic has enough keys to avoid more than a single function page, and I prefer to have spacebars for both thumbs so the "Bucktooth" name comes from the typical keyset with darker function keys and lighter alphas and space keys giving the keyboard fang-like appearance where the two spaces are.
@@ -31,11 +37,11 @@ There are no raise and lower or multiple function pages. The Preonic has enough
 
      Fn
      ,-----------------------------------------------------------------------------------.
-     |  F1  |  F2  |  F3  |  F4  |  F5  | Vol- | Vol+ |  F6  |  F7  |  F8  |  F9  |  F10 |
+     |  F1  |  F2  |  F3  |  F4  |  F5  | Vol+ | Mute |  F6  |  F7  |  F8  |  F9  |  F10 |
      |------+------+------+------+------+------+------+------+------+------+------+------|
      |  F11 |  F12 |  F13 |  F14 |  F15 |Track-|Track+|M:WhUp|M:Lclk| M:Up |M:Rclk| PgUp |
      |------+------+------+------+------+-------------+------+------+------+------+------|
-     | Caps |^LPad |^DashB|^Help |^Drawr| Mute | |>|| |M:WhDn|M:Left|M:Down|M:Rght| PgDn |
+     | Caps |^LPad |^DashB|^Help |^Drawr| Vol- | |>|| |M:WhDn|M:Left|M:Down|M:Rght| PgDn |
      |------+------+------+------+------+------|------+------+------+------+------+------|
      |RShift|^Menu |^SMenu|^Dock |^Tools|^Notif|  Ins |M:Slow|M:Norm|M:Fast| Home | End  |
      |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -50,6 +56,6 @@ The cursor keys are a design I stole from the old Commodore computers which had
 
 On Fn layer ZXCVB and SDFG keys I have set up the default key bindings for Mac OS Keyboard Focus keys since they are obscure and require FKeys mostly. They are pretty convenient for using the keyboard to search the menus, go to the dock, etc. Some like the one to jump to a window's toolbar and the one to jump to a window's accessory drawer are less commonly used.
 
-___
+---
 
-Contributed to QMK and released with the QMK license by J. Eric Mason, 3/16/2018
+Contributed to QMK and released with the QMK license by Jeri C. Mason, 3/16/2018 - Revision 2 2/26/2019
index 205351258267e5dc76ac485dd4a3aa1694b41ad0..40a9524b469df072978930c601b855eb4faa56a7 100644 (file)
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 #ifdef AUDIO_ENABLE
     #define STARTUP_SONG SONG(PREONIC_SOUND)
@@ -38,5 +35,3 @@
 
 /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
 //#define MIDI_TONE_KEYCODE_OCTAVES 2
-
-#endif
\ No newline at end of file
diff --git a/keyboards/preonic/keymaps/juno/config.h b/keyboards/preonic/keymaps/juno/config.h
new file mode 100644 (file)
index 0000000..6387deb
--- /dev/null
@@ -0,0 +1,37 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+    #define STARTUP_SONG SONG(PREONIC_SOUND)
+    // #define STARTUP_SONG SONG(NO_SOUND)
+
+    #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+                                  SONG(COLEMAK_SOUND), \
+                                  SONG(DVORAK_SOUND) \
+                                }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * 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
\ No newline at end of file
diff --git a/keyboards/preonic/keymaps/juno/keymap.c b/keyboards/preonic/keymaps/juno/keymap.c
new file mode 100644 (file)
index 0000000..2e3152d
--- /dev/null
@@ -0,0 +1,313 @@
+/* Juno's Preonic Layout  */
+
+#include QMK_KEYBOARD_H
+
+enum preonic_layers {
+  _QWERTY,
+  _COLEMAK,
+  _DVORAK,
+  _LOWER,
+  _RAISE,
+  _ADJUST,
+    
+  _FN1,
+  _DPAD
+};
+
+enum preonic_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  BACKLIT,
+    
+  FN1,
+  DP_ON,
+  DP_OFF
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | FN1  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_preonic_grid( \
+  KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL,  \
+  MO(_FN1),KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_preonic_grid( \
+  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_DEL,  \
+  KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT,  \
+  BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_preonic_grid( \
+  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_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL,  \
+  KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
+  KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
+  BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_preonic_grid( \
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,  \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, KC_HOME, KC_END, _______,  \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY  \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_preonic_grid( \
+  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_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL,  \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY  \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = 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,  \
+  _______, RESET,   DEBUG,   _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL,  \
+  _______, _______, MU_MOD,  AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
+  _______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  \
+),
+
+/* Function (personal function layer)
+ * ,-----------------------------------------------------------------------------------.
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      | Vol- |      | Vol+ |      |      |      | PgUp |  Up  | PgDn | PScr | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |      |      |      | Home | Left | Down |Right | Ins  | Del  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Prev | Play | Next | Brite|      | End  |      | Vol- | Vol+ | Mute |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  | Caps |      |    Space    |      | DP_ON|      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FN1] = LAYOUT_preonic_grid( \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, KC_VOLD, _______, KC_VOLU, _______, _______, _______, KC_PGUP, KC_UP,   KC_PGDN, KC_PSCR, KC_DEL , \
+  _______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS,  KC_DEL , \
+  KC_LSFT, KC_MPRV, KC_MPLY, KC_MNXT, BACKLIT, _______, KC_END,  _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, \
+  KC_LCTL, KC_LGUI, KC_LALT, KC_CAPS, _______, KC_SPC,  KC_SPC,  _______, DP_ON,   _______, _______, _______  \
+),
+
+/* DPAD layer, for active arrow cluster at the bottom right corner
+ * Use TG() to enable, but FUNC() to disable (defined at end of file)
+ * All layers clearing required
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |  Up  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  |      |Lower |    Space    |Raise |DP_OFF| Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DPAD] = LAYOUT_preonic_grid( \
+  KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL,  \
+  KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_UP,   KC_ENT , \
+  KC_LCTL, KC_LGUI, KC_LALT, _______, LOWER,   KC_SPC,  KC_SPC,  RAISE,   DP_OFF,  KC_LEFT, KC_DOWN, KC_RGHT  \
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+  float plover_song[][2]     = SONG(PLOVER_SOUND);
+  float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+  
+  float caps_song_on[][2]      = SONG(NUM_LOCK_ON_SOUND);
+  float caps_song_off[][2]     = SONG(SCROLL_LOCK_ON_SOUND);
+
+  float dpad_song_on[][2]      = SONG(ZELDA_PUZZLE);
+  float dpad_song_off[][2]     = SONG(SONIC_RING);
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+        case QWERTY:
+          if (record->event.pressed) {
+            set_single_persistent_default_layer(_QWERTY);
+          }
+          return false;
+          break;
+        case COLEMAK:
+          if (record->event.pressed) {
+            set_single_persistent_default_layer(_COLEMAK);
+          }
+          return false;
+          break;
+        case DVORAK:
+          if (record->event.pressed) {
+            set_single_persistent_default_layer(_DVORAK);
+          }
+          return false;
+          break;
+        case LOWER:
+          if (record->event.pressed) {
+            layer_on(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_LOWER);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          return false;
+          break;
+        case RAISE:
+          if (record->event.pressed) {
+            layer_on(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          } else {
+            layer_off(_RAISE);
+            update_tri_layer(_LOWER, _RAISE, _ADJUST);
+          }
+          return false;
+          break;
+        case BACKLIT:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+            #ifdef BACKLIGHT_ENABLE
+              backlight_step();
+            #endif
+            PORTE &= ~(1<<6);
+          } else {
+            unregister_code(KC_RSFT);
+            PORTE |= (1<<6);
+          }
+          return false;
+          break;
+                
+                
+                
+               // Additional personal custom functions   
+
+               case KC_CAPS:
+                       if (record->event.pressed) {
+                               #ifdef AUDIO_ENABLE
+                               if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+                                       PLAY_SONG(caps_song_off);
+                               } else {
+                                       PLAY_SONG(caps_song_on);
+                               }
+                               #endif
+                       }
+                       return true; // process the actual function of Caps Lock
+                       //break;
+                       
+               case DP_ON:
+                       if (record->event.pressed) {
+                               
+                       } else {
+                               // activated upon release
+                               #ifdef AUDIO_ENABLE
+                               PLAY_SONG(dpad_song_on);
+                               #endif
+                               
+                               layer_off(_FN1);
+                               layer_on(_DPAD);
+                       }
+                       
+               case DP_OFF:
+                       if (record->event.pressed) {
+                               // deactivated upon pressdown
+                               #ifdef AUDIO_ENABLE     
+                               PLAY_SONG(dpad_song_off);
+                               #endif
+                               
+                               //layer_off(_FN1); // do not put in this line
+                               layer_off(_DPAD);       
+                       }
+                
+      }
+    return true;
+};
diff --git a/keyboards/preonic/keymaps/juno/readme.md b/keyboards/preonic/keymaps/juno/readme.md
new file mode 100644 (file)
index 0000000..e911968
--- /dev/null
@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's
\ No newline at end of file
diff --git a/keyboards/preonic/keymaps/juno/rules.mk b/keyboards/preonic/keymaps/juno/rules.mk
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/keyboards/primekb/prime_e/config.h b/keyboards/primekb/prime_e/config.h
new file mode 100644 (file)
index 0000000..331993f
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+Copyright 2019 Holten Campbell
+
+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       0x5052
+#define PRODUCT_ID      0x0051
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    PrimeKB
+#define PRODUCT         Prime_E
+#define DESCRIPTION     Ergo_45
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS { E6, C7, B5, B4 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, D6, D4, D5, D3, D2, D1, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 5
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#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*13*4*2)) = (35+416)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 451
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 573    // 1024-DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/primekb/prime_e/info.json b/keyboards/primekb/prime_e/info.json
new file mode 100644 (file)
index 0000000..0cca275
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "keyboard_name": "Prime_E",
+  "url": "https://www.primekb.com",
+  "maintainer": "holtenc",
+  "width": 13,
+  "height": 4,
+  "layouts": {
+      "LAYOUT": {
+          "layout": [{"x":0,"y":0,"w":1,"h":1}, {"x":1,"y":0,"w":1,"h":1}, {"x":2,"y":0,"w":1,"h":1}, {"x":3,"y":0,"w":1,"h":1}, {"x":4,"y":0,"w":1,"h":1}, {"x":5,"y":0,"w":1,"h":1}, {"x":7,"y":0,"w":1,"h":1}, {"x":8,"y":0,"w":1,"h":1}, {"x":9,"y":0,"w":1,"h":1}, {"x":10,"y":0,"w":1,"h":1}, {"x":11,"y":0,"w":1,"h":1}, {"x":12,"y":0,"w":1,"h":1}, {"x":13,"y":0,"w":1,"h":1},
+                                        {"x":0,"y":1,"w":1.25,"h":1}, {"x":1.25,"y":1,"w":1,"h":1}, {"x":2.25,"y":1,"w":1,"h":1}, {"x":3.25,"y":1,"w":1,"h":1}, {"x":4.25,"y":1,"w":1,"h":1}, {"x":5.25,"y":1,"w":1,"h":1}, {"x":7.25,"y":1,"w":1,"h":1}, {"x":8.25,"y":1,"w":1,"h":1}, {"x":9.25,"y":1,"w":1,"h":1}, {"x":10.25,"y":1,"w":1,"h":1}, {"x":11.25,"y":1,"w":1,"h":1}, {"x":12.25,"y":1,"w":1.75,"h":1}, 
+                                        {"x":0,"y":2,"w":1.75,"h":1}, {"x":1.75,"y":2,"w":1,"h":1}, {"x":2.75,"y":2,"w":1,"h":1}, {"x":3.75,"y":2,"w":1,"h":1}, {"x":4.75,"y":2,"w":1,"h":1}, {"x":5.75,"y":2,"w":1,"h":1}, {"x":6.75,"y":2,"w":1,"h":1}, {"x":7.75,"y":2,"w":1,"h":1}, {"x":8.75,"y":2,"w":1,"h":1}, {"x":9.75,"y":2,"w":1,"h":1}, {"x":10.75,"y":2,"w":1,"h":1}, {"x":11.75,"y":2,"w":1,"h":1}, {"x":12.75,"y":2,"w":1.25,"h":1},
+                                        {"x":0,"y":3,"w":1.25,"h":1}, {"x":1.25,"y":3,"w":1.25,"h":1}, {"x":3.5,"y":3,"w":1.25,"h":1}, {"x":4.75,"y":3,"w":2,"h":1}, {"x":6.75,"y":3,"w":2.25,"h":1}, {"x":9,"y":3,"w":1.25,"h":1}, {"x":11.5,"y":3,"w":1.25,"h":1}, {"x":12.75,"y":3,"w":1.25,"h":1}
+                                        ]
+      }
+  }
+}
diff --git a/keyboards/primekb/prime_e/keymaps/default/keymap.c b/keyboards/primekb/prime_e/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..0aab745
--- /dev/null
@@ -0,0 +1,74 @@
+/* Copyright 2018 Holten Campbell
+ *
+ * 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] = {
+    LAYOUT(
+               KC_ESC,   KC_Q,     KC_W,     KC_E,   KC_R,    KC_T,          KC_Y,   KC_U,     KC_I, KC_O,    KC_P,    KC_DEL, KC_BSPC,
+               KC_TAB,   KC_A,     KC_S,     KC_D,   KC_F,    KC_G,          KC_H,   KC_J,     KC_K, KC_L,    KC_QUOT, KC_ENT,
+               KC_LSFT,  KC_Z,     KC_X,     KC_C,   KC_V,    KC_B,          MO(1),  KC_N,     KC_M, KC_COMM, KC_DOT,  KC_SLSH, KC_LSFT,
+               KC_LCTL,  KC_LALT,                    KC_RBRC, MO(1),           KC_SPC, KC_MINS,                          KC_LGUI, TO(1)
+    )
+
+};
+
+void matrix_init_user(void) {
+  // set CapsLock LED to output and low
+  setPinOutput(B1);
+  writePinHigh(B1);
+  // set NumLock LED to output and low
+  setPinOutput(B2);
+  writePinHigh(B2);
+  // set ScrollLock LED to output and low
+  setPinOutput(B3);
+  writePinHigh(B3);
+}
+
+void matrix_scan_user(void) {
+
+}
+
+
+void led_set_user(uint8_t usb_led) {
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    writePinHigh(B2);
+  } else {
+    writePinLow(B2);
+  }
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinHigh(B1);
+  } else {
+    writePinLow(B1);
+  }
+/*
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinHigh(B3);
+  } else {
+    writePinLow(B3);
+  }*/
+
+}
+
+//function for layer indicator LED
+uint32_t layer_state_set_user(uint32_t state)
+{
+    if (biton32(state) == 1) {
+    writePinHigh(B3);
+       } else {
+               writePinLow(B3);
+    }
+    return state;
+}
diff --git a/keyboards/primekb/prime_e/keymaps/default/readme.md b/keyboards/primekb/prime_e/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..5266526
--- /dev/null
@@ -0,0 +1,2 @@
+# The default keymap for Prime_E
+This is the default keymap for Prime_E.
\ No newline at end of file
diff --git a/keyboards/primekb/prime_e/keymaps/via/keymap.c b/keyboards/primekb/prime_e/keymaps/via/keymap.c
new file mode 100644 (file)
index 0000000..8b5b138
--- /dev/null
@@ -0,0 +1,73 @@
+/* Copyright 2018 Holten Campbell
+ *
+ * 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] = {
+    LAYOUT(
+               KC_ESC,   KC_Q,     KC_W,     KC_E,   KC_R,    KC_T,          KC_Y,   KC_U,     KC_I, KC_O,    KC_P,    KC_DEL, KC_BSPC,
+               KC_TAB,   KC_A,     KC_S,     KC_D,   KC_F,    KC_G,          KC_H,   KC_J,     KC_K, KC_L,    KC_QUOT, KC_ENT,
+               KC_LSFT,  KC_Z,     KC_X,     KC_C,   KC_V,    KC_B,          MO(1),  KC_N,     KC_M, KC_COMM, KC_DOT,  KC_SLSH, KC_LSFT,
+               KC_LCTL,  KC_LALT,                    KC_RBRC, MO(1),           KC_SPC, KC_MINS,                          KC_LGUI, TO(1)
+    )
+};
+
+void matrix_init_user(void) {
+  // set CapsLock LED to output and low
+  setPinOutput(B1);
+  writePinHigh(B1);
+  // set NumLock LED to output and low
+  setPinOutput(B2);
+  writePinHigh(B2);
+  // set ScrollLock LED to output and low
+  setPinOutput(B3);
+  writePinHigh(B3);
+}
+
+void matrix_scan_user(void) {
+
+}
+
+
+void led_set_user(uint8_t usb_led) {
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    writePinHigh(B2);
+  } else {
+    writePinLow(B2);
+  }
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinHigh(B1);
+  } else {
+    writePinLow(B1);
+  }
+/*
+  if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
+    writePinHigh(B3);
+  } else {
+    writePinLow(B3);
+  }*/
+
+}
+
+//function for layer indicator LED
+uint32_t layer_state_set_user(uint32_t state)
+{
+    if (biton32(state) == 1) {
+    writePinHigh(B3);
+       } else {
+               writePinLow(B3);
+    }
+    return state;
+}
diff --git a/keyboards/primekb/prime_e/keymaps/via/readme.md b/keyboards/primekb/prime_e/keymaps/via/readme.md
new file mode 100644 (file)
index 0000000..bbd56c0
--- /dev/null
@@ -0,0 +1,2 @@
+# The VIA keymap for Prime_E
+This keymap is for compatibility with the VIA configurator.
\ No newline at end of file
diff --git a/keyboards/primekb/prime_e/keymaps/via/rules.mk b/keyboards/primekb/prime_e/keymaps/via/rules.mk
new file mode 100644 (file)
index 0000000..93b2e70
--- /dev/null
@@ -0,0 +1,85 @@
+# 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 = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes       # 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)
+
+# This is the VIA magic
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+SRC += keyboards/wilba_tech/wt_main.c
\ No newline at end of file
diff --git a/keyboards/primekb/prime_e/prime_e.c b/keyboards/primekb/prime_e/prime_e.c
new file mode 100644 (file)
index 0000000..bd51ce0
--- /dev/null
@@ -0,0 +1,22 @@
+/* Copyright 2019 Holten Campbell
+ *
+ * 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 "prime_e.h"
+
+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/primekb/prime_e/prime_e.h b/keyboards/primekb/prime_e/prime_e.h
new file mode 100644 (file)
index 0000000..4af70fb
--- /dev/null
@@ -0,0 +1,34 @@
+/* Copyright 2019 Holten Campbell
+ *
+ * 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( \
+       K000, K001, K002, K003, K004, K005,             K006, K007, K008, K009, K010, K011, K012, \
+       K100, K101, K102, K103, K104, K105,             K106, K107, K108, K109, K110, K112, \
+       K200, K201, K202, K203, K204, K205,             K206, K207, K208, K209, K210, K211, K212, \
+       K300, K301,                     K303, K304,             K306, K308,                             K311, K312 \
+) { \
+       { K000,  K001,  K002,  K003,  K004,  K005,  K006,  K007,  K008,  K009,  K010,  K011,  K012 }, \
+       { K100,  K101,  K102,  K103,  K104,  K105,  K106,  K107,  K108,  K109,  K110,  KC_NO, K112 }, \
+       { K200,  K201,  K202,  K203,  K204,  K205,  K206,  K207,  K208,  K209,  K210,  K211,  K212 }, \
+       { K300,  K301,  KC_NO, K303,  K304,  KC_NO, K306,  KC_NO, K308,  KC_NO, KC_NO, K311,  K312 } \
+}
+
diff --git a/keyboards/primekb/prime_e/readme.md b/keyboards/primekb/prime_e/readme.md
new file mode 100644 (file)
index 0000000..6abe0be
--- /dev/null
@@ -0,0 +1,16 @@
+# Prime_E
+
+![Prime_E](https://imgur.com/7Rl4JOA.jpg)
+
+An ergonomic 45%. 
+
+Keyboard Maintainer: [Holtenc](https://github.com/holtenc/)  
+Hardware Supported: Prime_E PCB, ATMega32u4  
+Hardware Availability: Group Buy, Retail
+
+Make example for this keyboard (after setting up your build environment):
+
+    make prime_e:default
+    make prime_e:via (when using VIA configurator)
+
+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/primekb/prime_e/rules.mk b/keyboards/primekb/prime_e/rules.mk
new file mode 100644 (file)
index 0000000..313bf3b
--- /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 = yes      # 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 = yes            # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes       # 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 newline at end of file
index e7ffd3aa20136cb65f1de15631e8aaeb187cdaf3..a70a6b37265ec9e9b2ccb830f2b650cadba1b4c5 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 8399dff029ee4527ef25209263678787bef18d3b..8a558b158676ed493ff28dd2a1838f2c202851c2 100644 (file)
@@ -30,7 +30,7 @@ $ brew cask install crosspack-avr
 $ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
 ```
 
-In order to use the `./program` script, which can reboot the board into
+In order to use the `./util/atmega32a_program.py` script, which can reboot the board into
 the bootloader, you'll need Python 2 with PyUSB installed:
 
 ```
index 5c52e1d9b687ddaa781d82ef5f34f7016323b774..6b3403ed7c8976af83d8426d8aa941e79c609aa0 100644 (file)
@@ -15,7 +15,7 @@ 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 "bmini.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     [0] = KEYMAP(
diff --git a/keyboards/ps2avrGB/program b/keyboards/ps2avrGB/program
deleted file mode 100755 (executable)
index b777b91..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, Sebastian Kaim <sebb@sebb767.de>
-#
-# 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/>.
-
-from __future__ import print_function
-
-import os
-import sys
-import time
-import usb
-
-
-def checkForKeyboardInNormalMode():
-    """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found."""
-    return usb.core.find(idVendor=0x20A0, idProduct=0x422D)
-
-def checkForKeyboardInBootloaderMode():
-    """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise."""
-    return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None)
-
-def flashKeyboard(firmware_file):
-    """Calls bootloadHID to flash the given file to the device."""
-    print('Flashing firmware to device ...')
-    if os.system('bootloadHID -r "%s"' % firmware_file) == 0:
-        print('\nDone!')
-    else:
-        print('\nbootloadHID returned an error.')
-
-def printDeviceInfo(dev):
-    """Prints all infos for a given USB device"""
-    print('Device Information:')
-    print('  idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
-    print('  idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
-    print('Manufacturer: %s' % (dev.iManufacturer))
-    print('Serial: %s' % (dev.iSerialNumber))
-    print('Product: %s' % (dev.iProduct), end='\n\n')
-
-def sendDeviceToBootloaderMode(dev):
-    """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing."""
-    try:
-        dev.set_configuration()
-
-        request_type = usb.util.build_request_type(
-                usb.util.CTRL_OUT,
-                usb.util.CTRL_TYPE_CLASS,
-                usb.util.CTRL_RECIPIENT_DEVICE)
-
-        USBRQ_HID_SET_REPORT = 0x09
-        HID_REPORT_OPTION = 0x0301
-
-        dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5)
-    except usb.core.USBError:
-        # for some reason I keep getting USBError, but it works!
-        pass
-
-
-if len(sys.argv) < 2:
-    print('Usage: %s <firmware.hex>' % sys.argv[0])
-    sys.exit(1)
-
-kb = checkForKeyboardInNormalMode()
-
-if kb is not None:
-    print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='')
-    sendDeviceToBootloaderMode(kb)
-    print(' done.')
-    print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.")
-    print("      You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode")
-
-attempts = 12  # 60 seconds
-found = False
-for attempt in range(1, attempts + 1):
-    print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='')
-
-    if checkForKeyboardInBootloaderMode():
-        print('Found', end='\n\n')
-        flashKeyboard(sys.argv[1])
-        found = True
-        break
-    else:
-        print('Nothing.', end='')
-
-        if attempt != attempts:  # no need to wait on the last attempt
-            print(' Sleeping 5 seconds.', end='')
-            time.sleep(5)
-
-        # print a newline
-        print()
-
-if not found:
-    print("Couldn't find a flashable keyboard. Aborting.")
-    sys.exit(2)
-
index e83861e1f240e6cfbf5aa50b0c2a086163b20498..bf4998f0c2ef379bdd1043004c798dcf6014f997 100644 (file)
@@ -19,13 +19,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define KEYMAP_COMMON_H
 
 #include "quantum.h"
-
-#ifdef KEYBOARD_ps2avrGB_bfake
-  #include "bfake.h"
-#endif
-
-#ifdef KEYBOARD_ps2avrGB_bmini_x2
-  #include "bmini_x2.h"
-#endif
+#include "bmini.h"
 
 #endif
index 1be9edc24f88a77794ece3737b11721c21275cb7..95d287f7f419e89018f751cea8851519475fcad7 100644 (file)
@@ -47,4 +47,4 @@ CUSTOM_MATRIX = yes
 SRC = matrix.c i2c.c
 
 # programming options
-PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
index d150575c1a73bfa7f38a2786cacff56b69294ef7..2a3bf1819f0d5434ddc2bdb5d6b68c89151ce280 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
diff --git a/keyboards/redox/keymaps/fculpo/config.h b/keyboards/redox/keymaps/fculpo/config.h
new file mode 100644 (file)
index 0000000..bff76ae
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+Copyright 2018 Mattia Dal Ben <matthewdibi@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
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+//#define MASTER_RIGHT
+//#define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/redox/keymaps/fculpo/keymap.c b/keyboards/redox/keymaps/fculpo/keymap.c
new file mode 100644 (file)
index 0000000..b5aeca9
--- /dev/null
@@ -0,0 +1,92 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _SYMB 1
+#define _NAV 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  SYMB,
+  NAV,
+  ADJUST,
+};
+
+// Shortcut to make keymap more readable
+#define SYM_L   MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTES LCTL_T(KC_ESC)
+#define KC_CTQU RCTL_T(KC_QUOT)
+
+#define KC_NAGR LT(_NAV, KC_GRV)
+#define KC_NAMI LT(_NAV, KC_MINS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     KC_NAGR ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_NAMI ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_TAB  ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,SYM_L   ,                          SYM_L   ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_EQL  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_CTES ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,KC_LBRC ,                          KC_RBRC ,KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_SCLN ,KC_CTQU ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_LSFT ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_N    ,KC_M    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSFT ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     KC_BSLS ,KC_PPLS ,KC_PMNS ,KC_ALAS ,     KC_LGUI ,    KC_BSPC ,KC_DEL  ,        KC_ENT  ,KC_SPC  ,    KC_RALT ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  [_SYMB] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     _______ ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,                                            KC_F8   ,KC_F9   ,KC_F10  ,KC_F11  ,KC_F12  ,_______ ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_EXLM ,KC_AT   ,KC_LCBR ,KC_RCBR ,KC_PIPE ,KC_F6   ,                          KC_F7   ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,_______ ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_HASH ,KC_DLR  ,KC_LBRC ,KC_RBRC ,KC_GRV  ,_______ ,                          _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ ,_______ ,        _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        _______ ,_______ ,    KC_KP_0 ,     KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  [_NAV] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                                            _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ ,                          _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ ,                          _______ ,KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ ,        _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,     KC_BTN1 ,    KC_BTN2 ,_______ ,        _______ ,_______ ,    XXXXXXX ,     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  [_ADJUST] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     XXXXXXX ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,                                            KC_F6   ,KC_F7   ,KC_F8   ,KC_F9   ,KC_F10  ,KC_F11  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,RESET   ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI ,                          RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,KC_F12  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     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
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  )
+
+};
diff --git a/keyboards/redox/keymaps/fculpo/keymap.json b/keyboards/redox/keymaps/fculpo/keymap.json
new file mode 100644 (file)
index 0000000..ca7905b
--- /dev/null
@@ -0,0 +1,399 @@
+[
+  {
+    "name": "Redox/rev1",
+    "author": "Fabien Culpo",
+    "switchMount": "cherry",
+    "plate": false,
+    "pcb": false
+  },
+  [
+    {
+      "x": 3.5
+    },
+    "#\n3",
+    {
+      "x": 10.5
+    },
+    "*\n8"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "@\n2",
+    {
+      "x": 1
+    },
+    "$\n4",
+    {
+      "x": 8.5
+    },
+    "&\n7",
+    {
+      "x": 1
+    },
+    "(\n9"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "%\n5",
+    {
+      "x": 6.5
+    },
+    "^\n6"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 0.25,
+      "a": 5,
+      "w": 1.25
+    },
+    "`\nLayer 2\n\n\n\n\n~",
+    {
+      "a": 4
+    },
+    "!\n1",
+    {
+      "x": 14.5
+    },
+    ")\n0",
+    {
+      "a": 5,
+      "w": 1.25
+    },
+    "_\nLayer 2\n\n\n\n\n-"
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5
+    },
+    "Layer 1",
+    {
+      "x": 4.5
+    },
+    "Layer 1"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5,
+      "a": 4
+    },
+    "E",
+    {
+      "x": 10.5
+    },
+    "I"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "W",
+    {
+      "x": 1
+    },
+    "R",
+    {
+      "x": 8.5
+    },
+    "U",
+    {
+      "x": 1
+    },
+    "O"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "T",
+    {
+      "x": 6.5
+    },
+    "Y"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 0.25,
+      "a": 7,
+      "w": 1.25
+    },
+    "TAB",
+    {
+      "a": 4
+    },
+    "Q",
+    {
+      "x": 14.5
+    },
+    "P",
+    {
+      "a": 5,
+      "w": 1.25
+    },
+    "+\n="
+  ],
+  [
+    {
+      "y": -0.625,
+      "x": 6.5,
+      "a": 7,
+      "h": 1.5
+    },
+    "[",
+    {
+      "x": 4.5,
+      "h": 1.5
+    },
+    "]"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 3.5,
+      "a": 4
+    },
+    "D",
+    {
+      "x": 10.5
+    },
+    "K"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "S",
+    {
+      "x": 1,
+      "n": true
+    },
+    "F",
+    {
+      "x": 8.5,
+      "n": true
+    },
+    "J",
+    {
+      "x": 1
+    },
+    "L"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "G",
+    {
+      "x": 6.5
+    },
+    "H"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 0.25,
+      "a": 5,
+      "w": 1.25
+    },
+    "ESC\nCTRL",
+    {
+      "a": 4
+    },
+    "A",
+    {
+      "x": 14.5
+    },
+    ":\n;",
+    {
+      "a": 5,
+      "w": 1.25
+    },
+    "'\nCTRL"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5,
+      "a": 4
+    },
+    "C",
+    {
+      "x": 10.5
+    },
+    "<\n,"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "X",
+    {
+      "x": 1
+    },
+    "V",
+    {
+      "x": 8.5
+    },
+    "M",
+    {
+      "x": 1
+    },
+    ">\n."
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 5.5
+    },
+    "B",
+    {
+      "x": 6.5
+    },
+    "N"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 0.25,
+      "a": 5,
+      "w": 1.25
+    },
+    "SHIFT",
+    {
+      "a": 4
+    },
+    "Z",
+    {
+      "x": 14.5
+    },
+    "?\n/",
+    {
+      "a": 5,
+      "w": 1.25
+    },
+    "SHIFT"
+  ],
+  [
+    {
+      "y": -0.375,
+      "x": 3.5
+    },
+    "*\nALT",
+    {
+      "x": 10.5
+    },
+    "Left"
+  ],
+  [
+    {
+      "y": -0.875,
+      "x": 2.5
+    },
+    "-",
+    {
+      "x": 12.5
+    },
+    "Down"
+  ],
+  [
+    {
+      "y": -0.75,
+      "x": 0.5
+    },
+    "|\n\n\n\n\n\n\\",
+    "+",
+    {
+      "x": 14.5
+    },
+    "Up",
+    {
+      "sb": "cherry",
+      "st": "MX1A-21xx"
+    },
+    "Right"
+  ],
+  [
+    {
+      "r": 15,
+      "y": -2.625,
+      "x": 5.75,
+      "a": 7,
+      "w": 1.25
+    },
+    "SUPER"
+  ],
+  [
+    {
+      "r": 30,
+      "rx": 6.5,
+      "ry": 4.25,
+      "y": -1,
+      "a": 5
+    },
+    "PgUp\nLay. 3",
+    {
+      "a": 7
+    },
+    "PgDn"
+  ],
+  [
+    {
+      "h": 1.5
+    },
+    "Bksp",
+    {
+      "h": 1.5
+    },
+    "Del"
+  ],
+  [
+    {
+      "r": -30,
+      "rx": 13,
+      "y": -1,
+      "x": -2
+    },
+    "Home",
+    {
+      "a": 5
+    },
+    "End\nLay. 3"
+  ],
+  [
+    {
+      "x": -2,
+      "a": 7,
+      "h": 1.5
+    },
+    "Enter",
+    {
+      "h": 1.5
+    },
+    "Space"
+  ],
+  [
+    {
+      "r": -15,
+      "rx": 0,
+      "ry": 0,
+      "y": 7.75,
+      "x": 11.75,
+      "w": 1.25
+    },
+    "ALT"
+  ]
+]
diff --git a/keyboards/redox/keymaps/fculpo/readme.md b/keyboards/redox/keymaps/fculpo/readme.md
new file mode 100644 (file)
index 0000000..1250e47
--- /dev/null
@@ -0,0 +1,18 @@
+# A tweaked keymap for Redox
+
+This keymap modifies the [default keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/redox) for the awesome [Redox keyboard](https://github.com/mattdibi/redox-keyboard) designed by Mattia Dal Ben.
+
+Also heavily inspired by nrichers layout.
+
+![fculpo Layout Image](https://i.imgur.com/OXT8boJ.png)
+
+## Changes to the default keymap
+
+These keymap changes are meant to improve the usability of the layout in everyday use:
+
+- Move `GUI` (`SUPER`) key to where default left `CTRL` is
+- Move `/?` into usual location next to right `SHIFT` - the default flash from Falbatech put `\|` here (might not be the Redox default?), which felt unintuitive
+- Put `\|` into bottom-left spot where `GUI` (`SUPER`) was - had to go somewhere and this bottom-left placement sort of balances with the almost bottom-right `/?`
+- Change default `ESC` into `ESC` on tap, `CTRL` on hold - Love the UNIX-ey `CTRL` key location and wanted to keep `ESC` in the original position
+- Change default `'` above right `SHIFT` into `'` on tap, `CTRL` on hold - Love the UNIX-ey CTRL key location, but it can give you 'left claw hand', which a second, mirrored `CTRL` key fixes
+- Add `F11` and `F12` keys to two layers - needed on macOS if you want to control volume up and down from your keyboard (not shown, on a different layer)S
diff --git a/keyboards/redox/keymaps/fculpo/rules.mk b/keyboards/redox/keymaps/fculpo/rules.mk
new file mode 100644 (file)
index 0000000..a81250c
--- /dev/null
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+
index b23342ce0fa0aa9d5ee24e2375af8d6b2a0a5a79..8852a4cc87218fd731bddb324f82db4882f2eeea 100644 (file)
@@ -32,3 +32,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 PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_TERM 200
index 8b8f5f183903f36fd4cb984748090c8d6d83df9b..5a508815b2d9b0b671f44db8f5c8ef903da6c3ea 100644 (file)
 extern keymap_config_t keymap_config;
 
 // Layer names
-#define _QWERTY 0
-#define _COLEMAKDHMK 1
-#define _QWERTY_MAC 2
-#define _COLEMAKDHMK_MAC 3
-#define _SYMB 4
-#define _ADJUST 5
+enum{
+  // - Base layers:
+  _COLEMAKDHMK,
+  _COLEMAKDHMK_MAC,
+  _QWERTY,
+  _QWERTY_MAC,
+  // - Symbols, numbers, functions and custom shifts:
+  _SYMB,
+  _NUMB,
+  _FUNC,
+  _RHSH, // Righ hand shifted keycodes
+  _LHSH, // Left hand shifted keycodes
+  // - Adjust layer:
+  _ADJUST
+};
 
 // Custom keycodes
 enum custom_keycodes {
-  QWERTY = SAFE_RANGE,
-  COLEMAKDHMK,
-  QWERTY_MAC,
+  COLEMAKDHMK = SAFE_RANGE,
   COLEMAKDHMK_MAC,
-  SYMB,
-  ADJUST,
+  QWERTY,
+  QWERTY_MAC,
   ASC_SAR,
   ASC_DAR,
   ASC_SQT,
   ASC_DQT,
+  ASC_CIRC,
+  ASC_TILD,
   ASC_HAP,
-  ASC_SAD
+  ASC_SAD,
+  ASC_BKT,
+  ASC_CBRL,
+  ASC_CBRR
 };
 
+// Tap dance keycodes
+enum tap_dance{
+  TD_SCLN, // ;; -> :
+  TD_LBRC, // [[ -> {
+  TD_RBRC, // ]] -> }
+  TD_QMRK  // // -> ?
+};
+
+// Semicolon to Colon
+void dance_scln_finished (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    register_code (KC_SCLN);
+  } else {
+    register_code (KC_RSFT);
+    register_code (KC_SCLN);
+  }
+}
+void dance_scln_reset (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    unregister_code (KC_SCLN);
+  } else {
+    unregister_code (KC_RSFT);
+    unregister_code (KC_SCLN);
+  }
+}
+
+// Square braket to curly bracket (left)
+void dance_lbrc_finished (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    register_code (KC_LBRC);
+  } else {
+    register_code (KC_RSFT);
+    register_code (KC_LBRC);
+  }
+}
+void dance_lbrc_reset (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    unregister_code (KC_LBRC);
+  } else {
+    unregister_code (KC_RSFT);
+    unregister_code (KC_LBRC);
+  }
+}
+
+// Square braket to curly bracket (right)
+void dance_rbrc_finished (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    register_code (KC_RBRC);
+  } else {
+    register_code (KC_RSFT);
+    register_code (KC_RBRC);
+  }
+}
+void dance_rbrc_reset (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+    unregister_code (KC_RBRC);
+  } else {
+    unregister_code (KC_RSFT);
+    unregister_code (KC_RBRC);
+  }
+}
+
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  [TD_SCLN]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_scln_finished, dance_scln_reset),
+  [TD_LBRC]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_lbrc_finished, dance_lbrc_reset),
+  [TD_RBRC]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_rbrc_finished, dance_rbrc_reset)
+};
+
+
 // Shortcut to make keymap more readable
-#define KC_SYQT LT(_SYMB, KC_QUOT)
-#define KC_SYGR LT(_SYMB, KC_GRV)
-#define KC_SYSP LT(_SYMB, KC_SPC)
-#define KC_ADEN LT(_ADJUST, KC_END)
-#define KC_ADPU LT(_ADJUST, KC_PGUP)
-#define KC_CESC LCTL_T(KC_ESC)
-#define KC_CBSP LCTL_T(KC_BSPC)
-#define KC_CMIN RCTL_T(KC_MINUS)
-#define KC_GBSP LGUI_T(KC_BSPC)
-#define KC_ADEL LALT_T(KC_DEL)
-#define KC_APLS RALT_T(KC_PPLS)
-#define KC_LSEN LSFT_T(KC_ENT)
-#define KC_RSEN RSFT_T(KC_ENT)
-#define FN1 QWERTY
-#define FN2 COLEMAKDHMK
-#define FN3 QWERTY_MAC
-#define FN4 COLEMAKDHMK_MAC
+
+// - Adjustment Layer:
+#define KC_ADEN LT(_ADJUST, KC_END)   // End / _ADJUST layer
+#define KC_ADPU LT(_ADJUST, KC_PGUP)  // Page Up / _ADJUST layer
+
+// - Custom layers:
+#define KC_SYSP LT(_SYMB, KC_SPC)     // Space / _symbols
+#define KC_NUES LT(_NUMB, KC_ESC)     // Esc / _numbers
+#define KC_FUTA LT(_FUNC, KC_TAB)     // Tab / _functions
+#define KC_N_SH LT(_LHSH, KC_N)       // Pressing N key, enable shifted keys on other half (the left one)
+#define KC_T_SH LT(_RHSH, KC_T)       // Pressing T key, enable shifted keys on other half (the right one)
+
+// - Custom keys/modifiers:
+#define KC_ATAB RALT_T(KC_TAB)        // - Tab / Alt Gr
+#define KC_CESC LCTL_T(KC_ESC)        // - Esc / Left Ctrl
+#define KC_GSPC LGUI_T(KC_SPC)        // - Space / Left GUI
+#define KC_CBSP LCTL_T(KC_BSPC)       // - Backspace / Left Ctrl
+
+// -- Mac os mode:
+#define KC_CSPC LCTL_T(KC_SPC)        // - Space / Left Ctrl
+#define KC_GBSP LGUI_T(KC_BSPC)       // - Backspace / Left GUI
+
+
+#define KC_AEQL LALT_T(KC_EQL)        // - Equals / Alt (left alt)
+#define KC_CMIN RCTL_T(KC_MINUS)      // - Minus / Right Ctrl
+#define KC_ADEL RALT_T(KC_DEL)        // - Del / Alt Gr
+#define KC_RSEN RSFT_T(KC_ENT)        // - Enter / Right Shift (standard shift)
+#define KC_LAEN LALT_T(KC_ENT)        // - Enter / Left Alt
+
+// Home row mod tap keys:
+// - Left hand
+#define KC_CT_A CTL_T(KC_A)           // A / Left Ctrl
+#define KC_AL_S ALT_T(KC_S)           // S / Left Alt
+// - Right hand
+#define KC_AL_E ALT_T(KC_E)           // E / Left Alt
+#define KC_CT_O CTL_T(KC_O)           // O / Left Ctrl
+
+// - Tap dance:
+#define KC_TDSC TD(TD_SCLN)           // ;; -> :
+#define KC_TDLB TD(TD_LBRC)           // [[ -> {
+#define KC_TDRB TD(TD_RBRC)           // ]] -> }
+
+// - Keyboard base maps:
+#define LR1 COLEMAKDHMK
+#define LR2 COLEMAKDHMK_MAC
+#define LR3 QWERTY
+#define LR4 QWERTY_MAC
+
 
 // Send custom strings or change default base layer
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
@@ -63,12 +177,30 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
         // SS_RALT(SS_LSFT()): Avoid sending dead key on software intl layouts
         SEND_STRING(SS_RALT(SS_LSFT("\"")));
         return false;
+      case ASC_CIRC:
+        // SS_RALT(): Avoid sending dead key on software intl layouts
+        SEND_STRING(SS_RALT("^"));
+        return false;
+      case ASC_TILD:
+        // SS_RALT(SS_LSFT()): Avoid sending dead key on software intl layouts
+        SEND_STRING(SS_RALT(SS_LSFT("~")));
+        return false;
       case ASC_HAP:
         SEND_STRING(":-) ");
         return false;
       case ASC_SAD:
         SEND_STRING(":-( ");
         return false;
+      case ASC_BKT:
+        // SS_RALT(): Avoid sending dead key on software intl layouts
+        SEND_STRING(SS_RALT("`"));
+        return false;
+      case ASC_CBRL:
+        SEND_STRING("{");
+        return false;
+      case ASC_CBRR:
+        SEND_STRING("}");
+        return false;
       case QWERTY:
         if (record->event.pressed) {
           set_single_persistent_default_layer(_QWERTY);
@@ -98,91 +230,157 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   return true;
 };
 
-
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
-  [_QWERTY] = LAYOUT(
-  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
-     KC_SYGR ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_SYQT ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_TAB  ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,KC_DEL  ,                          KC_BSPC ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_EQL  ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_CESC ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,KC_LBRC ,                          KC_RBRC ,KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_SCLN ,KC_CMIN ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_N    ,KC_M    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
-  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
-     KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LGUI ,     KC_ADEL ,    KC_CBSP ,KC_LSEN ,        KC_RSEN ,KC_SYSP ,    KC_APLS ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
-  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  // Colemak DM-MK Mod
+  [_COLEMAKDHMK] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       XXXXXXX ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_ESC  ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_ATAB ,KC_Q    ,KC_W    ,KC_F    ,KC_P    ,KC_B    ,XXXXXXX ,                          XXXXXXX ,KC_J    ,KC_L    ,KC_U    ,KC_Y    ,KC_TDSC ,KC_AEQL ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_CESC ,KC_A    ,KC_R    ,KC_AL_S ,KC_T_SH ,KC_G    ,KC_TDLB ,                          KC_TDRB ,KC_M    ,KC_N_SH ,KC_AL_E ,KC_I    ,KC_O    ,KC_CMIN ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_D    ,KC_V    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_K    ,KC_H    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       KC_GSPC ,KC_HYPR ,KC_MEH  ,XXXXXXX ,     KC_NUES ,    KC_CBSP ,KC_FUTA ,        KC_LAEN ,KC_SYSP ,    KC_ADEL ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
   ),
 
-  [_COLEMAKDHMK] = LAYOUT(
-  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
-     KC_SYGR ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_SYQT ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_TAB  ,KC_Q    ,KC_W    ,KC_F    ,KC_P    ,KC_B    ,KC_DEL  ,                          KC_BSPC ,KC_J    ,KC_L    ,KC_U    ,KC_Y    ,KC_SCLN ,KC_EQL  ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_CESC ,KC_A    ,KC_R    ,KC_S    ,KC_T    ,KC_G    ,KC_LBRC ,                          KC_RBRC ,KC_M    ,KC_N    ,KC_E    ,KC_I    ,KC_O    ,KC_CMIN ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_D    ,KC_V    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_K    ,KC_H    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
-  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
-     KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LGUI ,     KC_ADEL ,    KC_CBSP ,KC_LSEN ,        KC_RSEN ,KC_SYSP ,    KC_APLS ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
-  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  // Colemak DM-MK Mod, Mac version (CTRL and GUI are swapped)
+  [_COLEMAKDHMK_MAC] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       XXXXXXX ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_ESC  ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_ATAB ,KC_Q    ,KC_W    ,KC_F    ,KC_P    ,KC_B    ,XXXXXXX ,                          XXXXXXX ,KC_J    ,KC_L    ,KC_U    ,KC_Y    ,KC_TDSC ,KC_AEQL ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_CESC ,KC_A    ,KC_R    ,KC_AL_S ,KC_T_SH ,KC_G    ,KC_TDLB ,                          KC_TDRB ,KC_M    ,KC_N_SH ,KC_AL_E ,KC_I    ,KC_O    ,KC_CMIN ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_D    ,KC_V    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_K    ,KC_H    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       KC_CSPC ,KC_HYPR ,KC_MEH  ,XXXXXXX ,     KC_NUES ,    KC_GBSP ,KC_FUTA ,        KC_LAEN ,KC_SYSP ,    KC_ADEL ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
   ),
 
-  [_QWERTY_MAC] = LAYOUT(
-  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
-     KC_SYGR ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_SYQT ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_TAB  ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,KC_DEL  ,                          KC_BSPC ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_EQL  ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_CESC ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,KC_LBRC ,                          KC_RBRC ,KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_SCLN ,KC_CMIN ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_N    ,KC_M    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
-  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
-     KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LCTL ,     KC_ADEL ,    KC_GBSP ,KC_LSEN ,        KC_RSEN ,KC_SYSP ,    KC_APLS ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
-  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  // QWERTY
+  [_QWERTY] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       XXXXXXX ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_ESC  ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_ATAB ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,XXXXXXX ,                          XXXXXXX ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_AEQL ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_CESC ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,KC_TDLB ,                          KC_TDRB ,KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_TDSC ,KC_CMIN ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_N    ,KC_M    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       KC_GSPC ,KC_HYPR ,KC_MEH  ,XXXXXXX ,     KC_NUES ,    KC_CBSP ,KC_FUTA ,        KC_LAEN ,KC_SYSP ,    KC_ADEL ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
   ),
 
-  [_COLEMAKDHMK_MAC] = LAYOUT(
-  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
-     KC_SYGR ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_SYQT ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_TAB  ,KC_Q    ,KC_W    ,KC_F    ,KC_P    ,KC_B    ,KC_DEL  ,                          KC_BSPC ,KC_J    ,KC_L    ,KC_U    ,KC_Y    ,KC_SCLN ,KC_EQL  ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_CESC ,KC_A    ,KC_R    ,KC_S    ,KC_T    ,KC_G    ,KC_LBRC ,                          KC_RBRC ,KC_M    ,KC_N    ,KC_E    ,KC_I    ,KC_O    ,KC_CMIN ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_D    ,KC_V    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_K    ,KC_H    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
-  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
-     KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LCTL ,     KC_ADEL ,    KC_GBSP ,KC_LSEN ,        KC_RSEN ,KC_SYSP ,    KC_APLS ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
-  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  // QWERTY, Mac version (CTRL and GUI are swapped)
+  [_QWERTY_MAC] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       XXXXXXX ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_ESC  ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_ATAB ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,XXXXXXX ,                          XXXXXXX ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_AEQL ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_CESC ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,KC_TDLB ,                          KC_TDRB ,KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_TDSC ,KC_CMIN ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       KC_LSPO ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_N    ,KC_M    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSPC ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       KC_CSPC ,KC_HYPR ,KC_MEH  ,XXXXXXX ,     KC_NUES ,    KC_GBSP ,KC_FUTA ,        KC_LAEN ,KC_SYSP ,    KC_ADEL ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
   ),
 
+  // Symbols, home row arrows, function keys and macros layer
   [_SYMB] = LAYOUT(
-  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
-     XXXXXXX ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,                                            KC_F6   ,KC_F7   ,KC_F8   ,KC_F9   ,KC_F10  ,XXXXXXX ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     _______ ,KC_CIRC ,KC_BSLS ,KC_PMNS ,KC_UNDS ,XXXXXXX ,_______ ,                          _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,KC_F11  ,KC_APP  ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     _______ ,KC_PAST ,KC_PIPE ,ASC_SQT ,KC_TILD ,KC_QUOT ,ASC_SAR ,                          ASC_DAR ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,KC_F12  ,KC_PSCR ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     _______ ,KC_HASH ,KC_AMPR  ,KC_AT  ,ASC_DQT ,KC_GRV  ,ASC_SAD ,ASC_HAP ,        _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,KC_UP   ,_______ ,
-  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
-     _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        _______ ,_______ ,    KC_KP_0 ,     KC_PDOT ,KC_LEFT ,KC_DOWN ,KC_RGHT
-  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       _______ ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,                                            KC_F6   ,KC_F7   ,KC_F8   ,KC_F9   ,KC_F10  ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,KC_EXLM ,KC_AT   ,KC_HASH ,KC_DLR  ,KC_PERC ,_______ ,                          _______ ,ASC_CIRC,KC_AMPR ,KC_ASTR ,KC_PLUS ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,KC_PIPE ,KC_PMNS ,ASC_SQT ,ASC_DQT ,KC_GRV  ,ASC_SAR ,                          ASC_DAR ,KC_QUOT ,KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,KC_BSLS ,KC_UNDS ,KC_COLN ,ASC_TILD,KC_EQL  ,ASC_SAD ,ASC_HAP ,        _______ ,_______ ,ASC_BKT ,KC_PGUP ,KC_PGDN ,KC_HOME ,KC_END  ,_______ ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        _______ ,_______ ,    _______ ,     _______ ,_______ ,_______ ,_______
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  // Numeric keypad layer
+  [_NUMB] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                                            _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                          _______ ,KC_PAST ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,KC_PPLS ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                          _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,KC_PMNS ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,        _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,KC_PSLS ,_______ ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        _______ ,_______ ,    XXXXXXX ,     KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  // Function layer and some extra keys on right hand
+  [_FUNC] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                                            _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                          _______ ,_______ ,KC_F7   ,KC_F8   ,KC_F9   ,KC_F12  ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                          _______ ,_______ ,KC_F4   ,KC_F5   ,KC_F6   ,KC_F11  ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,KC_PSCR ,KC_NLCK ,KC_INS  ,KC_CAPS ,KC_APP  ,_______ ,_______ ,        _______ ,_______ ,_______ ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F10  ,_______ ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        _______ ,_______ ,    _______ ,     _______ ,_______ ,_______ ,_______
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+
+  // Left hand shifted keycodes
+  [_LHSH] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                                            _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,S(KC_Q) ,S(KC_W) ,S(KC_F) ,S(KC_P) ,S(KC_B) ,_______ ,                          _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,S(KC_A) ,S(KC_R) ,S(KC_S) ,S(KC_T) ,S(KC_G) ,_______ ,                          _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,S(KC_Z) ,S(KC_X) ,S(KC_C) ,S(KC_D) ,S(KC_V) ,_______ ,_______ ,        _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        KC_TAB  ,KC_BSPC ,    KC_ESC  ,     _______ ,_______ ,_______ ,_______
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  // Right hand shifted keycodes
+  [_RHSH] = LAYOUT(
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                                            _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                          _______ ,S(KC_J) ,S(KC_L) ,S(KC_U) ,S(KC_Y) ,KC_COLN ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                          _______ ,S(KC_M) ,S(KC_N) ,S(KC_E) ,S(KC_I) ,S(KC_O) ,_______ ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,        _______ ,_______ ,S(KC_K) ,S(KC_H) ,KC_LABK ,KC_RABK ,KC_QUES ,_______ ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       _______ ,_______ ,_______ ,_______ ,     KC_DEL  ,    KC_SPC  ,KC_ENT  ,        _______ ,_______ ,    _______ ,     _______ ,_______ ,_______ ,_______
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
   ),
 
+  // Adjust layer (RGB, Reset and base layer switch)
   [_ADJUST] = LAYOUT(
-  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
-     XXXXXXX ,FN1     ,FN2     ,FN3     ,FN4     ,XXXXXXX ,                                            XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     XXXXXXX ,RESET   ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI ,                          RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     XXXXXXX ,XXXXXXX ,RGB_M_B ,RGB_M_R ,RGB_M_SW,RGB_M_SN,XXXXXXX ,                          XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
-  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
-     XXXXXXX ,XXXXXXX ,RGB_M_K ,RGB_M_X ,RGB_M_G ,XXXXXXX ,_______ ,XXXXXXX ,        XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
-  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
-     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,     XXXXXXX ,    XXXXXXX ,XXXXXXX ,        XXXXXXX ,XXXXXXX ,    XXXXXXX ,     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
-  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+    //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+       XXXXXXX ,LR1     ,LR2     ,LR3     ,LR4     ,XXXXXXX ,                                            XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       XXXXXXX ,RESET   ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI ,                          RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       XXXXXXX ,XXXXXXX ,RGB_M_B ,RGB_M_R ,RGB_M_SW,RGB_M_SN,XXXXXXX ,                          XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+    //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+       XXXXXXX ,XXXXXXX ,RGB_M_K ,RGB_M_X ,RGB_M_G ,XXXXXXX ,_______ ,XXXXXXX ,        XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+    //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+       XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,     XXXXXXX ,    XXXXXXX ,XXXXXXX ,        XXXXXXX ,XXXXXXX ,    XXXXXXX ,     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+    //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
   )
 
 };
index f1b6fa7c7ba97f6133b5de4d383bb56bdf625fb8..9b88469a1339af434ac2d085d160d9aa348b6951 100644 (file)
@@ -4,27 +4,61 @@
 ## Features
 
 - Enabled USE_SERIAL for Falba.Tech Redox keyboards.
-- PC Layouts: QWERTY, Colemak Mod DH-MK.
-- Mac Layouts: same as above with CTRL-GUI keys inverted on the bottom row.
-- Added redundant "Space", "Esc" and "Ctrl" keys.
-- Added macro to print "->" and "=>" strings.
-- Added macro to print ":-( " and ":-) " strings.
+- PC Layouts: Colemak Mod DH-MK, Qwerty.
+- Mac Layouts: same as above with CTRL-GUI keys inverted.
+- Added redundant `Space`, `Esc`, `Ctrl` and `Enter` keys. I like to have this
+  keys on both halves.
+- Added macro to print `->` and `=>` strings.
+- Added macro to print `:-( ` and `:-) ` strings.
 - Added more arrows.
-- Added "(" and ")" on Shifts keys.
-- Added Shift on both ) "Enter" keys.
+- Added `(` and `)` on Shifts keys.
+- Tapdance: `:` (`;` × 2), `{` (`[` × 2), `}` (`]` × 2).
 - Removed Mouse and media support.
 - Added missing "Print Screen" and "Menu" keys.
 - Added missing "F11" and "F12" keys.
+- Added `Alt` modifier on home row.
+- Added `Shift other half` on home keys: this allows to shift the right half
+pressing `t` on the left (or `f` using Qwerty), and the opposite pressing `n`
+(or `j` for Qwerty layout).
 
 
-## Layers
+## Description
+
+This keymap use the default one with some changes to suit my needs. Mainly
+having most used symbol on a separated layer copying the common symbols on the
+number keys on the second row and adding other symbols and ``|´` dead keys for
+accents.
+
+
+## Main Keyboard Layout
+
+[TODO]
 
-This keymap use the default one with some minor improvements to suit my needs.
 
 ## Changelog
 
 - 2018/11/13
-  First public release
+  First public release.
+- 2018/12/04
+  Added Caps Lock, Num Lock and Insert on Symbols Layout. Inverted KC_GRV and
+  KC_QUOT on Symbols Layout. Added "Toggle Symbols Layout" and "Momentarily
+  activates Symbols Layout" on bottom row. Added Space/Control on left bottom
+  corner: now both halves contains Enter and Space keys.
+- 2018/12/23
+  Moved around modifiers key.
+  Added MEH and HYPER keys.
+  Improved symbols layout.
+  Rearranged layers.
+- 2019/01/04
+  Added new layer with numeric keypad and rearranged symbols.
+- 2019/01/26
+  Added curly brackets on own keys (normally unused).
+  Added tap dance for testing purpose.
+  Minor fixes.
+- 2019/02/25
+  Major layouts upgrade, partially inspired by Steven Hum's Beakl layouts.
+- 2019/03/17
+  Aligned qwerty and mac to main layout.
 
 
 ## TODO
@@ -32,4 +66,5 @@ This keymap use the default one with some minor improvements to suit my needs.
 - Bring back mouse and multimedia keys.
 - Add default Colemak Mod DH layout.
 - Improve top corner keys.
-- Improve bottom row keys (mostly KC_BSLS and KC_QUOT).
+- Improve bottom row keys.
+- Improve README.md
index 21550e9fe10c4b886712efbf01c8ae169f41f426..f248688fb49c559a1cdfdd855fdac369f39f09e9 100644 (file)
@@ -1,3 +1,4 @@
 RGBLIGHT_ENABLE = yes
-
 COMMAND_ENABLE = no
+KEY_LOCK_ENABLE = yes
+TAP_DANCE_ENABLE=yes
diff --git a/keyboards/redox/keymaps/nrichers/config.h b/keyboards/redox/keymaps/nrichers/config.h
new file mode 100755 (executable)
index 0000000..a3ef209
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+Copyright 2018 Mattia Dal Ben <matthewdibi@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
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/redox/keymaps/nrichers/keymap.c b/keyboards/redox/keymaps/nrichers/keymap.c
new file mode 100755 (executable)
index 0000000..7434b43
--- /dev/null
@@ -0,0 +1,92 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _SYMB 1
+#define _NAV 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  SYMB,
+  NAV,
+  ADJUST,
+};
+
+// Shortcut to make keymap more readable
+#define SYM_L   MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTES LCTL_T(KC_ESC)
+#define KC_CTQU RCTL_T(KC_QUOT)
+
+#define KC_NAGR LT(_NAV, KC_GRV)
+#define KC_NAMI LT(_NAV, KC_MINS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_QWERTY] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     KC_NAGR ,KC_1    ,KC_2    ,KC_3    ,KC_4    ,KC_5    ,                                            KC_6    ,KC_7    ,KC_8    ,KC_9    ,KC_0    ,KC_NAMI ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_TAB  ,KC_Q    ,KC_W    ,KC_E    ,KC_R    ,KC_T    ,SYM_L   ,                          SYM_L   ,KC_Y    ,KC_U    ,KC_I    ,KC_O    ,KC_P    ,KC_EQL  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_CTES ,KC_A    ,KC_S    ,KC_D    ,KC_F    ,KC_G    ,KC_LBRC ,                          KC_RBRC ,KC_H    ,KC_J    ,KC_K    ,KC_L    ,KC_SCLN ,KC_CTQU ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     KC_LSFT ,KC_Z    ,KC_X    ,KC_C    ,KC_V    ,KC_B    ,KC_ADPU ,KC_PGDN ,        KC_HOME ,KC_ADEN ,KC_N    ,KC_M    ,KC_COMM ,KC_DOT  ,KC_SLSH ,KC_RSFT ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     KC_BSLS ,KC_PPLS ,KC_PMNS ,KC_ALAS ,     KC_LGUI ,    KC_SPC  ,KC_BSPC ,        KC_DEL  ,KC_ENT  ,    KC_RGUI ,     KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RGHT 
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  [_SYMB] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     _______ ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,                                            KC_F6   ,KC_F7   ,KC_F8   ,KC_F9   ,KC_F10  ,KC_F11  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_EXLM ,KC_AT   ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ ,                          _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,KC_F12  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_HASH ,KC_DLR  ,KC_LBRC ,KC_RBRC ,KC_GRV  ,_______ ,                          _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ ,_______ ,        _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     _______ ,_______ ,_______ ,_______ ,     _______ ,    _______ ,_______ ,        _______ ,_______ ,    KC_KP_0 ,     KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX 
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  [_NAV] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,                                            _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ ,                          _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ ,                          _______ ,KC_LEFT ,KC_DOWN ,KC_UP   ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐       ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ ,        _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+  //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤       ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,     KC_BTN1 ,    KC_BTN2 ,_______ ,        _______ ,_______ ,    XXXXXXX ,     XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX 
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  ),
+
+  [_ADJUST] = LAYOUT(
+  //┌────────┬────────┬────────┬────────┬────────┬────────┐                                           ┌────────┬────────┬────────┬────────┬────────┬────────┐
+     XXXXXXX ,KC_F1   ,KC_F2   ,KC_F3   ,KC_F4   ,KC_F5   ,                                            KC_F6   ,KC_F7   ,KC_F8   ,KC_F9   ,KC_F10  ,KC_F11  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐                         ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     XXXXXXX ,RESET   ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI ,                          RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,KC_F12  ,
+  //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤                         ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+     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 
+  //└────────┴────────┴────────┴────────┘    └────────┘   └────────┴────────┘       └────────┴────────┘   └────────┘    └────────┴────────┴────────┴────────┘
+  )
+
+};
diff --git a/keyboards/redox/keymaps/nrichers/keymap.png b/keyboards/redox/keymaps/nrichers/keymap.png
new file mode 100644 (file)
index 0000000..8ef3fe4
Binary files /dev/null and b/keyboards/redox/keymaps/nrichers/keymap.png differ
diff --git a/keyboards/redox/keymaps/nrichers/readme.md b/keyboards/redox/keymaps/nrichers/readme.md
new file mode 100755 (executable)
index 0000000..6189e8e
--- /dev/null
@@ -0,0 +1,28 @@
+# A tweaked keymap for Redox
+
+This keymap modifies the [default keymap](https://github.com/qmk/qmk_firmware/tree/master/keyboards/redox) for the awesome [Redox keyboard](https://github.com/mattdibi/redox-keyboard) designed by Mattia Dal Ben.
+
+![Modified Redox keymap](https://github.com/nrichers/qmk_firmware/blob/master/keyboards/redox/keymaps/nrichers/keymap.png)
+
+## Changes to the default keymap ![#99fcbe](https://placehold.it/15/99fcbe/000000?text=+)
+
+These keymap changes are meant to improve the usability of the layout in everyday use:
+
+- Move `GUI` (`SUPER`) key to where default left `CTRL` and right `ALT` are - gives you two frequently used `CMD` keys on macOS where my brain expects them
+- Move `/?` into usual location next to right `SHIFT` - the default flash from Falbatech put `\|` here (might not be the Redox default?), which felt unintuitive
+- Put `\|` into bottom-left spot where `GUI` (`SUPER`) was - had to go somewhere and this bottom-left placement sort of balances with the almost bottom-right `/?`
+- Change default `ESC` into `ESC` on tap, `CTRL` on hold - Love the UNIX-ey `CTRL` key location and wanted to keep `ESC` in the original position
+- Change default `'` above right `SHIFT` into `'` on tap, `CTRL` on hold - Love the UNIX-ey CTRL key location, but it can give you 'left claw hand', which a second, mirrored `CTRL` key fixes
+- Add `F11` and `F12` keys to two layers - needed on macOS if you want to control volume up and down from your keyboard (not shown, on a different layer)
+- On thumb clusters: 
+  - Left: Move `SPACE` closest to left thumb and move `BACKSPACE` to the right of that - put the key for 'getting it right' closest to your thumb and reduce usage of my right hand (purely personal preference)
+  - Right: Move `ENTER` closest to right thumb and move `DEL` to the left of that - put the key for 'getting it right' closest to your thumb
+
+## Changes to the Redox layout ![#99e6fc](https://placehold.it/15/99e6fc/000000?text=+)
+
+These are physical keycap changes on the board that make reaching the `Layer 1` keys easier and that, subjectively, look more balanced visually:
+
+- Increase the `Layer 1` key sizes from 1U to 1.25U
+- Decrease the 1.5 U key size for `[` and `]` to 1.25U
+
+You could even make `[` and `]` 1U so that you can use keycaps from a standard ANSI key set and also increase the size of the `Layer 2` keys to 1.5U. 
diff --git a/keyboards/redox/keymaps/nrichers/rules.mk b/keyboards/redox/keymaps/nrichers/rules.mk
new file mode 100755 (executable)
index 0000000..a81250c
--- /dev/null
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+
index dbe98e87ef634bd870ee224dd3fd6939be426e9e..c15e5c37c1681ebccfd2d74c791c4789a0f371a7 100644 (file)
@@ -15,8 +15,7 @@ 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"
 
@@ -26,7 +25,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define DEVICE_VER      0x0003
 #define MANUFACTURER    SATAN
 #define PRODUCT         GH60
-#define DESCRIPTION     QMK keyboard firmware for Satan GH60 with WS2812 support
+#define DESCRIPTION     60% keyboard with backlight and WS2812 support
 
 /* key matrix size */
 #define MATRIX_ROWS 5
@@ -58,12 +57,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #define BACKLIGHT_LEVELS 4
 
-/* Underlight configuration
+/* Underglow configuration
  */
-
 #define RGB_DI_PIN E2
 #define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 8     // Number of LEDs
+#define RGBLED_NUM 8
 #define RGBLIGHT_HUE_STEP 10
 #define RGBLIGHT_SAT_STEP 17
 #define RGBLIGHT_VAL_STEP 17
@@ -85,5 +83,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
index fc9d3b7ab76aa7cc714cba82b309ef591c153948..2dec5464ccf1a21f88dfa65eed22c4bc05aa4727 100644 (file)
@@ -4,71 +4,64 @@ enum custom_keycodes {
   SFT_ESC = SAFE_RANGE
 };
 
-// Used for SHIFT_ESC
-#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
 // Each layer gets a name for readability, which is then used in the keymap matrix below.
 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 // Layer names don't all need to be of the same length, obviously, and you can also skip them
 // entirely and just use numbers.
-#define _BL 0
-#define _FL 1
+enum layer_names {
+  _BL,
+  _FL
+};
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   /* Keymap _BL: (Base Layer) Default Layer
    * ,-----------------------------------------------------------.
-   * |Esc~| 1|  2|  3|  4|  5|  6|  7|  8|  9|  0|  -|  =|Backsp |
+   * |Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backsp|
    * |-----------------------------------------------------------|
-   * |Tab  |  Q|  W|  E|  R|  T|  Y|  U|  I|  O|  P|  [|  ]|  \  |
+   * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |  \  |
    * |-----------------------------------------------------------|
-   * |CAPS   |  A|  S|  D|  F|  G|  H|  J|  K|  L|  ;|  '|Return |
+   * | Caps  | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
    * |-----------------------------------------------------------|
-   * |Shift   |  Z|  X|  C|  V|  B|  N|  M|  ,|  .|  /|Shift     |
+   * | Shift  | Z | X | C | V | B | N | M | , | . | / |    Shift |
    * |-----------------------------------------------------------|
-   * |Ctrl|Gui |Alt |      Space            |Alt |Gui |FN  |Ctrl |
+   * |Ctrl|GUI |Alt |         Space         | Alt| GUI| Fn | Ctrl|
    * `-----------------------------------------------------------'
    */
-[_BL] = LAYOUT_60_ansi(
-  SFT_ESC, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   KC_MINS, KC_EQL, KC_BSPC, \
-  KC_TAB,  KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC, KC_RBRC,KC_BSLS, \
-  KC_CAPS, KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN,KC_QUOT,         KC_ENT,  \
-  KC_LSFT,         KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT, KC_SLSH,         KC_RSFT, \
-  KC_LCTL, KC_LGUI,KC_LALT,                KC_SPC,                                 KC_RALT,KC_RGUI, MO(_FL),KC_RCTL),
+  [_BL] = LAYOUT_60_ansi(
+    SFT_ESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, \
+    KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, \
+    KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  \
+    KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, \
+    KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, KC_RGUI, MO(_FL), KC_RCTL
+  ),
 
   /* Keymap _FL: Function Layer
    * ,-----------------------------------------------------------.
-   * |   |   |   |   |   |   |   |   |   |   |   |   |   |  RESET|
+   * | ` |   |   |   |   |   |   |   |   |   |   |   |   | Reset |
    * |-----------------------------------------------------------|
-   * |     |   |   |   |   |   |   |   |   |   |   |BL-|BL+|BL   |
+   * |     |   |   |   |   |   |   |   |   |   |   |BL-|BL+|  BL |
    * |-----------------------------------------------------------|
-   * |      |   |   |   |   |   |   |       |   |   |   |        |
+   * |      |   |   |   |   |   |   |   |   |   |   |   |        |
    * |-----------------------------------------------------------|
-   * |        | F1|F2 | F3|F4 | F5| F6| F7| F8|   |   |          |
+   * |        |   |   |   |   |   |   |   |   |   |   |          |
    * |-----------------------------------------------------------|
    * |    |    |    |                        |    |    |    |    |
    * `-----------------------------------------------------------'
    */
-[_FL] = LAYOUT_60_ansi(
-  #ifdef RGBLIGHT_ENABLE
-  KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,  \
-  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \
-  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______, \
-  _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______, \
-  _______,_______,_______,                 _______,                       _______,_______,_______, _______),
-  #else
-  KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,  \
-  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC, BL_INC,BL_TOGG, \
-  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
-  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
-  _______,_______,_______,                _______,                        _______,_______,_______,_______),
-  #endif
+  [_FL] = LAYOUT_60_ansi(
+    KC_GRV,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,   \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC,  BL_INC,  BL_TOGG, \
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, \
+    _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, \
+    _______, _______, _______,                            _______,                            _______, _______, _______, _______
+  )
 };
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   switch (keycode) {
     case SFT_ESC:
       if (record->event.pressed) {
-        if (get_mods() & MODS_SHIFT_MASK) {
+        if (get_mods() & MOD_MASK_SHIFT) {
           add_key(KC_GRV);
           send_keyboard_report();
         } else {
@@ -76,7 +69,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
           send_keyboard_report();
         }
       } else {
-        if (get_mods() & MODS_SHIFT_MASK) {
+        if (get_mods() & MOD_MASK_SHIFT) {
           del_key(KC_GRV);
           send_keyboard_report();
         } else {
diff --git a/keyboards/satan/pinout.txt b/keyboards/satan/pinout.txt
deleted file mode 100644 (file)
index d1ad4ac..0000000
+++ /dev/null
@@ -1 +0,0 @@
-For WS2812B LED strip support, connect DIN from strip to PE2 on ATmega32u4 controller (see reference image controller.jpg)
\ No newline at end of file
index a2552edf8db9188cfdab8ec7439800de4939c684..7eb272cf304bc87a52583131be7de5b8db9cd4a0 100644 (file)
@@ -1,15 +1,33 @@
-Satan GH60
-==========
+# Satan GH60
 
-![controller](https://i.imgur.com/9vyRBoT.jpg)
-![power](https://i.imgur.com/pHMZHLP.jpg)
+A clone of the GH60 60% keyboard, with full backlighting support.
 
 Keyboard Maintainer: QMK Community  
 Hardware Supported: Satan GH60 PCB  
-Hardware Availability: https://1upkeyboards.com/gh60-satan-pcb.html
+Hardware Availability: https://www.1upkeyboards.com/shop/controllers/gh60-satan-pcb/
 
 Make example for this keyboard (after setting up your build environment):
 
     make satan: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.
+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).
+
+## RGB Underglow (WS2812B LED Strip)
+
+This board also supports underglow with a slight mod.
+
+Connect the DIN pad of the LED strip to PE2 on the ATmega32U4, like so:
+
+![controller](https://i.imgur.com/9vyRBoT.jpg)
+
+Then connect VCC and GND to pins 1 and 6 at the bottom of the PCB:
+
+![power](https://i.imgur.com/pHMZHLP.jpg)
+
+## ISP Header
+
+If you want to flash another bootloader (such as QMK-DFU), or can't get into the bootloader in the first place, the row of pins at the bottom can be used to ISP flash the board:
+
+| 1 |  2 | 3 |  4 |   5 | 6 |  7 |
+|---|----|---|----|-----|---|----|
+|VCC|MISO|SCK|MOSI|RESET|GND|*NC*|
index 98200ab02ca00ffb9eae77655f2efd8df28a56c7..51161490e4d2d2217a2545fcae7da31cfdb1a1c9 100644 (file)
@@ -1,6 +1,4 @@
-
 # MCU name
-#MCU = at90usb1287
 MCU = atmega32u4
 
 # Processor frequency.
@@ -16,7 +14,6 @@ MCU = atmega32u4
 #     software delays.
 F_CPU = 16000000
 
-
 #
 # LUFA specific
 #
@@ -39,7 +36,6 @@ 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
@@ -48,21 +44,20 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
 #   USBaspLoader     2048
 OPT_DEFS += -DBOOTLOADER_SIZE=4096
 
-
 # Build Options
 #   comment out to disable the options.
 #
-BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no   # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
-CONSOLE_ENABLE = yes   # Console for debug(+400)
+BOOTMAGIC_ENABLE = no   # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no    # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes   # Audio control and System control(+450)
+CONSOLE_ENABLE = yes    # Console for debug(+400)
 COMMAND_ENABLE = yes    # Commands for debug and configuration
-NKRO_ENABLE = yes              # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes       # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 RGBLIGHT_ENABLE = yes   # Enable keyboard underlight functionality (+4870)
 BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality (+1150)
-MIDI_ENABLE = no               # MIDI controls
+MIDI_ENABLE = no        # MIDI controls
 AUDIO_ENABLE = no
-UNICODE_ENABLE = no            # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+UNICODE_ENABLE = no     # Unicode
+BLUETOOTH_ENABLE = no   # Enable Bluetooth with the Adafruit EZ-Key HID
 
-LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift
\ No newline at end of file
+LAYOUTS = 60_ansi 60_iso 60_ansi_split_bs_rshift
index d2c5d5c2054af68b060c1d0de80a77dbe7576582..8542a57c43a7233073135b27db8061c3223c8e15 100644 (file)
@@ -1,30 +1,24 @@
 #include "satan.h"
-#include "led.h"
 
 void matrix_init_kb(void) {
-       // put your keyboard start-up code here
-       // runs once when the firmware starts up
-       matrix_init_user();
-       led_init_ports();
+  matrix_init_user();
+  led_init_ports();
 };
 
 void matrix_scan_kb(void) {
-       // put your looping keyboard code here
-       // runs every cycle (a lot)
-       matrix_scan_user();
+  matrix_scan_user();
 };
 
 void led_init_ports(void) {
-    // * Set our LED pins as output
-    DDRB |= (1<<2);
+  setPinOutput(B2);
 }
 
 void led_set_kb(uint8_t usb_led) {
-    if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
-        // Turn capslock on
-        PORTB &= ~(1<<2);
-    } else {
-        // Turn capslock off
-        PORTB |= (1<<2);
-    }
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    // Turn Caps Lock LED on
+    writePinLow(B2);
+  } else {
+    // Turn Caps Lock LED off
+    writePinHigh(B2);
+  }
 }
index a2a59846012677edc6a46b99219e951e7bcddafa..baa669fc969473a5cb0e87fdd6fa756c737fc1d9 100644 (file)
@@ -1,12 +1,11 @@
-#ifndef SATAN_H
-#define SATAN_H
+#pragma once
 
 #include "quantum.h"
 
 // readability
 #define XXX KC_NO
 
-/* Satan GH60 matrix layout (3c is right of 3d, 3d is shift)
+/* All keys (3c is to the right of 3d, 3d is Right Shift)
  * ,-----------------------------------------------------------.
  * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
  * |-----------------------------------------------------------|
 // The first section contains all of the arguments
 // The second converts the arguments into a two-dimensional array
 #define LAYOUT_all( \
-    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
-    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
-    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
-    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
-    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+  k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
 ) \
 { \
-    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
-    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
-    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
-    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
-    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
+  {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+  {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+  {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+  {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+  {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
 }
 
-
-/* Satan GH60 ANSI layout-B
- * ,-----------------------------------------------------------.
- * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c|    0d |
- * |-----------------------------------------------------------|
- * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
- * |-----------------------------------------------------------|
- * | 20   | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b|     2d |
- * |-----------------------------------------------------------|
- * | 30     | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|  3d | 3c |
- * |-----------------------------------------------------------|
- * | 40 | 41 | 42 |        45              | 4a | 4b | 4c | 4d |
- * `-----------------------------------------------------------'
- */
-#define LAYOUT_60_ansi_split_rshift( \
-    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
-    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
-    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
-    k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
-    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
-) \
-{ \
-    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
-    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
-    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
-    {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
-    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
-}
-
-/* Satan GH60 ANSI layout
+/* ANSI
  * ,-----------------------------------------------------------.
  * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c|    0d |
  * |-----------------------------------------------------------|
  * `-----------------------------------------------------------'
  */
 #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, k1d, \
-    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
-    k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
-    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
+  k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
+  k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
 ) \
 { \
-    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
-    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
-    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
-    {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
-    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
+  {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+  {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+  {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+  {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+  {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
 }
 
-/* Satan GH60 ISO layout
+/* ISO
  * ,-----------------------------------------------------------.
  * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c|    0d |
  * |-----------------------------------------------------------|
  * `-----------------------------------------------------------'
  */
 #define LAYOUT_60_iso( \
-    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
-    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,  \
-    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
-    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
-    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,  \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b,      k3d, \
+  k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
 ) \
 { \
-    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
-    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX}, \
-    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
-    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
-    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
+  {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+  {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX}, \
+  {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+  {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+  {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
 }
 
-/* Satan GH60 ANSI split backspace, split right shift matrix layout
- *   a.k.a. HHKB layout
+/* ANSI with split Backspace and Right Shift (HHKB layout)
  * ,-----------------------------------------------------------.
  * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
  * |-----------------------------------------------------------|
  * | 40 | 41 | 42 |        45              | 4a | 4b | 4c | 4d |
  * `-----------------------------------------------------------'
  */
-
 #define LAYOUT_60_ansi_split_bs_rshift( \
-    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
-    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
-    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
-    k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
-    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
+  k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+  k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
 ) \
 { \
-    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
-    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
-    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
-    {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
-    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
+  {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+  {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+  {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+  {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+  {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
 }
 
-/* ISO split right shift key matrix layout
+/* ISO with split Right Shift
  * ,-----------------------------------------------------------.
- * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c|    0d |
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
  * |-----------------------------------------------------------|
  * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|     |
  * |------------------------------------------------------.    |
  * | 40 | 41 | 42 |        45              | 4a | 4b | 4c | 4d |
  * `-----------------------------------------------------------'
  */
-#define LAYOUT_60_iso_split_rshift( \
-    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
-    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,      \
-    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
-    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
-    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
-) { \
-    { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d }, \
-    { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX }, \
-    { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d }, \
-    { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d }, \
-    { k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d }, \
+#define LAYOUT_60_iso_split_bs_rshift( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+  k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+  {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+  {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c}, \
+  {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+  {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+  {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
 }
 
-/* ISO w/ split right shift key matrix layout
+/* ANSI with split Right Shift
  * ,-----------------------------------------------------------.
- * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c|    0d |
+ * |-----------------------------------------------------------|
+ * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|  1d |
+ * |-----------------------------------------------------------|
+ * | 20   | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b|     2d |
+ * |-----------------------------------------------------------|
+ * | 30     | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b|  3d | 3c |
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 |        45              | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+ */
+#define LAYOUT_60_ansi_split_rshift( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,      k2d, \
+  k30,      k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+  k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) \
+{ \
+  {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+  {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+  {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+  {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+  {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d}  \
+}
+
+/* ISO with split Right Shift
+ * ,-----------------------------------------------------------.
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c|    0d |
  * |-----------------------------------------------------------|
  * | 10  | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c|     |
  * |------------------------------------------------------.    |
  * | 40 | 41 | 42 |        45              | 4a | 4b | 4c | 4d |
  * `-----------------------------------------------------------'
  */
-#define LAYOUT_60_iso_split_bs_rshift( \
-    k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
-    k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
-    k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
-    k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
-    k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
-) \
-{ \
-    {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
-    {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c}, \
-    {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
-    {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
-    {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d}  \
+#define LAYOUT_60_iso_split_rshift( \
+  k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+  k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c,      \
+  k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+  k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+  k40, k41, k42,           k45,                     k4a, k4b, k4c, k4d  \
+) { \
+  { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d }, \
+  { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX }, \
+  { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d }, \
+  { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d }, \
+  { k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d }, \
 }
-
-void matrix_init_user(void);
-void matrix_scan_user(void);
-
-#endif
index 36f483c11194dc5347f9da243d2d58e3c5429ea6..8533e6f6d642b3d78b83a05bc09bc38cfce2302c 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 2c852d181991103c54775584f2f4e3cce60eed4a..a3ed4f762a6eeed9c25e4d72489329e581caaa87 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 8d110dbd5bcbbb150d90182d985fc895f1e92485..6f97d87e1ba293c42b863ff369acd42e6fc24472 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "scrabblepad.h"
+#include QMK_KEYBOARD_H
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 [0] = LAYOUT( /* Base */
index 0f756350514c248c3f92d5264af4a99344a44bee..4496c59100617fc8c9e820df1515a623273b5d14 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
index f80dbe3be70f2432d4191711844e2a8a828a53b2..7482ef5b81134c95182ec76ec6aef27ac98d1882 100644 (file)
@@ -41,8 +41,6 @@
                 {"label":"D", "x":3.5, "y":2},
                 {"label":"F", "x":4.5, "y":2},
                 {"label":"G", "x":5.5, "y":2},
-                {"label":"PgDn", "x":6.5, "y":2.5, "h":1.5},
-                {"label":"]", "x":9.5, "y":2.5, "h":1.5},
                 {"label":"H", "x":10.5, "y":2},
                 {"label":"J", "x":11.5, "y":2},
                 {"label":"K", "x":12.5, "y":2},
@@ -55,6 +53,8 @@
                 {"label":"C", "x":3.5, "y":3},
                 {"label":"V", "x":4.5, "y":3},
                 {"label":"B", "x":5.5, "y":3},
+                {"label":"PgDn", "x":6.5, "y":2.5, "h":1.5},
+                {"label":"]", "x":9.5, "y":2.5, "h":1.5},
                 {"label":"N", "x":10.5, "y":3},
                 {"label":"M", "x":11.5, "y":3},
                 {"label":",", "x":12.5, "y":3},
                 {"label":"Down", "x":14.5, "y":4},
                 {"label":"Right", "x":15.5, "y":4},
                 {"label":"Space", "x":5.5, "y":5},
-                {"label":"Space", "x":5.5, "y":6},
                 {"label":"Ins", "x":6.5, "y":5},
-                {"label":"Del", "x":6.5, "y":6},
                 {"label":"Home", "x":9.5, "y":5},
-                {"label":"End", "x":9.5, "y":6},
                 {"label":"Space", "x":10.5, "y":5},
+                {"label":"Space", "x":5.5, "y":6},
+                {"label":"Del", "x":6.5, "y":6},
+                {"label":"End", "x":9.5, "y":6},
                 {"label":"Space", "x":10.5, "y":6}
             ]
         },
                 {"label":"D", "x":3.5, "y":2},
                 {"label":"F", "x":4.5, "y":2},
                 {"label":"G", "x":5.5, "y":2},
-                {"label":"PgDn", "x":6.5, "y":2.5, "h":1.5},
-                {"label":"]", "x":9.5, "y":2.5, "h":1.5},
                 {"label":"H", "x":10.5, "y":2},
                 {"label":"J", "x":11.5, "y":2},
                 {"label":"K", "x":12.5, "y":2},
                 {"label":"C", "x":3.5, "y":3},
                 {"label":"V", "x":4.5, "y":3},
                 {"label":"B", "x":5.5, "y":3},
+                {"label":"PgDn", "x":6.5, "y":2.5, "h":1.5},
+                {"label":"]", "x":9.5, "y":2.5, "h":1.5},
                 {"label":"N", "x":10.5, "y":3},
                 {"label":"M", "x":11.5, "y":3},
                 {"label":",", "x":12.5, "y":3},
                 {"label":"Right", "x":15.5, "y":4},
                 {"label":"Space", "x":5.5, "y":5, "h":2},
                 {"label":"Ins", "x":6.5, "y":5},
-                {"label":"Del", "x":6.5, "y":6},
                 {"label":"Home", "x":9.5, "y":5},
-                {"label":"End", "x":9.5, "y":6},
-                {"label":"Space", "x":10.5, "y":5, "h":2}
+                {"label":"Space", "x":10.5, "y":5, "h":2},
+                {"label":"Del", "x":6.5, "y":6},
+                {"label":"End", "x":9.5, "y":6}
             ]
         }
     }
-}
\ No newline at end of file
+}
index 112836e5e74c9c27e81751f0e5156ee69894f879..0ab49e8bc4804c37c7f4d242d706a350182b87d8 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
 
 // place overrides here
-
-#endif
diff --git a/keyboards/standaside/config.h b/keyboards/standaside/config.h
new file mode 100644 (file)
index 0000000..fa3576c
--- /dev/null
@@ -0,0 +1,204 @@
+
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xF7E0
+#define PRODUCT_ID      0x0412
+#define DEVICE_VER      0x0003
+#define MANUFACTURER    Fate Everywhere
+#define PRODUCT         Stand Aside
+#define DESCRIPTION     A compact 60% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D1, F4, F6, F7, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { F5, D0, D4, C6, D7, E6, B4, B5 }
+#define UNUSED_PINS {}
+
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN C7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Enable RGB Underlighting
+ */
+#define RGB_DI_PIN C7
+#define RGBLED_NUM 12
+#define RGBLIGHT_ANIMATIONS
+
+/* 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/standaside/keymaps/default/config.h b/keyboards/standaside/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..d533d80
--- /dev/null
@@ -0,0 +1,5 @@
+
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/standaside/keymaps/default/keymap.c b/keyboards/standaside/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..0f13cb7
--- /dev/null
@@ -0,0 +1,77 @@
+
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+#define _RAISE 1
+#define _LOWER 2
+
+// Readability keycodes
+#define LOWER   MO(_LOWER)
+#define RAISE   MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* MAIN
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | TAB    | Q      | W      | E      | R      | T      | Y      | U      | I      | O      | P      | Backsp | Delete |   7    |   8    |   9    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ESC    | A      | S      | D      | F      | G      | H      | J      | K      | L      | ;      | '      |  PgUp  |   4    |   5    |   6    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SHIFT  | Z      | X      | C      | V      | B      | N      | M      | ,      | .      | /      | ENTER  |  PgDn  |   1    |   2    |   3    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL  |  PAUS  | GUI    | ALT    | Lower  | Space  |  Space | Raise  | Left   | Down   | Up     | Right  |  Shift |   0    |   .    |  ENTER |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_MAIN] = LAYOUT_ortho_4x16(
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, KC_DEL,  KC_KP_7, KC_KP_8,   KC_KP_9,
+  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_PGUP, KC_KP_4, KC_KP_5,   KC_KP_6,
+  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_PGDN, KC_KP_1, KC_KP_2,   KC_KP_3,
+  KC_LCTL, KC_PAUS, KC_LGUI, KC_LALT, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_RSFT, KC_KP_0, KC_KP_DOT, KC_PENT
+  ),
+
+/* RAISE
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * |    `   |  1     |  2     |  3     |  4     |  5     |  6     |  7     |  8     |  9     |  0     |        | Insert |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        | -      | =      | [      | ]      |   \    |  Home  |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        |        |        |        |  PScr  |  End   |        |        |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |                 |        |  Next  |  Vol-  |  Vol+  |  Play  | NumLok |        |        |        |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_RAISE] = LAYOUT_ortho_4x16(
+  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______, KC_INS,  _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_END,  _______, _______, _______,
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, KC_NLCK, _______, _______, _______
+  ),
+
+/* LOWER
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * |    ~   |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |    (   |    )   |        |        | RGBPWR |  Mode  | Reset  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    _   |    +   |    {   |    }   |   |    |        |  HUE+  |  SAT+  |  VAL+  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |   F7   |   F8   |   F9   |  F10   |  F11   |  F12   |        |        |        |        |        |        |  HUE-  |  SAT-  |  VAL-  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |                 |        |        |        |        |  Mute  |        |  Plain | Rainbo | Larsen |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+  [_LOWER] = LAYOUT_ortho_4x16(
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, RGB_TOG, RGB_MOD, RESET,
+  _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, RGB_HUI, RGB_SAI, RGB_VAI,
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD,
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, RGB_M_P, RGB_M_R, RGB_M_K
+  ),
+
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
\ No newline at end of file
diff --git a/keyboards/standaside/readme.md b/keyboards/standaside/readme.md
new file mode 100644 (file)
index 0000000..ca1cfb2
--- /dev/null
@@ -0,0 +1,15 @@
+# Stand Aside
+
+![Stand Aside](https://i.imgur.com/X6Katar.png)
+
+A compact 60% keyboard designed by Fate Everywhere. Born out of the desire for a Planck with a numpad for technical work. Available for sale (kit and completed) once the store comes up.
+
+Keyboard Maintainer: [Fate Everywhere](https://github.com/fateeverywhere)  
+Hardware Supported: Mark 3 Stand Aside.  
+Hardware Availability: Seven Store (https://store.7storm.org).
+
+Make example for this keyboard (after setting up your build environment):
+
+    make standaside: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/standaside/rules.mk b/keyboards/standaside/rules.mk
new file mode 100644 (file)
index 0000000..a7ebc21
--- /dev/null
@@ -0,0 +1,73 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# 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
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI 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)
+RGBLIGHT_ENABLE = yes       # Enable RGB underlighting support
+
diff --git a/keyboards/standaside/standaside.c b/keyboards/standaside/standaside.c
new file mode 100644 (file)
index 0000000..904e92d
--- /dev/null
@@ -0,0 +1,14 @@
+
+#include "standaside.h"
+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/standaside/standaside.h b/keyboards/standaside/standaside.h
new file mode 100644 (file)
index 0000000..b661696
--- /dev/null
@@ -0,0 +1,29 @@
+
+#ifndef STANDASIDE_H
+#define STANDASIDE_H
+
+#include "quantum.h"
+#define ___ KC_NO
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_ortho_4x16( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \
+    K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, K31, \
+    K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, \
+    K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, K61, K62, K63 \
+) \
+{ \
+    { K00, K02, K04, K06, K08, K10, K12, K14 }, \
+    { K01, K03, K05, K07, K09, K11, K13, K15 }, \
+    { K16, K18, K20, K22, K24, K26, K28, K30 }, \
+    { K17, K19, K21, K23, K25, K27, K29, K31 }, \
+    { K32, K34, K36, K38, K40, K42, K44, K46 }, \
+    { K33, K35, K37, K39, K41, K43, K45, K47 }, \
+    { K48, K50, K52, K54, K56, K58, K60, K62 }, \
+    { K49, K51, K53, K55, K57, K59, K61, K63 } \
+}
+
+#endif
diff --git a/keyboards/staryu/backlight_staryu.c b/keyboards/staryu/backlight_staryu.c
deleted file mode 100644 (file)
index 6fb9713..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "backlight.h"
-#include <avr/pgmspace.h>
-
-/* backlighting */
-void init_backlight_led(void)
-{
-    DDRC |= (1<<PC2 | 1<<PC7);
-    DDRD |= (1<<PD5 | 1<<PD6);
-    DDRB |= (1<<PB0);
-}
-
-void backlight_led_off(uint8_t index)
-{
-    switch (index) {
-        case 0:
-            PORTC |= (1<<PC2);
-            break;
-        case 1:
-            PORTC |= (1<<PC7);
-            break;
-        case 2:
-            PORTD |= (1<<PD5);
-            break;
-        case 3:
-            PORTD |= (1<<PD6);
-            break;
-        case 4:
-            PORTB |= (1<<PB0);
-            break;
-    }
-}
-
-void backlight_led_on(uint8_t index)
-{
-    switch (index) {
-        case 0:
-            PORTC &= ~(1<<PC2);
-            break;
-        case 1:
-            PORTC &= ~(1<<PC7);
-            break;
-        case 2:
-            PORTD &= ~(1<<PD5);
-            break;
-        case 3:
-            PORTD &= ~(1<<PD6);
-            break;
-        case 4:
-            PORTB &= ~(1<<PB0);
-            break;
-    }
-}
index f718b970c2d4f28d60a1f709dba8908a2777eecd..3272283e99e83c348598c4b1da8a7de4e8c87d73 100644 (file)
@@ -1,12 +1,21 @@
-#ifndef STARYU_BL
-#define STARYU_BL
+/*
+Copyright 2019
 
-#include <stdint.h>
+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.
 
-void init_backlight_led(void);
+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.
 
-void backlight_led_on(uint8_t index);
+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
 
-void backlight_led_off(uint8_t index);
-
-#endif
+// Add backwards compatibility for existing keymaps
+#define backlight_led_off(i) backlight_set_value(i, 0)
+#define backlight_led_on(i) backlight_set_value(i, 1)
\ No newline at end of file
index 268fe991acf105437c0ad8b1eeb8a1a6c598f148..7f8b39ba7b60ce95b4cd92f131d7378a5b4cf7f5 100755 (executable)
@@ -14,8 +14,7 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
 
 #include "config_common.h"
 
@@ -32,43 +31,38 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MATRIX_COLS 5
 
 /* key matrix pins */
-#define MATRIX_ROW_PINS {  }
+#define MATRIX_ROW_PINS { NO_PIN }
 #define MATRIX_COL_PINS { D0, D1, D2, D3, D4 }
 #define UNUSED_PINS
 
-// from light_ws2812_config @
-// https://github.com/kairyu/tmk_keyboard_custom/tree/master/keyboard/staryu
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
 #define RGB_DI_PIN C6
-#define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 1     // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+// #ifdef RGB_DI_PIN
+//   #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
 
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
+#define BACKLIGHT_LEVELS 1 // either on/off
+#define RGBLIGHT_LIMIT_VAL 200
 
 /* Set 0 if debouncing isn't needed */
 #define DEBOUNCING_DELAY 5
-
-// TODO backlighting
-#define BACKLIGHT_LEVELS 10
-// #define BACKLIGHT_PIN B7
-/*
-Backlight: C2, C7, D5, D6, B0
-switch (index) {
-    case 0:
-        PORTC &= ~(1<<PC2);
-        break;
-    case 1:
-        PORTC &= ~(1<<PC7);
-        break;
-    case 2:
-        PORTD &= ~(1<<PD5);
-        break;
-    case 3:
-        PORTD &= ~(1<<PD6);
-        break;
-    case 4:
-        PORTB &= ~(1<<PB0);
-        break;
-*/
-
-#endif
index 3dc480299f1c22baa11f1cff7bd30322bb5e6dfc..8c47ff44abd112b65b6267003a5120a2c75b373c 100755 (executable)
@@ -15,68 +15,90 @@ 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
-#include "action_layer.h"
 
 enum layers {
   _LAYER0,
   _LAYER1,
   _LAYER2,
-  _LAYER3
+  _LAYER3,
+  _LAYER4
 };
 
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_LAYER0] = LAYOUT(
+/* ┌─────────┬─────────┬─────────┐ */
+              KC_UP,    TO(_LAYER1),
+/* ├─────────┼─────────┼─────────┤ */
+    KC_LEFT,  KC_DOWN,  KC_RIGHT
+/* └─────────┴─────────┴─────────┘ */
+  ),
+
+  [_LAYER1] = LAYOUT(
+/* ┌─────────┬─────────┬─────────┐ */
+              KC_PGUP,  TO(_LAYER2),
+/* ├─────────┼─────────┼─────────┤ */
+    KC_HOME,  KC_PGDN,  KC_END
+/* └─────────┴─────────┴─────────┘ */
+  ),
+
+  [_LAYER2] = LAYOUT(
+/* ┌─────────┬─────────┬─────────┐ */
+              KC_MSEL,  TO(_LAYER3),
+/* ├─────────┼─────────┼─────────┤ */
+    KC_MPRV,  KC_MPLY,  KC_MNXT
+/* └─────────┴─────────┴─────────┘ */
+  ),
+
+  [_LAYER3] = LAYOUT(
+/* ┌─────────┬─────────┬─────────┐ */
+              KC_MS_U,  TO(_LAYER4),
+/* ├─────────┼─────────┼─────────┤ */
+    KC_MS_L,  KC_MS_D,  KC_MS_R
+/* └─────────┴─────────┴─────────┘ */
+  ),
+
+  [_LAYER4] = LAYOUT(
+/* ┌─────────┬─────────┬─────────┐ */
+              XXXXXXX,  TO(_LAYER0),
+/* ├─────────┼─────────┼─────────┤ */
+    RGB_TOG,  BL_TOGG,  BL_STEP 
+/* └─────────┴─────────┴─────────┘ */
+  ),
 
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
-    /* Keymap 0
-     * ,-----------.
-     * |   |Up |Fn0|
-     * |---+---+---|
-     * |Lef|Dow|Rig|
-     * `-----------'
-     */
-    LAYOUT( KC_UP,  TO(_LAYER1), KC_LEFT,KC_DOWN,KC_RIGHT ),
-    /* Keymap 1
-     * ,-----------.
-     * |   |PgU|Fn1|
-     * |---+---+---|
-     * |Hom|PgD|End|
-     * `-----------'
-     */
-    LAYOUT( KC_PGUP,TO(_LAYER2), KC_HOME,KC_PGDN,KC_END  ),
-    /* Keymap 2
-     * ,-----------.
-     * |   |Sel|Fn2|
-     * |---+---+---|
-     * |Pre|Pla|Nex|
-     * `-----------'
-     */
-    LAYOUT( KC_MSEL,TO(_LAYER3), KC_MPRV,KC_MPLY,KC_MNXT ),
-    /* Keymap 3
-     * ,-----------.
-     * |   |MsU|Fn3|
-     * |---+---+---|
-     * |MsL|MsD|MsR|
-     * `-----------'
-     */
-    LAYOUT( KC_MS_U,TO(_LAYER0), KC_MS_L,KC_MS_D,KC_MS_R ),
-    // /* Keymap 4
-    //  * ,-----------.
-    //  * |   |Fn6|Fn4|
-    //  * |---+---+---|
-    //  * |Fn7|Fn5|Fn8|
-    //  * `-----------'
-    //  */
-    // LAYOUT( FN6, FN4, FN7, FN5, FN8  ),
 };
 
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
-  return MACRO_NONE ;
-}
+void eeconfig_init_user(void) {
+  // use the non noeeprom versions, to write these values to EEPROM too
+  rgblight_enable();
+  rgblight_mode(RGBLIGHT_MODE_BREATHING+1);
 
-void matrix_init_user(void) {
+  backlight_enable();
 }
 
-void matrix_scan_user(void) {
+void keyboard_post_init_user(void) {
+  //layer_state_set_user is not called for inital state - set it here
+  rgblight_sethsv_noeeprom_white();
 }
 
-void led_set_user(uint8_t usb_led) {
+uint32_t layer_state_set_user(uint32_t state) {
+  switch (biton32(state)) {
+    case _LAYER1:
+        rgblight_sethsv_noeeprom_cyan();
+        break;
+    case _LAYER2:
+        rgblight_sethsv_noeeprom_magenta();
+        break;
+    case _LAYER3:
+        rgblight_sethsv_noeeprom_red();
+        break;
+    case _LAYER4:
+        rgblight_sethsv_noeeprom_orange();
+        break;
+    case _LAYER0:
+    default: //  for any other layers, or the default layer
+        rgblight_sethsv_noeeprom_white();
+        break;
+    }
+  return state;
 }
index 3e043bbcd5bad76fffb2a57e2c2cbcd6d38b5573..ad4873a39a0e3c6cfa44b0378ad3d8e64c04a026 100755 (executable)
@@ -1,10 +1,6 @@
 # MCU name
 MCU = atmega32u2
 
-BOOTLOADER = lufa-dfu
-
-SRC = backlight_staryu.c
-
 # 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
@@ -40,21 +36,43 @@ 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 = lufa-dfu
+
 
-# Boot Section Size in *bytes*
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
+# 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
 #   comment out to disable the options.
 #
-BOOTMAGIC_ENABLE = no  # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no   # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
-CONSOLE_ENABLE = yes   # Console for debug(+400)
-COMMAND_ENABLE = no    # Commands for debug and configuration
-SLEEP_LED_ENABLE = no  # Breathing sleep LED during USB suspend
-NKRO_ENABLE = no               # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes  # In-switch LEDs
-AUDIO_ENABLE = no      # There is no available timer or pin for audio on the NovelPad
-RGBLIGHT_ENABLE = yes  # RGB LEDs for underglow, installed and enabled by default for the NovelPad
+BOOTMAGIC_ENABLE = lite     # 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 = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes       # 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 6dcaaea0e859b4b57357380c56195cfecbca4fcd..20334c0b78131a8f764820c6d8031cc1ab91f2e6 100755 (executable)
@@ -15,12 +15,30 @@ 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 "staryu.h"
-#include "backlight_staryu.h"
-
-// for keyboard subdirectory level init functions
-// @Override
-void matrix_init_kb(void) {
-  // call user level keymaps, if any
-  init_backlight_led();
-  matrix_init_user();
+
+#ifdef BACKLIGHT_ENABLE
+
+#ifdef BACKLIGHT_PIN
+  #pragma error "BACKLIGHT_PIN must stay undefined otherwise software pwm is incorrectly used"
+#endif
+
+#define BACKLIGHT_PIN_COUNT 5
+static const pin_t backlight_pins[BACKLIGHT_PIN_COUNT] = { C2, C7, D5, D6, B0 };
+
+void backlight_init_ports(void) {
+  for (uint8_t index = 0; index < BACKLIGHT_PIN_COUNT; index++) {
+    setPinOutput(backlight_pins[index]);
+  }
 }
+
+void backlight_set_value(uint8_t index, uint8_t level) {
+  writePin(backlight_pins[index], !!level);
+}
+
+void backlight_set(uint8_t level) {
+  for (uint8_t index = 0; index < BACKLIGHT_PIN_COUNT; index++) {
+    backlight_set_value(index, level);
+  }
+}
+
+#endif //BACKLIGHT_ENABLE
index 12b8be92e71f4260a976e87aae4d987d8c43e00f..f404dff284e93fb9224c8072481ca184db491cf4 100755 (executable)
@@ -14,15 +14,19 @@ 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 KB_H
-#define KB_H
+#pragma once
 #include "quantum.h"
 
 #define LAYOUT( \
-       K00, K01, \
-       K10, K11, K12 \
+            K00, K01, \
+       K10, K11, K12  \
 ) { \
        { K00, K01, K12, K11, K10 }, \
 }
 
+
+#ifdef BACKLIGHT_ENABLE
+
+void backlight_set_value(uint8_t index, uint8_t level);
+
 #endif
index 4c61581993c31fa85778f3fff458cdce06c9089c..5352ef06c9f2e611da1d89946cbe51137d0f2971 100644 (file)
@@ -1,7 +1,6 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
+// place overrides here
 
 /*
  * MIDI options
@@ -25,5 +24,3 @@
 
 /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
 //#define MIDI_TONE_KEYCODE_OCTAVES 2
-
-#endif
\ No newline at end of file
index 184df24d56a56f76580f4d553029711d53201b80..8def46961a153434e9c7e8acaf4e28d2a4b8d648 100644 (file)
@@ -1,9 +1,4 @@
-#include "subatomic.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#ifdef AUDIO_ENABLE
-  #include "audio.h"
-#endif
+#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.
index a5568e400defe2d37024e7fa9ee07544666b1edb..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1 +1,3 @@
-#include "../../config.h"
+#pragma once
+
+// place overrides here
index 59f5843ea941a6b73bc32dec7a05928558bb430d..29c9071bfa1a6aa94429ac6c230436cfd27e845f 100644 (file)
@@ -1,5 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "rgblight.h"
 
 //Layer definitions
 #define _BL 0
index d4afa65f93208a338d5d2dfec50b45cd7b60756b..9cc6c1bb00dfaf55de4bc9a3daf793de07edec6f 100644 (file)
@@ -1,7 +1,7 @@
 // this is the style you want to emulate.
 // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
 
-#include "telophase.h"
+#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.
@@ -15,7 +15,7 @@ enum telophase_layers
        _ADJUST,
 };
 
-enum telophase_keycodes 
+enum telophase_keycodes
 {
   LOWER = SAFE_RANGE,
   RAISE,
@@ -97,4 +97,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 void matrix_scan_user(void) {
                return;
 };
-
index 6ce856178bf0c116573132c2b0e397dec673291a..0ec12435e78b08bb259a94fc4710a644a67bea75 100644 (file)
@@ -1,7 +1,6 @@
 #include QMK_KEYBOARD_H
 
 #ifdef AUDIO_ENABLE
-  #include "audio.h"
   float  tone_caps[][2]  = SONG( CAPS_LOCK_ON_SOUND );
   float  tone_taps[][2]     = SONG( E__NOTE( _A6 ) );
 #endif
index df06a26206275869d2d375ddbeec92b353ffcf10..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
\ No newline at end of file
index cb8e8ece8c0ddff5606fc470b2c6ce4799810e75..8b0f44b5edeb4e6f088d4aeeef1a963bf1ed0540 100644 (file)
@@ -1,6 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "eeconfig.h"
 
 extern keymap_config_t keymap_config;
 
index 060f5922f2c3483e42db99fa6fefa11bc31cde35..b89b05009a64629aacca0666b25d9c86cda8325f 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index df06a26206275869d2d375ddbeec92b353ffcf10..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
\ No newline at end of file
index df06a26206275869d2d375ddbeec92b353ffcf10..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
\ No newline at end of file
diff --git a/keyboards/tmo50/keymaps/pyrol/keymap.c b/keyboards/tmo50/keymaps/pyrol/keymap.c
new file mode 100644 (file)
index 0000000..f67d260
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright 2019 funderburker
+ *
+ * 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
+
+#define CALTDEL LCA(KC_DEL)
+#define TSKMGR C(S(KC_ESC))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  // Default layer
+  [0] = LAYOUT_all(
+               KC_VOLU, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_EQL, KC_BSPC,
+               KC_VOLD, KC_LCTRL, 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_MPLY, 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(3),
+               KC_MUTE, KC_LGUI, KC_LALT, LT(1, KC_SPC), LT(2, KC_SPC), KC_RALT, MO(4)
+  ),
+
+  // Fn1 layer
+  [1] = LAYOUT_all(
+               A(KC_TAB), KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_RBRC, KC_LBRC, KC_DEL,
+               C(KC_C), KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRV, KC_TRNS,
+               C(KC_V), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS, KC_TRNS,
+               C(KC_X), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  //Fn2 layer
+  [2] = LAYOUT_all(
+               A(KC_TAB), KC_TAB,  KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RBRC, KC_LBRC, KC_DEL,
+               C(KC_C), KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TILD, KC_TRNS,
+               C(KC_V), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS, KC_TRNS,
+               C(KC_X), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+
+  // Fn3 layer
+  [3] = LAYOUT_all(
+               CALTDEL, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL,
+               TSKMGR, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, TO(5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_PGUP, KC_TRNS, KC_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
+  ),
+
+  // Fn4 layer
+  [4] = LAYOUT_all(
+       RESET, 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_TRNS, KC_CAPS, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_TRNS, KC_TRNS, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+               KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+  ),
+  // Game layer!
+  [5] = LAYOUT_all(
+               KC_VOLU, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_EQL, KC_BSPC,
+               KC_VOLD, KC_LCTRL, 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_MPLY, 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(3),
+               KC_F12, KC_F13, KC_LALT, KC_SPC, LT(2, KC_SPC), KC_RALT, TO(0)
+  ),
+};
index 9561b0255f2cc8df6274a15d48a257bfcadf2bd7..6f235f6ba8439a4470919bb2e6eb290f86230712 100644 (file)
  * 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
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+// place overrides here
 
-#include "../../config.h"
 
 #ifdef V60_POLESTAR
 #undef V60_POLESTAR
 #endif
-
-#endif
index efd43f41b4e7523c27f96a0212300acf77ceb038..694ab6a6963f51a74934bc6daa5c8a8a739ab7b0 100644 (file)
@@ -1,7 +1,7 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
+
+// place overrides here
 
-#include "../../config.h"
 #include "matrix_types.h"
 
 /* USB Device descriptor parameter */
@@ -77,5 +77,3 @@ KEYMAP_MASTER(MATRIX_LAYER,                      NUMERIC_NORMAL,          HOMING
       k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, KC_NO  \
 )
 */
-
-#endif
\ No newline at end of file
index af60a8bd7f6b17c910ca9adbc7abba4e9baeeea4..18fb7c16d76ab1d2f2cfea5274a82f57a3aa3373 100644 (file)
@@ -1,13 +1,6 @@
-#include "vision_division.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
 #include "led.h"
 
-#ifdef AUDIO_ENABLE
-    #include "audio.h"
-    #include "song_list.h"
-#endif
-
 enum keyboard_layers {
   LAYER_QWERTY = 0,
   LAYER_UPPER,
diff --git a/keyboards/vitamins_included/keymaps/juno/keymap.c b/keyboards/vitamins_included/keymaps/juno/keymap.c
new file mode 100644 (file)
index 0000000..5fa8b4c
--- /dev/null
@@ -0,0 +1,293 @@
+#include QMK_KEYBOARD_H
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+#define _FN1 5
+#define _DPAD 6
+#define _DPADNUM 7
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  ADJUST,
+  
+  FN1,
+  DP_ON,
+  DP_OFF
+};
+
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ESC  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |  App | Ctrl | GUI  |  Alt |Lower |   SpaceFn   |Raise | Left | 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, RSFT_T(KC_ENT), \
+  KC_APP,  KC_LCTL, KC_LGUI, KC_LALT, LOWER,   LT(_FN1, KC_SPC), 
+                                                                                          LT(_FN1, KC_SPC), RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC, \
+  KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   '  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+  KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC, \
+  KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
+  KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |RESET |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+  RESET,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |      |      |      |      |RESET |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+  KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC, \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, RESET, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |RGB_MOD|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] =  LAYOUT_ortho_4x12( \
+  _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+  _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD \
+),
+
+// Two personal additional layers below
+// There's no brite key
+
+/* Function (personal function layer)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Vol+ | PgUp |  Up  | PdDn | Ins  |      |      |  Up  |      | PScr |      |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      | Vol- | Left | Down | Right| Home |      | Left | Down |Right |      | Del  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      | Prev | Play | Next |      | End  |      |      | Vol- | Vol+ | Mute |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Caps |      |      |      |      |    Space    |      | DP_ON|      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_FN1] = LAYOUT_ortho_4x12( \
+  _______, KC_VOLU, KC_PGUP, KC_UP,   KC_PGDN, KC_INS,  _______, _______, KC_UP,   _______, KC_PSCR, _______, \
+  _______, KC_VOLD, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_DEL,  \
+  _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_END,  _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, \
+  KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DP_ON,   _______, _______, _______ \
+),
+
+/* DPAD layer, for active arrow cluster at the bottom right corner
+
+ * ,-----------------------------------------------------------------------------------.
+ * | 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  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI  | Alt  |      |DNUM  |    Space    |      |DP_OFF| Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_DPAD] = 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_UP,   KC_ENT , \
+  KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, MO(_DPADNUM),
+                                                                                          KC_SPC,  KC_SPC,  LOWER,   DP_OFF,  KC_LEFT, KC_DOWN, KC_RGHT \
+),
+
+// Extended layer for weapon switchings
+
+[_DPADNUM] = LAYOUT_ortho_4x12( \
+  XXXXXXX, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    XXXXXXX  , \
+  XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6  , \
+  _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12 , \
+  _______, _______, _______, XXXXXXX, MO(_DPADNUM),
+                                                                                          XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX,   XXXXXXX,   XXXXXXX,   XXXXXXX   \
+)
+
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        persistent_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        persistent_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        persistent_default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    case LOWER:
+      if (record->event.pressed) {
+        layer_on(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_LOWER);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case RAISE:
+      if (record->event.pressed) {
+        layer_on(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      } else {
+        layer_off(_RAISE);
+        update_tri_layer(_LOWER, _RAISE, _ADJUST);
+      }
+      return false;
+      break;
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+         
+        // Additional personal custom functions          
+
+       case KC_CAPS:
+               if (record->event.pressed) {
+                       #ifdef AUDIO_ENABLE
+                       if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+                       //      PLAY_SONG(caps_song_off);
+                       } else {
+                       //      PLAY_SONG(caps_song_on);
+                       }
+                       #endif
+               }
+               return true; // process the actual function of Caps Lock
+               //break;
+               
+       case DP_ON:
+               if (record->event.pressed) {
+                       
+               } else {
+                       // activated upon release
+                       #ifdef AUDIO_ENABLE
+                       // PLAY_SONG(dpad_song_on);
+                       #endif
+                       
+                       layer_off(_FN1);
+                       layer_on(_DPAD);
+               }
+               
+       case DP_OFF:
+               if (record->event.pressed) {
+                       // deactivated upon pressdown
+                       #ifdef AUDIO_ENABLE     
+                       // PLAY_SONG(dpad_song_off);
+                       #endif
+                       
+                       //layer_off(_FN1); // do not put in this line
+                       layer_off(_DPAD);       
+               }
+  }
+  return true;
+}
diff --git a/keyboards/vitamins_included/keymaps/juno/rules.mk b/keyboards/vitamins_included/keymaps/juno/rules.mk
new file mode 100644 (file)
index 0000000..424b208
--- /dev/null
@@ -0,0 +1,16 @@
+MIDI_ENABLE=no
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+NKRO_ENABLE = no           # USB Nkey Rollover
+AUDIO_ENABLE = no
+
+## BOOTMAGIC_ENABLE = yes      # Virtual DIP switch configuration
+## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
+
+MOUSEKEY_ENABLE = no   # Mouse keys
+EXTRAKEY_ENABLE = yes  # Audio control and System control
+CONSOLE_ENABLE = no            # Console for debug
+COMMAND_ENABLE = no            # Commands for debug and configuration
+
+#SLEEP_LED_ENABLE = yes  # Breathing sleep LED during USB suspend
\ No newline at end of file
diff --git a/keyboards/vitamins_included/keymaps/numpad/config.h b/keyboards/vitamins_included/keymaps/numpad/config.h
new file mode 100644 (file)
index 0000000..aba9fa7
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+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
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+//#define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+#ifdef AUDIO_ENABLE
+  #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+                                SONG(DVORAK_SOUND), \
+                                SONG(COLEMAK_SOUND) \
+                              }
+#endif
diff --git a/keyboards/vitamins_included/keymaps/numpad/keymap.c b/keyboards/vitamins_included/keymaps/numpad/keymap.c
new file mode 100644 (file)
index 0000000..1767851
--- /dev/null
@@ -0,0 +1,75 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _NUMPAD 0
+#define _ADJUST 3
+
+enum custom_keycodes {
+  NUMPAD = SAFE_RANGE,
+  ADJUST
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Numpad
+ * ,-----------------------------------------------------------------------------------.
+ * |   0  |   1  |   4  |   7  | nlck |  esc |   0  |   1  |   4  |   7  | nlck |  esc |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |   ,  |   2  |   5  |   8  |   /  |  adj |   ,  |   2  |   5  |   8  |   /  |  adj |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |   .  |   3  |   6  |   9  |   *  |  adj |   .  |   3  |   6  |   9  |   *  |  adj |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Enter|  adj |   -  |   +  |bckspc|  adj | Enter|  adj |   -  |   +  |bckspc|  adj |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_ortho_4x12( \
+  KC_KP_0,     KC_KP_1,    KC_KP_4,     KC_KP_7,    KC_NUMLOCK,     KC_ESC,    KC_KP_0,     KC_KP_1,    KC_KP_4,     KC_KP_7,    KC_NUMLOCK,     KC_ESC, \
+  KC_KP_COMMA, KC_KP_2,    KC_KP_5,     KC_KP_8,    KC_KP_SLASH,    ADJUST,    KC_KP_COMMA, KC_KP_2,    KC_KP_5,     KC_KP_8,    KC_KP_SLASH,    ADJUST, \
+  KC_KP_DOT,   KC_KP_3,    KC_KP_6,     KC_KP_9,    KC_KP_ASTERISK, ADJUST,    KC_KP_DOT,   KC_KP_3,    KC_KP_6,     KC_KP_9,    KC_KP_ASTERISK, ADJUST , \
+  KC_KP_ENTER, ADJUST,     KC_KP_MINUS, KC_KP_PLUS, KC_BSPACE,      ADJUST,    KC_KP_ENTER, ADJUST,     KC_KP_MINUS, KC_KP_PLUS, KC_BSPACE,      ADJUST \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|      |      |      |      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      | RESET RESET |      |      |      |      |RGB_MOD|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] =  LAYOUT_ortho_4x12( \
+  _______, _______,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+  _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, _______, _______, _______,  _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+  _______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, RGB_MOD \
+)
+
+
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case ADJUST:
+      if (record->event.pressed) {
+        layer_on(_ADJUST);
+      } else {
+        layer_off(_ADJUST);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
index d6734d620b42804962887c43a8efc271fab08e8d..96d0c1c36c32a5e2be972cc5ab6ec69313e60773 100644 (file)
@@ -12,7 +12,6 @@
     "LAYOUT_iso": {
       "key_count": 68,
       "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":"Home", "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}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"label":"PgUp", "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}, {"x":12.75, "y":2}, {"label":"PgDn", "x":15, "y":2}, {"x":0, "y":3, "w":1.25}, {"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":"\u2191", "x":14, "y":3}, {"label":"Fn", "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}, {"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":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
-    },
+    }
   }
 }
-}
diff --git a/keyboards/westfoxtrot/cypher/config.h b/keyboards/westfoxtrot/cypher/config.h
new file mode 100644 (file)
index 0000000..48ff816
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+Copyright 2019 westfoxtrot
+
+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       0x21FF
+#define PRODUCT_ID      0xAA97
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    westfoxtrot
+#define PRODUCT         cypher
+#define DESCRIPTION     Cypher
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 10
+
+/*
+ * 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 { B0, B1, B2, B3, B4, F6, B6, B7, C6, C7 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D4, D5, D6, D7, E6, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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
diff --git a/keyboards/westfoxtrot/cypher/cypher.c b/keyboards/westfoxtrot/cypher/cypher.c
new file mode 100644 (file)
index 0000000..d240752
--- /dev/null
@@ -0,0 +1,56 @@
+/* Copyright 2019 westfoxtrot
+ *
+ * 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 "cypher.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) {
+    if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+        writePinHigh(F4);
+    } else {
+        writePinLow(F4);
+    }
+    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(F5);
+    } else {
+        writePinLow(F5);
+    }
+    led_set_user(usb_led);
+}
diff --git a/keyboards/westfoxtrot/cypher/cypher.h b/keyboards/westfoxtrot/cypher/cypher.h
new file mode 100644 (file)
index 0000000..fdff12e
--- /dev/null
@@ -0,0 +1,68 @@
+/* Copyright 2019 westfoxtrot
+ *
+ * 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 ___ KC_NO
+
+#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_ansi( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K50, K51, K52, K53, K54,                   K55, K56, K57, K58,\
+      K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K60, K61, K62, K63,              K65, K66, K67, K68,   \
+               K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K70, K71,      K73,         K75, K76, K77, K78,   \
+       K30,      K32, K33, K34, K35, K36, K37, K38, K39, K80, K81, K82,                K83,      K85, K86, K87, K88,   \
+       K40, K41, K42,                   K46,            K49, K90, K91,    K92, K93, K95, K96, K97, K98   \
+) \
+{ \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09 }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19 }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29 }, \
+    { K30, ___, K32, K33, K34, K35, K36, K37, K38, K39 }, \
+    { K40, K41, K42, ___, ___, ___, K46, ___, ___, K49 }, \
+    { K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
+    { K60, K61, K62, K63, ___, K65, K66, K67, K68 }, \
+    { K70, K71, ___, K73, ___, K75, K76, K77, K78 }, \
+    { K80, K81, K82, K83, ___, K85, K86, K87, K88 }, \
+    { K90, K91, K92, K93, ___, K95, K96, K97, K98 } \
+}
+
+#define LAYOUT_iso( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K50, K51, K52, K53, K54,                   K55, K56, K57, K58,\
+      K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K60, K61, K62,                   K65, K66, K67, K68,   \
+               K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K70, K71, K72, K73,         K75, K76, K77, K78,   \
+       K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K80, K81, K82,                K83,      K85, K86, K87, K88,   \
+       K40, K41, K42,                   K46,            K49, K90, K91,    K92, K93, K95, K96, K97, K98   \
+) \
+{ \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09 }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19 }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29 }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39 }, \
+    { K40, K41, K42, ___, ___, ___, K46, ___, ___, K49 }, \
+    { K50, K51, K52, K53, K54, K55, K56, K57, K58 }, \
+    { K60, K61, K62, ___, ___, K65, K66, K67, K68 }, \
+    { K70, K71, K72, K73, ___, K75, K76, K77, K78 }, \
+    { K80, K81, K82, K83, ___, K85, K86, K87, K88 }, \
+    { K90, K91, K92, K93, ___, K95, K96, K97, K98 } \
+}
diff --git a/keyboards/westfoxtrot/cypher/info.json b/keyboards/westfoxtrot/cypher/info.json
new file mode 100644 (file)
index 0000000..ab139ae
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "keyboard_name": "Cypher",
+  "width": 19.5,
+  "height": 5,
+  "layouts": {
+    "LAYOUT_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}, {"label":"~", "x":14, "y":0}, {"label":"Num Lock", "x":15.5, "y":0}, {"label":"/", "x":16.5, "y":0}, {"label":"*", "x":17.5, "y":0}, {"label":"-", "x":18.5, "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":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.5, "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":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"=", "x":18.5, "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.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4}, {"label":"Alt", "x":2.25, "y":4, "w":1.25}, {"label":"Space", "x":3.5, "y":4, "w":6}, {"label":"Alt", "x":9.5, "y":4, "w":1.25}, {"label":"Win", "x":10.75, "y":4}, {"label":"Ctrl", "x":11.75, "y":4, "w":1.25}, {"label":"Left", "x":13.25, "y":4.25}, {"label":"Down", "x":14.25, "y":4.25}, {"label":"Right", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}, {"label":"Backspace", "x":18.5, "y":4}]    },
+
+    "LAYOUT_iso": {
+ "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}, {"label":"~", "x":14, "y":0}, {"label":"Num Lock", "x":15.5, "y":0}, {"label":"/", "x":16.5, "y":0}, {"label":"*", "x":17.5, "y":0}, {"label":"-", "x":18.5, "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":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.5, "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":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"=", "x":18.5, "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.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4}, {"label":"Alt", "x":2.25, "y":4, "w":1.25}, {"label":"Space", "x":3.5, "y":4, "w":6}, {"label":"Alt", "x":9.5, "y":4, "w":1.25}, {"label":"Win", "x":10.75, "y":4}, {"label":"Ctrl", "x":11.75, "y":4, "w":1.25}, {"label":"Left", "x":13.25, "y":4.25}, {"label":"Down", "x":14.25, "y":4.25}, {"label":"Right", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}, {"label":"Backspace", "x":18.5, "y":4}]    }
+  }
+}
diff --git a/keyboards/westfoxtrot/cypher/keymaps/default-iso/config.h b/keyboards/westfoxtrot/cypher/keymaps/default-iso/config.h
new file mode 100644 (file)
index 0000000..41d7090
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 westfoxtrot
+ *
+ * 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/westfoxtrot/cypher/keymaps/default-iso/keymap.c b/keyboards/westfoxtrot/cypher/keymaps/default-iso/keymap.c
new file mode 100644 (file)
index 0000000..2a08ae8
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright 2019 westfoxtrot
+ *
+ * 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
+
+#define _MA 0
+#define _F1 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_iso( /* Base */
+  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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,\
+  KC_TAB,    KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC, KC_RBRC,                         KC_P7,   KC_P8,   KC_P9,   KC_PPLS,\
+  KC_CAPS,    KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN, KC_QUOT,KC_NUHS,     KC_ENT,            KC_P4,   KC_P5,   KC_P6,   KC_PEQL,\
+  KC_LSFT,KC_NUBS,KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   KC_COMM,KC_DOT,  KC_SLSH,        KC_RSFT,        KC_UP,      KC_P1,   KC_P2,   KC_P3,   KC_PENT,\
+  KC_LCTRL, KC_LGUI,KC_LALT,                KC_SPC,                        KC_RALT,KC_RGUI,MO(_F1),              KC_LEFT,KC_DOWN,KC_RGHT,    KC_P0,   KC_PDOT, KC_BSPC),
+
+[_F1] = LAYOUT_iso( /* Function Layer */
+  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, _______, _______,          _______, _______, _______, _______,\
+  _______,   BL_TOGG,BL_STEP,BL_ON,BL_OFF,BL_INC,BL_DEC,BL_BRTG,_______,_______,_______,_______, _______,                              _______, _______, _______, _______,\
+  _______,    _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,  _______,_______,_______,               _______, _______, _______, _______,\
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,        _______,       _______,     _______, _______, _______, _______,\
+  _______, _______,_______,                _______,                        _______,_______,_______,              _______,_______,_______,      _______, _______, _______),
+
+};
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
diff --git a/keyboards/westfoxtrot/cypher/keymaps/default-iso/readme.md b/keyboards/westfoxtrot/cypher/keymaps/default-iso/readme.md
new file mode 100644 (file)
index 0000000..81a4a67
--- /dev/null
@@ -0,0 +1 @@
+# The default iso keymap for cypher
diff --git a/keyboards/westfoxtrot/cypher/keymaps/default/config.h b/keyboards/westfoxtrot/cypher/keymaps/default/config.h
new file mode 100644 (file)
index 0000000..41d7090
--- /dev/null
@@ -0,0 +1,19 @@
+/* Copyright 2019 westfoxtrot
+ *
+ * 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/westfoxtrot/cypher/keymaps/default/keymap.c b/keyboards/westfoxtrot/cypher/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..1906f93
--- /dev/null
@@ -0,0 +1,49 @@
+/* Copyright 2019 westfoxtrot
+ *
+ * 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
+
+#define _MA 0
+#define _F1 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT_ansi( /* Base */
+  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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,\
+  KC_TAB,    KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,   KC_LBRC, KC_RBRC,     KC_BSLS,            KC_P7,   KC_P8,   KC_P9,   KC_PPLS,\
+  KC_CAPS,    KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   KC_SCLN, KC_QUOT,             KC_ENT,            KC_P4,   KC_P5,   KC_P6,   KC_PEQL,\
+  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_P1,   KC_P2,   KC_P3,   KC_PENT,\
+  KC_LCTRL, KC_LGUI,KC_LALT,                KC_SPC,                        KC_RALT,KC_RGUI,MO(_F1),              KC_LEFT,KC_DOWN,KC_RGHT,    KC_P0,   KC_PDOT, KC_BSPC),
+
+[_F1] = LAYOUT_ansi( /* Function Layer */
+  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, _______, _______,       _______, _______, _______, _______,\
+  _______,   BL_TOGG,BL_STEP,BL_ON,BL_OFF,BL_INC,BL_DEC,BL_BRTG,_______,_______,_______,_______, _______,          _______,            _______, _______, _______, _______,\
+  _______,    _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,  _______,             _______,                  _______, _______, _______, _______,\
+  _______,      _______,_______,_______,_______,_______,_______,_______,_______,_______, _______,        _______,       _______,       _______, _______, _______, _______,\
+  _______, _______,_______,                _______,                        _______,_______,_______,              _______,_______,_______,    _______, _______, _______),
+
+};
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
diff --git a/keyboards/westfoxtrot/cypher/keymaps/default/readme.md b/keyboards/westfoxtrot/cypher/keymaps/default/readme.md
new file mode 100644 (file)
index 0000000..05c3700
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for cypher
\ No newline at end of file
diff --git a/keyboards/westfoxtrot/cypher/keymaps/kwer/config.h b/keyboards/westfoxtrot/cypher/keymaps/kwer/config.h
new file mode 100644 (file)
index 0000000..947e340
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright 2018 westfoxtrot
+ *
+ * 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 RGB_DI_PIN F7
+#ifdef  RGB_DI_PIN
+  #define RGBLED_NUM 15
+  #define RGBLIGHT_HUE_STEP 8
+  #define RGBLIGHT_SAT_STEP 8
+  #define RGBLIGHT_VAL_STEP 15
+  #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+  #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+  #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+  #define RGBLIGHT_EFFECT_KNIGHT
+  #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 5
+  #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ #endif
+
+// place overrides here
diff --git a/keyboards/westfoxtrot/cypher/keymaps/kwer/keymap.c b/keyboards/westfoxtrot/cypher/keymaps/kwer/keymap.c
new file mode 100644 (file)
index 0000000..2d7bf2a
--- /dev/null
@@ -0,0 +1,79 @@
+/* Copyright 2018 westfoxtrot
+ * Copyright 2019 kwerdenker
+ *
+ * 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
+#include "keymap_german.h"
+
+#define _DL 0
+#define _FN 1
+#define _LE 2
+
+#define SPECIAL LT(_FN, DE_CIRC)    //capslock layer switch + stargate key on tap
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [_DL] = LAYOUT_iso (
+      KC_ESC,  KC_1,    KC_2,  KC_3,  KC_4,  KC_5,  KC_6,  KC_7,  KC_8,  KC_9,    KC_0,   DE_SS,   DE_ACUT, KC_BSPC, _______,     KC_NLCK, KC_PSCR,KC_PSLS,KC_PAST,
+      KC_TAB,  KC_Q,    KC_W,  KC_E,  KC_R,  KC_T,  DE_Z,  KC_U,  KC_I,  KC_O,    KC_P,   DE_UE,   DE_PLUS,                       KC_P7,   KC_P8,  KC_P9,  KC_PMNS,
+      SPECIAL, KC_A,    KC_S,  KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,  KC_L,    DE_OE,  DE_AE,   DE_HASH, KC_ENT,               KC_P4,   KC_P5,  KC_P6,  KC_PPLS,
+      KC_LSFT, DE_LESS, DE_Y,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM, KC_DOT, DE_MINS, KC_RSFT,        KC_UP,         KC_P1,   KC_P2,  KC_P3,  KC_PENT,
+      KC_LCTL, _______, KC_LALT,             KC_SPC,                     _______, KC_RALT, TG(_LE),       KC_LEFT, KC_DOWN, KC_RGHT,        KC_P0,  KC_PDOT, KC_NO
+  ),
+
+  [_FN] = LAYOUT_iso (
+      DE_RING, 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_UP,   _______, _______,  _______,  _______,  _______,  _______,  _______,  _______, _______, _______,                        _______, _______, _______, _______,
+      _______, KC_LEFT, KC_DOWN, KC_RGHT, _______,  _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,               _______, _______, _______, _______,
+      _______, _______, _______, _______, _______,  _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,               _______, _______, _______, _______,
+      _______, _______, _______,             KC_LGUI,                _______, _______, _______,                         _______, _______, _______,               _______, _______, _______
+  ),
+
+  [_LE] = LAYOUT_iso (
+      _______, _______, _______, _______, _______,  _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______, _______,      _______, _______, _______, RESET,
+      _______, _______, _______, _______, _______,  _______,  _______,  _______,  _______,  _______,  _______, _______, _______,                        RGB_TOG, RGB_MOD, RGB_RMOD,_______,
+      _______, _______, _______, _______, _______,  _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,               RGB_HUI, RGB_SAI, RGB_VAI, _______,
+      _______, _______, _______, _______, _______,  _______,  _______,  _______,  _______,  _______,  _______, _______, _______, _______,               RGB_HUD, RGB_SAD, RGB_VAD, _______,
+      _______, _______, _______,             _______,                _______, _______, _______,                         _______, _______, _______,               _______, _______, _______
+  ),
+};
+
+
+
+void matrix_init_user(void) {
+  //user initialization
+}
+
+void matrix_scan_user(void) {
+  //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+  // Insert custom handling for CAPS_LOCK, NUM_LOCK, SCROLL_LOCK here
+      if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+        writePinHigh(F4);
+        writePinHigh(F1);
+        writePinHigh(F5);
+    } else {
+        writePinLow(F4);
+        writePinLow(F1);
+        writePinLow(F5);
+    }
+}
diff --git a/keyboards/westfoxtrot/cypher/keymaps/kwer/readme.md b/keyboards/westfoxtrot/cypher/keymaps/kwer/readme.md
new file mode 100644 (file)
index 0000000..c1a132e
--- /dev/null
@@ -0,0 +1,39 @@
+# The kwer keymap and RGB MOD for cypher
+
+![](https://i.imgur.com/b7snIju.jpg)
+
+## Hardware
+To make this mod, all you need a piece of WS2812b RGB strip (I used one with 144 LEDs per meter, so it's rather dense), some wiring (I used 0.6mm solid core wire) and steady hands for soldering to the MCU pin.
+
+**Installed mod**
+![](https://i.imgur.com/IKcFd0k.jpg)
+
+As you can see, the wiring is relatively simple. VCC and GND can be easily accessed through the ISP header on the right side of the spacebar while the DATA line can be routed relatively easy through one of the stabilizer holes. While it isn't important where exactly you solder the VCC/GND wires to their respective lines on the strip, you have to keep the direction of the data line in mind. Most strip have arrows printed on them to show you in which direction the data is shifted through the LEDs and your should always solder your DATA line on the _from_ side, as seen in the above picture.
+
+**Close-up for the VCC/GND connections**
+![](https://i.imgur.com/K0OibwW.jpg)
+
+Since there is no pinout availble for the pin we're gonna use to control the strip, the line has to be soldered to the MCU directly. While this is not a very complex process, you should have a fine tipped soldering irong and a steady hand. Make sure you do not bridge any of the neighboring pins when soldering the wire to the MCU pin. As shown in the picture below, you want to connect the DATA line to the third pin from the right on the top of the controller chip.
+
+**Close-up for the DATA connection**
+![](https://i.imgur.com/zkD3RjF.jpg)
+
+## Software
+To enable your RGB strip in QMK, you have to add change/add the following lines
+
+**rules.&#8203;mk**
+```
+[...]
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
+[...]
+```
+
+**config.h**
+```
+[...]
+#define RGB_DI_PIN F7
+#define RGBLED_NUM 15        // Change this number to the amount of LEDs on the strip you soldered
+#define RGBLIGHT_ANIMATIONS
+[...]
+```
+To control the RGB color, animation, etc. you need to add the appropriate keycodes to your keymap. Either see [my keymap](./keymap.c) or the [official QMK documentation](https://docs.qmk.fm/#/feature_rgblight?id=keycodes) for references.
diff --git a/keyboards/westfoxtrot/cypher/keymaps/kwer/rules.mk b/keyboards/westfoxtrot/cypher/keymaps/kwer/rules.mk
new file mode 100644 (file)
index 0000000..df87c59
--- /dev/null
@@ -0,0 +1,2 @@
+# Build options override
+RGBLIGHT_ENABLE = yes        # Enable keyboard RGB underglow
diff --git a/keyboards/westfoxtrot/cypher/readme.md b/keyboards/westfoxtrot/cypher/readme.md
new file mode 100644 (file)
index 0000000..6db417f
--- /dev/null
@@ -0,0 +1,15 @@
+# cypher
+
+![cypher](https://github.com/westfoxtrot/Cypher_PCB)
+
+PCB for the cypher keyboard
+
+Keyboard Maintainer: [westfoxtrot](https://github.com/westfoxtrot)  
+Hardware Supported: Cypher PCB  
+Hardware Availability: with group buy + Files released here (https://github.com/westfoxtrot/Cypher_PCB)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make westfoxtrot/cypher: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/westfoxtrot/cypher/rules.mk b/keyboards/westfoxtrot/cypher/rules.mk
new file mode 100644 (file)
index 0000000..ab03dc9
--- /dev/null
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# 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 = 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 = yes      # 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 e37097361a2efb67a469d3e767046d15ad60870a..dddfb274e7f5fdd64ff7dde26d49549332f4e03d 100644 (file)
@@ -25,15 +25,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
   /* Function layer
    * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
-   * │   │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Num│Scr│Pau│
+   * │   │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Num│SLk│Pau│
    * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
    * │ M4  │M2 │M↑ │M1 │M3 │M5 │   │UCM│   │Stp│Ply│Prv│Nxt│Clear│Ins│
    * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
    * │      │M← │M↓ │M→ │MW↑│   │   │   │   │   │   │   │        │Top│
    * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
-   * │        │MA0│MA2│MW←│MW→│   │   │   │VoD│VoU│Mut│ App  │PgU│Btm│
+   * │        │MA0│MA2│MW←│MW→│   │   │   │Vo-│Vo+│Mut│ App  │PgU│Btm│
    * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
-   * │    │Dstp│Dst←│          MW↓           │Dst→│    │ │Hom│PgD│End│
+   * │    │DtPR│DtNA│          MW↓           │    │    │ │Hom│PgD│End│
    * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
    */
   [L_FN] = LAYOUT_truefox( \
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, UC_MOD,  _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR,            KC_INS,  \
     _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, _______, _______, _______, _______, _______, _______,          _______,          TOP,     \
     _______,          KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_APP,           KC_PGUP, BOTTOM,  \
-    _______, DESKTOP, DSKTP_L,                            KC_WH_D,                   DSKTP_R, _______,                   KC_HOME, KC_PGDN, KC_END   \
+    _______, DST_P_R, DST_N_A,                            KC_WH_D,                   _______, _______,                   KC_HOME, KC_PGDN, KC_END   \
   ),
 
   /* Numpad layer
index 1302f14ca84e5139450fcbe14e9f7837d0466c35..625ef346c8d560901706260392ff79403351874f 100644 (file)
@@ -1,2 +1,11 @@
+BOOTMAGIC_ENABLE  = no
+COMMAND_ENABLE    = yes
+CONSOLE_ENABLE    = yes
+EXTRAKEY_ENABLE   = yes
+MOUSEKEY_ENABLE   = yes
+NKRO_ENABLE       = yes
+TAP_DANCE_ENABLE  = yes
+UNICODEMAP_ENABLE = yes
+
 BACKLIGHT_ENABLE  = no
 VISUALIZER_ENABLE = no
diff --git a/keyboards/winkeyless/bface/program b/keyboards/winkeyless/bface/program
deleted file mode 100755 (executable)
index 298e645..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, Sebastian Kaim <sebb@sebb767.de>
-#
-# 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/>.
-
-from __future__ import print_function
-
-import os
-import sys
-import time
-import usb
-
-
-def checkForKeyboardInNormalMode():
-    """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found."""
-    return usb.core.find(idVendor=0x20A0, idProduct=0x422D)
-
-def checkForKeyboardInBootloaderMode():
-    """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise."""
-    return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None)
-
-def flashKeyboard(firmware_file):
-    """Calls bootloadHID to flash the given file to the device."""
-    print('Flashing firmware to device ...')
-    if os.system('bootloadHID -r "%s"' % firmware_file) == 0:
-        print('\nDone!')
-    else:
-        print('\nbootloadHID returned an error.')
-
-def printDeviceInfo(dev):
-    """Prints all infos for a given USB device"""
-    print('Device Information:')
-    print('  idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
-    print('  idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
-    print('Manufacturer: %s' % (dev.iManufacturer))
-    print('Serial: %s' % (dev.iSerialNumber))
-    print('Product: %s' % (dev.iProduct), end='\n\n')
-
-def sendDeviceToBootloaderMode(dev):
-    """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing."""
-    try:
-        dev.set_configuration()
-
-        request_type = usb.util.build_request_type(
-                usb.util.CTRL_OUT,
-                usb.util.CTRL_TYPE_CLASS,
-                usb.util.CTRL_RECIPIENT_DEVICE)
-
-        USBRQ_HID_SET_REPORT = 0x09
-        HID_REPORT_OPTION = 0x0301
-
-        dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5)
-    except usb.core.USBError:
-        # for some reason I keep getting USBError, but it works!
-        pass
-
-
-if len(sys.argv) < 2:
-    print('Usage: %s <firmware.hex>' % sys.argv[0])
-    sys.exit(1)
-
-kb = checkForKeyboardInNormalMode()
-
-if kb is not None:
-    print('Found a keyboad in normal mode. Attempting to send it to bootloader mode ...', end='')
-    sendDeviceToBootloaderMode(kb)
-    print(' done.')
-    print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.")
-    print("      You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode")
-
-attempts = 12  # 60 seconds
-found = False
-for attempt in range(1, attempts + 1):
-    print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='')
-
-    if checkForKeyboardInBootloaderMode():
-        print('Found', end='\n\n')
-        flashKeyboard(sys.argv[1])
-        found = True
-        break
-    else:
-        print('Nothing.', end='')
-
-        if attempt != attempts:  # no need to wait on the last attempt
-            print(' Sleeping 5 seconds.', end='')
-            time.sleep(5)
-
-        # print a newline
-        print()
-
-if not found:
-    print("Couldn't find a flashable keyboard. Aborting.")
-    sys.exit(2)
-
index 10331ef700226dee2f4799d7a1fa9e344b2ead4f..369ccf2edac81179b2a59a7e76fcfd5a73a40e0e 100644 (file)
@@ -44,5 +44,5 @@ CUSTOM_MATRIX = yes
 SRC = matrix.c i2c.c backlight_ps2avrGB.c
 
 # programming options
-PROGRAM_CMD = ./keyboards/winkeyless/bface/program .build/$(TARGET).hex
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
 
index 868ca632efb7271360a4333b9d242d4be9c2e61f..b49803fa849ca1e17677cf9f27ca889dd22a837e 100644 (file)
@@ -1,5 +1,4 @@
 #include QMK_KEYBOARD_H
-#include "action_layer.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
index 244c75c77c456e96cb3e0f530f9011ef2b6572d9..08bed9ccb9a18cda06d45b423b338395d78a39f9 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // Disable backlight
 #undef BACKLIGHT_ENABLE
-
-#endif
index a91b7d35dbef4f2cf3c5e77acd2cd76a706fbe88..4f9e414c1c056c80c6efca11240d27644e9baf52 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 // Fillers to make layering more clear
 #define ___T___ KC_TRNS
index 52a8f38d45ff8b0b092c65b943f601310a8b07f9..a0c4fc967849295e17cd5ee8e888f73385966702 100644 (file)
@@ -13,3 +13,4 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+BACKLIGHT_ENABLE = no
index f52a97bbc8653a337e8c17f4e292273151f5bbec..a72596783dd10f3b70864252c12d69f59e8cc0ef 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index d3e86b050993db8c9fa550c06f8b354ed00c0693..bdbbc4af336067907c9ff4ea5b72d5307e192248 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 // Fillers to make layering more clear
 #define ___T___ KC_TRNS
index 28d32e56282880a177ae2b61cb8846f803fc1093..271f48d0011b39a116e9f36fe8a1c0ca0717af42 100644 (file)
@@ -1,6 +1,3 @@
-#ifndef CONFIG_KEYMAP_H
-#define CONFIG_KEYMAP_H
+#pragma once
 
-#include "../../config.h"
-
-#endif
+// place overrides here
index 68071d018e2a6148ed2d497da91996950de85e3d..6f8576b09b41141d8a6f6167c486a63521402497 100644 (file)
@@ -1,4 +1,4 @@
-#include "xd75.h"
+#include QMK_KEYBOARD_H
 #include "bbaserdem.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/xd75/keymaps/bramver/README.md b/keyboards/xd75/keymaps/bramver/README.md
deleted file mode 100644 (file)
index 2dcac5f..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# XD75 Layout
-
-Standard qwerty layout.  
-Limited emoji support and proper mouse settings.
-
-## Keymap
-
-```
-_BASE
-  |    GESC |    1    |    2    |    3    |    4    |    5    |    MPRV |    MPLY |    MNXT |    6    |    7    |    8    |    9    |    0    |    BSPC |
-  |    TAB  |    Q    |    W    |    E    |    R    |    T    |    MINS |    EQL  |    BSLS |    Y    |    U    |    I    |    O    |    P    |    ENT  |
-  |   MO(3) |    A    |    S    |    D    |    F    |    G    |    LBRC |    MUTE |    RBRC |    H    |    J    |    K    |    L    |    SCLN |    QUOT |
-  |    LSFT |    Z    |    X    |    C    |    V    |    B    |    HOME |    SLEP |    END  |    N    |    M    |    COMM |    DOT  |    SLSH |    RSFT |
-  |    LCTL | MO(4)   |    LALT |    LGUI |    SPC  |    SPC  |   MO(1) |    DEL  |   MO(2) |   SPC   |    LEFT |    DOWN |    UP   |    RGHT |    RGUI |
-
-_LOWER
-  | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC  | BL_INC  | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ |    WH_L |    BTN1 |    MS_U |    BTN2 |    WH_U | BL_STEP | RGB_TOG | RGB_MOD | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ |    WH_R |    MS_L |    MS_D |    MS_R |    WH_D | RGB_HUI | RGB_HUD | RGB_SAI | _______ |    LEFT |    DOWN |    UP   |    RGHT | _______ |
-  | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
-
-_LINVERT
-  | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC  | BL_INC  | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ | _______ | _______ | _______ | _______ | _______ | BL_STEP | RGB_TOG | RGB_MOD |    WH_U |    BTN1 |    MS_U |    BTN2 |    WH_L | _______ |
-  | _______ |    LEFT |    DOWN |    UP   |    RGHT | _______ | RGB_SAI | RGB_HUI | RGB_HUD |    WH_D |    MS_L |    MS_D |    MS_R |    WH_R | _______ |
-  | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
-
-_RAISE
-  |    F1   |    F2   |    F3   |    F4   |    F5   |    F6   | _______ | _______ | _______ |    F7   |    F8   |    F9   |    F10  |   F11   |   F12   |
-  | _______ | _______ |    7    |    8    |    9    | _______ | _______ | _______ | _______ | _______ |    MUTE |    VOLD |    VOLU | _______ | _______ |
-  | _______ | _______ |    4    |    5    |    6    | _______ | _______ | _______ | _______ | _______ |    MPRV |    MPLY |    MNXT | _______ | _______ |
-  | _______ | _______ |    1    |    2    |    3    | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ | _______ | _______ |    0    | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
-
-_EMOJIFY
-  | TO(0)   | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | RESET   |
-  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ | X(CELE) | X(PRAY) | X(NAIL) | X(OK)   | X(THNK) | _______ | _______ | _______ | X(UNAM) | X(HEYE) | X(COOL) | X(EYES) | X(SMIR) | _______ |
-  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
-  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
-```
\ No newline at end of file
diff --git a/keyboards/xd75/keymaps/bramver/readme.md b/keyboards/xd75/keymaps/bramver/readme.md
new file mode 100644 (file)
index 0000000..2dcac5f
--- /dev/null
@@ -0,0 +1,43 @@
+# XD75 Layout
+
+Standard qwerty layout.  
+Limited emoji support and proper mouse settings.
+
+## Keymap
+
+```
+_BASE
+  |    GESC |    1    |    2    |    3    |    4    |    5    |    MPRV |    MPLY |    MNXT |    6    |    7    |    8    |    9    |    0    |    BSPC |
+  |    TAB  |    Q    |    W    |    E    |    R    |    T    |    MINS |    EQL  |    BSLS |    Y    |    U    |    I    |    O    |    P    |    ENT  |
+  |   MO(3) |    A    |    S    |    D    |    F    |    G    |    LBRC |    MUTE |    RBRC |    H    |    J    |    K    |    L    |    SCLN |    QUOT |
+  |    LSFT |    Z    |    X    |    C    |    V    |    B    |    HOME |    SLEP |    END  |    N    |    M    |    COMM |    DOT  |    SLSH |    RSFT |
+  |    LCTL | MO(4)   |    LALT |    LGUI |    SPC  |    SPC  |   MO(1) |    DEL  |   MO(2) |   SPC   |    LEFT |    DOWN |    UP   |    RGHT |    RGUI |
+
+_LOWER
+  | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC  | BL_INC  | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ |    WH_L |    BTN1 |    MS_U |    BTN2 |    WH_U | BL_STEP | RGB_TOG | RGB_MOD | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ |    WH_R |    MS_L |    MS_D |    MS_R |    WH_D | RGB_HUI | RGB_HUD | RGB_SAI | _______ |    LEFT |    DOWN |    UP   |    RGHT | _______ |
+  | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+
+_LINVERT
+  | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC  | BL_INC  | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ | _______ | _______ | _______ | _______ | _______ | BL_STEP | RGB_TOG | RGB_MOD |    WH_U |    BTN1 |    MS_U |    BTN2 |    WH_L | _______ |
+  | _______ |    LEFT |    DOWN |    UP   |    RGHT | _______ | RGB_SAI | RGB_HUI | RGB_HUD |    WH_D |    MS_L |    MS_D |    MS_R |    WH_R | _______ |
+  | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+
+_RAISE
+  |    F1   |    F2   |    F3   |    F4   |    F5   |    F6   | _______ | _______ | _______ |    F7   |    F8   |    F9   |    F10  |   F11   |   F12   |
+  | _______ | _______ |    7    |    8    |    9    | _______ | _______ | _______ | _______ | _______ |    MUTE |    VOLD |    VOLU | _______ | _______ |
+  | _______ | _______ |    4    |    5    |    6    | _______ | _______ | _______ | _______ | _______ |    MPRV |    MPLY |    MNXT | _______ | _______ |
+  | _______ | _______ |    1    |    2    |    3    | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ | _______ | _______ |    0    | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+
+_EMOJIFY
+  | TO(0)   | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | RESET   |
+  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ | X(CELE) | X(PRAY) | X(NAIL) | X(OK)   | X(THNK) | _______ | _______ | _______ | X(UNAM) | X(HEYE) | X(COOL) | X(EYES) | X(SMIR) | _______ |
+  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+  | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+```
\ No newline at end of file
diff --git a/keyboards/xd75/keymaps/c4software_bepo/README.md b/keyboards/xd75/keymaps/c4software_bepo/README.md
deleted file mode 100644 (file)
index b95130a..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# c4software Custom Keyboard
-
-Layout for Bépo Dev
-
-```
-/* Native BepoDev for compatible computer
- * .--------------------------------------------------------------------------------------------------------------------------------------.
- * | ESC    | "      | <      | >      | (      | )      | %      | VOL-   | VOL+   | @      | +      | -      | /      | *      | =      |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB    | B      | E_ACUT | P      | O      | $      | E_GRAV | DEL    | E_CIRC | V      | D      | L      | J      | Z      | C_CEDIL|
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
- * | RALT   | A      | U      | I      | E      | ,      | BACKSP | ENTER  | C      | T      | S      | R      | N      | M      | W      |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
- * | LSHIFT | A_GRAV | Y      | X      | .      | K      | BACKSP | ENTER  | ’      | Q      | G      | H      | F      | UP     | RSHIFT |
- * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LALT   | LCTRL  | FN     | LGUI   | SPACE  | SPACE  | RALT   | RALT   | SPACE  | SPACE  | RGUI   | FN     | LEFT   | DOWN   | RIGHT  |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
- ```
-
- The FN layer :
-
- ```
-/* FUNCTION
- * .--------------------------------------------------------------------------------------------------------------------------------------.
- * |        | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | P/     | P*     | F9     | F10    | F11    | F12    |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        |        |        |        |        |        |        |        | P7     | P8     | P9     | -      | RGB_TOG| RGB_MOD| RGB_HUI|
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        | PREV   | PLAY   | NEXT   | STOP   |        |        |        | P4     | P5     | P6     | +      | RGB_SAI| RGB_SAD| RGB_VAI|
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * |        | VOL-   | MUTE   | VOL+   |        |        |        |        | P1     | P2     | P3     | ENT    | RGB_VAD| Home   | RGB_HUD|
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | RESET  |        | FN     |        |        |        |        |        | P0     | P0     | .      | FN     |        | End    |        |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
- ```
\ No newline at end of file
index 39845f15b7a7506eec9919b7426f58fa039dbb89..6605bbf93f724656371f88193cc6301cbbe51d83 100644 (file)
@@ -16,4 +16,4 @@
 
 # pragma once
 
-#include "../../config.h"
+// place overrides here
diff --git a/keyboards/xd75/keymaps/c4software_bepo/readme.md b/keyboards/xd75/keymaps/c4software_bepo/readme.md
new file mode 100644 (file)
index 0000000..b95130a
--- /dev/null
@@ -0,0 +1,37 @@
+# c4software Custom Keyboard
+
+Layout for Bépo Dev
+
+```
+/* Native BepoDev for compatible computer
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC    | "      | <      | >      | (      | )      | %      | VOL-   | VOL+   | @      | +      | -      | /      | *      | =      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB    | B      | E_ACUT | P      | O      | $      | E_GRAV | DEL    | E_CIRC | V      | D      | L      | J      | Z      | C_CEDIL|
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | RALT   | A      | U      | I      | E      | ,      | BACKSP | ENTER  | C      | T      | S      | R      | N      | M      | W      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | A_GRAV | Y      | X      | .      | K      | BACKSP | ENTER  | ’      | Q      | G      | H      | F      | UP     | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LALT   | LCTRL  | FN     | LGUI   | SPACE  | SPACE  | RALT   | RALT   | SPACE  | SPACE  | RGUI   | FN     | LEFT   | DOWN   | RIGHT  |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+ ```
+
+ The FN layer :
+
+ ```
+/* FUNCTION
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * |        | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | P/     | P*     | F9     | F10    | F11    | F12    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        |        | P7     | P8     | P9     | -      | RGB_TOG| RGB_MOD| RGB_HUI|
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        | PREV   | PLAY   | NEXT   | STOP   |        |        |        | P4     | P5     | P6     | +      | RGB_SAI| RGB_SAD| RGB_VAI|
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        | VOL-   | MUTE   | VOL+   |        |        |        |        | P1     | P2     | P3     | ENT    | RGB_VAD| Home   | RGB_HUD|
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | RESET  |        | FN     |        |        |        |        |        | P0     | P0     | .      | FN     |        | End    |        |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+ ```
\ No newline at end of file
index f6bb06f399b638352bdf7bdb3826d2c3294369e8..0ff61e1f427244e9f05fd70f77ece904eda0571b 100644 (file)
@@ -14,9 +14,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
+// place overrides here
 #ifndef NO_DEBUG
 #define NO_DEBUG
 #endif
@@ -24,8 +24,6 @@
 #define NO_PRINT
 #endif
 
-#include "../../config.h"
-
 #define LEADER_TIMEOUT 300
 #define BACKLIGHT_BREATHING
 
 #define randadd 53
 #define randmul 181
 #define randmod 167
-
-/* Filler to make layering a bit clearer *
- * borrowed from basic keymap            */
-
-#define _____   KC_NO
-
-#endif
index 1bebf2d11f37746030cd05f357b50ad5f3e35295..6c356ac80340e6714c35ae4764492383483b6983 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2017 REPLACE_WITH_YOUR_NAME
+/* Copyright 2017 Christopher B Browne
  *
  * 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
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 /* Fillers to make layering more clear */
 #define ___T___ KC_TRNS
@@ -62,12 +62,7 @@ enum macro_id {
 #define FUNCTION MO(_FUNCTION)
 #define MRAISE MO(_RAISE)
 #define MLOWER MO(_LOWER)
-#define ALTBSP ALT_T(KC_BSPC)
-
-/* More modifiers for QCENT2... */
-#define PALT MT(KC_RALT, KC_P)
-#define SCTL MT(KC_RCTL, KC_SCLN)
-#define SSHF MT(KC_RSFT, KC_SLSH)
+#define ALTPLUS ALT_T(KC_PLUS)
   
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
@@ -84,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | BRITE  | LCTRL  | LALT   | LGUI   | RAISE  | XXXXXX . SPACE  | LOWER  | RGUI   | RALT   | RCTRL  | FN     | LEFT   | DOWN   | RIGHT  |
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
-       
+
   /* layout for centred keypad + qwerty...
 
 |ESC| 1 | 2 | 3 | 4 | 5 | ? | ? | ? | ? | 6 | 7 | 8 | 9 | 0 |
@@ -94,40 +89,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 |ALT|LED|   |   |   |   |   |   |   |   |   |   |   |   |   |
 
 
-
-
 keys needing to be assigned:
-11 - KC_TAB - tab
-52 - ROT_LED - rotate LED
+51 - KC_TAB - tab
+   - ROT_LED - rotate LED
 15 - KC_LALT - Left ALT
-   - KC_LGUI  - this is the windows/command key, which I think I do not use...
-   - M_LOWER - switch to LOWER layer 
-   - KC_SPC - space
-   - M_UPPER - switch to UPPER layer, maybe unneeded for 15x5
-   - KC_LEFT - famous arrows
-   - KC_DOWN - famous arrows
-   - KC_UP - famous arrows
-   - KC_RIGHT - famous arrows
-   - KC_ENT - enter
+53,55 - M_RAISE - switch to RAISE layer 
+5b - M_LOWER - switch to LOWER layer 
+56,59,5a   - KC_SPC - space
+5c - KC_LEFT - famous arrows
+5d - KC_DOWN - famous arrows
+5e - KC_UP - famous arrows
+5f - KC_RIGHT - famous arrows
+3f - KC_ENT - enter
    - KC_GRV - leftwards quote
-   - KC_QUOT - rightwards quote
-   - KC_BSPC - backspace
-   - KC_ESC
+4f - KC_QUOT - rightwards quote
+1f - KC_BSPC - backspace
+11 - KC_ESC
+19 - KC_GRV - ` - raised
+19 - KC_TILD - ~ - lowered
 
-Missing still...  
-   KC_LBRC and KC_LCBR
-   KC_RBRC and KC_RCBR
+  */
 
-  */  
+[_QWERTY] = LAYOUT_ortho_5x15( /* QWERTY, with keypad in the centre */
+      KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   KC_EQL, KC_MINS, KC_EQL,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC ,
+      KC_LALT, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_7,    KC_8,   KC_EQL,  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, ALTPLUS ,
+      KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_LBRC, KC_RBRC,KC_MINS, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, CTLENTER ,
+      KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_PGUP, KC_EQL,   KC_BSLS, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SHIFTQUOTE ,
+       KC_TAB,  FUNCTION, MRAISE,  FUNCTION, MRAISE, KC_SPC,KC_PGDN,  KC_MINS, KC_SPC, KC_SPC,  MLOWER, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT 
+),
 
-   [_QWERTY] = { /* QWERTY, with keypad in the centre */
-     { KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,   KC_EQL, KC_MINS, RESET,   KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC },
-     { KC_LALT, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,   KC_7,    KC_8,   KC_EQL,  KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_PLUS },
-     { KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,   KC_4,    KC_5,   KC_MINS, KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, CTLENTER },
-     { KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,   KC_1,    KC_2,   KC_BSLS, KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SHIFTQUOTE },
-     { KC_TAB,  FUNCTION, MRAISE,  FUNCTION, MRAISE, KC_SPC,  KC_0,  KC_MINS, KC_SPC, KC_SPC,  MLOWER, KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT }
-   },
-       
 /* LOWER
  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
  * |        | F1     | F2     | F3     | F4     | F5     | F6     | F7     | F8     | F9     | F10    | F11    | F12    | XXXXXX .        |
@@ -142,13 +132,13 @@ Missing still...
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
  
- [_LOWER] = { /* LOWERED */
-   { ___T___, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  _______, _______, _______, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11 },
-  { ___T___, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_INS   },
-   { ___T___, 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,  _______, _______, _______, _______, _______, ___T___, ___T___, _______ },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
},
+[_LOWER] = LAYOUT_ortho_5x15( /* LOWERED */
+    ___T___, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,  _______, _______, KC_TILD,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11 ,
+    ___T___, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_INS  ,
+    ___T___, 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,  _______, _______, _______, _______, _______, ___T___, ___T___, _______ ,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 
),
 
 /* RAISED
  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
@@ -164,13 +154,13 @@ Missing still...
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
  
- [_RAISE] = { /* RAISED */
-  { KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   _______, _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  ___T___ },
-  { KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    _______, _______, KC_7,    KC_8,    KC_9,    KC_0,    _______, _______, KC_INS   },
-  { KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   _______, _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, ___T___, ___T___ },
-  { KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, _______, _______, _______, ___T___, ___T___, _______, _______  },
-  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
- },
+[_RAISE] = LAYOUT_ortho_5x15 ( /* RAISED */
+   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,  MVERSION, _______, KC_GRV,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  ___T___ ,
+   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,   USERNAME, _______, KC_7,    KC_8,    KC_LCBR, KC_RCBR,    _______, _______, KC_INS   ,
+   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   RANDDIG, _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, ___T___, ___T___ ,
+   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  RANDALP, _______, _______, _______, _______, ___T___, ___T___, _______, _______  ,
+   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  
+),
  
 /* FUNCTION
  * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
@@ -178,21 +168,21 @@ Missing still...
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
  * | SCR LK | F13    | F14    | F15    | F16    | F17    | F18    | F19    | F20    | F21    | F22    | F23    | F24    | PAUSE  | PR SCR |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT   | VOL+   | VOL-   | PLAY   |        | XXXXXX .        | WHEEL+ |
+ * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT   | VOL+   | VOL-   | PLAY   |        | XXXXXX |        | WHEEL+ |
  * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | RGB TG | RGB MD | RGB HI | RGB HD | RGB SI | RGB SD | RGB VI | RGB VD | BL TOG | BL INC | BL DEC | XXXXXX .        | MOUS Un | WHEEL- |
+ * | RGB TG | RGB MD | RGB HI | RGB HD | RGB SI | RGB SD | RGB VI | RGB VD | BL TOG | BL INC | BL DEC | XXXXXX |        | MOUS U | WHEEL- |
  * |--------+--------+--------+--------+--------+-- 2u -----------+--------+--------+--------+--------+-----------------+--------+--------|
  * | RESET  |        | QWERTY | COLEMK | DVORAK | XXXXXX . MS BT1 |        |        |        |        |        | MOUS L | MOUS D | MOUS R |
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
  
- [_FUNCTION] = { /* FUNCTION */
-  { KC_NLCK, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  ___T___, ___T___  },
-  { KC_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_F21,  KC_F22,  KC_F23,  KC_F24,  KC_PAUS, KC_PSCR  },
-  { KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U  },
-  { RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_TOGG, BL_INC,  BL_DEC,   ___T___, ___T___, KC_MS_U, KC_WH_D  },
-  { RESET  , _______, DF(_QWERTY), DF(_QWERTY), DF(_QWERTY), KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R  },
- },
+[_FUNCTION] = LAYOUT_ortho_5x15( /* FUNCTION */
+   KC_NLCK, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  RESET, RESET,
+   KC_SLCK, KC_F13,  KC_F14,  KC_F15,  KC_F16,  KC_F17,  KC_F18,  KC_F19,  KC_F20,  KC_F21,  KC_F22,  KC_F23,  KC_F24,  KC_PAUS, KC_PSCR  ,
+   KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, ___T___, ___T___, KC_WH_U  ,
+   RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_TOGG, BL_INC,  BL_DEC,   ___T___, ___T___, KC_MS_U, KC_WH_D  ,
+   RESET  , _______, DF(_QWERTY), DF(_QWERTY), DF(_QWERTY), KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R 
+ )
 };
 
 /* This bit of logic seeds a wee linear congruential random number generator */
@@ -223,8 +213,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
     break;
   case M_VERSION:
     if (record->event.pressed) {
-      SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@");
-      //      SEND_STRING(QMK_VERSION "@" QMK_BUILDDATE);
+      SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP);
     }
     break;
   case M_RANDDIGIT:
@@ -289,3 +278,33 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
   }
   return MACRO_NONE;
 };
+
+void matrix_init_user(void) {
+  rgblight_enable();
+  rgblight_mode(1);
+  rgblight_sethsv(325,255,255);
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+  switch(biton32(state)) {
+  case _QWERTY:
+    rgblight_sethsv_white();
+    break;
+  case _LOWER:
+    rgblight_sethsv_blue();
+    break;
+  case _RAISE:
+    rgblight_sethsv_green();
+    break;
+  case _ADJUST:
+    rgblight_sethsv_orange();
+    break;
+  case _FUNCTION:
+    rgblight_sethsv_red();
+    break;
+  default:
+    rgblight_sethsv(325,255,255);
+    break;
+  }
+  return state;
+}
diff --git a/keyboards/xd75/keymaps/cbbrowne/rules.mk b/keyboards/xd75/keymaps/cbbrowne/rules.mk
new file mode 100644 (file)
index 0000000..eb2f870
--- /dev/null
@@ -0,0 +1,20 @@
+# 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 = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes            # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+API_SYSEX_ENABLE = no      # Enable SYSEX API (+5390)
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
index 3b39bee81c902077f0da514bac2474eb2918ee5b..354c9c9186076419c4a7bf42b951852338199649 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
+// place overrides here
 
 // QMK customization:
 // - after 1.5s, turn off one-shot keys
 #define ONESHOT_TIMEOUT 1500
 // - TT(layer) only needs one press
 #define TAPPING_TOGGLE 1
-
-#endif
index a50a02c360439261b05d9a1c378e0fd741786faf..257caad339f6f22ba0c50c61ffa76560dbee4e3d 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 #ifdef IS_COLINTA
 #include "secrets.h"
@@ -91,7 +91,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * '--/RRND----/MUTE----/FFWD-------------------------------------------------------------------------------------------------------------'
  */
 
-  [LAYER_COLEMAK] = KEYMAP(
+  [LAYER_COLEMAK] = LAYOUT(
     KC_GRV, TH_F1, TH_F2, TH_F3, TH_F4, TH_F5,  MM_0,    MM_1,    KC_DEL,  TH_F6, TH_F7,  TH_F8,   TH_F9,   TH_F10,  KC_MINS,
     KC_TAB, KC_Q,  KC_W,  KC_F,  KC_P,  KC_G,   MM_2,    GOTO_FN, KC_BSPC, KC_J,  KC_L,   KC_U,    KC_Y,    KC_SCLN, KC_EQL,
     OSCTL,  KC_A,  KC_R,  KC_S,  KC_T,  KC_D,   KC_LBRC, KC_RBRC, KC_ENT,  KC_H,  KC_N,   KC_E,    KC_I,    KC_O,    KC_QUOT,
@@ -113,7 +113,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
 
-  [LAYER_RECORD] = KEYMAP(
+  [LAYER_RECORD] = LAYOUT(
     _____, _____, _____, _____, _____, _____, DYN_REC_STOP, DYN_REC_STOP, _____, _____, _____, _____, _____, _____, _____,
     _____, _____, _____, _____, _____, _____, DYN_REC_STOP, DYN_REC_STOP, _____, _____, _____, _____, _____, _____, _____,
     _____, _____, _____, _____, _____, _____,    _____,        _____,     _____, _____, _____, _____, _____, _____, _____,
@@ -135,7 +135,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
 
-  [LAYER_QWERTY] = KEYMAP(
+  [LAYER_QWERTY] = LAYOUT(
     _____,    _____, _____, _____,    _____,    _____,    MM_0,  MM_1,    _____, _____, _____, _____, _____, _____, _____,
     _____,    KC_Q,  KC_W,  KC_E,     KC_R,     KC_T,     MM_2,  GOTO_FN, _____, KC_Y,  KC_U, KC_I,  KC_O,  KC_P,    _____,
     MOD_LSFT, KC_A,  KC_S,  KC_D,     KC_F,     KC_G,     _____,  _____,  _____, KC_H,  KC_J, KC_K,  KC_L,  KC_SCLN, _____,
@@ -157,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
 
-  [LAYER_FN] = KEYMAP(
+  [LAYER_FN] = LAYOUT(
     GOTO_CM, GOTO_QW, KC_NO, KC_NO, KC_NO, KC_NO, DYN_REC_START1, DYN_REC_START2, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
     KC_NO,   KC_NO,   KC_NO, KC_NO, KC_NO, KC_NO,     KC_NO,          KC_NO,      KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
     KC_NO,   KC_NO,   KC_NO, KC_NO, KC_NO, KC_NO,     KC_NO,          KC_NO,      KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
index f219147034d49ba6157f3f9f1a7aa19fbb1ece31..6e6349c7cf673f1e86b2b43fbd13049a8cda0481 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
+// place overrides here
 
 #define TAPPING_TERM 200
 #define PERMISSIVE_HOLD
-
-#endif
index b37cad0548884272c67a25f758c9a37eb373c9ce..442a00afda9ccf72ce1b9fe0a3d89e701f8c5acc 100644 (file)
@@ -1,4 +1,4 @@
-#include "xd75.h"
+#include QMK_KEYBOARD_H
 
 #define A_BSPC  LALT(KC_BSPC) // delete whole word in Mac
 // #define C_BSPS  LCTL(KC_BSPC) // delete whole word in PC; currently not in use
index 015377b5f8f7178b659250507222a45f26d1b715..e6975da8a201fed9695099d67e09809f1dbf346e 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 03f605385320d2f1872b4753be27908e6fc64820..0e5c7dbaaaffabde5bcedc0427b6c2399e7b0c0d 100644 (file)
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 // Layer shorthand
 #define _QW 0
 #define _FN 1
 
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+  QMKBEST = SAFE_RANGE,
+  QMKURL
+};
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* QWERTY
@@ -35,13 +41,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
 
[_QW] = { /* 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  },
},
 [_QW] = 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
  * .--------------------------------------------------------------------------------------------------------------------------------------.
@@ -56,30 +62,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |        |        | RGB TG | FN     | RGB RMD| RGB MD | P0     |        | P.     | PENT   | PENT   | FN     |        |        |        |
  * '--------------------------------------------------------------------------------------------------------------------------------------'
  */
[_FN] = { /* 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), _______, _______, _______  },
- }
+
 [_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), _______, _______, _______
+  )
 };
 
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-  // MACRODOWN only works in this function
-      switch(id) {
-        case 0:
-          if (record->event.pressed) {
-            register_code(KC_RSFT);
-            #ifdef BACKLIGHT_ENABLE
-              backlight_step();
-            #endif
-          } else {
-            unregister_code(KC_RSFT);
-          }
-        break;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QMKBEST:
+      if (record->event.pressed) {
+        // when keycode QMKBEST is pressed
+        SEND_STRING("QMK is the best thing ever!");
+      } else {
+        // when keycode QMKBEST is released
       }
-    return MACRO_NONE;
-};
+      break;
+    case QMKURL:
+      if (record->event.pressed) {
+        // when keycode QMKURL is pressed
+        SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+      } else {
+        // when keycode QMKURL is released
+      }
+      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/xd75/keymaps/developper_bepo/README.md b/keyboards/xd75/keymaps/developper_bepo/README.md
deleted file mode 100644 (file)
index 7954a68..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# developper_bepo Custom Keyboard
-
-Layout for Bépo Software development
-
-* Improved access to frequently used keys in software development
-* Modified layout for english input
-* Easy access to layers with space and enter key
-
-Keyboard maintainer: [Quentin Lebastard](https://github.com/lebastaq)
-
-Make example for this keyboard (after setting up your build environment):
-
-    make xd75:developper_bepo
index 78357b5bc4fc2fede429efd008275665a2d79c8d..0183e024271be518ef6b01b04b58f7be4d5b27f3 100644 (file)
@@ -16,4 +16,4 @@
 
 #pragma once
 
-#include "../../config.h"
+// place overrides here
diff --git a/keyboards/xd75/keymaps/developper_bepo/readme.md b/keyboards/xd75/keymaps/developper_bepo/readme.md
new file mode 100644 (file)
index 0000000..7954a68
--- /dev/null
@@ -0,0 +1,13 @@
+# developper_bepo Custom Keyboard
+
+Layout for Bépo Software development
+
+* Improved access to frequently used keys in software development
+* Modified layout for english input
+* Easy access to layers with space and enter key
+
+Keyboard maintainer: [Quentin Lebastard](https://github.com/lebastaq)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make xd75:developper_bepo
index 015377b5f8f7178b659250507222a45f26d1b715..e6975da8a201fed9695099d67e09809f1dbf346e 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 594e5c41cfa175fc0a79808063c6d764eee7532e..cf4bfb4dc5a1a48fe428589c661d2ad2d749a0b9 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 enum planck_keycodes {
   DUMMY = SAFE_RANGE,
index f52a97bbc8653a337e8c17f4e292273151f5bbec..a72596783dd10f3b70864252c12d69f59e8cc0ef 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index f597dc2b99e500947461ec784f4945afebbda6d7..bea9863d5bc767ca2f1e3d647011d1fb515efb2f 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 #include "backlight.h"
 
 // Fillers to make layering more clear
index 59de3fa55f656ac1420d893ba4e814094b697f27..a72596783dd10f3b70864252c12d69f59e8cc0ef 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include QMK_KEYBOARD_CONFIG_H
+#pragma once
 
 // place overrides here
-
-#endif
diff --git a/keyboards/xd75/keymaps/french/README.md b/keyboards/xd75/keymaps/french/README.md
deleted file mode 100644 (file)
index 8c53302..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# Clavier AZERTY français
-
-![Disposition Clavier](https://i.imgur.com/tH9TVBc.png)
-
-
-# Configuration du clavier
-
-Ce clavier AZERTY est basé sur le fichier keymap_french.c de correspondance QWERTY - AZERTY.
-
-Ce fichier est composé de trois énumérations (layout français, touches de contrôle, touches multimédias) correspondant aux keycodes sous la forme d'hexa.
-
-Il peut être utilisé pour toute autre configuration de clavier juste en incluant ce fichier dans son propre keymap.c.
-
-La touche de fonction permet elle d'avoir accès aux différentes touches multimédias ainsi qu'au pavé numérique. Mais aussi si le clavier est équipé de led, à différents modes d'éclairage.
-
-# Compilation 
-
-```
-make xd75:french:dfu
-```
index 015377b5f8f7178b659250507222a45f26d1b715..e6975da8a201fed9695099d67e09809f1dbf346e 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 1ffec2202ef714fbf6f03964223cd4642bc66fed..547a67b6efd3a480563f6fe4deed39df821f8123 100644 (file)
@@ -1,5 +1,5 @@
 #include "keymap_french.c"
-#include "xd75.h"
+#include QMK_KEYBOARD_H
 
 
 // Layer shorthand
diff --git a/keyboards/xd75/keymaps/french/readme.md b/keyboards/xd75/keymaps/french/readme.md
new file mode 100644 (file)
index 0000000..8c53302
--- /dev/null
@@ -0,0 +1,20 @@
+# Clavier AZERTY français
+
+![Disposition Clavier](https://i.imgur.com/tH9TVBc.png)
+
+
+# Configuration du clavier
+
+Ce clavier AZERTY est basé sur le fichier keymap_french.c de correspondance QWERTY - AZERTY.
+
+Ce fichier est composé de trois énumérations (layout français, touches de contrôle, touches multimédias) correspondant aux keycodes sous la forme d'hexa.
+
+Il peut être utilisé pour toute autre configuration de clavier juste en incluant ce fichier dans son propre keymap.c.
+
+La touche de fonction permet elle d'avoir accès aux différentes touches multimédias ainsi qu'au pavé numérique. Mais aussi si le clavier est équipé de led, à différents modes d'éclairage.
+
+# Compilation 
+
+```
+make xd75:french:dfu
+```
index dd3f32275be72ddd33721ff084d157fbb8c109c7..65ab6a0dcba4a9d4fa061b73a1cb84c643ae9e07 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
 
 
 // Launchy
 #define ALT_SPC LALT(KC_SPC)
-#endif
index b7c9620c13d22837e684ad5a0fc457362f30c487..bba1172eca65d9e59053eabacac05dc6068b29c4 100644 (file)
@@ -1,6 +1,6 @@
 /* Copyright 2017 Kolja Brauns
 */
-#include "xd75.h"
+#include QMK_KEYBOARD_H
 
 #ifndef KEYMAP_GERMAN
 #define KEYMAP_GERMAN
index e2390f770cbe885c84f4c4e254ca1844ee888408..0c8015e227140d74e434558a023b5f5136adb952 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include QMK_KEYBOARD_CONFIG_H
+#pragma once
 
 // place overrides here
 #undef BACKLIGHT_BREATHING
-
-#endif
index e2390f770cbe885c84f4c4e254ca1844ee888408..0c8015e227140d74e434558a023b5f5136adb952 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include QMK_KEYBOARD_CONFIG_H
+#pragma once
 
 // place overrides here
 #undef BACKLIGHT_BREATHING
-
-#endif
index 015377b5f8f7178b659250507222a45f26d1b715..e6975da8a201fed9695099d67e09809f1dbf346e 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
-
-#endif
index 340d9a8dc63ad19acef58f67e3b1930acbdba4ec..b9bb2c66d416d5e682b54714cf4093ea7f6d45f6 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 // Layer shorthand
 #define _WO 0
index bde866636f64e32268b350a31eaa4d5c86976229..4e4e6f0d73920670dae82688c2123ca490e4dadd 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include QMK_KEYBOARD_CONFIG_H
+#pragma once
 
 // place overrides here
 
@@ -30,5 +27,3 @@
 #define MOUSEKEY_TIME_TO_MAX       0
 #define MOUSEKEY_WHEEL_MAX_SPEED   1
 #define MOUSEKEY_WHEEL_TIME_TO_MAX 0
-
-#endif
index e61fb09b1b967a86c4622eafea0b31ebfa3e8051..eaf620151546f67644015193c5b3571a57f0d5b6 100644 (file)
@@ -14,7 +14,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "xd75.h"
+#include QMK_KEYBOARD_H
 #include "keymap_german.h"
 
 #define ________ KC_TRNS
diff --git a/keyboards/xd75/keymaps/msiu/config.h b/keyboards/xd75/keymaps/msiu/config.h
new file mode 100644 (file)
index 0000000..4fbd59b
--- /dev/null
@@ -0,0 +1,18 @@
+/* Copyright 2017 Benjamin Kesselring
+ *
+ * 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/xd75/keymaps/msiu/keymap.c b/keyboards/xd75/keymaps/msiu/keymap.c
new file mode 100644 (file)
index 0000000..c4cc456
--- /dev/null
@@ -0,0 +1,120 @@
+/* Copyright 2017 Benjamin Kesselring
+ *
+ * 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/>.
+ */
+
+/* What this layout is: QWERTY layout with the standard 40% layers. For easy
+ * switching between my xd75 and contra
+ */
+
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+#define _QW 0
+#define _DV 1
+#define _LW 2
+#define _RS 3
+#define _FN 4
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | `      | 1      | 2      | 3      | 4      | 5      | -      | =      | \      | 6      | 7      | 8      | 9      | 0      | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | TAB    | Q      | W      | E      | R      | T      | 7      | 8      | 9      | Y      | U      | I      | O      | P      | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ESC    | A      | S      | D      | F      | G      | 4      | 5      | 6      | H      | J      | K      | L      | ;      | '      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LSHIFT | Z      | X      | C      | V      | B      | 1      | 2      | 3      | N      | M      | ,      | .      | /      | ENTER  |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL  | HYPER  | LALT   | LGUI   | LOWER  | FN     | 0      |        | .      | SPACE  | RAISE  | LEFT   | DOWN   | UP     | RIGHT  |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = { /* QWERTY */
+  { KC_GRV,          KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_PLUS, KC_MINS, KC_ASTR, 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_7,    KC_8,    KC_9   , KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL   },
+  { LCTL_T(KC_ESC),  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_4,    KC_5,    KC_6   , 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_1,    KC_2,    KC_3   , KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT   },
+  { KC_LCTL,         KC_HYPR, KC_LALT, KC_LGUI, MO(_LW), MO(_FN), KC_0,    _______, KC_DOT , KC_SPC,  MO(_RS), KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT  },
+ },
+
+ /* Dvorak */
+
+  [_DV] = { /* Dvorak */
+   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
+   { _______, KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    _______, _______, _______, KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    _______  },
+   { _______, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    _______, _______, _______, KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH  },
+   { _______, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    _______, _______, _______, KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    _______  },
+   { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
+  },
+
+
+/* LOWERED
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * |        | F1     | F2     | F3     | F4     | F5     |        |        |        | F6     | F7     | F8     | F9     | F10    | DEL    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ~      | !      | @      | #      | $      | %      |        | VOLU   |        | ^      | &      | *      | (      | )      | DEL    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        | F1     | F2     | F3     | F4     | F5     | PREV   | PLAY   | NEXT   | F6     | _      | +      | {      | }      | |      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------|
+ * |        | F7     | F8     | F9     | F10    | F11    |        | VOLD   |        | F12    | PAGEDW | PAGEUP | HOME   | END    | MUTE   |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------|
+ * |        |        |        |        |        |        |        | MUTE   |        | PLAY   |        | PREV   | VOLD   | VOLU   | NEXT   |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_LW] = { /* LOWERED */
+  { _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   _______, _______, _______, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_DEL   },
+  { KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, _______, KC_VOLU, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL    },
+  { _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_MPRV, KC_MPLY, KC_MNXT, KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE   },
+  { _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  _______, KC_VOLD, _______, KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE   },
+  { _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT   },
+ },
+
+/* RAISED
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * |        | F1     | F2     | F3     | F4     | F5     |        |        |        | F6     | F7     | F8     | F9     | F10    | DEL    |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | `      | 1      | 2      | 3      | 4      | 5      |        | VOLU   |        | 6      | 7      | 8      | 9      | 0      |        |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        | F1     | F2     | F3     | F4     | F5     | PREV   | PLAY   | NEXT   | F6     | -      | =      | [      | ]      | \      |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        | F7     | F8     | F9     | F10    | F11    |        | VOLD   |        | F12    | PAGEUP | PAGEDW | HOME   | END    | MUTE   |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * |        |        |        |        |        |        |        | MUTE   |        | PLAY   |        | PREV   | VOLD   | VOLU   | NEXT   |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_RS] = { /* RAISED */
+  { _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   _______, _______, _______, KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_DEL    },
+  { KC_GRV , KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    _______, KC_VOLU, _______, KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL    },
+  { _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_MPRV, KC_MPLY, KC_MNXT, KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS   },
+  { _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  _______, KC_VOLD, _______, KC_F12,  KC_PGDN, KC_PGUP, KC_HOME, KC_END , KC_MUTE   },
+  { _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, KC_MPLY, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT   },
+ },
+
+/* FUNCTION */
+
+ [_FN] = { /* FUNCTION */
+  { RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_TOGG, BL_INC,  BL_DEC,  _______, _______, _______, _______  },
+  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP  , _______, KC_PSCR, _______  },
+  { _______, _______, _______, TO(_DV), TO(_QW), _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______  },
+  { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
+  { RESET  , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______  },
+ },
+};
+
+
diff --git a/keyboards/xd75/keymaps/msiu/readme.md b/keyboards/xd75/keymaps/msiu/readme.md
new file mode 100644 (file)
index 0000000..d53c0f3
--- /dev/null
@@ -0,0 +1 @@
+# The default keymap for xd75
index 7e2227c874d8bcca0a83ba69c8c3458c3043f321..0ceba236fed4f74abca78c8a9fcb65404fa22398 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
 
 // place overrides here
 #undef MANUFACTURER
@@ -25,5 +22,3 @@
 #define MANUFACTURER    mtdjr
 #define PRODUCT         XD75
 #define DESCRIPTION     XD75Re
-
-#endif
index 074cf7335a3a2fedee44164e35e6c88f8205645f..e56d918fd5f423eccc8ce4d4663ae81efc01c1ba 100644 (file)
@@ -3,7 +3,7 @@
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
- [_QWERTY] = KC_KEYMAP(
+ [_QWERTY] = LAYOUT_kc(
 //  .--------------------------------------------------------------------------.
       EXC, 1  , 2  , 3  , 4  , 5  ,PGUP,MPNT,PGDN, 6  , 7  , 8  , 9  , 0  ,BSPC,
 //  |----+----+----+----+----+----+----+----+----+----+----+----+----+----+----|
@@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 //  '----+----+----+----+----+----+----+----+----+----+----+----+----+----+----'
 ),
 
- [_LOWER] = KC_KEYMAP(
+ [_LOWER] = LAYOUT_kc(
 //  .--------------------------------------------------------------------------.
      xxxx, F1 , F2 , F3 , F4 , F5 , F6 ,xxxx, F7 , F8 , F9 , F10, F11, F12, DEL,
 //  |----+----+----+----+----+----+----+----+----+----+----+----+----+----+----|
@@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 //  '----+----+----+----+----+----+----+----+----+----+----+----+----+----+----'
 ),
 
-[_RAISE] = KC_KEYMAP(
+[_RAISE] = LAYOUT_kc(
 //  .--------------------------------------------------------------------------.
      xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
 //  |----+----+----+----+----+----+----+----+----+----+----+----+----+----+----|
index 985247bb2e3f4dee49eb433862bf0e9cf3f46bda..596aaff6659780df80ffd66b17e8cc3261debdcf 100644 (file)
 
  // additional config optoinsa vailable at https://docs.qmk.fm/reference/config-options#the-config.h-file
 
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
 
-#include "../../config.h"
+// place overrides here
 
 // place overrides here
 //#define TAPPING_TERM 200
@@ -33,5 +32,3 @@
 #define MOUSEKEY_TIME_TO_MAX 60
 #define MOUSEKEY_MAX_SPEED 7
 #define MOUSEKEY_WHEEL_DELAY 0
-
-#endif
index 9789d9a8678bdd8bec45bdd5df152bddbfc38779..593e54f14d7d459d22486a2e0e6cb46fa249f3b5 100644 (file)
@@ -13,7 +13,7 @@
  * 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 "xd75.h"
+#include QMK_KEYBOARD_H
 
 enum xd75_layers {
   _QWERTY,
index e11ce7dca9a4fa2bf7348d76857be90cbcf803e1..fc5b8972c85a67aa9b7f304b3ae9361729477d71 100644 (file)
@@ -1,32 +1,25 @@
-xd75 keyboard firmware
-======================
+# XD75
 
-The XD75Re is a 15x5 full-grid ortholinear keyboard manufactured by XIUDI. This port of the QMK firmware is my first shot at using QMK, so if you see any features done wrong (or just plain missing), feel free to fix them and put in a pull request!
+![XD75](https://cdn.shopify.com/s/files/1/2711/4238/products/HTB1MzOISXXXXXXgXpXXq6xXFXXXO_1024x1024.jpg)
 
-## Quantum MK Firmware
+The XD75Re is a 15x5 full-grid ortholinear keyboard manufactured by XIUDI. This port of the QMK firmware is my first shot at using QMK, so if you see any features done wrong (or just plain missing), feel free to fix them and put in a pull request!
 
-For more info on this firmware (and how to make it your own), head over to [qmk.fm](http://qmk.fm).
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)  
+Hardware Supported: XD75Re  
+Hardware Availability: [KPrepublic](https://kprepublic.com/products/xd75re-xd75am-xd75-xiudi-60-custom-keyboard-pcb), [AliExpress](https://www.aliexpress.com/item/xd75re-Custom-Mechanical-Keyboard-75-keys-TKG-TOOLS-Underglow-RGB-PCB-GH60-60-programmed-gh60-kle/32818745981.html)
 
-## Building
+Make example for this keyboard (after setting up your build environment):
 
-Download or clone the whole firmware and navigate to the
-keyboards/xd75 folder. Once your dev env is setup, you'll be able to
-type `make` to generate your .hex - you can then use the Teensy Loader
-to install the resulting .hex file, or have the `make` process install
-it using DFU.
+    make xd75:default
 
-### Default
+Flashing example:
 
-To build with the default keymap, simply run `make xd75:default` from the root directory (i.e. two levels above this file), and to install via DFU, `make xd75:default:dfu`, also from the root directory.
+    make xd75:default:dfu
 
-Note that DFU is likely to require root permissions, so installing the
-firmware likely requires a command line like:
+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).
 
-```
-$ sudo make xd75:default:dfu
-```
 
-### LED control
+## LED control
 
 There are 3 individual LEDs that can be turned on and off, plus the keycap LEDs (which are all wired into the same pin).  The functions are named according to how they're labeled on the PCB.
 
@@ -65,23 +58,3 @@ GP103_LED       F4
 KEYCAPS_LED     F5
 GP100_LED       F7
 ```
-
-### Other Keymaps
-
-The "default" keymap included is basically the OLKB Atomic keymap with
-a few buttons added for RGB underglow control. This should be usable
-as a starting point, but most people will be best served creating
-their own keymap and flashing it - more info on creating your own
-keymap is available in [the official QMK
-documentation](https://docs.qmk.fm).
-
-Keymaps follow the format **__\<name\>.c__** and are stored in
-subdirectories under `keyboards/xd75/keymaps`
-
-To build the firmware binary hex file for a specific keymap, and
-install it, using DFU, just do `make` with a keymap like this:
-
-```
-$ make xd75:[default|<name>]
-```
-
index e278066900c90c6cf8687e0322eeb0fa09b18838..c27930a8453fbaa415e929786c937dc575851ce4 100644 (file)
@@ -13,8 +13,7 @@
  * 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 XD75_H
-#define XD75_H
+#pragma once
 
 #include "quantum.h"
 
@@ -22,7 +21,7 @@
 // The following is an example using the Planck MIT layout
 // The first section contains all of the arguments
 // The second converts the arguments into a two-dimensional array
-#define KEYMAP( \
+#define LAYOUT( \
     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,\
@@ -36,7 +35,7 @@
     { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }  \
 }
 
-#define KC_KEYMAP( \
+#define LAYOUT_kc( \
     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,\
@@ -50,7 +49,7 @@
     { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E }  \
 }
 
-#define LAYOUT_ortho_5x15 KEYMAP
+#define LAYOUT_ortho_5x15 LAYOUT
 
 void capslock_led_init(void);
 void capslock_led_off(void);
@@ -67,5 +66,3 @@ void gp103_led_on(void);
 void keycaps_led_init(void);
 void keycaps_led_off(void);
 void keycaps_led_on(void);
-
-#endif
diff --git a/keyboards/xd96/config.h b/keyboards/xd96/config.h
new file mode 100644 (file)
index 0000000..df21205
--- /dev/null
@@ -0,0 +1,244 @@
+/* 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"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x4096
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    KPrepublic
+#define PRODUCT         XD96
+#define DESCRIPTION     KPrepublic XD96
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 18
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *                  ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+//#define MATRIX_ROW_PINS { D0, D5 }
+//#define MATRIX_COL_PINS { F1, F0, B0 }
+//#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+//#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_LEVELS 10
+// #define BACKLIGHT_BREATHING
+
+#define RGB_DI_PIN C7
+#define RGBLED_NUM 16
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_LIMIT_VAL 50
+// #ifdef RGB_DI_PIN
+//   #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 DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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_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
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
+
+// LTO options
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/xd96/custom_matrix_helper.c b/keyboards/xd96/custom_matrix_helper.c
new file mode 100644 (file)
index 0000000..a4c5b6a
--- /dev/null
@@ -0,0 +1,127 @@
+/* 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/>.
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "debounce.h"
+#include "quantum.h"
+
+//_____COMMON__________________________________________________________________
+// user-defined overridable functions
+__attribute__((weak)) void matrix_init_kb(void) { matrix_init_user(); }
+__attribute__((weak)) void matrix_scan_kb(void) { matrix_scan_user(); }
+__attribute__((weak)) void matrix_init_user(void) {}
+__attribute__((weak)) void matrix_scan_user(void) {}
+
+
+//_____COULD BE COMMON_________________________________________________________
+/* matrix state(1:on, 0:off) */
+/*static*/ matrix_row_t raw_matrix[MATRIX_ROWS];
+/*static*/ matrix_row_t matrix[MATRIX_ROWS];
+
+#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
+
+__attribute__ ((weak))
+uint8_t matrix_rows(void) {
+  return MATRIX_ROWS;
+}
+
+__attribute__ ((weak))
+uint8_t matrix_cols(void) {
+  return MATRIX_COLS;
+}
+
+__attribute__ ((weak))
+matrix_row_t matrix_get_row(uint8_t row) {
+  return matrix[row];
+}
+
+__attribute__ ((weak))
+uint8_t matrix_key_count(void) {
+  uint8_t count = 0;
+  for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+    count += matrix_bitpop(i);
+  }
+  return count;
+}
+
+__attribute__ ((weak))
+void matrix_print(void) {
+  print_matrix_header();
+
+  for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+    phex(row); print(": ");
+    print_matrix_row(row);
+    print("\n");
+  }
+}
+
+
+//_____CUSTOM MATRIX 'LITE'____________________________________________________
+__attribute__ ((weak))
+void custom_matrix_init(void) {
+}
+
+__attribute__ ((weak))
+bool custom_matrix_scan(matrix_row_t current_matrix[]) {
+    bool changed = true;
+    return changed;
+}
+
+__attribute__ ((weak))
+void matrix_init(void) {
+
+  custom_matrix_init();
+
+  // initialize matrix state: all keys off
+  for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+    raw_matrix[i] = 0;
+    matrix[i] = 0;
+  }
+
+  debounce_init(MATRIX_ROWS);
+
+  matrix_init_quantum();
+}
+
+__attribute__ ((weak))
+uint8_t matrix_scan(void) {
+  bool changed = custom_matrix_scan(raw_matrix);
+
+  debounce(raw_matrix, matrix, MATRIX_ROWS, changed);
+
+  matrix_scan_quantum();
+  return 1;
+}
diff --git a/keyboards/xd96/info.json b/keyboards/xd96/info.json
new file mode 100644 (file)
index 0000000..f180682
--- /dev/null
@@ -0,0 +1,17 @@
+{
+  "keyboard_name": "xd96",
+  "url": "",
+  "maintainer": "qmk",
+  "width": 19,
+  "height": 6,
+  "layouts": {  
+    "LAYOUT_96_ansi": {
+      "key_count": 99,
+      "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"Insert", "x":13, "y":0}, {"label":"Delete", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"End", "x":16, "y":0}, {"label":"PgUp", "x":17, "y":0}, {"label":"PgDn", "x":18, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Num Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"+", "x":18, "y":2, "h":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Enter", "x":18, "y":4, "h":2}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}, {"label":"0", "x":16, "y":5}, {"label":".", "x":17, "y":5}]
+    },
+    "LAYOUT_96_iso": {
+      "key_count": 100,
+      "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"Insert", "x":13, "y":0}, {"label":"Delete", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"End", "x":16, "y":0}, {"label":"PgUp", "x":17, "y":0}, {"label":"PgDn", "x":18, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"\"", "x":2, "y":1}, {"label":"\u00a3", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Num Lock", "x":15, "y":1}, {"label":"/", "x":16, "y":1}, {"label":"*", "x":17, "y":1}, {"label":"-", "x":18, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"7", "x":15, "y":2}, {"label":"8", "x":16, "y":2}, {"label":"9", "x":17, "y":2}, {"label":"+", "x":18, "y":2, "h":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"@", "x":11.75, "y":3}, {"label":"~", "x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2}, {"label":"4", "x":15, "y":3}, {"label":"5", "x":16, "y":3}, {"label":"6", "x":17, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"label":"|", "x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"1", "x":15, "y":4}, {"label":"2", "x":16, "y":4}, {"label":"3", "x":17, "y":4}, {"label":"Enter", "x":18, "y":4, "h":2}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5, "w":1.5}, {"label":"Ctrl", "x":11.5, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}, {"label":"0", "x":16, "y":5}, {"label":".", "x":17, "y":5}]
+    }
+  }
+}
diff --git a/keyboards/xd96/keymaps/default/keymap.c b/keyboards/xd96/keymaps/default/keymap.c
new file mode 100644 (file)
index 0000000..45588f1
--- /dev/null
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+#define L1_RALT LM(1, MOD_RALT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = LAYOUT_96_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_INS,   KC_DEL,   KC_HOME,  KC_END,   KC_PGUP,  KC_PGDN,
+/* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         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_NLCK,  KC_PSLS,  KC_PAST,  KC_PMNS,
+/* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┼─────────┼─────────┼─────────┤ */
+         KC_TAB,            KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,       KC_P7,    KC_P8,    KC_P9,
+/* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──────────────├─────────├─────────├─────────├         ┤ */
+         KC_CAPS,          KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,  KC_ENT,               KC_P4,    KC_P5,    KC_P6,    KC_PPLS,
+/* ├─────────────────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───────────┬─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         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_P1,    KC_P2,    KC_P3,
+/* ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴─────────┴──┬──────┴───────┬─────────┼─────────┼─────────┼─────────┼─────────┼         ┤ */
+         KC_LCTL,    KC_LGUI,    KC_LALT,    KC_SPC,                                                         L1_RALT,       KC_RCTL,       KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_P0,    KC_PDOT,  KC_PENT
+/* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴──────────────┴──────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */
+  ),
+
+  [1] = LAYOUT_96_ansi(
+/* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */
+    _______,  BL_TOGG,  BL_STEP,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
+/* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         _______,  RGB_TOG,  RGB_MOD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,  _______,  _______,
+/* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┼─────────┼─────────┼─────────┤ */
+         _______,           _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,       _______,  _______,  _______,
+/* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──────────────├─────────├─────────├─────────┼         ┤ */
+         _______,          _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,  _______,  _______,
+/* ├─────────────────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───────────┬─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         _______,              _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,          _______,  _______,  _______,  _______,
+/* ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴─────────┴──┬──────┴───────┬─────────┼─────────┼─────────┼─────────┼─────────┼         ┤ */
+         _______,    _______,    _______,    _______,                                                        _______,       _______,       _______,  _______,  _______,  _______,  _______,  _______
+/* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴──────────────┴──────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */
+  )
+};
diff --git a/keyboards/xd96/keymaps/default_iso/keymap.c b/keyboards/xd96/keymaps/default_iso/keymap.c
new file mode 100644 (file)
index 0000000..cdd1f49
--- /dev/null
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+#define L1_RALT LM(1, MOD_RALT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  [0] = LAYOUT_96_iso(
+/* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */
+    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_INS,   KC_DEL,   KC_HOME,  KC_END,   KC_PGUP,  KC_PGDN,
+/* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         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_NLCK,  KC_PSLS,  KC_PAST,  KC_PMNS,
+/* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┼─────────┼─────────┼─────────┤ */
+         KC_TAB,            KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,                 KC_P7,    KC_P8,    KC_P9,
+/* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬           ├─────────├─────────├─────────├         ┤ */
+         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_P4,    KC_P5,    KC_P6,    KC_PPLS,
+/* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         KC_LSFT,    KC_NUBS,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,          KC_UP,    KC_P1,    KC_P2,    KC_P3,
+/* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴─────────┴──┬──────┴───────┬─────────┼─────────┼─────────┼─────────┼─────────┼         ┤ */
+         KC_LCTL,    KC_LGUI,    KC_LALT,    KC_SPC,                                                         L1_RALT,       KC_RCTL,       KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_P0,    KC_PDOT,  KC_PENT
+/* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴──────────────┴──────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */
+  ),
+
+  [1] = LAYOUT_96_iso(
+/* ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ */
+    _______,  BL_TOGG,  BL_STEP,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,
+/* ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         _______,  RGB_TOG,  RGB_MOD,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,            _______,  _______,  _______,  _______,
+/* ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┼─────────┼─────────┼─────────┤ */
+         _______,           _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,                 _______,  _______,  _______,
+/* ├──────────────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬──────┴──┬           ├─────────├─────────├─────────┼         ┤ */
+         _______,          _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,  _______,  _______,  _______,
+/* ├───────────┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴───┬─────┴─────────┴─┬─────────┼─────────┼─────────┼─────────┼─────────┤ */
+         _______,    _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,          _______,  _______,  _______,  _______,
+/* ├───────────┼─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴─────────┴──┬──────┴───────┬─────────┼─────────┼─────────┼─────────┼─────────┼         ┤ */
+         _______,    _______,    _______,    _______,                                                        _______,       _______,       _______,  _______,  _______,  _______,  _______,  _______
+/* └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴──────────────┴──────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ */
+  )
+};
diff --git a/keyboards/xd96/matrix.c b/keyboards/xd96/matrix.c
new file mode 100644 (file)
index 0000000..550dae4
--- /dev/null
@@ -0,0 +1,96 @@
+/* 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/>.
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <string.h>
+#include "matrix.h"
+#include "pca9555.h"
+#include "quantum.h"
+
+#include "debug.h"
+
+// PCA9555 slave addresses
+#define IC1 0x20
+#define IC2 0x21
+
+//_____Utility funcs___________________________________________________________
+
+static void init_pins(void) {
+  // init all cols high - IC2 all input
+  pca9555_set_config(IC2, PCA9555_PORT0, ALL_INPUT);//same as initial state
+  pca9555_set_config(IC2, PCA9555_PORT1, ALL_INPUT);//same as initial state
+  pca9555_set_config(IC1, PCA9555_PORT1, ALL_INPUT);//same as initial state
+
+  // init all rows - IC1 port0 input
+  pca9555_set_config(IC1, PCA9555_PORT0, ALL_INPUT);//same as initial state
+}
+
+static void select_row(uint8_t row) {
+  // For the XD96 all rows are on the same IC and port
+  // so its safe enough to assume here row == pin
+  uint8_t pin = row;
+  uint8_t mask = 1 << pin;
+
+  pca9555_set_output(IC1, PCA9555_PORT0, ALL_HIGH & (~mask));
+  pca9555_set_config(IC1, PCA9555_PORT0, ALL_INPUT & (~mask));
+}
+
+static uint32_t read_cols(void) {
+  uint32_t state_1 = pca9555_readPins(IC2, PCA9555_PORT0);
+  uint32_t state_2 = pca9555_readPins(IC2, PCA9555_PORT1);
+  uint32_t state_3 = pca9555_readPins(IC1, PCA9555_PORT1);
+
+  // For the XD96 the pins are mapped to port expanders as follows:
+  //   all 8 pins port 0 IC2, first 6 pins port 1 IC2, first 4 pins port 1 IC1
+  uint32_t state = (((state_3 & 0b00001111) << 14) | ((state_2 & 0b00111111) << 8) | state_1);
+  return (~state) & 0b111111111111111111;
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+  // Store last value of row prior to reading
+  matrix_row_t last_row_value = current_matrix[current_row];
+
+  // Clear data in matrix row
+  current_matrix[current_row] = 0;
+
+  // Select row and wait for row selecton to stabilize
+  select_row(current_row);
+  wait_us(30);
+
+  current_matrix[current_row] = read_cols();
+
+  // No need to Unselect row as the next `select_row` will blank everything
+
+  return (last_row_value != current_matrix[current_row]);
+}
+
+//_____CUSTOM MATRIX IMPLEMENTATION____________________________________________________
+
+void custom_matrix_init(void) {
+  pca9555_init(IC1);
+  pca9555_init(IC2);
+
+  init_pins();
+}
+
+bool custom_matrix_scan(matrix_row_t current_matrix[]) {
+  bool changed = false;
+  for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+    changed |= read_cols_on_row(current_matrix, current_row);
+  }
+  return changed;
+}
\ No newline at end of file
diff --git a/keyboards/xd96/pca9555.c b/keyboards/xd96/pca9555.c
new file mode 100644 (file)
index 0000000..960df4f
--- /dev/null
@@ -0,0 +1,78 @@
+/* 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/>.
+ */
+#include "i2c_master.h"
+#include "pca9555.h"
+
+#include "debug.h"
+
+#define SLAVE_TO_ADDR(n)   (n<<1)
+#define TIMEOUT 100
+
+enum {
+  CMD_INPUT_0 = 0,
+  CMD_INPUT_1,
+  CMD_OUTPUT_0,
+  CMD_OUTPUT_1,
+  CMD_INVERSION_0,
+  CMD_INVERSION_1,
+  CMD_CONFIG_0,
+  CMD_CONFIG_1
+};
+
+void pca9555_init(uint8_t slave_addr) {
+  static uint8_t s_init = 0;
+  if (!s_init) {
+    i2c_init();
+
+    s_init=1;
+  }
+
+  // TODO: could check device connected
+  //i2c_start(SLAVE_TO_ADDR(slave) | I2C_WRITE);
+  //i2c_stop();
+}
+
+void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+  uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+  uint8_t cmd = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0;
+
+  i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
+  if (ret != I2C_STATUS_SUCCESS) {
+    print("pca9555_set_config::FAILED\n");
+  }
+}
+
+void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+  uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+  uint8_t cmd = port ? CMD_CONFIG_1 : CMD_CONFIG_0;
+
+  i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT);
+  if (ret != I2C_STATUS_SUCCESS) {
+    print("pca9555_set_output::FAILED\n");
+  }
+}
+
+uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) {
+  uint8_t addr = SLAVE_TO_ADDR(slave_addr);
+  uint8_t cmd = port ? CMD_INPUT_1 : CMD_INPUT_0;
+
+  uint8_t data = 0;
+  i2c_status_t ret = i2c_readReg(addr, cmd, &data, sizeof(data), TIMEOUT);
+  if (ret != I2C_STATUS_SUCCESS) {
+    print("pca9555_readPins::FAILED\n");
+  }
+  return data;
+}
diff --git a/keyboards/xd96/pca9555.h b/keyboards/xd96/pca9555.h
new file mode 100644 (file)
index 0000000..6aaee8a
--- /dev/null
@@ -0,0 +1,55 @@
+/* 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
+
+/*
+            PCA9555
+         ,----------.
+   SDA --| SDA  P00 |-- P1
+   SCL --| SCL  P01 |-- P2
+   INT --| INT  P02 |-- P3
+         |      P03 |-- P4
+   A0  --| A0   P04 |-- P5
+   A1  --| A1   P05 |-- P6
+   A2  --| A2   P06 |-- P7
+         |      P07 |-- P8
+         |          |      
+         |      P10 |-- P10
+         |      P11 |-- P11
+         |      P12 |-- P12
+         |      P13 |-- P13
+         |      P14 |-- P14
+         |      P15 |-- P15
+         |      P16 |-- P16
+         |      P17 |-- P17
+         `----------'      
+*/
+
+#define PCA9555_PORT0 0
+#define PCA9555_PORT1 1
+
+#define ALL_OUTPUT 0
+#define ALL_INPUT 0xFF
+#define ALL_LOW 0
+#define ALL_HIGH 0xFF
+
+void pca9555_init(uint8_t slave_addr);
+
+void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf);
+
+void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf);
+
+uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port);
\ No newline at end of file
diff --git a/keyboards/xd96/readme.md b/keyboards/xd96/readme.md
new file mode 100644 (file)
index 0000000..237d7a0
--- /dev/null
@@ -0,0 +1,22 @@
+# XD96
+
+![XD96](https://cdn.shopify.com/s/files/1/2711/4238/products/xd96_pcb_1024x1024.jpg?v=1515425370)
+
+Compact With 96 Keys & RGB LED Underglow
+- Designed by Xiudi
+- ISO and ANSI support
+- Uses Kimera core
+
+Keyboard Maintainer: QMK Community  
+Hardware Supported: XD96  
+Hardware Availability: [KPrepublic](https://kprepublic.com/products/xd96-pcb-90-custom-mechanical-keyboard-supports-tkg-tools-underglow-rgb-programmed); [AliExpress](https://aliexpress.com/item/cospad-Custom-Mechanical-Keyboard-Kit-up-tp-24-keys-Supports-TKG-TOOLS-Underglow-RGB-PCB-20/32818383873.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make xd96:default
+
+Install examples:
+
+    make xd96:default:dfu
+
+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/xd96/rules.mk b/keyboards/xd96/rules.mk
new file mode 100644 (file)
index 0000000..c9f8044
--- /dev/null
@@ -0,0 +1,86 @@
+# 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 = lite     # 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 = no            # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes       # 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)
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC = i2c_master.c custom_matrix_helper.c pca9555.c matrix.c
+
+EXTRAFLAGS += -flto
diff --git a/keyboards/xd96/xd96.c b/keyboards/xd96/xd96.c
new file mode 100644 (file)
index 0000000..45cfb3b
--- /dev/null
@@ -0,0 +1,34 @@
+/* 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/>.
+ */
+#include "xd96.h"
+
+#define CAPS_PIN B6
+
+void keyboard_pre_init_kb(void) {
+  setPinOutput(CAPS_PIN);
+
+  keyboard_pre_init_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+  if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
+    writePinLow(CAPS_PIN);
+  } else {
+    writePinHigh(CAPS_PIN);
+  }
+
+  led_set_user(usb_led);
+}
diff --git a/keyboards/xd96/xd96.h b/keyboards/xd96/xd96.h
new file mode 100644 (file)
index 0000000..04c2cc4
--- /dev/null
@@ -0,0 +1,59 @@
+/* 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"
+#define ____ KC_NO
+
+/* 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_96_ansi( \
+    K101, K102, K103, K104, 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,       K216, K217, K218, K219, \
+    K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314,       K316, K317, K318,       \
+    K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412,       K414,       K416, K417, K418, K419, \
+    K501,       K503, K504, K505, K506, K507, K508, K509, K510, K511, K512, K513,       K515, K516, K517, K518,       \
+    K601, K602, K603,                       K607,               K611, K612,       K614, K615, K616, K617, K618, K619  \
+) { \
+    { K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K116, K117, K118, K119 }, \
+    { K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K216, K217, K218, K219 }, \
+    { K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K316, K317, K318, K419 }, \
+    { K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, ____, K414, K416, K417, K418, ____ }, \
+    { K501, ____, K503, K504, K505, K506, K507, K508, K509, K510, K511, K512, K513, K515, K516, K517, K518, K619 }, \
+    { K601, K602, K603, ____, ____, K607, K115, ____, K612, ____, K611, K612, K614, K615, K616, K617, K618, ____ }  \
+}
+
+#define LAYOUT_96_iso( \
+    K101, K102, K103, K104, 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,       K216, K217, K218, K219, \
+    K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313,             K316, K317, K318,       \
+    K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412,       K414, K415, K416, K417, K418, K419, \
+    K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K512, K513,       K515, K516, K517, K518,       \
+    K601, K602, K603,                       K607,               K611, K612,       K614, K615, K616, K617, K618, K619  \
+) { \
+    { K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K116, K117, K118, K119 }, \
+    { K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K216, K217, K218, K219 }, \
+    { K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, K316, K317, K318, K419 }, \
+    { K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K414, K415, K416, K417, K418, ____ }, \
+    { K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K512, K513, K515, K516, K517, K518, K619 }, \
+    { K601, K602, K603, ____, ____, K607, K115, ____, K612, ____, K611, K612, K614, K615, K616, K617, K618, ____ }  \
+}
index eed6ce13eed7d6b264773a474a7d2dd679c6fc24..d1c4e95ae7b72b926992778842011a1cef5d7226 100644 (file)
@@ -37,7 +37,7 @@ $ brew cask install crosspack-avr
 $ brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
 ```
 
-In order to use the `./program` script, which can reboot the board into
+In order to use the `./util/atmega32a_program.py` script, which can reboot the board into
 the bootloader, you'll need Python 2 with PyUSB installed:
 
 ```
diff --git a/keyboards/ymd75/program b/keyboards/ymd75/program
deleted file mode 100644 (file)
index a88d9cd..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 Luiz Ribeiro <luizribeiro@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/>.
-
-from __future__ import print_function
-
-import os
-import sys
-import time
-import usb
-
-if len(sys.argv) < 2:
-    print('Usage: %s <firmware.hex>' % sys.argv[0])
-    sys.exit(1)
-
-print('Searching for ps2avrGB... ', end='')
-
-dev = usb.core.find(idVendor=0x20A0, idProduct=0x422D)
-if dev is None:
-    raise ValueError('Device not found')
-
-print('Found', end='\n\n')
-
-print('Device Information:')
-print('  idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
-print('  idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
-print('Manufacturer: %s' % (dev.iManufacturer))
-print('Serial: %s' % (dev.iSerialNumber))
-print('Product: %s' % (dev.iProduct), end='\n\n')
-
-print('Transferring control to bootloader... ', end='')
-
-dev.set_configuration()
-
-request_type = usb.util.build_request_type(
-        usb.util.CTRL_OUT,
-        usb.util.CTRL_TYPE_CLASS,
-        usb.util.CTRL_RECIPIENT_DEVICE)
-
-USBRQ_HID_SET_REPORT = 0x09
-HID_REPORT_OPTION = 0x0301
-
-
-try:
-    dev.ctrl_transfer(
-            request_type,
-            USBRQ_HID_SET_REPORT,
-            HID_REPORT_OPTION,
-            0,
-            [0, 0, 0xFF] + [0] * 5
-            )
-except usb.core.USBError:
-    # for some reason I keep getting USBError, but it works!
-    pass
-
-# wait a bit until bootloader starts up
-time.sleep(2)
-
-print('OK')
-print('Programming...')
-if os.system('bootloadHID -r "%s"' % sys.argv[1]) == 0:
-    print('\nDone!')
index 9697a76f1e86cdeb7d45dd6513c25529ceb856da..9d09d3da94b8abea4add7688cc05dd021f3a212f 100644 (file)
@@ -59,4 +59,4 @@ SRC = matrix.c i2c.c backlight.c
 
 
 # programming options
-PROGRAM_CMD = ./keyboards/ps2avrGB/program $(TARGET).hex
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
index 9d0a8261dc0b876c543964711996f9a29f850510..3d54c7395c0d603a0ec97ca3c5dcae283e888c4e 100644 (file)
@@ -16,9 +16,7 @@ You should have received a copy of the GNU General Public LicensezZZ
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#include "ymd96.h"
-#include "action_layer.h"
-#include "rgblight.h"
+#include QMK_KEYBOARD_H
 
 #define ______ KC_TRNS
 #define _DEFLT 0
@@ -27,7 +25,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define KEYMAP KEYMAP_DEFAULT
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-       
+
        /* Layer 0, default layer
        *  | Esc  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |Print | Home | End  |Insert|Delete| PgUp | 19 keys
        *  |  ~`  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |    0 |    - |    = |    BkSpc    |NumLck|   /  |   *  | PgDn | 18 keys
@@ -36,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        *  |    LShft     |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |       RShft       |  1   |   2  |   3  |  En  | 16 keys
        *  | Ctrl  |  Win  |  Alt  |                  Space                      |  Fn  |  Win | Left | Down |  Up  | Right|   0  |   .  |      | 12 keys
        */
-       
+
     [_DEFLT] = KEYMAP(
                        KC_ESC,  KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11,       KC_F12,      KC_PSCR, KC_HOME,    KC_END,     KC_INSERT,   KC_DELETE,      KC_PGUP, \
                        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_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_PGDN, \
@@ -52,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        *  |          |      |      |      |      |      |      |      |      |      |      |      |                |      |      |      |      |
        *  |              |      |      |      |      |      |      |      | VolDn| VolUp| Mute |     Play/Pause    |      |      |      |      |
        *  |       |       |       |                                             |      |      |MPrev |      |      | MNext|      |      |      |
-       */ 
+       */
        [_RAISE] = KEYMAP(
                        ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______, \
                        ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,           ______,  ______,  ______,  ______, \
@@ -61,4 +59,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                        ______,  ______,  ______,  ______,  ______,  ______,  ______,  ______,  KC_VOLD,KC_VOLU, KC_MUTE,                   KC_MPLY,           ______,  ______,  ______,  ______, \
                    ______,  ______,  ______,                                  ______,                                 ______,  ______, KC_MPRV,  ______,  ______, KC_MNXT,  ______,  ______  \
        )
-};
\ No newline at end of file
+};
diff --git a/keyboards/ymd96/program b/keyboards/ymd96/program
deleted file mode 100644 (file)
index a88d9cd..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 Luiz Ribeiro <luizribeiro@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/>.
-
-from __future__ import print_function
-
-import os
-import sys
-import time
-import usb
-
-if len(sys.argv) < 2:
-    print('Usage: %s <firmware.hex>' % sys.argv[0])
-    sys.exit(1)
-
-print('Searching for ps2avrGB... ', end='')
-
-dev = usb.core.find(idVendor=0x20A0, idProduct=0x422D)
-if dev is None:
-    raise ValueError('Device not found')
-
-print('Found', end='\n\n')
-
-print('Device Information:')
-print('  idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
-print('  idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
-print('Manufacturer: %s' % (dev.iManufacturer))
-print('Serial: %s' % (dev.iSerialNumber))
-print('Product: %s' % (dev.iProduct), end='\n\n')
-
-print('Transferring control to bootloader... ', end='')
-
-dev.set_configuration()
-
-request_type = usb.util.build_request_type(
-        usb.util.CTRL_OUT,
-        usb.util.CTRL_TYPE_CLASS,
-        usb.util.CTRL_RECIPIENT_DEVICE)
-
-USBRQ_HID_SET_REPORT = 0x09
-HID_REPORT_OPTION = 0x0301
-
-
-try:
-    dev.ctrl_transfer(
-            request_type,
-            USBRQ_HID_SET_REPORT,
-            HID_REPORT_OPTION,
-            0,
-            [0, 0, 0xFF] + [0] * 5
-            )
-except usb.core.USBError:
-    # for some reason I keep getting USBError, but it works!
-    pass
-
-# wait a bit until bootloader starts up
-time.sleep(2)
-
-print('OK')
-print('Programming...')
-if os.system('bootloadHID -r "%s"' % sys.argv[1]) == 0:
-    print('\nDone!')
index 8061146fdede33a19ecf2d284f68fa809568c197..048344d712a06932cddeac8b44149f44b276f66c 100644 (file)
@@ -43,6 +43,7 @@ enum zeal60_command_id
 
 enum zeal60_keyboard_value_id
 {
-       id_uptime = 0x01
+  id_uptime = 0x01,
+  id_firmware_version
 };
 
index 38e4d73f0d8496ccb386325c91a87445cd9086bd..d813085e46db956de88536eaab6fd77cb25c6f65 100644 (file)
@@ -15,10 +15,9 @@ 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
+#pragma once
 
-#include "config_common.h"
+// place overrides here
 
 /* Use I2C or Serial, not both */
 
@@ -37,5 +36,3 @@ 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
-
-#endif
index 6e274d3bac06ae55b801469fd6c3ae6b3f889010..34655237b55b48009210338e23d5cb078e1d6b94 100644 (file)
@@ -133,7 +133,7 @@ void matrix_init(void)
         matrix_debouncing[i] = 0;
     }
 
-
+    matrix_init_quantum();
 }
 
 uint8_t _matrix_scan(void)
@@ -264,6 +264,7 @@ uint8_t matrix_scan(void)
         TXLED0;
         error_count = 0;
     }
+    matrix_scan_quantum();
     return ret;
 }
 
index 12ed6868021d67b25a326a7ff976146249d63f75..b3c74da949fdf7fd19dddd00ee103466eacd5da3 100644 (file)
@@ -10,11 +10,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_LCTL, KC_LGUI, KC_LALT,       KC_SPACE,             KC_FNX,  KC_RALT, KC_RGUI, KC_RCTL),
 
 [_FL] = LAYOUT_60_ansi(
-    KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
-         RGB_TOG, 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_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,                   \
-    KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+    KC_GRV,  KC_F1,    KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+         BL_TOGG, BL_INC,   BL_DEC,  BL_STEP, RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+    RGB_TOG, RGB_MOD,  RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          \
+    VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,                   \
+    KC_TRNS, KC_TRNS,  KC_TRNS,       KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
 
 [_AL] = LAYOUT_60_ansi(
     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
diff --git a/layouts/community/60_ansi/stanrc85-ansi/config.h b/layouts/community/60_ansi/stanrc85-ansi/config.h
deleted file mode 100644 (file)
index 904a7f5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#pragma once
-
-#define TAPPING_TERM 200
-#define RETRO_TAPPING
index d8d79a581c800ac3e839169e68bc2a88d985af77..ce41c0d4d934bd87badfe481f8b1ee3524242d02 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 #include QMK_KEYBOARD_H
-
-#define DEFAULT 0  //Custom ANSI
-#define LAYER1 1   //Default ANSI (enable with Fn2+D)
-#define LAYER2 2   //Function keys, arrows, custom shortcuts, volume control
-#define LAYER3 3   //RGB Underglow controls and RESET
-
-//Aliases for longer keycodes
-#define KC_CAD LALT(LCTL(KC_DEL))
-#define KC_LOCK        LGUI(KC_L)
-#define CA_QUOT LCA(KC_QUOT)
-#define CA_SCLN LCA(KC_SCLN)
-#define KC_CTLE LCTL_T(KC_ESC)
-#define LT_SPCF LT(2, KC_SPC)
-#define TD_TESC TD(TD_ESC)
-#define TD_TWIN TD(TD_WIN)
-
-//Tap Dance Declarations
-enum {
-       TD_WIN = 0,
-       TD_ESC
-};
-
-qk_tap_dance_action_t tap_dance_actions[] = {
-       [TD_WIN] = ACTION_TAP_DANCE_DOUBLE(KC_CAD, KC_LOCK),
-       [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV)
-};
+#include "stanrc85.h"
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        [0] = LAYOUT_60_ansi(
@@ -47,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                KC_TAB,  KC_Q,    KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
                KC_CTLE, 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,          LT_SPCF,          KC_RALT, TD_TWIN, MO(3),   KC_RCTL),
+               KC_LCTL, KC_LGUI, KC_LALT,          LT_SPCF,          KC_RALT, TD_TWIN, MO(3),   TD_TCTL),
 
        [1] = 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,
@@ -58,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
        [2] = LAYOUT_60_ansi(
                KC_TILD, 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,
-               _______, _______, CA_QUOT, KC_VOLU, CA_SCLN, _______, _______, KC_HOME, KC_UP,   KC_END,  _______, _______, _______, RESET,
+               _______, _______, CA_QUOT, KC_VOLU, CA_SCLN, _______, _______, KC_HOME, KC_UP,   KC_END,  _______, _______, _______, KC_INS,
                KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_MPLY, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
                _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
                _______, _______, _______,                   _______,                   _______, _______, _______, _______),
@@ -66,11 +41,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        [3] = LAYOUT_60_ansi(
                _______, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, RGB_SAI, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______,
                _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
-               _______, _______, _______, TG(1),   _______, _______, _______, _______, _______, _______, _______, _______, _______,
+               TG(1),   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MAKE,
                _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
                _______, _______, _______,                   _______,                   _______, _______, _______, _______)
 };
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
   return true;
 }
index 2df5588af7fb333b2117432555dd3a800a8eed6c..6b5b3ca9ff216ae94d46ac3b0ac8f533831abf95 100644 (file)
@@ -1,14 +1,48 @@
-# Stanrc85's Standard ANSI 60% Layout
+<!-- Copyright 2019 Stanrc85
+
+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.
 
-Shared keymap between two 60% PCB:
-- 1upkeyboards60HSE
-- DZ60 (hotswap)
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.-->
+
+# Stanrc85's Standard ANSI 60% Layout
 
 ## Keymap Notes
-- Layer 0 is custom ANSI layout with SpaceFN, CTRL/ESC on CAPS, Tap Dance on Fn1 key for CTRL+ALT+DEL and WIN+L
-- Layer 1 is default ANSI (enable with Fn2+D)
-- Layer 2 is F keys, arrows, volume controls and custom shortcuts for AHK
-- Layer 3 is RGB Underglow control and RESET
+- Layer 0 is default QWERTY layout with additional custom features:
+    - SpaceFN to function layer 2 on `Space`
+    - `CTRL` when held and `ESC` when tapped on `CAPS LOCK`
+    - Tap Dance on `Fn1` for `CTRL+ALT+DEL` and `WIN+L`
+    - Tap Dance on `ESC` for `ESC` and  ` ` `
+
+![Base QWERTY Layer](https://imgur.com/lGcyLJx.png)
+
+- Layer 1 is default QWERTY with no custom features used mostly for gaming
+    - Enabled by `Fn2+CAPS` from base layer
+
+![Default ANSI Layer](https://imgur.com/M7T9PNT.png)
+
+- Layer 2 is Function layer:
+    - F keys
+    - Arrows
+    - Volume and Media controls
+    - AutoHotkey shortcuts based on [Speaker Control](https://github.com/stanrc85/Speaker-Control) script
+        - AHK Mic is used to mute/unmute microphone
+        - AHK Speaker switches audio output between headphones and speakers
+
+![Function Layer](https://imgur.com/YPl0JrU.png)
+
+- Layer 3 is RGB control and RESET
+    - `Fn2+CAPS` used to toggle Default QWERTY layer on and off
+
+![RGB and RESET Layer](https://imgur.com/8K7gSgh.png)
 
 ### Build
 To build the firmware file associated with this keymap, simply run `make your_keyboard:stanrc85-ansi`.
index 324e52674d6c368dd140415479706c74691553c5..89d03e8c1f6761375721781c3e0c1ab8aa4ee670 100644 (file)
@@ -1,10 +1 @@
-TAP_DANCE_ENABLE = yes
-EXTRAKEY_ENABLE = yes
-RGBLIGHT_ENABLE = yes
-BACKLIGHT_ENABLE = no
-COMMAND_ENABLE = no
-BOOTMAGIC_ENABLE = no
-MOUSEKEY_ENABLE = no
-AUDIO_ENABLE = no
-CONSOLE_ENABLE = no
-NKRO_ENABLE = no
+USER_NAME := stanrc85
index 96c3a32f269249bbe9a5c87ce9e17c9c313f925e..98ba86e9415f1a587da71232bc83cf55f38f8d69 100644 (file)
@@ -10,11 +10,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     KC_LCTL, KC_LGUI, KC_LALT,       KC_SPACE,             MO(1),   KC_RALT, KC_RGUI, KC_RCTL),
 
 [_FL] = LAYOUT_60_ansi_split_bs_rshift(
-    KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL, KC_DEL, \
-         RGB_TOG, 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_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,                 \
-    KC_TRNS, KC_TRNS, KC_TRNS,       KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+    KC_GRV,  KC_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_DEL, \
+       BL_TOGG, BL_INC,   BL_DEC,  BL_STEP, RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,        \
+    RGB_TOG, RGB_MOD,  RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                 \
+    VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,                 \
+    KC_TRNS, KC_TRNS,  KC_TRNS,       KC_TRNS,                               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
 
 [_AL] = LAYOUT_60_ansi_split_bs_rshift(
     KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
index f51361866cd40d544cfe0889ba5b4f8ab7f9c205..6f70f09beec2219624baeca92e2cd7deaa104fb4 100644 (file)
@@ -1,12 +1 @@
 #pragma once
-
-#ifdef AUDIO_CLICKY
-    #define AUDIO_CLICKY_ON
-    #define AUDIO_CLICKY_FREQ_DEFAULT 261.63f
-    #define AUDIO_CLICKY_FREQ_MIN 65.41f
-    #define AUDIO_CLICKY_FREQ_MAX 1046.5f
-    //#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f
-    //#define AUDIO_CLICKY_FREQ_FACTOR 2.71828f  // e
-    #define AUDIO_CLICKY_FREQ_FACTOR 1.61803f // golden ratio
-    #define AUDIO_CLICKY_FREQ_RANDOMNESS 17.0f
-#endif
index ea2e923b1cacc3b9bc6bf63ca2e13e8deb26b81e..9f041e27ca6724ec15cfd35aa8facd675e000c7b 100644 (file)
@@ -8,20 +8,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
   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_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_PGDN, \
   KC_CTCP,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_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,                                 MO(_FL),KC_RGUI,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
 
 [_FL] = LAYOUT_66_ansi(
   KC_GRV, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_F6,  KC_F7,  KC_F8,  KC_F9,  KC_F10, KC_F11, KC_F12,      KC_DEL,            KC_VOLU, \
-  _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE,                KC_VOLD, \
+  _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,                KC_VOLD, \
   _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______,    _______,                             \
-  _______,        _______,_______,_______,_______,_______,_______,KC_MUTE,KC_VOLU,KC_VOLD,_______,        _______,        KC_PGUP,         \
+  _______,        _______,_______,_______,_______,_______,_______,KC_MUTE,KC_VOLD,KC_VOLU,_______,        _______,        KC_PGUP,         \
   _______,_______,_______,                        _______,                                _______,_______,_______,KC_HOME,KC_PGDN,KC_END),
 
 [_CL] = LAYOUT_66_ansi(
   BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______,   _______,           RGB_VAI, \
-  RGB_TOG,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______,                RGB_VAD, \
-  CK_TOGG,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,    _______,                             \
-  _______,        _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,        RGB_SAI,         \
-  _______,_______,_______,                        RGB_MOD,                                _______,_______,_______,RGB_HUD,RGB_SAD,RGB_HUI),
+  BL_TOGG,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______,                 RGB_VAD, \
+  RGB_TOG,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,    _______,                             \
+  VLK_TOG,        _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,        _______,        RGB_SAI,         \
+  CK_TOGG,_______,_______,                       RGB_MOD,                                _______,_______,_______,RGB_HUD,RGB_SAD,RGB_HUI),
 };
index e7b89516263d719fd7ad496db5a5a3c0c12405ac..f785cdf3fd9acd0f87607a382e3a599ff364dcc7 100644 (file)
@@ -9,13 +9,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_TAB,  KC_Q,    KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
         KC_CTCP, 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_PGDN,
         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_END,
-        KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                                  KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+        KC_LCTL, KC_LGUI, KC_LALT,                KC_SPC,                                  KC_RALT, MO(1),   KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
 
 [_FL] = LAYOUT_75_ansi(\
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-        RGB_TOG, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
-        KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END)
+        RESET,   RGB_M_P,  RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        BL_TOGG, BL_INC,   BL_DEC,  BL_STEP, KC_TRNS,  KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        RGB_TOG, RGB_MOD,  RGB_HUI, RGB_SAI, RGB_VAI,  RGB_SPI,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        VLK_TOG, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,  RGB_SPD,  KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
+        KC_TRNS, KC_TRNS,  KC_TRNS,          KC_TRNS,            KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END)
 };
index e0100de8f126b3b17141244c0637f59f1c30733a..428706e2d58c438a362cdb1cb3322e862ba7d3fb 100644 (file)
@@ -360,15 +360,15 @@ void matrix_scan_keymap(void) {  // runs frequently to update info
     // Since we're not using the LEDs here for layer indication anymore,
     // then lets use them for modifier indicators.  Shame we don't have 4...
     // Also, no "else", since we want to know each, independently.
-    if (modifiers & MODS_SHIFT_MASK || led_usb_state & (1<<USB_LED_CAPS_LOCK) || one_shot & MODS_SHIFT_MASK) {
+    if ( ( modifiers | one_shot ) & MOD_MASK_SHIFT || led_usb_state & (1<<USB_LED_CAPS_LOCK) ) {
       ergodox_right_led_2_on();
       ergodox_right_led_2_set( 50 );
     }
-    if (modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) {
+    if ( ( modifiers | one_shot ) & MOD_MASK_CTRL) {
       ergodox_right_led_1_on();
       ergodox_right_led_1_set( 10 );
     }
-    if (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) {
+    if ( ( modifiers | one_shot ) & MOD_MASK_ALT) {
       ergodox_right_led_3_on();
       ergodox_right_led_3_set( 10 );
     }
@@ -414,7 +414,7 @@ void rgb_matrix_layer_helper (uint8_t red, uint8_t green, uint8_t blue) {
 }
 
 void rgb_matrix_indicators_user(void) {
-  if (g_suspend_state || !rgb_matrix_config.enable || !userspace_config.rgb_layer_change) return;
+  if (g_suspend_state || !rgb_matrix_config.enable || !userspace_config.rgb_layer_change) { return; }
 
   switch (biton32(layer_state)) {
     case _MODS:
@@ -464,20 +464,20 @@ void rgb_matrix_indicators_user(void) {
       }
   }
 #if 0
-  if (this_mod & MODS_SHIFT_MASK || this_led & (1<<USB_LED_CAPS_LOCK) || this_osm & MODS_SHIFT_MASK) {
+  if (this_mod & MOD_MASK_SHIFT || this_led & (1<<USB_LED_CAPS_LOCK) || this_osm & MOD_MASK_SHIFT) {
     rgb_matrix_set_color(24, 0x00, 0xFF, 0x00);
     rgb_matrix_set_color(36, 0x00, 0xFF, 0x00);
   }
-  if (this_mod & MODS_CTRL_MASK || this_osm & MODS_CTRL_MASK) {
+  if (this_mod & MOD_MASK_CTRL || this_osm & MOD_MASK_CTRL) {
     rgb_matrix_set_color(25, 0xFF, 0x00, 0x00);
     rgb_matrix_set_color(34, 0xFF, 0x00, 0x00);
     rgb_matrix_set_color(37, 0xFF, 0x00, 0x00);
 
   }
-  if (this_mod & MODS_GUI_MASK || this_osm & MODS_GUI_MASK) {
+  if (this_mod & MOD_MASK_GUI || this_osm & MOD_MASK_GUI) {
     rgb_matrix_set_color(39, 0xFF, 0xD9, 0x00);
   }
-  if (this_mod & MODS_ALT_MASK || this_osm & MODS_ALT_MASK) {
+  if (this_mod & MOD_MASK_ALT || this_osm & MOD_MASK_ALT) {
     rgb_matrix_set_color(38, 0x00, 0x00, 0xFF);
   }
 #endif
diff --git a/layouts/community/ergodox/drashna_glow/README.md b/layouts/community/ergodox/drashna_glow/README.md
deleted file mode 100644 (file)
index 7d625a2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Note: This board will not flash if the "g_rgb_leds" const is not set to weak in the ergodox_ez.c file
index 197acbc4a03704fb357369a91759c88df2826e94..cdca5ba4b528c807966ad16c3473e2ac27a38673 100644 (file)
@@ -8,4 +8,15 @@
 #undef DEBOUNCE
 #define DEBOUNCE 5
 
+#ifdef RGB_MATRIX_ENABLE
 // #define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
+// #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
+// #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED  true// turn off effects when suspended
+// #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) if not defined defaults to 1
+// #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
+// #define EECONFIG_RGB_MATRIX (uint32_t *)16
+#endif
+
+#undef DEBOUNCE
+#define DEBOUNCE 1
index f2fb66545349e3368d217e5b11f97b9e8c97bffe..7d4bdbec50eaa5d078d7376ec1bc0e0ee223e065 100644 (file)
@@ -1,67 +1,2 @@
 /* placeholder file */
 #include QMK_KEYBOARD_H
-
-const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
-
-    /*{row | col << 4}
-      |             {x=0..224, y=0..64}
-      |              |                    modifier
-      |              |                    | */
-    {{0|(0<<4)},   {24.9*5, 16*0}, 0}, // LED 1 on right
-    {{0|(1<<4)},   {24.9*6, 16*0}, 0}, // LED 2
-    {{0|(2<<4)},   {24.9*7, 16*0}, 0}, // LED 3
-    {{0|(3<<4)},   {24.9*8, 16*0}, 0}, // LED 4
-    {{0|(4<<4)},   {24.9*9, 16*0}, 0}, // LED 5
-
-    {{1|(5<<4)},   {24.9*5, 16*1}, 0}, // LED 6
-    {{1|(6<<4)},   {24.9*6, 16*1}, 0}, // LED 7
-    {{1|(7<<4)},   {24.9*7, 16*1}, 0}, // LED 8
-    {{1|(8<<4)},   {24.9*8, 16*1}, 0}, // LED 9
-    {{1|(9<<4)},   {24.9*9, 16*1}, 0}, // LED 10
-
-    {{2|(5<<4)},   {24.9*5, 16*2}, 0}, // LED 11
-    {{2|(6<<4)},   {24.9*6, 16*2}, 0}, // LED 12
-    {{2|(7<<4)},   {24.9*7, 16*2}, 0}, // LED 13
-    {{2|(8<<4)},   {24.9*8, 16*2}, 0}, // LED 14
-    {{2|(9<<4)},   {24.9*9, 16*2}, 0}, // LED 15
-
-    {{3|(5<<4)},   {24.9*5, 16*2}, 0}, // LED 16
-    {{3|(6<<4)},   {24.9*6, 16*2}, 0}, // LED 17
-    {{3|(7<<4)},   {24.9*7, 16*2}, 0}, // LED 18
-    {{3|(8<<4)},   {24.9*8, 16*2}, 0}, // LED 19
-    {{3|(9<<4)},   {24.9*9, 16*2}, 0}, // LED 20
-
-    {{4|(6<<4)},   {24.9*6, 16*2}, 1}, // LED 21
-    {{4|(7<<4)},   {24.9*7, 16*2}, 1}, // LED 22
-    {{4|(8<<4)},   {24.9*8, 16*2}, 1}, // LED 23
-    {{4|(9<<4)},   {24.9*9, 16*2}, 1}, // LED 24
-
-    {{0|(0<<4)},   {24.9*4, 16*0}, 0}, // LED 1 on left
-    {{0|(1<<4)},   {24.9*3, 16*0}, 0}, // LED 2
-    {{0|(2<<4)},   {24.9*2, 16*0}, 0}, // LED 3
-    {{0|(3<<4)},   {24.9*1, 16*0}, 0}, // LED 4
-    {{0|(4<<4)},   {24.9*0, 16*0}, 0}, // LED 5
-
-    {{1|(5<<4)},   {24.9*4, 16*1}, 0}, // LED 6
-    {{1|(6<<4)},   {24.9*3, 16*1}, 0}, // LED 7
-    {{1|(7<<4)},   {24.9*2, 16*1}, 0}, // LED 8
-    {{1|(8<<4)},   {24.9*1, 16*1}, 0}, // LED 9
-    {{1|(9<<4)},   {24.9*0, 16*1}, 0}, // LED 10
-
-    {{2|(5<<4)},   {24.9*4, 16*2}, 0}, // LED 11
-    {{2|(6<<4)},   {24.9*3, 16*2}, 0}, // LED 12
-    {{2|(7<<4)},   {24.9*2, 16*2}, 0}, // LED 13
-    {{2|(8<<4)},   {24.9*1, 16*2}, 0}, // LED 14
-    {{2|(9<<4)},   {24.9*0, 16*2}, 0}, // LED 15
-
-    {{3|(5<<4)},   {24.9*4, 16*2}, 0}, // LED 16
-    {{3|(6<<4)},   {24.9*3, 16*2}, 0}, // LED 17
-    {{3|(7<<4)},   {24.9*2, 16*2}, 0}, // LED 18
-    {{3|(8<<4)},   {24.9*1, 16*2}, 0}, // LED 19
-    {{3|(9<<4)},   {24.9*0, 16*2}, 0}, // LED 20
-
-    {{4|(6<<4)},   {24.9*3, 16*2}, 1}, // LED 21
-    {{4|(7<<4)},   {24.9*2, 16*2}, 1}, // LED 22
-    {{4|(8<<4)},   {24.9*1, 16*2}, 1}, // LED 23
-    {{4|(9<<4)},   {24.9*0, 16*2}, 1}, // LED 24
-};
index 43efc763d163a4c12b0b8263832ef2a2e0edaa97..41beeb7e5fee6a0a40e2085dc1a4efc2253b62e2 100644 (file)
@@ -2,8 +2,9 @@
 #include "debug.h"
 #include "action_layer.h"
 #include "version.h"
-#include "keymap_nordic.h"
-#include "keymap_norwegian.h"
+#include "keymap_swedish.h"
+//#include "keymap_nordic.h"
+//#include "keymap_norwegian.h"
 
 #define BASE 0 // default layer
 #define SYMB 1 // symbols
@@ -44,10 +45,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |--------+------+------+------+------+------|  LT2 |           |  LT2 |------+------+------+------+------+--------|
  * | LShift |   Ö  |   Q  |   J  |   K  |   X  |      |           |      |   B  |   M  |   W  |   V  |Z/Ctrl| RShift |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- *   | CTRL |  L1  |AltShf| Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
+ *   | CTRL |  L1  |Alt   | Left | Right|                                       |  Up  | Down |   [  |   ]  | ~L1  |
  *   `----------------------------------'                                       `----------------------------------'
  *                                        ,-------------.       ,-------------.
- *                                        | App  | LGui |       | Alt  |Ctrl/Esc|
+ *                                        | App  | LGui |       | AltShf|Ctrl/Esc|
  *                                 ,------|------|------|       |------+--------+------.
  *                                 |      |      | Home |       | PgUp |        |      |
  *                                 | Space|Backsp|------|       |------|  Tab   |Enter |
@@ -62,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
         KC_DELT,        NO_MINS,        KC_COMM, KC_DOT, KC_P,   KC_Y,   TG(SYMB),
         KC_LGUI,        KC_A,           KC_O,    KC_E,   KC_U,   KC_I,
         KC_LSFT,        CTL_T(KC_SCLN), KC_Q,    KC_J,   KC_K,   KC_X,   TG(MDIA),
-        CTL_T(KC_NO),   MO(SYMB),       LALT(KC_LSFT),  KC_LEFT,KC_RGHT,
+        CTL_T(KC_NO),   MO(SYMB),       KC_LALT,  KC_LEFT,KC_RGHT,
                                               ALT_T(KC_APP),  KC_LGUI,
                                                               KC_HOME,
                                                KC_SPC,KC_BSPC,KC_END,
@@ -72,7 +73,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                           KC_D,   KC_H,   KC_T,   KC_N,   KC_S,             NO_AE,
              TG(MDIA),KC_B,   KC_M,   KC_W,   KC_V,   CTL_T(KC_Z),      KC_RSFT,
                                   KC_UP,  KC_DOWN,KC_LBRC,KC_RBRC,          TT(SYMB),
-             KC_LALT,        CTL_T(KC_ESC),
+             LALT(KC_LSFT),        CTL_T(KC_ESC),
              KC_PGUP,
              KC_PGDN,KC_TAB, KC_ENT
     ),
@@ -85,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
  * |        |   #  |   (  |   )  |   \  |   /  |------|           |------|   >  |   4  |   5  |   6  |   +  |        |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      | UND  | CUT  | COP  | PAS  |      |           |      |   ?  |   1  |   2  |   3  |   %  |        |
+ * |        |   ~  | UND  | CUT  | COP  | PAS  |      |           |      |   ?  |   1  |   2  |   3  |   %  |        |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  *   |      |      |      |      |      |                                       |   .  |   0  |   =  |      |      |
  *   `----------------------------------'                                       `----------------------------------'
@@ -103,7 +104,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        M(0),      KC_F1,   KC_F2,    KC_F3,    KC_F4,     KC_F5,    KC_TRNS,
        KC_TRNS,   NO_AT,   ALGR(KC_7),  ALGR(KC_0),  NO_LBRC,   NO_RBRC,  KC_TRNS,
        KC_TRNS,   KC_HASH, NO_LPRN,  NO_RPRN,  ALGR(KC_MINS), NO_SLSH,
-       KC_TRNS,   KC_TRNS, LCTL(KC_Z),  LCTL(KC_X),  LCTL(KC_C),    LCTL(KC_V),  KC_TRNS,
+       KC_TRNS,   NO_TILD, LCTL(KC_Z),  LCTL(KC_X),  LCTL(KC_C),    LCTL(KC_V),  KC_TRNS,
        KC_TRNS,   KC_TRNS, KC_TRNS,  KC_TRNS,  KC_TRNS,
                                        KC_TRNS,KC_TRNS,
                                                KC_TRNS,
@@ -165,11 +166,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * ,--------------------------------------------------.           ,--------------------------------------------------.
  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        | Save |Build |Debug |      |      |      |           |      | bool | int  |string| dec  | Todo |        |
+ * |        | Save |Build |Debug |PrtScr|  $   |      |           |      | bool | int  |string| dec  | Todo |        |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------| priv | publ |shared| prot |      |        |
+ * |        |   ´  |  '   |   |  |      |  £   |------|           |------| priv | publ |shared| prot |      |        |
  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      | const| dim  |return|nothin|      |        |
+ * |        |      |      |      |      |  £   |      |           |      | const| dim  |return|nothin|      |        |
  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
  *   |      |      |      |      |      |                                       |      |      |      |      |      |
  *   `----------------------------------'                                       `----------------------------------'
@@ -184,9 +185,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 // MEDIA AND MOUSE
 [DEVL] = LAYOUT_ergodox(
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, M(MACRO_SAVE), M(MACRO_BUILD), M(MACRO_DEBUG), KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+       KC_TRNS, M(MACRO_SAVE), M(MACRO_BUILD), M(MACRO_DEBUG), KC_PSCR, ALGR(KC_4), KC_TRNS,
+       KC_TRNS, NO_ACUT, NO_APOS, NO_PIPE, KC_TRNS, ALGR(KC_3),
+       KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ALGR(KC_5), KC_TRNS,
        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
                                            KC_TRNS, KC_TRNS,
                                                     KC_TRNS,
index 552fa0e3ab7936c7526c410a8f39b365ffda175b..3bedf50d74b8205a875eaf5febdefe0e4d173164 100644 (file)
@@ -13,14 +13,43 @@ TODO:
 Known issues:
 
 * Keymap 2 modifier has not gotten its place yet..
-* Print screen, where?
 
 
 ## Changelog
+* 2019-03-11
+  * Added currency $, £, € to keymap 3
+  * Added pipe character to keymap 3
+  * Added the acute accent character to keymap 3
+
+* 2019-03-08
+  * Switched position on Alt and Alt-shift
+  * Added tilde character to symbol layer
+  * Added Print Screen to keymap 3
+  * Added ' (NO_APOS) to keymap 3
+  * Added how to install help in this readme
 
 * 2017-05-16
   * Initial release
 
+
+# How to install - reminder
+0. Docs:  https://docs.qmk.fm/#/newbs
+1. Download flashing tool - teensy (from ergodox-ez visual designer)
+2. Setup build environment: https://docs.qmk.fm/#/newbs_getting_started
+
+QUICK HOWTO WSL:  (this is not supported anymore it seems, why?)
+The Toolchain setup is done through the Windows Subsystem for Linux, and the process is fully automated. If you want to do everything manually, there are no other instructions than the scripts themselves, but you can always open issues and ask for more information.
+Open "Bash On Ubuntu On Windows" from the start menu.
+Go to the directory where you cloned qmk_firmware. Note that the paths start with /mnt/ in the WSL, so you have to write for example cd /mnt/c/path/to/qmk_firmware.
+Run util/wsl_install.sh and follow the on-screen instructions.
+Close the Bash command window, and re-open it.
+You are ready to compile and flash the firmware!
+
+3. Build the firmware with:  
+Run the following in the root qmk folder:
+make KEYBOARD=ergodox_ez KEYMAP=dvorak_programmer_swe
+
+
 # Author
 Christian Westerlund
 cwesterlund @ github
diff --git a/layouts/community/ergodox/familiar/README.md b/layouts/community/ergodox/familiar/README.md
deleted file mode 100644 (file)
index 8d68af2..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# ErgoDox Familiar Layout
-Familiar layout for those who regularly switch back and forth from ErgoDox to "normal" QWERTY.
-
-[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](../../../../license_GPLv3.md) [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg)](https://github.com/RichardLitt/standard-readme)
-
-## Table of Contents
-
-- [Background](#background)
-- [Install](#install)
-- [Usage](#usage)
-    - [Layers](#layers)
-- [Contribute](#contribute)
-    - [Issues](#issues)
-- [License](#license)
-
-## Background
-
-This layout is built to be as familiar as possible for users coming directly from a default (QWERTY US) keyboard, while gaining as much advantage as possible from the ErgoDox and QMK featureset. I use an ErgoDoxEZ at home, but I don't have a regular office (CS grad student) so I regularly use either my laptop or a default-setup lab computer; I context switch daily so this layout is meant to reduce the mental overhead as much as possible.
-
-The default ErgoDoxEZ layout is probably more optimized as a solo daily driver - as are a lot of the others available keymaps. The focus of this layout is to get as much from the 'Dox as possible without overly disrupting long-established muscle memory.
-
-Key features of the familiar layout:
-1. QWERTY default layout.
-1. International symbols layer, mapped in the US-International layout default positions, through [UCIS](https://github.com/qmk/qmk_firmware/wiki/Unicode-and-additional-language-support#ucis_enable).
-1. Numpad layer on right hand.
-1. Thumb cluster holds spacebar and access to secondary layers.
-1. Function-layer arrow keys in both the first-person-shooter (actually ESDF instead of WASD) and vim (HJKL) locations.
-
-## Install
-
-If you are on Windows or Mac, choose the proper line in [`keymap.c`](keymap.c) for [unicode/international character support](https://github.com/qmk/qmk_firmware/wiki/Unicode-and-additional-language-support#ucis_enable) (starts at line 253).
-```c
-void matrix_init_user(void) {
-    set_unicode_input_mode(UC_LNX); // Linux
-    //set_unicode_input_mode(UC_OSX); // Mac OSX
-    //set_unicode_input_mode(UC_WIN); // Windows (with registry key, see wiki)
-    //set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
-};
-```
-
-For instructions on building and installing this keymap, [go to the wiki](https://github.com/qmk/qmk_firmware/tree/master/keyboards/ergodox#build-dependencies). Below is the command for me; it may be different for you.
-```sh
-$ make ergodox-ez-familiar-teensy
-```
-
-## Usage
-
-[![Familiar Layout](http://i.imgur.com/6nLN9UT.png)](https://gist.github.com/nstickney/13508a9f99cff381d58b7be6f7dcc644)
-
-### Layers
-1. Base Layer: QWERTY, with arrow keys at bottom right.
-1. UCIS Layer: US-International symbols layer, plus —. Accessed by toggling the `SYMB` layer using the UCIS key (bottom of left thumb cluster).
-1. UCIS-Shifted Layer: Making shift work for UCIS characters. An ugly workaround. Any ideas? Accessed by holding shift while the `SYMB` layer is active (toggles the `CSYM` layer).
-1. Numpad Layer: Right hand number pad. Accessed by toggling the `NUMP` layer using the NUMP key (bottom of right thumb cluster).
-1. Function Layer: F1-F12, arrows on ESDF and HJKL, media player controls. Accessed by holding either FN key (center key of each thumb cluster), which toggles the `ARRW` layer. I know, I need to work on my naming conventions.
-
-## Contribute
-
-[Contributor Covenant](http://contributor-covenant.org/)
-
-I'm terrible at this; I have no background in human-computer interaction, kinesiology, or keyboard-ology. Please send comments/issues/pull requests/angry tweets/etc. If you think there is a better way to take advantage of the ErgoDox/QMK comination without straying far from 84/101-key QWERTY, I want to know it.
-
-### Issues
-1. The `CSYM` layer is an ugly workaround. I should write a function for doing different things in the `SYMB` layer depending on whether SHIFT is being held. Or something. Ideas?
-1. Right now, the thumb cluster function keys double as slash and whack... this really isnt a great solution.
-1. `MENU` and `LEAD` are useless, at the moment.
-
-## License
-QMK is licensed ([mostly](https://github.com/qmk/qmk_firmware/issues/1038)) under the [GPLv2](../../../../license_GPLv2.md). Accordingly, to whatever extent applicable, this keymap is licensed under the [GPLv3](../../../../license_GPLv3.md).
diff --git a/layouts/community/ergodox/familiar/keymap.c b/layouts/community/ergodox/familiar/keymap.c
deleted file mode 100644 (file)
index b359a91..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "debug.h"
-#include "action_layer.h"
-#include "version.h"
-
-// Layers
-#define BASE 0 // default layer
-#define SYMB 1 // international symbols
-#define CSYM 2 // international symbols shifted
-#define NUMP 3 // numpad
-#define ARRW 4 // function, media, arrow keys
-
-// Tap Dancing
-void dance_lock (qk_tap_dance_state_t *state, void *user_data) {
-    if (state->count == 1) { // Press once for NUMLOCK
-        register_code (KC_NLCK);
-        unregister_code (KC_NLCK);
-    } else if (state->count == 2) { // Press twice for CAPSLOCK
-        register_code (KC_CAPS);
-        unregister_code (KC_CAPS);
-    } else if (state->count == 3) { //Press thrice for SCROLLLOCK
-        register_code (KC_SLCK);
-        unregister_code (KC_SLCK);
-    }
-}
-enum {LOCKS = 0};
-qk_tap_dance_action_t tap_dance_actions[] = {
-    [LOCKS] = ACTION_TAP_DANCE_FN(dance_lock)
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-/* layer 0 : default
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | `      |   1  |   2  |   3  |   4  |   5  |   6  |           |  7   |   8  |   9  |   0  |   -  |   =  | BCKSPC |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * | TAB    |   Q  |   W  |   E  |   R  |   T  | HOME |           | PGUP |   Y  |   U  |   I  |   O  |   P  | DELETE |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * | '      |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |   ;  |  ENTER |
- * |--------+------+------+------+------+------|  END |           | PGDN |------+------+------+------+------+--------|
- * | (/LSFT |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  |  UP  | )/RSFT |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- * | LCTRL  | LGUI | MENU | LEAD | LALT |                                       |[/RALT|]/RCTL| LEFT | DOWN |  RIGHT |
- * `------------------------------------'                                       `------------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |PRTSCR| ESC  |       | VOL- | VOL+ |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |SLASH/| LOCKS|       | MUTE |WHACK/|      |
- *                                 |  SPC | MO(4)|------|       |------|MO(4) | SPC  |
- *                                 |      |      | TO(1)|       |TO(3) |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[BASE] = LAYOUT_ergodox(
-        // left hand
-        KC_GRV,     KC_1,       KC_2,       KC_3,       KC_4,       KC_5,       KC_6,
-        KC_TAB,     KC_Q,       KC_W,       KC_E,       KC_R,       KC_T,       KC_HOME,
-        KC_QUOT,    KC_A,       KC_S,       KC_D,       KC_F,       KC_G,
-        KC_LSPO,    KC_Z,       KC_X,       KC_C,       KC_V,       KC_B,       KC_END,
-        KC_LCTL,    KC_LGUI,    KC_MENU,    KC_LEAD,    KC_LALT,
-                                                                    KC_PSCR,    KC_ESC,
-                                                                                TD(LOCKS),
-                                                KC_SPC,     LT(ARRW, KC_SLSH),  TG(SYMB),
-        // right hand
-            KC_7,       KC_8,       KC_9,       KC_0,       KC_MINS,    KC_EQL,     KC_BSPC,
-            KC_PGUP,    KC_Y,       KC_U,       KC_I,       KC_O,       KC_P,       KC_DEL,
-                        KC_H,       KC_J,       KC_K,       KC_L,       KC_SCLN,    KC_ENTER,
-            KC_PGDN,    KC_N,       KC_M,       KC_COMM,    KC_DOT,     KC_UP,      KC_RSPC,
-                        MT(MOD_RALT, KC_LBRC),  MT(MOD_RCTL, KC_RBRC),  KC_LEFT,    KC_DOWN,    KC_RGHT,
-            KC_VOLD,    KC_VOLU,
-            KC_MUTE,
-            TG(NUMP),   LT(ARRW, KC_BSLS),   KC_SPC
-    ),
-
-/* layer 1: International symbols, etc
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |   ¡  |   ²  |   ³  |   ¤  |   €  |   ¼  |           |  ½   |  ¾   |  ‘   |  ’   |  ¥   |  ×   |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   ä  |   å  |   é  |   ®  |   þ  |      |           |      |  ü   |  ú   |  í   |  ó   |  ö   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |     ´  |   á  |   ß  |   ð  |      |      |------|           |------|      |      |      |  ø   |  ¶   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |MO(CSYM)|   æ  |   ¿  |   ©  |   ¬  |      |      |           |      |  ñ   |  µ   |  ç   |      |      |MO(CSYM)|
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- * |        |      |      |      |      |                                       |  «   |  »   |      |      |        |
- * `------------------------------------'                                       `------------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[SYMB] = LAYOUT_ergodox(
-        // left hand
-        _______,    UC(0x00A1), UC(0x00B2), UC(0x00B3), UC(0x00A4), UC(0x20AC), UC(0x00BC),
-        _______,    UC(0x00E4), UC(0x00E5), UC(0x00E9), UC(0x00AE), UC(0x00FE), _______,
-        UC(0x00B4), UC(0x00E1), UC(0x00DF), UC(0x00F0), _______,    _______,
-        MO(CSYM),   UC(0x00E6), UC(0x00BF), _______,    UC(0x00AC), UC(0x00A9),    _______,
-        _______,    _______,    _______,    _______,    _______,
-                                            _______,    _______,
-                                                        _______,
-                            _______,        _______,    _______,
-        // right hand
-            UC(0x00BD), UC(0x00BE), UC(0x2018), UC(0x2019), UC(0x00A5), UC(0x00D7), _______,
-            _______,    UC(0x00FC), UC(0x00FA), UC(0x00ED), UC(0x00F3), UC(0x00F6), _______,
-                        _______,    _______,    _______,    UC(0x00F8), UC(0x00B6), _______,
-            _______,    UC(0x00F1), UC(0x00B5), UC(0x00E7), _______,    _______,    MO(CSYM),
-                                    UC(0x00AB), UC(0x00BB), _______,    _______,    _______,
-            _______,    _______,
-            _______,
-            _______,    _______,    _______
-    ),
-
-/* layer 2 : international symbols, shifted
- * This layer is an ugly workaround; it pretends that SHIFT still works normally on keys
- * which don't produce an "upper case" or "shifted" international symobol.
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |   ¹  |      |      |   £  |      |      |           |      |      |      |      |  —  |  ÷   |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |   Ä  |   Å  |   É  |      |   Þ  |      |           |      |  Ü   |  Ú   |  Í   |  Ó   |  Ö   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |     ¨  |   Á  |   §  |   Ð  |      |      |------|           |------|      |      |      |  Ø   |  °   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |   Æ  |      |   ¢  |   ¦  |      |      |           |      |  Ñ   |      |  Ç   |      |      |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- * |        |      |      |      |      |                                       |  “   |  ”   |      |      |        |
- * `------------------------------------'                                       `------------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[CSYM] = LAYOUT_ergodox(
-        // left hand
-        _______,    UC(0x00B9), _______,    _______,    UC(0x00A3), _______,    _______,
-        _______,    UC(0x00C4), UC(0x00C5), UC(0x00C9), S(KC_R),    UC(0x00DE), _______,
-        UC(0x00A8), UC(0x00C1), UC(0x00A7), UC(0x00D0), S(KC_F),    S(KC_G),
-        _______,    UC(0x00C6), UC(0x00A6), UC(0x00A2), S(KC_V),    S(KC_B),    _______,
-        _______,    _______,    _______,    _______,    _______,
-                                                                    _______,    _______,
-                                                                                _______,
-                                                    _______,        _______,    _______,
-        // right hand
-            _______,    _______,    _______,    _______,    UC(0x2014), UC(0x00F7), _______,
-            _______,    UC(0x00DC), UC(0x00DA), UC(0x00CD), UC(0x00D3), UC(0x00D6), _______,
-                        S(KC_H),    S(KC_J),    S(KC_K),    UC(0x00D8), UC(0x00B0), _______,
-            _______,    UC(0x00D1), _______,    UC(0x00C7), S(KC_DOT),  _______,    _______,
-                                    UC(0x201C), UC(0x201D), _______,    _______,    _______,
-            _______,    _______,
-            _______,
-            _______,    _______,    _______
-    ),
-
-/* layer 3: numberpad
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * |        |      |      |      |      |      |      |           |      |      |   (  |   )  |   /  |  *   |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |   7  |   8  |   9  |  -   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |------|           |------|      |   4  |   5  |   6  |  +   |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      |      |      |      |      |      |           |      |      |   1  |   2  |   3  |  =   |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- * |        |      |      |      |      |                                       |0/RALT|./RCTL|   ,  | ENTER|        |
- * `------------------------------------'                                       `------------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        |      |      |       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[NUMP] = LAYOUT_ergodox(
-        // left hand
-        _______,    _______,    _______,    _______,    _______,    _______,    _______,
-        _______,    _______,    _______,    _______,    _______,    _______,    _______,
-        _______,    _______,    _______,    _______,    _______,    _______,
-        _______,    _______,    _______,    _______,    _______,    _______,    _______,
-        _______,    _______,    _______,    _______,    _______,
-                                            _______,    _______,
-                                                        _______,
-                            _______,        _______,    _______,
-        // right hand
-            _______,    _______,    S(KC_9),    S(KC_0),    KC_PSLS,    KC_PAST,    _______,
-            _______,    _______,    KC_KP_7,    KC_KP_8,    KC_KP_9,    KC_PMNS,    _______,
-                        _______,    KC_KP_4,    KC_KP_5,    KC_KP_6,    KC_PPLS,    _______,
-            _______,    _______,    KC_KP_1,    KC_KP_2,    KC_KP_3,    KC_PEQL,    _______,
-                                    MT(MOD_RALT, KC_KP_0),  MT(MOD_RCTL, KC_KP_DOT),KC_PCMM,    KC_PENT,    _______,
-            _______,    _______,
-            _______,
-            _______,    _______,    _______
-    ),
-
-/* layer 4 : functions and arrows
- * This layer is at the top so that the functions still work no matter what layers are active.
- *
- * ,--------------------------------------------------.           ,--------------------------------------------------.
- * | ESCAPE |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |           |  F7  |  F8  |  F9  | F10  | F11  | F12  |        |
- * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
- * |        |      |      |  UP  |      |      |      |           |      |      |      |      |      |      | INSERT |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |      | LEFT | DOWN |RIGHT |      |------|           |------| LEFT | DOWN |  UP  | RIGHT|      |        |
- * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
- * |        |M_PREV|M_STOP|M_PLPS|M_NEXT|      |      |           |      |      |      |      |      | PGUP |        |
- * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
- * |        |      |      |      |      |                                       |      |      | HOME | PGDN |    END |
- * `------------------------------------'                                       `------------------------------------'
- *                                        ,-------------.       ,-------------.
- *                                        | SYSRQ| PAUSE|       |      |      |
- *                                 ,------|------|------|       |------+------+------.
- *                                 |      |      |      |       |      |      |      |
- *                                 |      |      |------|       |------|      |      |
- *                                 |      |      |      |       |      |      |      |
- *                                 `--------------------'       `--------------------'
- */
-[ARRW] = LAYOUT_ergodox(
-        // left hand
-        KC_ESC,     KC_F1,      KC_F2,      KC_F3,      KC_F4,      KC_F5,      KC_F6,
-        _______,    _______,    _______,    KC_UP,      _______,    _______,    _______,
-        _______,    _______,    KC_LEFT,    KC_DOWN,    KC_RGHT,    _______,
-        _______,    KC_MPRV,    KC_MSTP,    KC_MPLY,    KC_MNXT,    _______,    _______,
-        _______,    _______,    _______,    _______,    _______,
-                                                                    KC_SYSREQ,  KC_PAUSE,
-                                                                                _______,
-                                                    _______,        _______,    _______,
-        // right hand
-            KC_F7,      KC_F8,      KC_F9,      KC_F10,     KC_F11,     KC_F12,     _______,
-            _______,    _______,    _______,    _______,    _______,    _______,    KC_INS,
-                        KC_LEFT,    KC_DOWN,    KC_UP,      KC_RGHT,    _______,    _______,
-            _______,    _______,    _______,    _______,    _______,    KC_PGUP,    _______,
-                                    _______,    _______,    KC_HOME,    KC_PGDN,    KC_END,
-            _______,    _______,
-            _______,
-            _______,    _______,    _______
-    ),
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
-    set_unicode_input_mode(UC_LNX); // Linux
-    //set_unicode_input_mode(UC_OSX); // Mac OSX
-    //set_unicode_input_mode(UC_WIN); // Windows (with registry key, see wiki)
-    //set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-    uint8_t layer = biton32(layer_state);
-
-    ergodox_board_led_off();
-    ergodox_right_led_1_off();
-    ergodox_right_led_2_off();
-    ergodox_right_led_3_off();
-    switch (layer) {
-        case SYMB:
-        case CSYM:
-            ergodox_right_led_1_on();
-            break;
-        case NUMP:
-            ergodox_right_led_2_on();
-            break;
-        case ARRW:
-            ergodox_right_led_3_on();
-            break;
-        default:
-            // none
-            break;
-    }
-
-};
diff --git a/layouts/community/ergodox/familiar/rules.mk b/layouts/community/ergodox/familiar/rules.mk
deleted file mode 100644 (file)
index 4a3c586..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-TAP_DANCE_ENABLE=yes
-LEADER_ENABLE = yes
diff --git a/layouts/community/ergodox/nstickney/keymap.c b/layouts/community/ergodox/nstickney/keymap.c
new file mode 100644 (file)
index 0000000..dc83c2f
--- /dev/null
@@ -0,0 +1,213 @@
+#include QMK_KEYBOARD_H
+
+/*
+ * This keymap simulates the key limitations of an Iris on an ErgoDox. See the
+ * matching iris layout (/keyboards/iris/keymaps/nstickney) for further
+ * information.
+ */
+
+// Layers
+#define BASE 0 // Base layer
+#define SYMB 1 // Symbols
+#define SYSH 2 // Symbols, shifted
+#define NUMP 4 // Numpad
+#define FCTN 8 // Function
+
+// Tap Dancing
+void dance_lock (qk_tap_dance_state_t *state, void *user_data) {
+       switch (state->count){
+               case 1: // Press once for LGUI
+                       tap_code(KC_LGUI);
+                       break;
+               case 2: // Press twice for NUMLOCK
+                       tap_code(KC_NLCK);
+                       break;
+               case 3: // Press thrice for CAPSLOCK
+                       tap_code(KC_CAPS);
+                       break;
+               case 4: // Press four times for SCROLLOCK
+                       tap_code(KC_SLCK);
+                       break;
+               default:
+                       break;
+       }
+};
+
+void dance_layer (qk_tap_dance_state_t *state, void *user_data) {
+       switch (state -> count) {
+               case 1: // Press once for MENU
+                       tap_code(KC_APP);
+                       break;
+               case 2: // Press twice for NUMPAD
+                       layer_invert(NUMP);
+                       break;
+               case 3: // Press thrice for SYMBOLS
+                       layer_invert(SYMB);
+                       break;
+               case 4: // Press four times for SYMBOLS, SHIFTED
+                       layer_invert(SYSH);
+                       break;
+               default:
+                       break;
+       }
+};
+
+enum tap_dances {LOCKS = 0, LAYERS = 1};
+qk_tap_dance_action_t tap_dance_actions[] = {
+       [LOCKS] = ACTION_TAP_DANCE_FN(dance_lock),
+       [LAYERS] = ACTION_TAP_DANCE_FN(dance_layer)
+};
+
+// Make layering more clear
+enum custom_keycodes {
+       __________ = KC_TRNS,
+       XXX = KC_NO,
+       CC_ESC = LCTL_T(KC_ESC),
+       CC_QUOT = RCTL_T(KC_QUOT),
+       AC_SLSH = LALT_T(KC_SLSH),
+       AC_EQL = RALT_T(KC_EQL),
+       FC_BSLS = LT(FCTN, KC_BSLS),
+       FC_MINS = LT(FCTN, KC_MINS),
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [BASE] = LAYOUT_ergodox(
+               // left hand
+               KC_GRV,     KC_1,       KC_2,       KC_3,       KC_4,       KC_5,       XXX,
+               KC_TAB,     KC_Q,       KC_W,       KC_E,       KC_R,       KC_T,       XXX,
+               CC_ESC,     KC_A,       KC_S,       KC_D,       KC_F,       KC_G,
+               KC_LSPO,    KC_Z,       KC_X,       KC_C,       KC_V,       KC_B,       XXX,
+               XXX,        XXX,        XXX,        XXX,        AC_SLSH,
+                                                                           TD(LOCKS),  XXX,
+                                                                                       XXX,
+                                                               FC_BSLS,    KC_SPC,     XXX,
+               // right hand
+               XXX,        KC_6,       KC_7,       KC_8,       KC_9,       KC_0,       KC_BSPC,
+               XXX,        KC_Y,       KC_U,       KC_I,       KC_O,       KC_P,       KC_DEL,
+                           KC_H,       KC_J,       KC_K,       KC_L,       KC_SCLN,    CC_QUOT,
+               XXX,        KC_N,       KC_M,       KC_COMM,    KC_DOT,     KC_SLSH,    KC_RSPC,
+                                       AC_EQL,     XXX,        XXX,        XXX,        XXX,
+               XXX,        TD(LAYERS),
+               XXX,
+               XXX,        KC_ENT,     FC_MINS
+       ),
+
+       [SYMB] = LAYOUT_ergodox(
+               // left hand
+               UC(0x00EF), UC(0x00A1), UC(0x00B2), UC(0x00B3), UC(0x00A4), UC(0x20AC), __________,
+               __________, UC(0x00E4), UC(0x00E5), UC(0x00E9), UC(0x00AE), UC(0x00FE), __________,
+               __________, UC(0x00E1), UC(0x00DF), UC(0x00F0), UC(0x00EC), UC(0x00ED),
+               __________, UC(0x00E6), UC(0x00E8), UC(0x00A9), UC(0x00EA), UC(0x00EB), __________,
+               __________, __________, __________, __________, UC(0x00BF),
+                                                                           __________, __________,
+                                                                                       __________,
+                                                               UC(0x00AC), __________, __________,
+               // right hand
+               __________, UC(0x00BC), UC(0x00BD), UC(0x00BE), UC(0x2018), UC(0x2019), __________,
+               __________, UC(0x00FC), UC(0x00FA), UC(0x00ED), UC(0x00F3), UC(0x00F6), __________,
+                           UC(0x00EE), UC(0x00E0), UC(0x00E2), UC(0x00F8), UC(0x00B6), UC(0x00B4),
+               __________, UC(0x00F1), UC(0x00FD), UC(0x00E7), UC(0x00F4), UC(0x00BF), __________,
+                                       UC(0x00D7), __________, __________, __________, __________,
+               __________, __________,
+               __________,
+               __________, __________, UC(0x00B1)
+       ),
+
+       [SYSH] = LAYOUT_ergodox(
+               // left hand
+               UC(0x00CF), UC(0x00B9), UC(0x2200), UC(0x2201), UC(0x00A3), UC(0x00A5), __________,
+               __________, UC(0x00C4), UC(0x00C5), UC(0x00C9), UC(0x2122), UC(0x00DE), __________,
+               __________, UC(0x00C1), UC(0x00A7), UC(0x00D0), UC(0x00CC), UC(0x00CD),
+               __________, UC(0x00C6), UC(0x00C8), UC(0x00A2), UC(0x00CA), UC(0x00CB), __________,
+               __________, __________, __________, __________, UC(0x203D),
+                                                                           __________, __________,
+                                                                                       __________,
+                                                               UC(0x00A6), __________, __________,
+               // right hand
+               __________, UC(0x00B5), UC(0x00AB), UC(0x00BB), UC(0x201C), UC(0x201D), __________,
+               __________, UC(0x00DC), UC(0x00DA), UC(0x00CD), UC(0x00D3), UC(0x00D6), __________,
+                           UC(0x00CE), UC(0x00C1), UC(0x00C2), UC(0x00D8), UC(0x00B0), UC(0x00A8),
+               __________, UC(0x00D1), UC(0x00DD), UC(0x00C7), UC(0x00D4), UC(0x203D), __________,
+                                       UC(0x00F7), __________, __________, __________, __________,
+               __________, __________,
+               __________,
+               __________, __________, UC(0x00AA)
+       ),
+
+       [NUMP] = LAYOUT_ergodox(
+               // left hand
+               __________, __________, KC_P7,      KC_P8,      KC_P9,      KC_PSLS,    __________,
+               __________, __________, KC_P4,      KC_P5,      KC_P6,      KC_PAST,    __________,
+               __________, __________, KC_P1,      KC_P2,      KC_P3,      KC_PMNS,
+               __________, __________, KC_P0,      KC_PCMM,    KC_PDOT,    KC_PPLS,    __________,
+               __________, __________, __________, __________, __________,
+                                                                           __________, __________,
+                                                                                       __________,
+                                                               __________, __________, __________,
+               // right hand
+               __________, __________, KC_P7,      KC_P8,      KC_P9,      KC_PSLS,    __________,
+               __________, __________, KC_P4,      KC_P5,      KC_P6,      KC_PAST,    __________,
+                           __________, KC_P1,      KC_P2,      KC_P3,      KC_PMNS,    __________,
+               __________, __________, KC_P0,      KC_PCMM,    KC_PDOT,    KC_PPLS,    __________,
+                                       __________, __________, __________, __________, __________,
+               __________, __________,
+               __________,
+               __________, KC_PENT,    __________
+       ),
+
+       [FCTN] = LAYOUT_ergodox(
+               // left hand
+               KC_ESC,     KC_F1,      KC_F2,      KC_F3,      KC_F4,      KC_F5,      __________,
+               KC_PSCR,    RGB_TOG,    KC_HOME,    KC_UP,      KC_END,     KC_PGUP,    __________,
+               KC_PAUS,    __________, KC_LEFT,    KC_DOWN,    KC_RGHT,    KC_PGDN,
+               __________, KC_MPRV,    KC_MRWD,    KC_MPLY,    KC_MFFD,    KC_MNXT,    __________,
+               __________, __________, __________, __________, __________,
+                                                                           KC_F11,     __________,
+                                                                                       __________,
+                                                               __________, __________, __________,
+               // right hand
+               __________, KC_F6,      KC_F7,      KC_F8,      KC_F9,      KC_F10,     KC_SYSREQ,
+               __________, UC(0x2014), KC_LBRC,    KC_RBRC,    S(KC_LBRC), S(KC_RBRC), KC_INS,
+                           KC_LEFT,    KC_DOWN,    KC_UP,      KC_RGHT,    KC_BRIU,    KC_CLR,
+               __________, KC_MSTP,    KC_MUTE,    KC_VOLD,    KC_VOLU,    KC_BRID,    __________,
+                                       __________, __________, __________, __________, __________,
+               __________, KC_F12,
+               __________,
+               __________, __________, __________
+       ),
+};
+
+void eeconfig_init_user(void) {
+       set_unicode_input_mode(UC_LNX); // Linux
+       //set_unicode_input_mode(UC_OSX); // Mac OSX
+       //set_unicode_input_mode(UC_WIN); // Windows (with registry key, see wiki)
+       //set_unicode_input_mode(UC_WINC); // Windows (with WinCompose, see wiki)
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+       ergodox_board_led_off();
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+       if (IS_LAYER_ON(SYMB) || IS_LAYER_ON(SYSH)) {
+               ergodox_right_led_1_on();
+       } else {
+               ergodox_right_led_1_off();
+       }
+
+       if (IS_LAYER_ON(NUMP)) {
+               ergodox_right_led_2_on();
+       } else {
+               ergodox_right_led_2_off();
+       }
+
+       if (IS_LAYER_ON(FCTN)) {
+               ergodox_right_led_3_on();
+       } else {
+               ergodox_right_led_3_off();
+       }
+
+};
diff --git a/layouts/community/ergodox/nstickney/rules.mk b/layouts/community/ergodox/nstickney/rules.mk
new file mode 100644 (file)
index 0000000..4a3c586
--- /dev/null
@@ -0,0 +1,2 @@
+TAP_DANCE_ENABLE=yes
+LEADER_ENABLE = yes
diff --git a/layouts/community/numpad_5x6/bjohnson/config.h b/layouts/community/numpad_5x6/bjohnson/config.h
new file mode 100644 (file)
index 0000000..fe2cffe
--- /dev/null
@@ -0,0 +1,25 @@
+#pragma once
+
+// #define B6_AUDIO
+
+#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
+#define RGB_DI_PIN B7
+#define RGBLED_NUM 16     // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 12
+#define RGBLIGHT_VAL_STEP 12
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
+
+#define RGBLIGHT_SLEEP
+#endif // RGBLIGHT_ENABLE
+
+#ifdef AUDIO_ENABLE
+#ifdef RGBLIGHT_ENABLE
+#define NO_MUSIC_MODE
+#endif // RGBLIGHT_ENABLE
+#endif // AUDIO_ENABLE
+#define TAP_CODE_DELAY 10
diff --git a/layouts/community/numpad_5x6/bjohnson/keymap.c b/layouts/community/numpad_5x6/bjohnson/keymap.c
new file mode 100644 (file)
index 0000000..79e87e6
--- /dev/null
@@ -0,0 +1,51 @@
+#include QMK_KEYBOARD_H
+
+extern rgblight_config_t rgblight_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [0] = LAYOUT_numpad_5x6(
+               KC_F1,   LT(1,KC_F2),    KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+               KC_F3,   KC_F4,    KC_P7,   KC_P8,   KC_P9,
+               KC_F5,   KC_F6,    KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
+               KC_F7,   KC_F8,    KC_P1,   KC_P2,   KC_P3,
+               KC_F9,   KC_F10,        KC_P0,       KC_PDOT, KC_PENT
+  ),
+       [1] = LAYOUT_numpad_5x6(
+               RGB_TOG, _______,  _______, _______, _______, RESET,
+               RGB_MOD, RGB_RMOD, _______, _______, _______,
+               RGB_HUI, RGB_HUD,  _______, _______, _______, _______,
+               RGB_SAI, RGB_SAD,  _______, _______, _______,
+               RGB_VAI, RGB_VAD,       _______,     _______, _______
+  ),
+};
+
+
+void keyboard_post_init_user(void) {
+#ifdef RGBLIGHT_ENABLE
+  uint8_t temp_mode = rgblight_config.mode;
+       rgblight_enable_noeeprom();
+       rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+       for (uint16_t i = 360; i > 0; i--) {
+               rgblight_sethsv_noeeprom( ( i + 180) % 360, 255, 255);
+    wait_ms(8);
+       }
+       led_set_user(host_keyboard_leds());
+  rgblight_mode_noeeprom(temp_mode);
+#endif
+}
+
+void led_set_user(uint8_t usb_led) {
+  if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
+    rgblight_sethsv_noeeprom_cyan();
+  } else {
+    rgblight_sethsv_noeeprom_magenta();
+  }
+}
+
+void shutdown_user (void) {
+  #ifdef RGBLIGHT_ENABLE
+    rgblight_enable_noeeprom();
+    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+    rgblight_setrgb_red();
+  #endif // RGBLIGHT_ENABLE
+}
diff --git a/layouts/community/numpad_5x6/bjohnson/rules.mk b/layouts/community/numpad_5x6/bjohnson/rules.mk
new file mode 100644 (file)
index 0000000..d370da7
--- /dev/null
@@ -0,0 +1,5 @@
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = no
+NO_SECRETS = yes
+BOOTMAGIC_ENABLE = lite
diff --git a/layouts/community/numpad_5x6/drashna/config.h b/layouts/community/numpad_5x6/drashna/config.h
new file mode 100644 (file)
index 0000000..ec66940
--- /dev/null
@@ -0,0 +1,18 @@
+#pragma once
+
+// #define B6_AUDIO
+
+#if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
+#define RGB_DI_PIN B1
+#define RGBLED_NUM 16     // Number of LEDs
+
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 12
+#define RGBLIGHT_VAL_STEP 12
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
+#endif // RGBLIGHT_ENABLE
+
+
+#define TAP_CODE_DELAY 10
diff --git a/layouts/community/numpad_5x6/drashna/keymap.c b/layouts/community/numpad_5x6/drashna/keymap.c
new file mode 100644 (file)
index 0000000..646f4db
--- /dev/null
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+#include "drashna.h"
+
+#define F2_MCRO LT(_GAMEPAD, KC_F2)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+       [_NUMLOCK] = LAYOUT_numpad_5x6(
+               KC_F1,   F2_MCRO,  KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+               KC_F3,   KC_F4,    KC_P7,   KC_P8,   KC_P9,
+               KC_F5,   KC_F6,    KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
+               KC_F7,   KC_F8,    KC_P1,   KC_P2,   KC_P3,
+               KC_F9,   KC_COLN,       KC_P0,       KC_PDOT, KC_PENT
+  ),
+
+  [_GAMEPAD] = LAYOUT_numpad_5x6(
+               RGB_TOG, _______,  _______, EEP_RST, KC_MAKE, RESET,
+               RGB_MOD, RGB_RMOD, _______, _______, _______,
+               RGB_HUI, RGB_HUD,  _______, _______, _______, _______,
+               RGB_SAI, RGB_SAD,  _______, _______, _______,
+               RGB_VAI, RGB_VAD,       _______,     _______, _______
+  ),
+};
diff --git a/layouts/community/numpad_5x6/drashna/rules.mk b/layouts/community/numpad_5x6/drashna/rules.mk
new file mode 100644 (file)
index 0000000..ed6fa8c
--- /dev/null
@@ -0,0 +1,9 @@
+AUDIO_ENABLE      = no
+RGBLIGHT_ENABLE   = yes
+BACKLIGHT_ENABLE  = no
+NO_SECRETS        = yes
+BOOTMAGIC_ENABLE  = lite
+INDICATOR_LIGHTS  = no
+RGBLIGHT_TWINKLE  = yes
+MACROS_ENABLED    = no
+MAKE_BOOTLOADER   = yes
diff --git a/layouts/community/numpad_5x6/layout.json b/layouts/community/numpad_5x6/layout.json
new file mode 100644 (file)
index 0000000..7264cd5
--- /dev/null
@@ -0,0 +1,6 @@
+["","","",""],
+[{y:0.5},"","","",""],
+["","","",{h:2},""],
+["","",""],
+["","","",{h:2},""],
+[{w:2},"",""]
diff --git a/layouts/community/numpad_5x6/readme.md b/layouts/community/numpad_5x6/readme.md
new file mode 100644 (file)
index 0000000..147097c
--- /dev/null
@@ -0,0 +1,3 @@
+# numpad_5x6
+
+    LAYOUT_numpad_5x6
index b6b2ac5779014e781d61fcd13c59b5d0e07fb75d..a153adffb6f0d342c9342e9a36aed4d7c8aa09d0 100644 (file)
@@ -10,6 +10,7 @@
 #undef RGBLED_NUM
 #define RGBLIGHT_ANIMATIONS
 #define RGBLED_NUM 12
+#define RGBLED_SPLIT { 6, 6 }
 #define RGBLIGHT_HUE_STEP 8
 #define RGBLIGHT_SAT_STEP 8
 #define RGBLIGHT_VAL_STEP 8
index 9be2f01d4d5d5304e6451c4f60c82aeb355a24c4..17a589cd1d620c37091e117f2080f5cb6782ade4 100644 (file)
@@ -1,12 +1,13 @@
-# Enable RGB if not a Planck
-ifeq ($(LAYOUTS_HAS_RGB),yes)
+ifneq ($(LAYOUTS_HAS_RGB), no)
        RGBLIGHT_ENABLE = yes
 endif
 AUDIO_ENABLE = no
 ifeq ($(strip $(KEYBOARD)), zlant)
   BACKLIGHT_ENABLE = no
 else ifeq ($(strip $(KEYBOARD)), 40percentclub/4x4)
-         BACKLIGHT_ENABLE = no
+  BACKLIGHT_ENABLE = no
+else ifneq (, $(findstring lets_split, $(KEYBOARD)))
+  BACKLIGHT_ENABLE = no
 else
   BACKLIGHT_ENABLE = yes
 endif
index 55862aec36e1eb6741f9d5aebc13a976f0a8adea..f648d112790612f79ad08776237bfcf10f525272 100644 (file)
@@ -2,9 +2,9 @@
 
 
 #if defined(RGBLIGHT_ENABLE) && !defined(RGBLED_NUM)
-#define RGB_DI_PIN D3
-#define RGBLED_NUM 16     // Number of LEDs
-
+#define RGB_DI_PIN B3
+#define RGBLED_NUM 13     // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
 #define RGBLIGHT_HUE_STEP 12
 #define RGBLIGHT_SAT_STEP 12
 #define RGBLIGHT_VAL_STEP 12
 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
 // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
 // #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-// #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true// turn off effects when suspended
 // #define RGB_MATRIX_SKIP_FRAMES 1 // number of frames to skip when displaying animations (0 is full effect) if not defined defaults to 1
 // #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
-// #define EECONFIG_RGB_MATRIX (uint32_t *)16
+#define EECONFIG_RGB_MATRIX (uint32_t *)15
 #endif
 
 #if defined(KEYBOARD_lets_split_rev2)
index f5ead81da2ad167856efa609a34b74232c77ee2f..28da1b204279f1cc3807e994266ef09965e6b3ca 100644 (file)
 
 #ifdef RGB_MATRIX_ENABLE
 extern bool g_suspend_state;
+extern rgb_config_t rgb_matrix_config;
 #endif
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+#endif
+
 
 #ifdef BACKLIGHT_ENABLE
 enum planck_keycodes {
@@ -162,13 +167,13 @@ bool music_mask_user(uint16_t keycode) {
 
 #ifdef RGB_MATRIX_ENABLE
 
-void suspend_power_down_keymap(void)
-{
+void suspend_power_down_keymap(void) {
     rgb_matrix_set_suspend_state(true);
+    rgb_matrix_config.enable = false;
 }
 
-void suspend_wakeup_init_keymap(void)
-{
+void suspend_wakeup_init_keymap(void) {
+    rgb_matrix_config.enable = true;
     rgb_matrix_set_suspend_state(false);
 }
 
@@ -188,7 +193,14 @@ void rgb_matrix_indicators_user(void) {
   uint8_t this_mod = get_mods();
   uint8_t this_led = host_keyboard_leds();
   uint8_t this_osm = get_oneshot_mods();
-  if (!g_suspend_state) {
+
+  if (!g_suspend_state && userspace_config.rgb_layer_change &&
+#if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
+    (!rgblight_config.enable && rgb_matrix_config.enable)
+#else
+    rgb_matrix_config.enable
+#endif
+    ) {
     switch (biton32(layer_state)) {
       case _RAISE:
         rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, false); break;
@@ -228,27 +240,26 @@ void rgb_matrix_indicators_user(void) {
     case _WORKMAN:
       rgb_matrix_set_color(42, 0xD9, 0xA5, 0x21); break;
   }
-
-  if (this_mod & MODS_SHIFT_MASK || this_led & (1<<USB_LED_CAPS_LOCK) || this_osm & MODS_SHIFT_MASK) {
+  if ( (this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1<<USB_LED_CAPS_LOCK)) {
     rgb_matrix_set_color(24, 0x00, 0xFF, 0x00);
     rgb_matrix_set_color(36, 0x00, 0xFF, 0x00);
   }
-  if (this_mod & MODS_CTRL_MASK || this_osm & MODS_CTRL_MASK) {
+  if ( (this_mod | this_osm) & MOD_MASK_CTRL) {
     rgb_matrix_set_color(25, 0xFF, 0x00, 0x00);
     rgb_matrix_set_color(34, 0xFF, 0x00, 0x00);
     rgb_matrix_set_color(37, 0xFF, 0x00, 0x00);
 
   }
-  if (this_mod & MODS_GUI_MASK || this_osm & MODS_GUI_MASK) {
+  if ( (this_mod | this_osm) & MOD_MASK_GUI) {
     rgb_matrix_set_color(39, 0xFF, 0xD9, 0x00);
   }
-  if (this_mod & MODS_ALT_MASK || this_osm & MODS_ALT_MASK) {
+  if ( (this_mod | this_osm) & MOD_MASK_ALT) {
     rgb_matrix_set_color(38, 0x00, 0x00, 0xFF);
   }
 }
 
 void matrix_init_keymap(void) {
-  rgblight_mode(RGB_MATRIX_MULTISPLASH);
+  // rgblight_mode(RGB_MATRIX_MULTISPLASH);
 }
 #else //RGB_MATRIX_INIT
 
@@ -290,15 +301,13 @@ void encoder_update(bool clockwise) {
 #endif // ENCODER_ENABLE
 
 #ifdef KEYBOARD_planck_rev6
-extern audio_config_t audio_config;
-
 void dip_update(uint8_t index, bool active) {
   switch (index) {
     case 0:
-      audio_config.enable = active;
+      if(active) { audio_on(); } else { audio_off(); }
       break;
     case 1:
-      audio_config.clicky_enable = active;
+      if(active) { clicky_on(); } else { clicky_off(); }
       break;
     case 2:
       keymap_config.swap_lalt_lgui = keymap_config.swap_ralt_rgui = active;
index a5429b8ffbab2733b4af13fb635012007383ec0a..f8804326745e13aa3515c3b852eb9294a677e462 100644 (file)
@@ -12,7 +12,7 @@ ifeq (,$(findstring planck/rev6,$(KEYBOARD))) # Make sure it's NOT the Planck Re
 endif
 ifneq (,$(findstring planck/light,$(KEYBOARD))) # Make sure it IS the Planck Light
   RGB_MATRIX_ENABLE   = yes
-  RGBLIGHT_ENABLE     = no
+  RGBLIGHT_ENABLE     = yes
 endif
 
 ifeq ($(strip $(PROTOCOL)), VUSB)
index 2c622cb959f7af446588fa30e7f1103ac0ebf5fc..02fc79ec7fd25857c76ef0cd1c7e2d9242628cc1 100644 (file)
@@ -13,16 +13,10 @@ extern keymap_config_t keymap_config;
 #define _QWERTY   0
 #define _LOWER    1
 #define _RAISE    2
-#define _FUNCTION 3
-#define _ADJUST   4
-
-enum custom_keycodes {
-  BACKLIT = SAFE_RANGE
-};
+#define _ADJUST   3
 
 #define LOWER MO(_LOWER)
 #define RAISE MO(_RAISE)
-#define FUNCT LT(_FUNCTION, KC_TAB)
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
@@ -30,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * |   esc  |    Q   |    W   |    E   |    R   |    T   |    Y   |    U   |    I   |    O   |    P   |  bksp  |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |  func  |    A   |    S   |    D   |    F   |    G   |    H   |    J   |    K   |    L   |    ;   |   del  |
+ * |   tab  |    A   |    S   |    D   |    F   |    G   |    H   |    J   |    K   |    L   |    ;   |    '   |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * | lshift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |    /   |  enter |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
@@ -39,71 +33,52 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
 [_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,
-    FUNCT,   KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_DEL,
+    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
 ),
 
 /* Lower
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |        |
+ * |    `   |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |        |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |  vol-  |  mute  |  vol+  |        |        |        |        |        |        |        |        |
+ * |        |    -   |    =   |    [   |    ]   |    \   |        |        |        |        |        |        |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |  prev  |  play  |  next  |        |        |        | CapsLk |        |        |        |        |
+ * |        |  vol-  |  mute  |  vol+  |        |        |        |        |        |        |        |        |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * |        |        |        |        |        |        |        |        |        |        |        |        |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  */
 [_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_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_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______, _______, _______,
      _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______,
-     _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_CAPS, _______, _______, _______, _______,
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
 ),
 
 /* Raise
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |    (   |    )   |        |
+ * |    ~   |    !   |    @   |    #   |    $   |    %   |    ^   |    &   |    *   |    (   |    )   |   del  |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |    \   |    `   |    -   |    =   |    [   |    ]   |    '   |
+ * |  caps  |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    -   |    =   |    [   |    ]   |    \   |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |    |   |    ~   |    _   |    +   |    {   |    }   |    "   |
+ * |        |   F7   |   F8   |   F9   |   F10  |   F11  |   F12  |    _   |    +   |    {   |    }   |    |   |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  * |        |        |        |        |        |        |        |        |  home  |  pgdn  |  pgun  |   end  |
  * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
  */
 [_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_BSLS, KC_GRV,  KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_QUOT,
-    _______, _______, _______, _______, _______, KC_PIPE, KC_TILD, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_DQUO,
+    KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+    KC_CAPS, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
     _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
 ),
 
-/*
- * Function
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F1   |   F2   |   F3   |   F4   |        |        |   P7   |   P8   |   P9   |   P-   |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F5   |   F6   |   F7   |   F8   |        |        |   P4   |   P5   |   P6   |   P+   |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |   F9   |  F10   |  F11   |  F12   |        | NumLck |   P1   |   P2   |   P3   |   P/   | Penter |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- * |        |        |        |        |        |        |        |        |   P0   |  Pdot  |   P*   |        |
- * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
- */
-[_FUNCTION] = LAYOUT_ortho_4x12 (
-    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   XXXXXXX, XXXXXXX, KC_P7,   KC_P8,   KC_P9,   KC_PMNS, _______,
-    _______, KC_F5,   KC_F6,   KC_F7,   KC_F8,   XXXXXXX, XXXXXXX, KC_P4,   KC_P5,   KC_P6,   KC_PPLS, _______,
-    _______, KC_F9,   KC_F10,  KC_F11,  KC_F12,  XXXXXXX, KC_NLCK, KC_P1,   KC_P2,   KC_P3,   KC_PSLS, KC_PENT,
-    _______, _______, _______, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_PAST, XXXXXXX
-),
-
 /* Adjust */
 [_ADJUST] = LAYOUT_ortho_4x12 (
-    _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, RESET,   _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-    _______, _______, _______, _______, _______, BACKLIT, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
 ),    
 };
@@ -115,23 +90,3 @@ uint32_t layer_state_set_user(uint32_t state) {
 void matrix_init_user(void) {
 }
 
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-    switch (keycode) {
-
-        case BACKLIT:
-            if (record->event.pressed) {
-                register_code(KC_RSFT);
-                #ifdef BACKLIGHT_ENABLE
-                backlight_step();
-                #endif
-            } else {
-                unregister_code(KC_RSFT);
-            }
-            return false;
-           break;
-
-       default:
-           return true;
-
-    }
-}
index 608944801d21c8dd3eb06fc756afa7775edff73d..11af9ed1ee8b49e697d649044f1223263dd533c9 100644 (file)
@@ -1,8 +1,6 @@
 # Jotix ortho 4x12 keymap
 
-![keymap](https://i.imgur.com/7hGJJPs.jpg)
-
-Tab is 'Func' on hold.
+![keymap](https://i.imgur.com/1NxoqW6.png)
 
 Tested on:
 
diff --git a/layouts/community/ortho_4x12/jotix2/keymap.c b/layouts/community/ortho_4x12/jotix2/keymap.c
new file mode 100644 (file)
index 0000000..6364764
--- /dev/null
@@ -0,0 +1,87 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _QWERTY 0
+#define _LOWER  1
+#define _RAISE  2
+#define _GAME   3
+#define _ADJUST 4
+
+#define LOWER  MO(_LOWER)
+#define RAISE  MO(_RAISE)
+#define GAME   TG(_GAME)
+
+/* Funct
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |    `   |    1   |    2   |    3   |    4   |    5   |    6   |    7   |    8   |    9   |    0   |        |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |        |   F1   |   F2   |   F3   |   F4   |   F5   |   F6   |    -   |    =   |    [   |    ]   |    \   |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |        |   F7   |   F8   |   F9   |   F10  |   F11  |   F12  |    '   |        |        |        |        |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |        |        |        |        |        |        |        |        |  home  |  vol-  |  vol+  |   end  |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ */
+#define _FUNCT LAYOUT_ortho_4x12 (\
+    KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______,\
+    _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,\
+    _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_QUOT, _______, _______, _______, _______,\
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_VOLD, KC_VOLU, KC_END\
+)
+
+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   |    ;   |   del  |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * | lshift |    Z   |    X   |    C   |    V   |    B   |    N   |    M   |    ,   |    .   |    /   |  enter |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ * |  lctrl |  lgui  |  lalt  |  ralt  | funct  |  space |  space |  funct |  left  |  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_DEL,
+    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
+),
+
+[_LOWER] = _FUNCT,
+
+[_RAISE] = _FUNCT,
+
+/* Game */
+[_GAME] = LAYOUT_ortho_4x12 (
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP,   _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
+),    
+
+/* Adjust */
+[_ADJUST] = LAYOUT_ortho_4x12 (
+    _______, RESET,   _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+    _______, _______, _______, _______, _______, GAME,    _______, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, BL_STEP, BL_BRTG, _______, _______, _______, _______, _______,
+    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),    
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+void matrix_init_user(void) {
+}
diff --git a/layouts/community/ortho_4x12/jotix2/readme.md b/layouts/community/ortho_4x12/jotix2/readme.md
new file mode 100644 (file)
index 0000000..b023227
--- /dev/null
@@ -0,0 +1,8 @@
+# Jotix2 ortho 4x12 keymap
+
+![keymap](https://i.imgur.com/WMfIpH3.jpg)
+
+Tested on:
+
+* Planck/rev4
+* Jotanck
index 37fbcd56a471bb8ce6df83778d7acd4ff6e84b3b..2c69d5160e81c166d39f5d84fe7e19c82d87d1b0 100644 (file)
@@ -1,26 +1,24 @@
-# Symbolic ortho 4x12 layout 
+# Symbolic  ortho 4x12 layout 
 
 ## Features
 
 ### QWERTY based 
 
-![QWERTY layout](https://gist.githubusercontent.com/leico/cb50ecd12eb8ad906a69678f265cd52c/raw/4597497ecd00790312f1a3928b2e2c5cf17a6ac1/QWERTY.png)
-
+![QWERTY layout](https://gist.githubusercontent.com/leico/5bf4d9ff94f2068c5333739f7f1f88b4/raw/2af7fed6f282b6ac278e79433d15887f6b91ba3a/QWERTY.png)
+    
 * Default keymap
 * QWERTY layout
 * Hold and tap 
-    * `Shift` and `Space`
     * `Left Ctrl` and `Tab`
 * Symmetric Modifiers
     * `Shift`
     * `Raise Layer`
     * `Lower Layer`
     * `GUI`
-    * `Reset`
 
 ### symbol charactor layer
 
-![Raise layout](https://gist.githubusercontent.com/leico/cb50ecd12eb8ad906a69678f265cd52c/raw/4597497ecd00790312f1a3928b2e2c5cf17a6ac1/Raise.png)
+![Raise layout](https://gist.githubusercontent.com/leico/5bf4d9ff94f2068c5333739f7f1f88b4/raw/2af7fed6f282b6ac278e79433d15887f6b91ba3a/Raise.png)
 
 * Raise Layer
 * assigned symbolic(punctuation) characters
 
 ### numbers and allows layer
 
-![Lower layout](https://gist.githubusercontent.com/leico/cb50ecd12eb8ad906a69678f265cd52c/raw/4597497ecd00790312f1a3928b2e2c5cf17a6ac1/Lower.png)
+![Lower layout](https://gist.githubusercontent.com/leico/5bf4d9ff94f2068c5333739f7f1f88b4/raw/2af7fed6f282b6ac278e79433d15887f6b91ba3a/Lower.png)
 
 * Lower Layer
 * entrust vim style arrows
 * also numkeys
 * additional, computer volume keys
 * transparent all modifiers
+* **changed 2018/09/04**
+    * assign keys
+        * Home
+        * Page Down
+        * Page Up
+        * End
+        * Print Screen
 
 ### Numpads and F key layer
 
-![Neutral layout](https://gist.githubusercontent.com/leico/cb50ecd12eb8ad906a69678f265cd52c/raw/4597497ecd00790312f1a3928b2e2c5cf17a6ac1/Neutral.png)
+![Neutral layout](https://gist.githubusercontent.com/leico/5bf4d9ff94f2068c5333739f7f1f88b4/raw/2af7fed6f282b6ac278e79433d15887f6b91ba3a/Neutral.png)
 
 * visibled when Raise and Lower layer visibled
 * F keys assigned left hand side
 * Numpads assigned right hand side
     * for that reason, override `RGUI` key
 * transparent mostly modifiers
+* visibled `Reset` key on both hands 
 
 
 ### Goals
@@ -63,7 +69,6 @@
 * simple, minimal, easy learn
 * as soon as possible, don't disable any shortcuts
 
-
 ###  suggestions or find issues
 
 [post issues for my fork](https://github.com/leico/qmk_firmware/issues)
index c29b0770622ab53ea62075a6f8625736897c9141..3f88b4cc17d91edc7839be6a98cb95194ba238bd 100644 (file)
@@ -20,8 +20,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #pragma once
 
-// hold & tapping delay setting
-#define TAPPING_TERM 100
+
 
 /* Use I2C or Serial, not both */
 
index 1e5494d96ef904b9bfb0e744d9e137bb5297c93b..c2923737111444a8efb8065d88c4df9e9e0260c6 100644 (file)
@@ -19,6 +19,7 @@ enum custom_keycodes {
   R_RAISE
 };
 
+
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
 /* Qwerty
@@ -30,17 +31,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Tab  |   A  |   S  |   D  |   F  |   G  ||   H  |   J  |   K  |   L  |   ;  |Enter |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
  * |      |      |      |      |      |      ||      |      |      |      |      |      |
- * |      |   Z  |   X  |   C  |   V  |   B  ||   N  |   M  |   ,  |   .  |   !  |      |
+ * |Shift |   Z  |   X  |   C  |   V  |   B  ||   N  |   M  |   ,  |   .  |   !  |Shift |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
- * |      |      |      |      |      |LSFT_T||RSFT_T|      |      |      |      |      |
- * |Reset | Alt  | GUI  |LLower|LRaise|Space ||Space |RRaise|RLower| GUI  | Del  |Reset |
+ * |      |      |      |      |      |      ||      |      |      |      |      |      |
+ * |LRaise| Alt  | GUI  |      |LLower|Space ||Space |RLower|      | GUI  | Del  |RRaise|
  * `------------------------------------------------------------------------------------'
  */
 [_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, \
-  LCTL_T(KC_TAB), KC_A,     KC_S,     KC_D,     KC_F,     KC_G,               KC_H,               KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_ENT,  \
-  XXXXXXX,        KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,               KC_N,               KC_M,     KC_COMM,  KC_DOT,   KC_EXLM,  XXXXXXX, \
-  RESET,          KC_LALT,  KC_LGUI,  L_LOWER,  L_RAISE,  LSFT_T( KC_SPC ),   RSFT_T( KC_SPC ),   R_RAISE,  R_LOWER,  KC_RGUI,  KC_DEL,   RESET    \
+  KC_ESC,         KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_BSPC, \
+  LCTL_T(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_EXLM,  KC_RSFT, \
+  L_RAISE,        KC_LALT,  KC_LGUI,  XXXXXXX,  L_LOWER,  KC_SPC,   KC_SPC,   R_LOWER,  XXXXXXX,  KC_RGUI,  KC_DEL,   R_RAISE  \
 ),
 
 /* Raise
@@ -52,16 +53,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Tab  |   ~  |   |  |   (  |   )  |   *  ||   /  |   <  |   >  |   '  |   :  |Enter |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
  * |      |      |      |      |      |      ||      |      |      |      |      |      |
- * |      |   `  |   ^  |   @  |   $  |   +  ||   -  |   =  |   _  |   "  |   ?  |      |
+ * |Shift |   `  |   ^  |   @  |   $  |   +  ||   -  |   =  |   _  |   "  |   ?  |Shift |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
- * |      |      |      |      |      |LSFT_T||RSFT_T|      |      |      |      |      |
- * |Reset | Alt  | GUI  |LLower|LRaise|Space ||Space |RRaise|RLower| GUI  | Del  |Reset |
+ * |      |      |      |      |      |      ||      |      |      |      |      |      |
+ * |LRaise| Alt  | GUI  |      |LLower|Space ||Space |RLower|      | GUI  | Del  |RRaise|
  * `------------------------------------------------------------------------------------'
  */
 [_RAISE] = LAYOUT_ortho_4x12( \
   _______,  XXXXXXX,  KC_AMPR,  KC_LCBR,  KC_RCBR,  KC_PERC,  KC_BSLS,  KC_LBRC,  KC_RBRC,  KC_HASH,  XXXXXXX,  _______, \
-  _______,  KC_TILD,  KC_PIPE,  KC_LPRN,  KC_RPRN,  KC_ASTR,  KC_SLSH,  KC_LABK,  KC_RABK,  KC_QUOT,  KC_COLN,  _______, \
-  _______,  KC_GRV,   KC_CIRC,  KC_AT,    KC_DLR,   KC_PLUS,  KC_MINS,  KC_EQL,   KC_UNDS,  KC_DQUO,  KC_QUES,  _______, \
+  _______,  KC_TILD,  KC_PIPE,  KC_LPRN,  KC_RPRN,  KC_ASTR,  KC_SLSH,  KC_LABK,  KC_RABK,  KC_DQUO,  KC_COLN,  _______, \
+  _______,  KC_GRV,   KC_CIRC,  KC_AT,    KC_DLR,   KC_PLUS,  KC_MINS,  KC_EQL,   KC_UNDS,  KC_QUOT,  KC_QUES,  _______, \
   _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______  \
 ),
 /* Lower
@@ -73,16 +74,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Tab  |      |VolDn |VolUp | Mute |      || Left | Down |  Up  |Right |      |Enter |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
  * |      |      |      |      |      |      ||      |      |      |      |      |      |
- * |      |      |      |      |      |      ||      |      |      |      |      |      |
+ * |Shift |      |      |      |      | PrSc || Home | PgDn | PgUp | End  |      |Shift |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
- * |      |      |      |      |      |LSFT_T||RSFT_T|      |      |      |      |      |
- * |Reset | Alt  | GUI  |LLower|LRaise|Space ||Space |RRaise|RLower| GUI  | Del  |Reset |
+ * |      |      |      |      |      |      ||      |      |      |      |      |      |
+ * |LRaise| Alt  | GUI  |      |LLower|Space ||Space |RLower|      | GUI  | Del  |RRaise|
  * `------------------------------------------------------------------------------------'
  */
 [_LOWER] = LAYOUT_ortho_4x12( \
   _______,  KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     _______, \
   _______,  XXXXXXX,  KC_VOLD,  KC_VOLU,  KC_MUTE,  XXXXXXX,  KC_LEFT,  KC_DOWN,  KC_UP,    KC_RGHT,  XXXXXXX,  _______, \
-  _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______, \
+  _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  KC_PSCR,  KC_HOME,  KC_PGDN,  KC_PGUP,  KC_END,   XXXXXXX,  _______, \
   _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______  \
 ),
 
@@ -95,55 +96,113 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * | Tab  |  F5  |  F6  |  F7  |  F8  |      ||   *  |   /  |   4  |   5  |   6  |Enter |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
  * |      |      |      |      |      |      ||      |      |      |      |      |      |
- * |      |  F9  |  F10 |  F11 |  F12 |      ||   .  |   ,  |   7  |   8  |   9  |      |
+ * |Shift |  F9  |  F10 |  F11 |  F12 |      ||   .  |   ,  |   7  |   8  |   9  |Shift |
  * |------+------+------+------+------+------++------+------+------+------+------+------|
- * |      |      |      |      |      |LSFT_T||RSFT_T|      |      |      |      |      |
- * |Reset | Alt  | GUI  |LLower|LRaise|Space ||Space |RRaise|RLower|   0  | Del  |Reset |
+ * |      |      |      |      |      |      ||      |      |      |      |      |      |
+ * |LRaise| Alt  | GUI  |Reset |LLower|Space ||Space |RLower|Reset |   0  | Del  |RRaise|
  * `------------------------------------------------------------------------------------'
  */
 [_NEUTRAL] = LAYOUT_ortho_4x12( \
   _______,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    XXXXXXX,  KC_PPLS,  KC_PMNS,  KC_P1,    KC_P2,    KC_P3,     _______, \
   _______,  KC_F5,    KC_F6,    KC_F7,    KC_F8,    XXXXXXX,  KC_PAST,  KC_PSLS,  KC_P4,    KC_P5,    KC_P6,     _______, \
   _______,  KC_F9,    KC_F10,   KC_F11,   KC_F12,   XXXXXXX,  KC_PDOT,  KC_COMM,  KC_P7,    KC_P8,    KC_P9,     _______, \
-  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,  KC_P0,    _______,   _______  \
+  _______,  _______,  _______,  RESET,    _______,  _______,  _______,  _______,  RESET,    KC_P0,    _______,   _______  \
 )
 
 
 };
 
 
-void DualKeyPressed ( bool brother_state, uint8_t target ){
 
-  if( brother_state ) return;
+/****  Raise Layer functions *****/
+
+  /* RaisePressed function */
+    /* called RaiseSwitch  */
+void RaisePressed ( keyevent_t *event, bool brother_state ){ 
+  
+  if( brother_state ) { return; }
+
+  layer_on( _RAISE );
+  update_tri_layer( _LOWER, _RAISE, _NEUTRAL );
+  return;
+
+}
+
+
+  /* RaiseReleased function */
+    /* called RaiseSwitch   */
+void RaiseReleased ( bool brother_state ){ 
+  
+  if( brother_state ) { return; }
 
-  layer_on( target );
+  layer_off( _RAISE );
+  update_tri_layer( _LOWER, _RAISE, _NEUTRAL );
   return;
 }
 
-void DualKeyReleased ( bool brother_state, uint8_t target1 ){ 
 
-  if( brother_state ) return ;
+  /* RaiseSwitch function         */
+    /* called process_record_user */
+bool RaiseSwitch ( keyrecord_t *record, bool *key_state, bool brother ){ 
+
+  if( record -> event.pressed ) {
+    *key_state = true;
+    RaisePressed( &(record -> event), brother );
+  } else {
+    *key_state = false;
+    RaiseReleased( brother );
+  }
+  return false;
+
+}
+
+
 
-  layer_off( target1 );
+
+
+
+/**** Lower layer functions ****/
+
+  /* LowerPressed function   */
+    /* call from LowerSwitch */
+void LowerPressed ( bool brother_state ){
+
+  if( brother_state ) { return; }
+
+  layer_on( _LOWER );
+  update_tri_layer(_LOWER, _RAISE, _NEUTRAL );
+  return;
+}
+
+  /* LowerReleased function  */
+    /* call from LowerSwitch */
+void LowerReleased ( bool brother_state ){ 
+
+  if( brother_state ) { return; }
+
+  layer_off( _LOWER );
+  update_tri_layer(_LOWER, _RAISE, _NEUTRAL );
   return ;
 }
 
-bool LayerSwitch ( keyrecord_t *record, bool *key_state, bool brother, uint8_t layer ){ 
+  /* LowerSwitch function            */
+    /* call from process_record_user */
+bool LowerSwitch ( keyrecord_t *record, bool *key_state, bool brother ){ 
   if ( record -> event.pressed ) {
     *key_state = true;
-    DualKeyPressed( brother, layer );
-  } 
-  else {
+    LowerPressed( brother );
+  } else {
     *key_state = false;
-    DualKeyReleased( brother, layer );
+    LowerReleased( brother );
   }
 
-  update_tri_layer(_LOWER, _RAISE, _NEUTRAL );
   return false;
 
-
 }
 
+
+
+/**** process_record_user ****/
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
   static bool l_lower = false;
@@ -155,11 +214,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   switch (keycode) {
 
 
-    case L_LOWER : return LayerSwitch( record, &l_lower, r_lower, _LOWER ); break;
-    case R_LOWER : return LayerSwitch( record, &r_lower, l_lower, _LOWER ); break;
-    case L_RAISE : return LayerSwitch( record, &l_raise, r_raise, _RAISE ); break;
-    case R_RAISE : return LayerSwitch( record, &r_raise, l_raise, _RAISE ); break;
+    case L_LOWER : return LowerSwitch( record, &l_lower, r_lower ); break;
+    case R_LOWER : return LowerSwitch( record, &r_lower, l_lower ); break;
+    case L_RAISE : return RaiseSwitch( record, &l_raise, r_raise ); break;
+    case R_RAISE : return RaiseSwitch( record, &r_raise, l_raise ); break;
+
+    default: break;
 
   }
   return true;
 }
+
+
+
index 561084f8ae2479ee333f4661d43750ff9aca6be5..91d0ed74dce8b4a9ac62343744ba83c63a09812f 100644 (file)
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  * |       |   0   |   .   |   *   |
  * +-------+-------+-------+-------+
  */
-[_NUMPAD] = LAYOUT_jotpad16 ( 
+[_NUMPAD] = LAYOUT_ortho_4x4 ( 
     KC_P7,  KC_P8,  KC_P9,  KC_PMNS,
     KC_P4,  KC_P5,  KC_P6,  KC_PPLS,
     KC_P1,  KC_P2,  KC_P3,  KC_PSLS,
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 ),
 
 /* Lower */
-[_LOWER] = LAYOUT_jotpad16 ( 
+[_LOWER] = LAYOUT_ortho_4x4 ( 
     KC_NLCK,_______,_______,RESET  ,
     _______,_______,_______,_______,
     _______,_______,_______,_______,
index 6894dd8cb50412b5a0a1cd185aba5ccf58d435c5..71f37be0b5f8c77ae9196c2fbc1ebcd5345ca3a0 100644 (file)
@@ -80,3 +80,4 @@ MSG_CHECK_FILESIZE = Checking file size of $(TARGET).hex
 MSG_FILE_TOO_BIG = $(ERROR_COLOR)The firmware is too large!$(NO_COLOR) $(CURRENT_SIZE)/$(MAX_SIZE) ($(OVER_SIZE) bytes over)\n
 MSG_FILE_TOO_SMALL = The firmware is too small! $(CURRENT_SIZE)/$(MAX_SIZE)\n
 MSG_FILE_JUST_RIGHT = The firmware size is fine - $(CURRENT_SIZE)/$(MAX_SIZE) ($(FREE_SIZE) bytes free)\n
+MSG_FILE_NEAR_LIMIT = The firmware size is approaching the maximum - $(CURRENT_SIZE)/$(MAX_SIZE) ($(FREE_SIZE) bytes free)\n
index 52dfe23e17648593b479152abee235cd393806de..233f99636de4a9dd16cee230602f463003c688c8 100644 (file)
@@ -67,7 +67,7 @@ void process_api(uint16_t length, uint8_t * data) {
                 case DT_RGBLIGHT: {
                     #ifdef RGBLIGHT_ENABLE
                         uint32_t rgblight = bytes_to_dword(data, 2);
-                        rgblight_update_dword(rgblight);
+                        eeconfig_update_rgblight(rgblight);
                     #endif
                     break;
                 }
index 6d6833ec11f178dc1ec1a98fc68b76b4bb2b0390..3da164c736ef44611ab77f7de713e199b927141f 100644 (file)
@@ -141,7 +141,7 @@ uint16_t notes_count;
 bool     notes_repeat;
 bool     note_resting = false;
 
-uint8_t current_note = 0;
+uint16_t current_note = 0;
 uint8_t rest_counter = 0;
 
 #ifdef VIBRATO_ENABLE
index a3a403957045555b268dd737e43989f1f8fe012f..6760015ef462700d20249c79cc009346265b3e2b 100644 (file)
@@ -54,7 +54,7 @@ uint16_t notes_count;
 bool     notes_repeat;
 bool     note_resting = false;
 
-uint8_t current_note = 0;
+uint16_t current_note = 0;
 uint8_t rest_counter = 0;
 
 #ifdef VIBRATO_ENABLE
index ded86edeea9e683332051caed0e0f3fdf3a8cf2b..ed67136099a8889b13bc9e56974842da8bfe552e 100644 (file)
@@ -94,7 +94,7 @@ bool     notes_repeat;
 float    notes_rest;
 bool     note_resting = false;
 
-uint8_t current_note = 0;
+uint16_t current_note = 0;
 uint8_t rest_counter = 0;
 
 #ifdef VIBRATO_ENABLE
index ce8d47d1c1adf19af07c099d5cc00855122962fe..cd54af38d22ffd3530d7b6e2eb7605a03fa1eaa8 100644 (file)
 
 // Note Types
 #define MUSICAL_NOTE(note, duration)   {(NOTE##note), duration}
+#define BREVE_NOTE(note)               MUSICAL_NOTE(note, 128)
 #define WHOLE_NOTE(note)               MUSICAL_NOTE(note, 64)
 #define HALF_NOTE(note)                MUSICAL_NOTE(note, 32)
 #define QUARTER_NOTE(note)             MUSICAL_NOTE(note, 16)
 #define EIGHTH_NOTE(note)              MUSICAL_NOTE(note,  8)
 #define SIXTEENTH_NOTE(note)           MUSICAL_NOTE(note,  4)
 
+#define BREVE_DOT_NOTE(note)           MUSICAL_NOTE(note, 128+64)
 #define WHOLE_DOT_NOTE(note)           MUSICAL_NOTE(note, 64+32)
 #define HALF_DOT_NOTE(note)            MUSICAL_NOTE(note, 32+16)
 #define QUARTER_DOT_NOTE(note)         MUSICAL_NOTE(note, 16+8)
 
 // Note Type Shortcuts
 #define M__NOTE(note, duration)        MUSICAL_NOTE(note, duration)
+#define B__NOTE(n)                     BREVE_NOTE(n)
 #define W__NOTE(n)                     WHOLE_NOTE(n)
 #define H__NOTE(n)                     HALF_NOTE(n)
 #define Q__NOTE(n)                     QUARTER_NOTE(n)
 #define E__NOTE(n)                     EIGHTH_NOTE(n)
 #define S__NOTE(n)                     SIXTEENTH_NOTE(n)
+#define BD_NOTE(n)                     BREVE_DOT_NOTE(n)
 #define WD_NOTE(n)                     WHOLE_DOT_NOTE(n)
 #define HD_NOTE(n)                     HALF_DOT_NOTE(n)
 #define QD_NOTE(n)                     QUARTER_DOT_NOTE(n)
index 9946084977cf48b0abde0957d4ea6f7e8a9365c5..369e0b48435e100ed18e92f7c1ea5d618a383eb1 100644 (file)
     H__NOTE(_F4),      \
     H__NOTE(_F4),      \
     W__NOTE(_C5),      \
-    W__NOTE(_BF4), 
+    W__NOTE(_BF4),
+
+/* Prelude music from Final Fantasy */
+#define FF_PRELUDE \
+  M__NOTE(_C3, 20), M__NOTE(_D3, 20), M__NOTE(_E3, 20), M__NOTE(_G3, 20), \
+  M__NOTE(_C4, 20), M__NOTE(_D4, 20), M__NOTE(_E4, 20), M__NOTE(_G4, 20), \
+  M__NOTE(_C5, 20), M__NOTE(_D5, 20), M__NOTE(_E5, 20), M__NOTE(_G5, 20), \
+  M__NOTE(_C6, 20), M__NOTE(_D6, 20), M__NOTE(_E6, 20), M__NOTE(_G6, 20), \
+  M__NOTE(_C7, 20), M__NOTE(_G6, 20), M__NOTE(_E6, 20), M__NOTE(_D6, 20), \
+  M__NOTE(_C6, 20), M__NOTE(_G5, 20), M__NOTE(_E5, 20), M__NOTE(_D5, 20), \
+  M__NOTE(_C5, 20), M__NOTE(_G4, 20), M__NOTE(_E4, 20), M__NOTE(_D4, 20), \
+  M__NOTE(_C4, 20), M__NOTE(_G3, 20), M__NOTE(_E3, 20), M__NOTE(_D3, 20), \
+  M__NOTE(_A2, 20), M__NOTE(_B2, 20), M__NOTE(_C3, 20), M__NOTE(_E3, 20), \
+  M__NOTE(_A3, 20), M__NOTE(_B3, 20), M__NOTE(_C4, 20), M__NOTE(_E4, 20), \
+  M__NOTE(_A4, 20), M__NOTE(_B4, 20), M__NOTE(_C5, 20), M__NOTE(_E5, 20), \
+  M__NOTE(_A5, 20), M__NOTE(_B5, 20), M__NOTE(_C6, 20), M__NOTE(_E6, 20), \
+  M__NOTE(_A6, 20), M__NOTE(_E6, 20), M__NOTE(_C6, 20), M__NOTE(_B5, 20), \
+  M__NOTE(_A5, 20), M__NOTE(_E5, 20), M__NOTE(_C5, 20), M__NOTE(_B4, 20), \
+  M__NOTE(_A4, 20), M__NOTE(_E4, 20), M__NOTE(_C4, 20), M__NOTE(_B3, 20), \
+  M__NOTE(_A3, 20), M__NOTE(_E3, 20), M__NOTE(_C3, 20), M__NOTE(_B2, 20),
+
+/* Melody from the main themes of Star Trek TNG and the original series */
+#define TO_BOLDLY_GO \
+  W__NOTE(_BF3 ), \
+  Q__NOTE(_EF4 ), \
+  WD_NOTE(_AF4 ), \
+  W__NOTE(_REST), \
+  H__NOTE(_G4  ), \
+  Q__NOTE(_EF4 ), \
+  H__NOTE(_C4  ), \
+  W__NOTE(_REST), \
+  QD_NOTE(_F4  ), \
+  M__NOTE(_BF4, 128),
+
+#define KATAWARE_DOKI \
+  W__NOTE(_G5), HD_NOTE(_G5), Q__NOTE(_G5), H__NOTE(_G5), H__NOTE(_E5), H__NOTE(_D5), Q__NOTE(_D5), Q__NOTE(_C5), \
+  B__NOTE(_E5), H__NOTE(_C5), W__NOTE(_G5), HD_NOTE(_G5), Q__NOTE(_C5), H__NOTE(_C6), Q__NOTE(_B5), \
+  Q__NOTE(_A5), H__NOTE(_G5), Q__NOTE(_G5), Q__NOTE(_A5), W__NOTE(_G5), QD_NOTE(_E5), \
+  QD_NOTE(_F5), Q__NOTE(_E5), WD_NOTE(_D5), H__NOTE(_C5), W__NOTE(_G5), HD_NOTE(_G5), Q__NOTE(_G5), \
+  H__NOTE(_G5), H__NOTE(_E5), H__NOTE(_D5), Q__NOTE(_D5), Q__NOTE(_C5), B__NOTE(_E5), H__NOTE(_G4), \
+  Q__NOTE(_C5), Q__NOTE(_D5), Q__NOTE(_E5), H__NOTE(_D5), Q__NOTE(_C5), Q__NOTE(_C5), \
+  Q__NOTE(_A4), H__NOTE(_C5), Q__NOTE(_C5), W__NOTE(_C5), Q__NOTE(_F4), Q__NOTE(_C5), \
+  Q__NOTE(_D5), Q__NOTE(_E5), H__NOTE(_D5), H__NOTE(_C5), Q__NOTE(_C5), H__NOTE(_G5), \
+  Q__NOTE(_C5), HD_NOTE(_D5), H__NOTE(_G4), Q__NOTE(_C5), Q__NOTE(_D5), Q__NOTE(_E5), \
+  H__NOTE(_D5), Q__NOTE(_C5), Q__NOTE(_C5), Q__NOTE(_A4), H__NOTE(_C5), Q__NOTE(_C5), \
+  W__NOTE(_C5), Q__NOTE(_F4), Q__NOTE(_C5), Q__NOTE(_D5), Q__NOTE(_E5), H__NOTE(_D5), \
+  H__NOTE(_C5), Q__NOTE(_C5), H__NOTE(_G5), Q__NOTE(_C5), HD_NOTE(_D5), \
+  HD_NOTE(_G4), Q__NOTE(_C5), Q__NOTE(_D5), BD_NOTE(_C5), 
+    
+#define CAMPANELLA \
+  Q__NOTE(_DS4), E__NOTE(_DS4), E__NOTE(_DS5), Q__NOTE(_DS5), E__NOTE(_DS5), E__NOTE(_DS6), Q__NOTE(_DS5), E__NOTE(_DS5), \
+  E__NOTE(_DS6), Q__NOTE(_CS5), E__NOTE(_CS5), E__NOTE(_DS6), Q__NOTE(_B4), E__NOTE(_B4), E__NOTE(_DS6), \
+  Q__NOTE(_B4), E__NOTE(_B4), E__NOTE(_DS6), Q__NOTE(_AS4), E__NOTE(_AS4), E__NOTE(_DS6), Q__NOTE(_GS4), \
+  E__NOTE(_GS4), E__NOTE(_DS6), Q__NOTE(_G4), E__NOTE(_G4), E__NOTE(_DS6), Q__NOTE(_GS4), E__NOTE(_GS4), \
+  E__NOTE(_DS6), Q__NOTE(_AS4), E__NOTE(_AS4), E__NOTE(_DS6), Q__NOTE(_DS4), E__NOTE(_DS4), E__NOTE(_DS6), \
+  Q__NOTE(_DS5), E__NOTE(_DS5), E__NOTE(_DS6), Q__NOTE(_E5), E__NOTE(_E5), E__NOTE(_DS6), Q__NOTE(_DS5), \
+  E__NOTE(_DS5), E__NOTE(_DS6), Q__NOTE(_CS5), E__NOTE(_CS5), E__NOTE(_DS6), Q__NOTE(_B4), E__NOTE(_B4), \
+  E__NOTE(_DS6), Q__NOTE(_B4), E__NOTE(_B4), E__NOTE(_DS6), Q__NOTE(_AS4), E__NOTE(_AS4), E__NOTE(_DS6), \
+  Q__NOTE(_GS4), E__NOTE(_GS4), E__NOTE(_DS6), Q__NOTE(_G4), E__NOTE(_G4), E__NOTE(_DS6), Q__NOTE(_GS4), \
+  E__NOTE(_GS4), E__NOTE(_DS6), Q__NOTE(_AS4), E__NOTE(_AS4), E__NOTE(_DS6), Q__NOTE(_DS4), E__NOTE(_DS4), \
+  E__NOTE(_DS5), Q__NOTE(_DS5), E__NOTE(_DS5), E__NOTE(_DS6), Q__NOTE(_DS6), E__NOTE(_DS6), E__NOTE(_DS7), \
+  Q__NOTE(_DS6), E__NOTE(_DS6), E__NOTE(_DS7), Q__NOTE(_CS6), E__NOTE(_CS6), E__NOTE(_DS7), Q__NOTE(_B5), \
+  E__NOTE(_B5), E__NOTE(_DS7), Q__NOTE(_B5), E__NOTE(_B5), E__NOTE(_DS7), Q__NOTE(_AS5), E__NOTE(_AS5), \
+  E__NOTE(_DS7), Q__NOTE(_GS5), E__NOTE(_GS5), E__NOTE(_DS7), Q__NOTE(_G5), E__NOTE(_G5), E__NOTE(_DS7), \
+  Q__NOTE(_GS5), E__NOTE(_GS5), E__NOTE(_DS7), Q__NOTE(_AS5), E__NOTE(_AS5), E__NOTE(_DS7), Q__NOTE(_DS5), \
+  E__NOTE(_DS5), E__NOTE(_DS7), W__NOTE(_DS6), W__NOTE(_GS5), 
+
+#define MEGALOVANIA \
+  Q__NOTE(_D4), Q__NOTE(_D4), H__NOTE(_D5), HD_NOTE(_A4), H__NOTE(_AF4), H__NOTE(_G4), H__NOTE(_F4), \
+  Q__NOTE(_D4), Q__NOTE(_F4), Q__NOTE(_G4), Q__NOTE(_C4), Q__NOTE(_C4), H__NOTE(_D5), HD_NOTE(_A4), \
+  H__NOTE(_AF4), H__NOTE(_G4), H__NOTE(_F4), Q__NOTE(_D4), Q__NOTE(_F4), Q__NOTE(_G4), \
+  Q__NOTE(_B3), Q__NOTE(_B3), H__NOTE(_D5), HD_NOTE(_A4), H__NOTE(_AF4), H__NOTE(_G4), H__NOTE(_F4), \
+  Q__NOTE(_D4), Q__NOTE(_F4), Q__NOTE(_G4), Q__NOTE(_BF3), Q__NOTE(_BF3), H__NOTE(_D5), \
+  HD_NOTE(_A4), H__NOTE(_AF4), H__NOTE(_G4), H__NOTE(_F4), Q__NOTE(_D4), Q__NOTE(_F4), \
+  Q__NOTE(_G4),
+
+#define MICHISHIRUBE \
+  W__NOTE(_A5), H__NOTE(_A5), H__NOTE(_A5), W__NOTE(_B5), H__NOTE(_A5), H__NOTE(_B5), BD_NOTE(_CS6), W__NOTE(_E6), \
+  W__NOTE(_CS6), WD_NOTE(_B5), H__NOTE(_A5), BD_NOTE(_A5), W__NOTE(_A5), H__NOTE(_A5), H__NOTE(_A5), \
+  W__NOTE(_B5), H__NOTE(_A5), H__NOTE(_B5), W__NOTE(_A5), W__NOTE(_A6), W__NOTE(_GS6), H__NOTE(_CS6), \
+  Q__NOTE(_E6), Q__NOTE(_CS6), W__NOTE(_B5), H__NOTE(_B5), H__NOTE(_CS6), W__NOTE(_B5), H__NOTE(_A5), \
+  Q__NOTE(_B5), BD_NOTE(_A5), \
+  H__NOTE(_E6), H__NOTE(_FS6), H__NOTE(_E6), H__NOTE(_B6), \
+  W__NOTE(_A6), H__NOTE(_E6), H__NOTE(_B6), W__NOTE(_A6), H__NOTE(_A6), H__NOTE(_B6), \
+  B__NOTE(_CS7), H__NOTE(_E6), H__NOTE(_FS6), H__NOTE(_E6), H__NOTE(_B6), W__NOTE(_A6), H__NOTE(_E6), \
+  H__NOTE(_B6), W__NOTE(_A6), H__NOTE(_A6), H__NOTE(_GS6), B__NOTE(_E6), H__NOTE(_E6), \
+  H__NOTE(_FS6), H__NOTE(_E6), H__NOTE(_B6), W__NOTE(_A6), H__NOTE(_E6), H__NOTE(_B6), \
+  W__NOTE(_A6), H__NOTE(_A6), H__NOTE(_B6), H__NOTE(_CS7), B__NOTE(_CS7), H__NOTE(_E6), H__NOTE(_E6), \
+  H__NOTE(_E6), H__NOTE(_E6), H__NOTE(_D6), H__NOTE(_D6), H__NOTE(_CS6), H__NOTE(_CS6), Q__NOTE(_B5), \
+  BD_NOTE(_B5), W__NOTE(_A5), H__NOTE(_A5), H__NOTE(_A5), W__NOTE(_B5), H__NOTE(_A5), H__NOTE(_B5), \
+  BD_NOTE(_CS6), W__NOTE(_E6), W__NOTE(_CS6), WD_NOTE(_B5), H__NOTE(_A5), BD_NOTE(_A5), W__NOTE(_A5), \
+  H__NOTE(_A5), H__NOTE(_A5), W__NOTE(_B5), H__NOTE(_A5), H__NOTE(_B5), W__NOTE(_A5), W__NOTE(_A6), \
+  W__NOTE(_GS6), H__NOTE(_CS6), Q__NOTE(_E6), Q__NOTE(_CS6), W__NOTE(_B5), H__NOTE(_B5), H__NOTE(_CS6), \
+  W__NOTE(_B5), H__NOTE(_A5), Q__NOTE(_B5), BD_NOTE(_A5),
+    
+#define LIEBESLEID \
+  Q__NOTE(_E4), Q__NOTE(_DS4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_E4), Q__NOTE(_FS4), Q__NOTE(_EF4), Q__NOTE(_G4), Q__NOTE(_D4), \
+  Q__NOTE(_GS4), Q__NOTE(_CS4), W__NOTE(_A4), H__NOTE(_E5), H__NOTE(_E5), HD_NOTE(_G4), Q__NOTE(_E5), E__NOTE(_E5), \
+  E__NOTE(_F5), ED_NOTE(_E5), HD_NOTE(_D5), Q__NOTE(_E5), H__NOTE(_F5), H__NOTE(_CS5), H__NOTE(_C5), W__NOTE(_G4), \
+  H__NOTE(_D5), H__NOTE(_D5), HD_NOTE(_D5), Q__NOTE(_D5), E__NOTE(_D5), E__NOTE(_E5), E__NOTE(_D5), HD_NOTE(_C5), \
+  Q__NOTE(_D5), H__NOTE(_E5), H__NOTE(_B4), H__NOTE(_BF4), W__NOTE(_F4), H__NOTE(_C5), H__NOTE(_C5), HD_NOTE(_EF4), \
+  Q__NOTE(_C5), E__NOTE(_C5), E__NOTE(_D5), E__NOTE(_C5), HD_NOTE(_BF4), Q__NOTE(_C5), H__NOTE(_D5), H__NOTE(_FS4), \
+  H__NOTE(_F4), HD_NOTE(_E4), Q__NOTE(_A4), HD_NOTE(_FS4), Q__NOTE(_A4), HD_NOTE(_GS4), Q__NOTE(_B4), Q__NOTE(_A4), \
+  Q__NOTE(_E4), Q__NOTE(_DS4), Q__NOTE(_E4), Q__NOTE(_F4), Q__NOTE(_D4), Q__NOTE(_FS4), Q__NOTE(_CS4), Q__NOTE(_G4), \
+  Q__NOTE(_C4), Q__NOTE(_GS4), Q__NOTE(_D4), WD_NOTE(_A4), 
+    
+#define MELODIES_OF_LIFE \
+  H__NOTE(_B5), W__NOTE(_GS6), H__NOTE(_GS6), H__NOTE(_FS6), W__NOTE(_E6), H__NOTE(_E6), H__NOTE(_DS6), H__NOTE(_CS6), H__NOTE(_DS6), \
+  H__NOTE(_E6), H__NOTE(_FS6), WD_NOTE(_B5), H__NOTE(_B5), H__NOTE(_CS6), H__NOTE(_DS6), H__NOTE(_E6), H__NOTE(_CS6), \
+  H__NOTE(_CS6), H__NOTE(_B5), H__NOTE(_E6), H__NOTE(_GS6), H__NOTE(_A6), H__NOTE(_GS6), H__NOTE(_E6), H__NOTE(_GS6), \
+  WD_NOTE(_FS6), H__NOTE(_GS6), WD_NOTE(_B6), H__NOTE(_CS7), H__NOTE(_B6), H__NOTE(_A6), H__NOTE(_A6), H__NOTE(_GS6), \
+  H__NOTE(_GS6), H__NOTE(_FS6), H__NOTE(_FS6), H__NOTE(_GS6), WD_NOTE(_A6), Q__NOTE(_GS6), Q__NOTE(_FS6), Q__NOTE(_FS6), \
+  Q__NOTE(_E6), W__NOTE(_E6), Q__NOTE(_B5), Q__NOTE(_CS6), WD_NOTE(_E6), Q__NOTE(_E6), Q__NOTE(_FS6), W__NOTE(_GS6), \
+  H__NOTE(_A6), B__NOTE(_FS6), 
+
+#define EYES_ON_ME \
+  Q__NOTE(_A6), Q__NOTE(_G6), Q__NOTE(_FS6), Q__NOTE(_D6), Q__NOTE(_A5), Q__NOTE(_G5), Q__NOTE(_FS5), Q__NOTE(_D5), \
+  W__NOTE(_A4), W__NOTE(_D5), W__NOTE(_E5), W__NOTE(_FS5), H__NOTE(_A5), M__NOTE(_FS5, 256), H__NOTE(_E5), \
+  H__NOTE(_FS5), B__NOTE(_D5), H__NOTE(_B4), H__NOTE(_D5), BD_NOTE(_E5), H__NOTE(_A4), W__NOTE(_D5), W__NOTE(_E5), \
+  W__NOTE(_FS5), H__NOTE(_A5), BD_NOTE(_CS6), W__NOTE(_A5), H__NOTE(_CS6), H__NOTE(_D6), WD_NOTE(_B5), \
+  H__NOTE(_A5), H__NOTE(_B5), B__NOTE(_A5), WD_NOTE(_B4), W__NOTE(_CS5), WD_NOTE(_D6), H__NOTE(_D6), \
+  W__NOTE(_CS6), H__NOTE(_B5), H__NOTE(_B5), H__NOTE(_B5), B__NOTE(_A5), H__NOTE(_A5), H__NOTE(_FS5), H__NOTE(_A5), \
+  WD_NOTE(_B5), H__NOTE(_B5), H__NOTE(_A5), H__NOTE(_G5), H__NOTE(_D5), W__NOTE(_FS5), WD_NOTE(_E5), \
+  H__NOTE(_CS4), H__NOTE(_E4), H__NOTE(_A4), H__NOTE(_CS5), W__NOTE(_D5), W__NOTE(_E5), W__NOTE(_FS5), H__NOTE(_G5), \
+  H__NOTE(_A5), B__NOTE(_A5), H__NOTE(_A5), H__NOTE(_G5), H__NOTE(_D5), BD_NOTE(_FS5), W__NOTE(_E5), B__NOTE(_D5), \
+  H__NOTE(_G4), H__NOTE(_FS4), W__NOTE(_E4), BD_NOTE(_D4),
+
+#define SONG_OF_THE_ANCIENTS \
+  H__NOTE(_D6), H__NOTE(_EF6), B__NOTE(_EF6), H__NOTE(_EF6), H__NOTE(_D6), H__NOTE(_BF5), H__NOTE(_G5), BD_NOTE(_C6), H__NOTE(_D6), \
+  H__NOTE(_EF6), B__NOTE(_EF6), H__NOTE(_EF6), H__NOTE(_D6), H__NOTE(_BF5), H__NOTE(_G5), BD_NOTE(_G6), H__NOTE(_G5), \
+  H__NOTE(_AF5), B__NOTE(_G6), H__NOTE(_AF6), H__NOTE(_G6), H__NOTE(_F6), H__NOTE(_D6), H__NOTE(_D6), H__NOTE(_EF6), \
+  B__NOTE(_EF6), WD_NOTE(_G5), WD_NOTE(_BF5), H__NOTE(_D6), H__NOTE(_EF6), B__NOTE(_EF6), H__NOTE(_EF6), H__NOTE(_D6), \
+  H__NOTE(_BF5), H__NOTE(_G5), BD_NOTE(_C6), WD_NOTE(_B5), WD_NOTE(_G5), WD_NOTE(_G6), W__NOTE(_G6), H__NOTE(_AF6), \
+  W__NOTE(_G6), H__NOTE(_AF6), H__NOTE(_G6), H__NOTE(_F6), H__NOTE(_D6), H__NOTE(_D6), H__NOTE(_EF6), B__NOTE(_EF6), \
+  WD_NOTE(_E6), H__NOTE(_E6), H__NOTE(_F6), H__NOTE(_G6), H__NOTE(_BF6), H__NOTE(_AF6), W__NOTE(_AF6), H__NOTE(_C6), \
+  H__NOTE(_BF6), H__NOTE(_AF6), W__NOTE(_AF6), H__NOTE(_C6), H__NOTE(_AF6), BD_NOTE(_G6), WD_NOTE(_B5), WD_NOTE(_G6), \
+  W__NOTE(_G6), H__NOTE(_AF6), W__NOTE(_G6), H__NOTE(_AF6), H__NOTE(_G6), H__NOTE(_F6), H__NOTE(_D6), H__NOTE(_D6), \
+  H__NOTE(_EF6), B__NOTE(_EF6), WD_NOTE(_E6), H__NOTE(_E6), H__NOTE(_F6), H__NOTE(_G6), H__NOTE(_BF6), H__NOTE(_AF6), \
+  W__NOTE(_AF6), H__NOTE(_C6), H__NOTE(_AF6), H__NOTE(_G6), W__NOTE(_G6), H__NOTE(_F6), H__NOTE(_D6), BD_NOTE(_EF6), \
+  WD_NOTE(_F6), WD_NOTE(_G6), BD_NOTE(_C7), 
+
+#define NIER_AMUSEMENT_PARK \
+  H__NOTE(_D5), E__NOTE(_G6), E__NOTE(_GF6), Q__NOTE(_F6), Q__NOTE(_E6), Q__NOTE(_EF6), Q__NOTE(_DF6), Q__NOTE(_EF6), WD_NOTE(_D6), \
+  Q__NOTE(_G5), Q__NOTE(_A5), H__NOTE(_BF5), H__NOTE(_D6), H__NOTE(_G6), H__NOTE(_A6), W__NOTE(_BF6), W__NOTE(_EF7), \
+  H__NOTE(_D5), E__NOTE(_G6), E__NOTE(_GF6), Q__NOTE(_F6), Q__NOTE(_E6), Q__NOTE(_EF6), Q__NOTE(_DF6), Q__NOTE(_EF6), \
+  WD_NOTE(_D6), Q__NOTE(_G5), Q__NOTE(_A5), H__NOTE(_BF5), H__NOTE(_D6), H__NOTE(_G6), H__NOTE(_A6), W__NOTE(_BF6), \
+  H__NOTE(_EF7), H__NOTE(_D5), HD_NOTE(_A5), HD_NOTE(_BF5), B__NOTE(_D5), H__NOTE(_D5), HD_NOTE(_G5), HD_NOTE(_F5), \
+  H__NOTE(_EF5), WD_NOTE(_D5), H__NOTE(_D5), HD_NOTE(_A5), HD_NOTE(_BF5), WD_NOTE(_D5), W__NOTE(_D5), B__NOTE(_G5), \
+  H__NOTE(_D5), HD_NOTE(_A5), HD_NOTE(_BF5), B__NOTE(_D5), H__NOTE(_D5), HD_NOTE(_G5), HD_NOTE(_F5), H__NOTE(_EF5), \
+  W__NOTE(_D5), W__NOTE(_C5), W__NOTE(_BF4), W__NOTE(_C5), W__NOTE(_D5), W__NOTE(_G5), B__NOTE(_D5), B__NOTE(_E5), \
+  W__NOTE(_EF5), QD_NOTE(_C5), QD_NOTE(_D5), Q__NOTE(_EF5), H__NOTE(_G5), H__NOTE(_F5), H__NOTE(_EF5), H__NOTE(_F5), \
+  B__NOTE(_D5), B__NOTE(_BF4), W__NOTE(_EF5), QD_NOTE(_C5), QD_NOTE(_D5), Q__NOTE(_EF5), H__NOTE(_G5), H__NOTE(_F5), \
+  H__NOTE(_EF5), H__NOTE(_F5), W__NOTE(_D5), W__NOTE(_BF5), W__NOTE(_G5), W__NOTE(_D5), W__NOTE(_EF5), QD_NOTE(_C5), \
+  QD_NOTE(_D5), Q__NOTE(_EF5), H__NOTE(_G5), H__NOTE(_F5), H__NOTE(_EF5), H__NOTE(_F5), B__NOTE(_D5), B__NOTE(_BF4), \
+  B__NOTE(_C5), H__NOTE(_C5), H__NOTE(_D5), H__NOTE(_EF5), H__NOTE(_F5), WD_NOTE(_G5), H__NOTE(_C5), W__NOTE(_AF5), \
+  WD_NOTE(_G5), 
+
+#define COPIED_CITY \
+  Q__NOTE(_F6), Q__NOTE(_BF5), Q__NOTE(_EF6), Q__NOTE(_G5), Q__NOTE(_AF5), Q__NOTE(_G6), Q__NOTE(_AF6), Q__NOTE(_EF6), Q__NOTE(_BF5), \
+  Q__NOTE(_F6), Q__NOTE(_G5), Q__NOTE(_AF5), Q__NOTE(_EF6), Q__NOTE(_G5), Q__NOTE(_F5), Q__NOTE(_D6), Q__NOTE(_C6), \
+  Q__NOTE(_G5), Q__NOTE(_BF5), Q__NOTE(_EF5), Q__NOTE(_AF5), Q__NOTE(_G5), Q__NOTE(_EF5), Q__NOTE(_BF4), H__NOTE(_C5), \
+  Q__NOTE(_F5), Q__NOTE(_G5), Q__NOTE(_AF5), Q__NOTE(_EF6), Q__NOTE(_BF5), Q__NOTE(_G6), Q__NOTE(_EF6), Q__NOTE(_BF6), \
+  Q__NOTE(_AF6), Q__NOTE(_EF6), Q__NOTE(_BF5), Q__NOTE(_F6), Q__NOTE(_G5), Q__NOTE(_F5), Q__NOTE(_EF6), Q__NOTE(_BF5), \
+  Q__NOTE(_B6), Q__NOTE(_DF6), Q__NOTE(_EF6), Q__NOTE(_F6), Q__NOTE(_AF6), Q__NOTE(_EF7), Q__NOTE(_F6), Q__NOTE(_C6), \
+  Q__NOTE(_G5), Q__NOTE(_AF5), Q__NOTE(_BF5), Q__NOTE(_C6), Q__NOTE(_EF6), Q__NOTE(_G5), Q__NOTE(_EF5), Q__NOTE(_F5), \
+  Q__NOTE(_G5), Q__NOTE(_EF5), Q__NOTE(_F5), Q__NOTE(_C5), Q__NOTE(_EF5), Q__NOTE(_C5), Q__NOTE(_BF4), Q__NOTE(_G4), \
+  Q__NOTE(_F4), Q__NOTE(_G4), H__NOTE(_AF4), Q__NOTE(_C5), Q__NOTE(_EF5), Q__NOTE(_F5), Q__NOTE(_C5), Q__NOTE(_EF5), \
+  Q__NOTE(_F5), Q__NOTE(_G5), Q__NOTE(_BF5), Q__NOTE(_AF5), Q__NOTE(_G5), Q__NOTE(_EF5), Q__NOTE(_F5), Q__NOTE(_C5), \
+  Q__NOTE(_AF4), Q__NOTE(_F5), Q__NOTE(_G5), Q__NOTE(_AF5), Q__NOTE(_G5), Q__NOTE(_F5), Q__NOTE(_EF5), Q__NOTE(_F5), \
+  Q__NOTE(_G5), Q__NOTE(_BF5), Q__NOTE(_C6), Q__NOTE(_G6), Q__NOTE(_EF6), WD_NOTE(_F7), 
+
+#define VAGUE_HOPE_COLD_RAIN \
+  HD_NOTE(_D6), HD_NOTE(_E6), HD_NOTE(_CS6), HD_NOTE(_D6), HD_NOTE(_B5), Q__NOTE(_B5), Q__NOTE(_CS6), Q__NOTE(_D6), WD_NOTE(_A6), \
+  HD_NOTE(_FS6), HD_NOTE(_G6), HD_NOTE(_D6), HD_NOTE(_E6), HD_NOTE(_FS6), Q__NOTE(_D5), Q__NOTE(_CS5), Q__NOTE(_A4), \
+  W__NOTE(_FS4), H__NOTE(_D6), HD_NOTE(_E6), HD_NOTE(_FS6), HD_NOTE(_CS6), HD_NOTE(_E6), HD_NOTE(_D6), Q__NOTE(_CS6), \
+  Q__NOTE(_D6), Q__NOTE(_E6), W__NOTE(_FS6), H__NOTE(_CS6), WD_NOTE(_D6), HD_NOTE(_D6), Q__NOTE(_D6), H__NOTE(_E6), \
+  WD_NOTE(_CS6), HD_NOTE(_AS5), HD_NOTE(_B5), HD_NOTE(_B5), Q__NOTE(_B4), Q__NOTE(_CS5), Q__NOTE(_D5), HD_NOTE(_A5), \
+  Q__NOTE(_B5), Q__NOTE(_CS6), Q__NOTE(_A6), HD_NOTE(_FS6), Q__NOTE(_D5), Q__NOTE(_CS5), Q__NOTE(_A4), H__NOTE(_FS4), \
+  HD_NOTE(_FS6), HD_NOTE(_D6), HD_NOTE(_E6), HD_NOTE(_A6), HD_NOTE(_FS6), Q__NOTE(_CS5), Q__NOTE(_D5), Q__NOTE(_A5), \
+  HD_NOTE(_FS5), Q__NOTE(_FS6), Q__NOTE(_FS6), Q__NOTE(_GS6), HD_NOTE(_A6), Q__NOTE(_B6), H__NOTE(_A6), H__NOTE(_GS6), \
+  H__NOTE(_FS6), H__NOTE(_E6), H__NOTE(_CS6), H__NOTE(_FS6), E__NOTE(_FS5), E__NOTE(_CS5), Q__NOTE(_B4), H__NOTE(_AS4), \
+  W__NOTE(_FS5), HD_NOTE(_FS6), HD_NOTE(_B5), H__NOTE(_D6), H__NOTE(_CS6), H__NOTE(_E6), HD_NOTE(_A6), HD_NOTE(_E6), \
+  W__NOTE(_D6), Q__NOTE(_CS6), Q__NOTE(_D6), HD_NOTE(_E6), HD_NOTE(_FS6), WD_NOTE(_B6), HD_NOTE(_E6), HD_NOTE(_FS6), \
+  HD_NOTE(_B5), Q__NOTE(_B5), Q__NOTE(_B5), Q__NOTE(_CS6), H__NOTE(_D6), H__NOTE(_E6), H__NOTE(_FS6), HD_NOTE(_E6), \
+  HD_NOTE(_CS6), H__NOTE(_FS6), H__NOTE(_A6), H__NOTE(_B6), W__NOTE(_A6), H__NOTE(_FS6), BD_NOTE(_B6), 
+
+#define KAINE_SALVATION \
+  BD_NOTE(_D5), W__NOTE(_BF4), W__NOTE(_C5), W__NOTE(_F5), BD_NOTE(_D5), BD_NOTE(_BF4), BD_NOTE(_C5), W__NOTE(_BF4), W__NOTE(_C5), \
+  W__NOTE(_D5), BD_NOTE(_C5), BD_NOTE(_F4), BD_NOTE(_D5), W__NOTE(_BF4), W__NOTE(_C5), W__NOTE(_F5), BD_NOTE(_D5), \
+  BD_NOTE(_BF4), WD_NOTE(_EF5), WD_NOTE(_BF4), W__NOTE(_A4), W__NOTE(_BF4), W__NOTE(_C5), B__NOTE(_C5), H__NOTE(_B4), \
+  H__NOTE(_C5), BD_NOTE(_D5), WD_NOTE(_G5), W__NOTE(_G5), H__NOTE(_FS5), H__NOTE(_G5), H__NOTE(_A5), H__NOTE(_B5), \
+  H__NOTE(_A5), H__NOTE(_G5), H__NOTE(_FS5), WD_NOTE(_G5), W__NOTE(_G5), H__NOTE(_D6), H__NOTE(_C6), H__NOTE(_B5), \
+  H__NOTE(_A5), WD_NOTE(_G5), WD_NOTE(_G5), W__NOTE(_G5), H__NOTE(_FS5), H__NOTE(_G5), H__NOTE(_A5), H__NOTE(_B5), \
+  H__NOTE(_A5), H__NOTE(_G5), H__NOTE(_FS5), W__NOTE(_G5), H__NOTE(_B5), H__NOTE(_A5), H__NOTE(_G5), H__NOTE(_FS5), \
+  BD_NOTE(_E5), WD_NOTE(_G5), W__NOTE(_G5), H__NOTE(_FS5), H__NOTE(_G5), H__NOTE(_A5), H__NOTE(_B5), H__NOTE(_A5), \
+  H__NOTE(_G5), H__NOTE(_FS5), WD_NOTE(_G5), W__NOTE(_G5), H__NOTE(_D6), H__NOTE(_C6), H__NOTE(_B5), H__NOTE(_A5), \
+  WD_NOTE(_G5), WD_NOTE(_G5), W__NOTE(_G5), H__NOTE(_FS5), H__NOTE(_G5), H__NOTE(_A5), H__NOTE(_B5), H__NOTE(_A5), \
+  H__NOTE(_G5), H__NOTE(_FS5), W__NOTE(_G5), H__NOTE(_D6), WD_NOTE(_D6), W__NOTE(_F5), H__NOTE(_C6), H__NOTE(_C6), \
+  H__NOTE(_BF5), H__NOTE(_A5), WD_NOTE(_G5), WD_NOTE(_F5), WD_NOTE(_G5), WD_NOTE(_A5), BD_NOTE(_G5),
+
+#define WEIGHT_OF_THE_WORLD \
+  H__NOTE(_B5), Q__NOTE(_C6), Q__NOTE(_C6), Q__NOTE(_B5), H__NOTE(_C6), H__NOTE(_G6), WD_NOTE(_G6), H__NOTE(_B5), Q__NOTE(_C6), \
+  Q__NOTE(_C6), Q__NOTE(_B5), H__NOTE(_C6), H__NOTE(_G6), H__NOTE(_G6), Q__NOTE(_A6), W__NOTE(_G6), Q__NOTE(_C6), \
+  Q__NOTE(_D6), H__NOTE(_E6), Q__NOTE(_F6), H__NOTE(_E6), H__NOTE(_F6), HD_NOTE(_E6), H__NOTE(_D6), H__NOTE(_C6), \
+  H__NOTE(_D6), WD_NOTE(_D6), Q__NOTE(_C6), Q__NOTE(_B5), WD_NOTE(_B5), H__NOTE(_B5), Q__NOTE(_C6), Q__NOTE(_C6), \
+  Q__NOTE(_B5), H__NOTE(_C6), H__NOTE(_G6), WD_NOTE(_G6), H__NOTE(_B5), Q__NOTE(_C6), Q__NOTE(_C6), Q__NOTE(_B5), \
+  H__NOTE(_C6), H__NOTE(_G6), H__NOTE(_G6), Q__NOTE(_A6), W__NOTE(_G6), Q__NOTE(_C6), Q__NOTE(_D6), H__NOTE(_E6), \
+  Q__NOTE(_F6), H__NOTE(_E6), H__NOTE(_F6), HD_NOTE(_E6), H__NOTE(_D6), H__NOTE(_C6), H__NOTE(_D6), BD_NOTE(_D6), \
+  Q__NOTE(_E6), Q__NOTE(_D6), Q__NOTE(_C6), Q__NOTE(_B5), H__NOTE(_C6), Q__NOTE(_C6), H__NOTE(_C6), HD_NOTE(_C6), \
+  H__NOTE(_B5), H__NOTE(_C6), H__NOTE(_E6), H__NOTE(_G6), WD_NOTE(_G6), Q__NOTE(_C6), B__NOTE(_C6), H__NOTE(_B6), \
+  Q__NOTE(_C7), BD_NOTE(_C7), 
+
 #endif
index 0b2e408a43f238e5b5ad7d04942f12a1b4649667..c489e14073037c73883a26d5f8a52e3f8d5040f5 100644 (file)
         #define PINC_ADDRESS 0x3
         #define PINB_ADDRESS 0x6
         #define PINA_ADDRESS 0x9
+    #elif defined(__AVR_ATmega328P__)
+        #define ADDRESS_BASE 0x00
+        #define PINB_ADDRESS 0x3
+        #define PINC_ADDRESS 0x6
+        #define PIND_ADDRESS 0x9
     #else
         #error "Pins are not defined"
     #endif
diff --git a/quantum/debounce/debounce_eager_pk.c b/quantum/debounce/debounce_eager_pk.c
deleted file mode 100644 (file)
index b8ad09c..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-Copyright 2017 Alex Ong<the.onga@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/>.
-*/
-
-/*
-Basic per-key algorithm. Uses an 8-bit counter per key.
-After pressing a key, it immediately changes state, and sets a counter.
-No further inputs are accepted until DEBOUNCE milliseconds have occurred.
-*/
-
-#include "matrix.h"
-#include "timer.h"
-#include "quantum.h"
-#include <stdlib.h>
-
-#ifndef DEBOUNCE
-  #define DEBOUNCE 5
-#endif
-
-
-#if (MATRIX_COLS <= 8)
-#    define ROW_SHIFTER ((uint8_t)1)
-#elif (MATRIX_COLS <= 16)
-#    define ROW_SHIFTER ((uint16_t)1)
-#elif (MATRIX_COLS <= 32)
-#    define ROW_SHIFTER  ((uint32_t)1)
-#endif
-
-
-
-#define debounce_counter_t uint8_t
-
-static debounce_counter_t *debounce_counters;
-
-#define DEBOUNCE_ELAPSED 251
-#define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1)
-
-void update_debounce_counters(uint8_t num_rows, uint8_t current_time);
-void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time);
-
-//we use num_rows rather than MATRIX_ROWS to support split keyboards
-void debounce_init(uint8_t num_rows)
-{
-  debounce_counters = (debounce_counter_t*)malloc(num_rows*MATRIX_COLS * sizeof(debounce_counter_t));
-  int i = 0;
-  for (uint8_t r = 0; r < num_rows; r++)
-  {
-    for (uint8_t c = 0; c < MATRIX_COLS; c++)
-    {
-      debounce_counters[i++] = DEBOUNCE_ELAPSED;
-    }
-  }
-}
-
-void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
-{
-  uint8_t current_time = timer_read() % MAX_DEBOUNCE;
-  update_debounce_counters(num_rows, current_time);
-  transfer_matrix_values(raw, cooked, num_rows, current_time);
-}
-
-//If the current time is > debounce counter, set the counter to enable input.
-void update_debounce_counters(uint8_t num_rows, uint8_t current_time)
-{
-  debounce_counter_t *debounce_pointer = debounce_counters;
-  for (uint8_t row = 0; row < num_rows; row++)
-  {
-    for (uint8_t col = 0; col < MATRIX_COLS; col++)
-    {
-      if (*debounce_pointer != DEBOUNCE_ELAPSED)
-      {
-        if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= DEBOUNCE) {
-          *debounce_pointer = DEBOUNCE_ELAPSED;
-        }
-      }
-      debounce_pointer++;
-    }
-  }
-}
-
-// upload from raw_matrix to final matrix;
-void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time)
-{
-  debounce_counter_t *debounce_pointer = debounce_counters;
-  for (uint8_t row = 0; row < num_rows; row++)
-  {
-    matrix_row_t existing_row = cooked[row]; 
-    matrix_row_t raw_row = raw[row];
-
-    for (uint8_t col = 0; col < MATRIX_COLS; col++)
-    {
-      matrix_row_t col_mask = (ROW_SHIFTER << col);
-      bool final_value = raw_row & col_mask;
-      bool existing_value = existing_row & col_mask;
-      if (*debounce_pointer == DEBOUNCE_ELAPSED &&
-          (existing_value != final_value))
-      {
-        *debounce_pointer = current_time;
-        existing_row ^= col_mask; //flip the bit.
-      }
-      debounce_pointer++;
-    }
-    cooked[row] = existing_row;
-  }  
-}
-
-bool debounce_active(void)
-{
-  return true;
-}
-
diff --git a/quantum/debounce/debounce_sym_g.c b/quantum/debounce/debounce_sym_g.c
deleted file mode 100644 (file)
index c8ab34e..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-Copyright 2017 Alex Ong<the.onga@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/>.
-*/
-
-/*
-Basic global debounce algorithm. Used in 99% of keyboards at time of implementation
-When no state changes have occured for DEBOUNCE milliseconds, we push the state.
-*/
-#include "matrix.h"
-#include "timer.h"
-#include "quantum.h"
-#ifndef DEBOUNCE
-  #define DEBOUNCE 5
-#endif
-
-void debounce_init(uint8_t num_rows) {}
-static bool debouncing = false;
-
-#if DEBOUNCE > 0
-static uint16_t debouncing_time;
-void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
-{
-  if (changed) {
-    debouncing = true;
-    debouncing_time = timer_read();
-  }
-
-  if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
-    for (int i = 0; i < num_rows; i++) {
-      cooked[i] = raw[i];
-    }
-    debouncing = false;
-  }
-}
-#else //no debouncing.
-void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
-{
-  for (int i = 0; i < num_rows; i++) {
-    cooked[i] = raw[i];
-  }
-}
-#endif
-
-bool debounce_active(void) {
-  return debouncing;
-}
-
diff --git a/quantum/debounce/eager_pk.c b/quantum/debounce/eager_pk.c
new file mode 100644 (file)
index 0000000..b8ad09c
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+Copyright 2017 Alex Ong<the.onga@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/>.
+*/
+
+/*
+Basic per-key algorithm. Uses an 8-bit counter per key.
+After pressing a key, it immediately changes state, and sets a counter.
+No further inputs are accepted until DEBOUNCE milliseconds have occurred.
+*/
+
+#include "matrix.h"
+#include "timer.h"
+#include "quantum.h"
+#include <stdlib.h>
+
+#ifndef DEBOUNCE
+  #define DEBOUNCE 5
+#endif
+
+
+#if (MATRIX_COLS <= 8)
+#    define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+#    define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+#    define ROW_SHIFTER  ((uint32_t)1)
+#endif
+
+
+
+#define debounce_counter_t uint8_t
+
+static debounce_counter_t *debounce_counters;
+
+#define DEBOUNCE_ELAPSED 251
+#define MAX_DEBOUNCE (DEBOUNCE_ELAPSED - 1)
+
+void update_debounce_counters(uint8_t num_rows, uint8_t current_time);
+void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time);
+
+//we use num_rows rather than MATRIX_ROWS to support split keyboards
+void debounce_init(uint8_t num_rows)
+{
+  debounce_counters = (debounce_counter_t*)malloc(num_rows*MATRIX_COLS * sizeof(debounce_counter_t));
+  int i = 0;
+  for (uint8_t r = 0; r < num_rows; r++)
+  {
+    for (uint8_t c = 0; c < MATRIX_COLS; c++)
+    {
+      debounce_counters[i++] = DEBOUNCE_ELAPSED;
+    }
+  }
+}
+
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
+{
+  uint8_t current_time = timer_read() % MAX_DEBOUNCE;
+  update_debounce_counters(num_rows, current_time);
+  transfer_matrix_values(raw, cooked, num_rows, current_time);
+}
+
+//If the current time is > debounce counter, set the counter to enable input.
+void update_debounce_counters(uint8_t num_rows, uint8_t current_time)
+{
+  debounce_counter_t *debounce_pointer = debounce_counters;
+  for (uint8_t row = 0; row < num_rows; row++)
+  {
+    for (uint8_t col = 0; col < MATRIX_COLS; col++)
+    {
+      if (*debounce_pointer != DEBOUNCE_ELAPSED)
+      {
+        if (TIMER_DIFF(current_time, *debounce_pointer, MAX_DEBOUNCE) >= DEBOUNCE) {
+          *debounce_pointer = DEBOUNCE_ELAPSED;
+        }
+      }
+      debounce_pointer++;
+    }
+  }
+}
+
+// upload from raw_matrix to final matrix;
+void transfer_matrix_values(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, uint8_t current_time)
+{
+  debounce_counter_t *debounce_pointer = debounce_counters;
+  for (uint8_t row = 0; row < num_rows; row++)
+  {
+    matrix_row_t existing_row = cooked[row]; 
+    matrix_row_t raw_row = raw[row];
+
+    for (uint8_t col = 0; col < MATRIX_COLS; col++)
+    {
+      matrix_row_t col_mask = (ROW_SHIFTER << col);
+      bool final_value = raw_row & col_mask;
+      bool existing_value = existing_row & col_mask;
+      if (*debounce_pointer == DEBOUNCE_ELAPSED &&
+          (existing_value != final_value))
+      {
+        *debounce_pointer = current_time;
+        existing_row ^= col_mask; //flip the bit.
+      }
+      debounce_pointer++;
+    }
+    cooked[row] = existing_row;
+  }  
+}
+
+bool debounce_active(void)
+{
+  return true;
+}
+
index 1a77d44df53aea88f5147c58e2417823e80dcd71..5b318d845e9177fcbc2ae98aa5c234547754e8ec 100644 (file)
@@ -6,10 +6,10 @@ Here are a few ideas
  * Per key - one timer per key
  * Per row - one timer per row
 
-2) Eager vs symmetric vs assymetric
+2) Eager vs symmetric vs asymmetric
  * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
  * Symmetric - wait for no changes for DEBOUNCE ms before reporting change
- * Assymetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up.
+ * Asymmetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up.
 
 3) Timestamp vs cycles
  * old old old code waits n cycles, decreasing count by one each matrix_scan
@@ -19,10 +19,10 @@ Here are a few ideas
 The default algorithm is symmetric and global.
 Here are a few that could be implemented:
 
-debounce_sym_g.c
-debounce_sym_pk.c 
-debounce_sym_pr.c 
-debounce_sym_pr_cycles.c //currently used in ergo-dox
-debounce_eager_g.c
-debounce_eager_pk.c
-debounce_eager_pr.c //could be used in ergo-dox!
+sym_g.c
+sym_pk.c
+sym_pr.c
+sym_pr_cycles.c //currently used in ergo-dox
+eager_g.c
+eager_pk.c
+eager_pr.c //could be used in ergo-dox!
diff --git a/quantum/debounce/sym_g.c b/quantum/debounce/sym_g.c
new file mode 100644 (file)
index 0000000..c8ab34e
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+Copyright 2017 Alex Ong<the.onga@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/>.
+*/
+
+/*
+Basic global debounce algorithm. Used in 99% of keyboards at time of implementation
+When no state changes have occured for DEBOUNCE milliseconds, we push the state.
+*/
+#include "matrix.h"
+#include "timer.h"
+#include "quantum.h"
+#ifndef DEBOUNCE
+  #define DEBOUNCE 5
+#endif
+
+void debounce_init(uint8_t num_rows) {}
+static bool debouncing = false;
+
+#if DEBOUNCE > 0
+static uint16_t debouncing_time;
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
+{
+  if (changed) {
+    debouncing = true;
+    debouncing_time = timer_read();
+  }
+
+  if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
+    for (int i = 0; i < num_rows; i++) {
+      cooked[i] = raw[i];
+    }
+    debouncing = false;
+  }
+}
+#else //no debouncing.
+void debounce(matrix_row_t raw[], matrix_row_t cooked[], uint8_t num_rows, bool changed)
+{
+  for (int i = 0; i < num_rows; i++) {
+    cooked[i] = raw[i];
+  }
+}
+#endif
+
+bool debounce_active(void) {
+  return debouncing;
+}
+
index 9d2d331ce549b4400dbb38b83883af56ea23e9f5..eef739a14a023676841d378945ad529cb18e13e9 100644 (file)
@@ -29,10 +29,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "backlight.h"
 #include "quantum.h"
 
-#ifdef SPLIT_KEYBOARD
-    #include "split_flags.h"
-#endif
-
 #ifdef MIDI_ENABLE
        #include "process_midi.h"
 #endif
@@ -138,39 +134,21 @@ action_t action_for_key(uint8_t layer, keypos_t key)
     #ifdef BACKLIGHT_ENABLE
         case BL_ON:
             action.code = ACTION_BACKLIGHT_ON();
-            #ifdef SPLIT_KEYBOARD
-                BACKLIT_DIRTY = true;
-            #endif
             break;
         case BL_OFF:
             action.code = ACTION_BACKLIGHT_OFF();
-            #ifdef SPLIT_KEYBOARD
-                BACKLIT_DIRTY = true;
-            #endif
             break;
         case BL_DEC:
             action.code = ACTION_BACKLIGHT_DECREASE();
-            #ifdef SPLIT_KEYBOARD
-                BACKLIT_DIRTY = true;
-            #endif
             break;
         case BL_INC:
             action.code = ACTION_BACKLIGHT_INCREASE();
-            #ifdef SPLIT_KEYBOARD
-                BACKLIT_DIRTY = true;
-            #endif
             break;
         case BL_TOGG:
             action.code = ACTION_BACKLIGHT_TOGGLE();
-            #ifdef SPLIT_KEYBOARD
-                BACKLIT_DIRTY = true;
-            #endif
             break;
         case BL_STEP:
             action.code = ACTION_BACKLIGHT_STEP();
-            #ifdef SPLIT_KEYBOARD
-                BACKLIT_DIRTY = true;
-            #endif
             break;
     #endif
     #ifdef SWAP_HANDS_ENABLE
index b64feb7003b19faa3351d89e351481787d11cc09..d0a9cf2324d42c648f4eaa8787308dfdbcad0095 100644 (file)
@@ -118,6 +118,9 @@ void unicode_input_finish(void) {
   case UC_WIN:
     unregister_code(KC_LALT);
     break;
+  case UC_WINC:
+    tap_code(KC_ENTER);
+    break;
   }
 
   set_mods(saved_mods); // Reregister previously set mods
index 46d404029f8bee2bc91672464da5fe39817ef91b..8316d1f06a3a28d2221798c4d9d650892ab73f26 100644 (file)
@@ -360,9 +360,6 @@ bool process_record_quantum(keyrecord_t *record) {
     if (!record->event.pressed) {
     #endif
       rgblight_toggle();
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_MODE_FORWARD:
@@ -374,9 +371,6 @@ bool process_record_quantum(keyrecord_t *record) {
       else {
         rgblight_step();
       }
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_MODE_REVERSE:
@@ -388,9 +382,6 @@ bool process_record_quantum(keyrecord_t *record) {
       else {
         rgblight_step_reverse();
       }
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_HUI:
@@ -401,9 +392,6 @@ bool process_record_quantum(keyrecord_t *record) {
     if (!record->event.pressed) {
     #endif
       rgblight_increase_hue();
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_HUD:
@@ -414,9 +402,6 @@ bool process_record_quantum(keyrecord_t *record) {
     if (!record->event.pressed) {
     #endif
       rgblight_decrease_hue();
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_SAI:
@@ -427,9 +412,6 @@ bool process_record_quantum(keyrecord_t *record) {
     if (!record->event.pressed) {
     #endif
       rgblight_increase_sat();
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_SAD:
@@ -440,9 +422,6 @@ bool process_record_quantum(keyrecord_t *record) {
     if (!record->event.pressed) {
     #endif
       rgblight_decrease_sat();
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_VAI:
@@ -453,9 +432,6 @@ bool process_record_quantum(keyrecord_t *record) {
     if (!record->event.pressed) {
     #endif
       rgblight_increase_val();
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_VAD:
@@ -466,9 +442,6 @@ bool process_record_quantum(keyrecord_t *record) {
     if (!record->event.pressed) {
     #endif
       rgblight_decrease_val();
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_SPI:
@@ -484,9 +457,6 @@ bool process_record_quantum(keyrecord_t *record) {
   case RGB_MODE_PLAIN:
     if (record->event.pressed) {
       rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
-      #ifdef SPLIT_KEYBOARD
-          RGB_DIRTY = true;
-      #endif
     }
     return false;
   case RGB_MODE_BREATHE:
index d2c5862f881cf2d6f57b23f7f410b6294a0bb6ce..c12ac9ab8aff007c89080c120e73aa5c992ac49c 100644 (file)
     #endif
 #endif
 
-#ifdef SPLIT_KEYBOARD
-    #include "split_flags.h"
-#endif
-
 #ifdef RGB_MATRIX_ENABLE
     #include "rgb_matrix.h"
 #endif
index 2ed36304dca5c929acef0e9f15d655835177f02f..56a97e3c7d5b61f44ca400b8d223e82c72e07ebf 100644 (file)
@@ -221,6 +221,20 @@ void rgb_matrix_solid_reactive(void) {
        }
 }
 
+void rgb_matrix_solid_reactive_simple(void)
+{
+    HSV hsv = {.h = rgb_matrix_config.hue, .s = rgb_matrix_config.sat, .v = rgb_matrix_config.val};
+    RGB rgb;
+    
+    for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+        uint16_t offset2 = g_key_hit[i] << 2;
+        offset2 = (offset2 <= 255) ? (255 - offset2) : 0;
+        hsv.v = offset2 * rgb_matrix_config.val / RGB_MATRIX_MAXIMUM_BRIGHTNESS;
+        rgb = hsv_to_rgb(hsv);
+        rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+    }
+}
+
 // alphas = color1, mods = color2
 void rgb_matrix_alphas_mods(void) {
 
@@ -755,6 +769,11 @@ void rgb_matrix_task(void) {
                     rgb_matrix_solid_reactive();
                     break;
             #endif
+            #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+                case RGB_MATRIX_SOLID_REACTIVE_SIMPLE:
+                    rgb_matrix_solid_reactive_simple();
+                    break;
+            #endif
             #ifndef DISABLE_RGB_MATRIX_SPLASH
                 case RGB_MATRIX_SPLASH:
                     rgb_matrix_splash();
index e43532d11e77edf6781a0fc3fc448c1bfae01b27..e6acd2d4b5125e4fb9b8428de204cedf0843d08b 100644 (file)
@@ -110,6 +110,9 @@ enum rgb_matrix_effects {
    #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE
        RGB_MATRIX_SOLID_REACTIVE,
    #endif
+   #ifndef DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+       RGB_MATRIX_SOLID_REACTIVE_SIMPLE,
+   #endif
    #ifndef DISABLE_RGB_MATRIX_SPLASH
        RGB_MATRIX_SPLASH,
    #endif
index 52e0be8ba01604e7a63ef8b3fa33eaedd3d29031..08515564bc3049343336c803c32ff8605ab6ba19 100644 (file)
@@ -51,6 +51,10 @@ static inline int is_static_effect(uint8_t mode) {
 #define MIN(a,b) (((a)<(b))?(a):(b))
 #define MAX(a,b) (((a)>(b))?(a):(b))
 
+#ifdef RGBLIGHT_LED_MAP
+const uint8_t led_map[] PROGMEM = RGBLIGHT_LED_MAP;
+#endif
+
 #ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
 __attribute__ ((weak))
 const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
@@ -62,6 +66,15 @@ bool is_rgblight_initialized = false;
 LED_TYPE led[RGBLED_NUM];
 bool rgblight_timer_enabled = false;
 
+static uint8_t clipping_start_pos = 0;
+static uint8_t clipping_num_leds = RGBLED_NUM;
+
+void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) {
+  clipping_start_pos = start_pos;
+  clipping_num_leds = num_leds;
+}
+
+
 void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
   uint8_t r = 0, g = 0, b = 0, base, color;
 
@@ -225,11 +238,14 @@ void rgblight_init(void) {
 
 }
 
+uint32_t rgblight_read_dword(void) {
+  return rgblight_config.raw;
+}
+
 void rgblight_update_dword(uint32_t dword) {
   rgblight_config.raw = dword;
-  eeconfig_update_rgblight(rgblight_config.raw);
   if (rgblight_config.enable)
-    rgblight_mode(rgblight_config.mode);
+    rgblight_mode_noeeprom(rgblight_config.mode);
   else {
 #ifdef RGBLIGHT_USE_TIMER
       rgblight_timer_disable();
@@ -614,7 +630,7 @@ void rgblight_sethsv_at(uint16_t hue, uint8_t sat, uint8_t val, uint8_t index) {
   || defined(RGBLIGHT_EFFECT_SNAKE) || defined(RGBLIGHT_EFFECT_KNIGHT)
 
 static uint8_t get_interval_time(const uint8_t* default_interval_address, uint8_t velocikey_min, uint8_t velocikey_max) {
-  return 
+  return
 #ifdef VELOCIKEY_ENABLE
     velocikey_enabled() ? velocikey_match_speed(velocikey_min, velocikey_max) :
 #endif
@@ -661,11 +677,20 @@ void rgblight_sethsv_slave(uint16_t hue, uint8_t sat, uint8_t val) {
 
 #ifndef RGBLIGHT_CUSTOM_DRIVER
 void rgblight_set(void) {
+  LED_TYPE *start_led = led + clipping_start_pos;
+  uint16_t num_leds = clipping_num_leds;
   if (rgblight_config.enable) {
+    #ifdef RGBLIGHT_LED_MAP
+      LED_TYPE led0[RGBLED_NUM];
+      for(uint8_t i = 0; i < RGBLED_NUM; i++) {
+          led0[i] = led[pgm_read_byte(&led_map[i])];
+      }
+      start_led = led0 + clipping_start_pos;
+    #endif
     #ifdef RGBW
-      ws2812_setleds_rgbw(led, RGBLED_NUM);
+      ws2812_setleds_rgbw(start_led, num_leds);
     #else
-      ws2812_setleds(led, RGBLED_NUM);
+      ws2812_setleds(start_led, num_leds);
     #endif
   } else {
     for (uint8_t i = 0; i < RGBLED_NUM; i++) {
@@ -674,9 +699,9 @@ void rgblight_set(void) {
       led[i].b = 0;
     }
     #ifdef RGBW
-      ws2812_setleds_rgbw(led, RGBLED_NUM);
+      ws2812_setleds_rgbw(start_led, num_leds);
     #else
-      ws2812_setleds(led, RGBLED_NUM);
+      ws2812_setleds(start_led, num_leds);
     #endif
   }
 }
@@ -796,7 +821,7 @@ void rgblight_effect_breathing(uint8_t interval) {
   float val;
 
   uint8_t interval_time = get_interval_time(&RGBLED_BREATHING_INTERVALS[interval], 1, 100);
-  
+
   if (timer_elapsed(last_timer) < interval_time) {
     return;
   }
index f92388c96104285698eb9652412a3bb69096223f..1769f719d99f4344fb3ee96ffaca59a6c12d805a 100644 (file)
@@ -174,6 +174,7 @@ void rgblight_step_reverse(void);
 uint8_t rgblight_get_mode(void);
 void rgblight_mode(uint8_t mode);
 void rgblight_set(void);
+uint32_t rgblight_read_dword(void);
 void rgblight_update_dword(uint32_t dword);
 void rgblight_increase_hue(void);
 void rgblight_decrease_hue(void);
@@ -196,6 +197,7 @@ void rgblight_setrgb_master(uint8_t r, uint8_t g, uint8_t b);
 void rgblight_setrgb_slave(uint8_t r, uint8_t g, uint8_t b);
 void rgblight_sethsv_master(uint16_t hue, uint8_t sat, uint8_t val);
 void rgblight_sethsv_slave(uint16_t hue, uint8_t sat, uint8_t val);
+void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds);
 
 uint32_t eeconfig_read_rgblight(void);
 void eeconfig_update_rgblight(uint32_t val);
diff --git a/quantum/split_common/i2c.c b/quantum/split_common/i2c.c
deleted file mode 100644 (file)
index 45e958b..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-#include "split_flags.h"
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK)  =>  # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
-  uint16_t lim = 0;
-  while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
-    lim++;
-
-  // easier way, but will wait slightly longer
-  // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
-  // no prescaler
-  TWSR = 0;
-  // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
-  // Check datasheets for more info.
-  TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-//          1 => error
-uint8_t i2c_master_start(uint8_t address) {
-  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
-  i2c_delay();
-
-  // check that we started successfully
-  if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
-    return 1;
-
-  TWDR = address;
-  TWCR = (1<<TWINT) | (1<<TWEN);
-
-  i2c_delay();
-
-  if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
-    return 1; // slave did not acknowledge
-  else
-    return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
-  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
-  uint16_t lim = 0;
-  while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
-    lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-//         1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
-  TWDR = data;
-  TWCR = (1<<TWINT) | (1<<TWEN);
-
-  i2c_delay();
-
-  // check if the slave acknowledged us
-  return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-uint8_t i2c_master_write_data(void *const TXdata, uint8_t dataLen) {
-    
-    uint8_t *data = (uint8_t *)TXdata;
-    int err = 0;
-    
-    for (int i = 0; i < dataLen; i++) {
-        err = i2c_master_write(data[i]);
-        
-        if ( err )
-            return err;
-    }
-    
-    return err;
-    
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
-  TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
-  i2c_delay();
-  return TWDR;
-}
-
-void i2c_reset_state(void) {
-  TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
-  TWAR = address << 0; // slave i2c address
-  // TWEN  - twi enable
-  // TWEA  - enable address acknowledgement
-  // TWINT - twi interrupt flag
-  // TWIE  - enable the twi interrupt
-  TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
-  uint8_t ack = 1;
-  switch(TW_STATUS) {
-    case TW_SR_SLA_ACK:
-      // this device has been addressed as a slave receiver
-      slave_has_register_set = false;
-      break;
-
-    case TW_SR_DATA_ACK:
-      // this device has received data as a slave receiver
-      // The first byte that we receive in this transaction sets the location
-      // of the read/write location of the slaves memory that it exposes over
-      // i2c.  After that, bytes will be written at slave_buffer_pos, incrementing
-      // slave_buffer_pos after each write.
-      if(!slave_has_register_set) {
-        slave_buffer_pos = TWDR;
-        // don't acknowledge the master if this memory loctaion is out of bounds
-        if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
-          ack = 0;
-          slave_buffer_pos = 0;
-        }  
-        
-        slave_has_register_set = true;
-      } else {      
-        i2c_slave_buffer[slave_buffer_pos] = TWDR;
-        
-        if ( slave_buffer_pos == I2C_BACKLIT_START) {
-            BACKLIT_DIRTY = true;
-        } else if ( slave_buffer_pos == (I2C_RGB_START+3)) {
-            RGB_DIRTY = true;
-        }
-        
-        BUFFER_POS_INC();
-      }
-      break;
-
-    case TW_ST_SLA_ACK:
-    case TW_ST_DATA_ACK:
-      // master has addressed this device as a slave transmitter and is
-      // requesting data.
-      TWDR = i2c_slave_buffer[slave_buffer_pos];
-      BUFFER_POS_INC();
-      break;
-
-    case TW_BUS_ERROR: // something went wrong, reset twi state
-      TWCR = 0;
-    default:
-      break;
-  }
-  // Reset everything, so we are ready for the next TWI interrupt
-  TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
diff --git a/quantum/split_common/i2c.h b/quantum/split_common/i2c.h
deleted file mode 100644 (file)
index 91e8e96..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-// Address location defines (Keymap should be last, as it's size is dynamic)
-#define I2C_BACKLIT_START   0x00
-// Need 4 bytes for RGB (32 bit)
-#define I2C_RGB_START       0x01
-#define I2C_KEYMAP_START    0x06
-
-// Slave buffer (8bit per)
-// Rows per hand + backlit space + rgb space
-// TODO : Make this dynamically sized
-#define SLAVE_BUFFER_SIZE 0x20
-
-// i2c SCL clock frequency
-#ifndef SCL_CLOCK
-#define SCL_CLOCK  100000L
-#endif
-
-// Support 8bits right now (8 cols) will need to edit to take higher (code exists in delta split?)
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_write_data(void *const TXdata, uint8_t dataLen);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
-  return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
-  return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack)  (ack) ? i2c_readAck() : i2c_readNak();
index f2a277c69f3a698de4ecb16220617e264960172c..dcb96254f583a15e844e542115415ce75e3497db 100644 (file)
@@ -25,7 +25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "matrix.h"
 #include "split_util.h"
 #include "config.h"
-#include "split_flags.h"
 #include "quantum.h"
 #include "debounce.h"
 #include "transport.h"
diff --git a/quantum/split_common/split_flags.c b/quantum/split_common/split_flags.c
deleted file mode 100644 (file)
index 1f5825d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "split_flags.h"
-
-volatile bool RGB_DIRTY = false;
-
-volatile bool BACKLIT_DIRTY = false;
\ No newline at end of file
diff --git a/quantum/split_common/split_flags.h b/quantum/split_common/split_flags.h
deleted file mode 100644 (file)
index aaac474..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma once
-
-#include <stdbool.h>
-#include <stdint.h>
-
-/**
-* Global Flags
-**/
-
-//RGB Stuff
-extern volatile bool RGB_DIRTY;
-
-
-//Backlight Stuff
-extern volatile bool BACKLIT_DIRTY;
index 5095cb8fdce18a72cbfae1411dc2b62aa03c7bce..09a307b8ed73c60468c5d500fa44ca81b0b19530 100644 (file)
@@ -3,7 +3,6 @@
 #include "keyboard.h"
 #include "config.h"
 #include "timer.h"
-#include "split_flags.h"
 #include "transport.h"
 #include "quantum.h"
 
 #   include "eeconfig.h"
 #endif
 
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT)
+#include "rgblight.h"
+#endif
+
 volatile bool isLeftHand = true;
 
 __attribute__((weak))
 bool is_keyboard_left(void) {
-  #ifdef SPLIT_HAND_PIN
+  #if defined(SPLIT_HAND_PIN)
     // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand
     setPinInput(SPLIT_HAND_PIN);
     return readPin(SPLIT_HAND_PIN);
-  #else
-    #ifdef EE_HANDS
-      return eeprom_read_byte(EECONFIG_HANDEDNESS);
-    #else
-      #ifdef MASTER_RIGHT
-        return !is_keyboard_master();
-      #else
-        return is_keyboard_master();
-      #endif
-    #endif
+  #elif defined(EE_HANDS)
+    return eeprom_read_byte(EECONFIG_HANDEDNESS);
+  #elif defined(MASTER_RIGHT)
+    return !is_keyboard_master();
   #endif
+
+  return is_keyboard_master();
 }
 
 bool is_keyboard_master(void)
@@ -60,10 +59,6 @@ static void keyboard_master_setup(void) {
   #endif
 #endif
   transport_master_init();
-
-  // For master the Backlight info needs to be sent on startup
-  // Otherwise the salve won't start with the proper info until an update
-  BACKLIT_DIRTY = true;
 }
 
 static void keyboard_slave_setup(void)
@@ -76,6 +71,16 @@ void matrix_setup(void)
 {
   isLeftHand = is_keyboard_left();
 
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT)
+  uint8_t num_rgb_leds_split[2] = RGBLED_SPLIT;
+  if (isLeftHand) {
+    rgblight_set_clipping_range(0, num_rgb_leds_split[0]);
+  }
+  else {
+    rgblight_set_clipping_range(num_rgb_leds_split[0], num_rgb_leds_split[1]);
+  }
+#endif
+
   if (is_keyboard_master())
   {
     keyboard_master_setup();
index 95738530ecf433555964a5a04590db2f9676f64d..8d408f6fdc6b0344bffdb7e19e798d86bfb0635a 100644 (file)
+#include <string.h>
 
 #include "config.h"
 #include "matrix.h"
 #include "quantum.h"
 
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
+#define ROWS_PER_HAND (MATRIX_ROWS / 2)
 
 #ifdef RGBLIGHT_ENABLE
-#   include "rgblight.h"
+#  include "rgblight.h"
 #endif
 
 #ifdef BACKLIGHT_ENABLE
-# include "backlight.h"
-  extern backlight_config_t backlight_config;
+#  include "backlight.h"
+extern backlight_config_t backlight_config;
 #endif
 
 #if defined(USE_I2C) || defined(EH)
 
-#include "i2c.h"
+#  include "i2c_master.h"
+#  include "i2c_slave.h"
 
-#ifndef SLAVE_I2C_ADDRESS
-#  define SLAVE_I2C_ADDRESS           0x32
-#endif
+#  define I2C_BACKLIT_START 0x00
+// Need 4 bytes for RGB (32 bit)
+#  define I2C_RGB_START 0x01
+#  define I2C_KEYMAP_START 0x05
 
-#if (MATRIX_COLS > 8)
-#  error "Currently only supports 8 COLS"
-#endif
+#  define TIMEOUT 100
+
+#  ifndef SLAVE_I2C_ADDRESS
+#    define SLAVE_I2C_ADDRESS 0x32
+#  endif
 
 // Get rows from other half over i2c
 bool transport_master(matrix_row_t matrix[]) {
-  int err = 0;
+  i2c_readReg(SLAVE_I2C_ADDRESS, I2C_KEYMAP_START, (void *)matrix, ROWS_PER_HAND * sizeof(matrix_row_t), TIMEOUT);
 
   // write backlight info
-#ifdef BACKLIGHT_ENABLE
-  if (BACKLIT_DIRTY) {
-    err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
-    if (err) { goto i2c_error; }
-
-    // Backlight location
-    err = i2c_master_write(I2C_BACKLIT_START);
-    if (err) { goto i2c_error; }
-
-    // Write backlight
-    i2c_master_write(get_backlight_level());
-
-    BACKLIT_DIRTY = false;
-  }
-#endif
-
-  err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
-  if (err) { goto i2c_error; }
-
-  // start of matrix stored at I2C_KEYMAP_START
-  err = i2c_master_write(I2C_KEYMAP_START);
-  if (err) { goto i2c_error; }
-
-  // Start read
-  err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
-  if (err) { goto i2c_error; }
-
-  if (!err) {
-    int i;
-    for (i = 0; i < ROWS_PER_HAND-1; ++i) {
-      matrix[i] = i2c_master_read(I2C_ACK);
+#  ifdef BACKLIGHT_ENABLE
+  static uint8_t prev_level = ~0;
+  uint8_t        level      = get_backlight_level();
+  if (level != prev_level) {
+    if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_BACKLIT_START, (void *)&level, sizeof(level), TIMEOUT) >= 0) {
+      prev_level = level;
     }
-    matrix[i] = i2c_master_read(I2C_NACK);
-    i2c_master_stop();
-  } else {
-i2c_error: // the cable is disconnceted, or something else went wrong
-    i2c_reset_state();
-    return false;
   }
-
-#ifdef RGBLIGHT_ENABLE
-  if (RGB_DIRTY) {
-    err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
-    if (err) { goto i2c_error; }
-
-    // RGB Location
-    err = i2c_master_write(I2C_RGB_START);
-    if (err) { goto i2c_error; }
-
-    uint32_t dword = eeconfig_read_rgblight();
-
-    // Write RGB
-    err = i2c_master_write_data(&dword, 4);
-    if (err) { goto i2c_error; }
-
-    RGB_DIRTY = false;
-    i2c_master_stop();
+#  endif
+
+#  ifdef RGBLIGHT_ENABLE
+  static uint32_t prev_rgb = ~0;
+  uint32_t        rgb      = rgblight_read_dword();
+  if (rgb != prev_rgb) {
+    if (i2c_writeReg(SLAVE_I2C_ADDRESS, I2C_RGB_START, (void *)&rgb, sizeof(rgb), TIMEOUT) >= 0) {
+      prev_rgb = rgb;
+    }
   }
-#endif
+#  endif
 
   return true;
 }
 
 void transport_slave(matrix_row_t matrix[]) {
-
-  for (int i = 0; i < ROWS_PER_HAND; ++i)
-  {
-    i2c_slave_buffer[I2C_KEYMAP_START + i] = matrix[i];
-  }
-  // Read Backlight Info
-  #ifdef BACKLIGHT_ENABLE
-  if (BACKLIT_DIRTY)
-  {
-    backlight_set(i2c_slave_buffer[I2C_BACKLIT_START]);
-    BACKLIT_DIRTY = false;
-  }
-  #endif
-  #ifdef RGBLIGHT_ENABLE
-  if (RGB_DIRTY)
-  {
-    // Disable interupts (RGB data is big)
-    cli();
-    // Create new DWORD for RGB data
-    uint32_t dword;
-
-    // Fill the new DWORD with the data that was sent over
-    uint8_t * dword_dat = (uint8_t *)(&dword);
-    for (int i = 0; i < 4; i++)
-    {
-      dword_dat[i] = i2c_slave_buffer[I2C_RGB_START + i];
-    }
-
-    // Update the RGB now with the new data and set RGB_DIRTY to false
-    rgblight_update_dword(dword);
-    RGB_DIRTY = false;
-    // Re-enable interupts now that RGB is set
-    sei();
-  }
-  #endif
+  // Copy matrix to I2C buffer
+  memcpy((void*)(i2c_slave_reg + I2C_KEYMAP_START), (void *)matrix, ROWS_PER_HAND * sizeof(matrix_row_t) );
+
+// Read Backlight Info
+#  ifdef BACKLIGHT_ENABLE
+  backlight_set(i2c_slave_reg[I2C_BACKLIT_START]);
+#  endif
+
+#  ifdef RGBLIGHT_ENABLE
+  uint32_t rgb = *(uint32_t *)(i2c_slave_reg + I2C_RGB_START);
+  // Update the RGB with the new data
+  rgblight_update_dword(rgb);
+#  endif
 }
 
-void transport_master_init(void) {
-  i2c_master_init();
-}
+void transport_master_init(void) { i2c_init(); }
 
-void transport_slave_init(void) {
-  i2c_slave_init(SLAVE_I2C_ADDRESS);
-}
+void transport_slave_init(void) { i2c_slave_init(SLAVE_I2C_ADDRESS); }
 
-#else // USE_SERIAL
+#else  // USE_SERIAL
 
-#include "serial.h"
+#  include "serial.h"
 
 typedef struct _Serial_s2m_buffer_t {
   // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
@@ -150,40 +89,41 @@ typedef struct _Serial_s2m_buffer_t {
 } Serial_s2m_buffer_t;
 
 typedef struct _Serial_m2s_buffer_t {
-#ifdef BACKLIGHT_ENABLE
-    uint8_t backlight_level;
-#endif
-#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
-    rgblight_config_t rgblight_config; //not yet use
-    //
-    // When MCUs on both sides drive their respective RGB LED chains,
-    // it is necessary to synchronize, so it is necessary to communicate RGB information.
-    // In that case, define the RGBLIGHT_SPLIT macro.
-    //
-    // Otherwise, if the master side MCU drives both sides RGB LED chains,
-    // there is no need to communicate.
-#endif
+#  ifdef BACKLIGHT_ENABLE
+  uint8_t           backlight_level;
+#  endif
+#  if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT)
+  rgblight_config_t rgblight_config;  // not yet use
+  //
+  // When MCUs on both sides drive their respective RGB LED chains,
+  // it is necessary to synchronize, so it is necessary to communicate RGB
+  // information. In that case, define RGBLED_SPLIT with info on the number
+  // of LEDs on each half.
+  //
+  // Otherwise, if the master side MCU drives both sides RGB LED chains,
+  // there is no need to communicate.
+#  endif
 } Serial_m2s_buffer_t;
 
 volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
 volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
-uint8_t volatile status0 = 0;
+uint8_t volatile status0                       = 0;
 
 SSTD_t transactions[] = {
-  { (uint8_t *)&status0,
-    sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
-    sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
-  }
+    {
+        (uint8_t *)&status0,
+        sizeof(serial_m2s_buffer),
+        (uint8_t *)&serial_m2s_buffer,
+        sizeof(serial_s2m_buffer),
+        (uint8_t *)&serial_s2m_buffer,
+    },
 };
 
-void transport_master_init(void)
-{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
+void transport_master_init(void) { soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
 
-void transport_slave_init(void)
-{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
+void transport_slave_init(void) { soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
 
 bool transport_master(matrix_row_t matrix[]) {
-
   if (soft_serial_transaction()) {
     return false;
   }
@@ -193,32 +133,35 @@ bool transport_master(matrix_row_t matrix[]) {
     matrix[i] = serial_s2m_buffer.smatrix[i];
   }
 
-  #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
-    // Code to send RGB over serial goes here (not implemented yet)
-  #endif
-
-  #ifdef BACKLIGHT_ENABLE
-    // Write backlight level for slave to read
-    serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
-  #endif
+#  ifdef BACKLIGHT_ENABLE
+  // Write backlight level for slave to read
+  serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
+#  endif
+
+#  if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT)
+  static rgblight_config_t prev_rgb = {~0};
+  uint32_t rgb = rgblight_read_dword();
+  if (rgb != prev_rgb.raw) {
+    serial_m2s_buffer.rgblight_config.raw = rgb;
+    prev_rgb.raw = rgb;
+  }
+#  endif
 
   return true;
 }
 
 void transport_slave(matrix_row_t matrix[]) {
-
   // TODO: if MATRIX_COLS > 8 change to pack()
-  for (int i = 0; i < ROWS_PER_HAND; ++i)
-  {
+  for (int i = 0; i < ROWS_PER_HAND; ++i) {
     serial_s2m_buffer.smatrix[i] = matrix[i];
   }
-  #ifdef BACKLIGHT_ENABLE
-    backlight_set(serial_m2s_buffer.backlight_level);
-  #endif
-  #if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_SPLIT)
-  // Add serial implementation for RGB here
-  #endif
-
+#  ifdef BACKLIGHT_ENABLE
+  backlight_set(serial_m2s_buffer.backlight_level);
+#  endif
+#  if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT)
+  // Update RGB config with the new data
+  rgblight_update_dword(serial_m2s_buffer.rgblight_config.raw);
+#  endif
 }
 
 #endif
index 2409ae186cb879bc0063f213c8f6b1225346ed36..a9bb75482136b8b1c958420c99aaac5a3191974f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-Copyright 2019 REPLACE_WITH_YOUR_NAME
+Copyright 2019 %YOUR_NAME%
 
 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
@@ -23,7 +23,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define VENDOR_ID       0xFEED
 #define PRODUCT_ID      0x0000
 #define DEVICE_VER      0x0001
-#define MANUFACTURER    You
+#define MANUFACTURER    %YOUR_NAME%
 #define PRODUCT         %KEYBOARD%
 #define DESCRIPTION     A custom keyboard
 
index d243c66a9489c23cb47ac6d84dcd2fbf3cdf9abf..719222d3775931986e016890f05e0a70134f4f17 100644 (file)
@@ -4,7 +4,7 @@
 
 A short description of the keyboard/project
 
-Keyboard Maintainer: [You](https://github.com/yourusername)  
+Keyboard Maintainer: [%YOUR_NAME%](https://github.com/yourusername)  
 Hardware Supported: The PCBs, controllers supported  
 Hardware Availability: links to where you can find this hardware
 
index 3deeae88ba7abd416db7f7caac4ae89cbb3d17e4..1e4ce26cd162f9dde19fd3a2c4734104701187a7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2019 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 %YOUR_NAME%
  *
  * 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 c8e4334124ef480280722fc387bcd7ec4cd99762..44382016a1f725c30d75e86958bed9ae4ba4a002 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2019 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 %YOUR_NAME%
  *
  * 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 11cd134a065b2f6c39ca8143881cd8a0f20469b8..482a4454487442df29b4fbe933a6fca04adf39ad 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2019 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 %YOUR_NAME%
  *
  * 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 caf2abb4c6b58bf4cc1028ca8d8a054fb26f991c..5b5076c47632ec252396af519326ade830ac5bf6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2019 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 %YOUR_NAME%
  *
  * 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 4e35a2c129e65fdf72ad218f65470b624b290b33..08156c562c8dce15645ceadb9b0396ef31186450 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright 2019 REPLACE_WITH_YOUR_NAME
+/* Copyright 2019 %YOUR_NAME%
  *
  * 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 e72dd75cfaab880de157515712a1c4bb7d05b01a..c72059118f780b99aaf1a7f7c34ed6c94a47f9d5 100644 (file)
@@ -7,7 +7,7 @@ BUILD_OPTION_NAMES = \
   NKRO_ENABLE \
   TERMINAL_ENABLE \
   CUSTOM_MATRIX \
-  CUSTOM_DEBOUNCE \
+  DEBOUNCE_TYPE \
   SPLIT_KEYBOARD \
   DYNAMIC_KEYMAP_ENABLE \
   USB_HID_ENABLE
index d22c3bbcadeff7785730e25d278622409477c6f1..f6af3f5e29084d3cea157d448d05615a601a3c04 100644 (file)
@@ -194,7 +194,7 @@ dfu-split-right: $(BUILD_DIR)/$(TARGET).hex cpfirmware check-size
                $(DFU_PROGRAMMER) $(MCU) flash --eeprom $(QUANTUM_PATH)/split_common/eeprom-righthand.eep;\
        else\
                $(DFU_PROGRAMMER) $(MCU) erase;\
-               $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(QUANTUM_PATH)/split_common/eeprom-rightand.eep;\
+               $(DFU_PROGRAMMER) $(MCU) flash-eeprom $(QUANTUM_PATH)/split_common/eeprom-righthand.eep;\
        fi
        $(DFU_PROGRAMMER) $(MCU) flash $(BUILD_DIR)/$(TARGET).hex
        $(DFU_PROGRAMMER) $(MCU) reset
@@ -214,13 +214,20 @@ define EXEC_AVRDUDE
                        mv /tmp/2 /tmp/1; \
                done; \
                echo ""; \
-               echo "Detected controller on USB port at $$USB"; \
+               echo "Device $$USB has appeared; assuming it is the controller."; \
                if $(GREP) -q -s 'MINGW\|MSYS' /proc/version; then \
                        USB=`echo "$$USB" | perl -pne 's/\/dev\/ttyS(\d+)/COM.($$1+1)/e'`; \
                        echo "Remapped MSYS2 USB port to $$USB"; \
+                       sleep 1; \
+               else \
+                       printf "Waiting for $$USB to become writable."; \
+                       while [ ! -w "$$USB" ]; do sleep 0.5; printf "."; done; echo ""; \
                fi; \
-               sleep 1; \
-               avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex; \
+               if [ -z "$(1)" ]; then \
+                       avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex; \
+               else \
+                       avrdude -p $(MCU) -c avr109 -P $$USB -U flash:w:$(BUILD_DIR)/$(TARGET).hex -U eeprom:w:$(QUANTUM_PATH)/split_common/$(1); \
+               fi \
        fi
 endef
 
@@ -229,9 +236,15 @@ avrdude: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
 
 avrdude-loop: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
        while true; do \
-           $(call EXEC_AVRDUDE) ; \
+               $(call EXEC_AVRDUDE) ; \
        done
 
+avrdude-split-left: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
+       $(call EXEC_AVRDUDE,eeprom-lefthand.eep)
+
+avrdude-split-right: $(BUILD_DIR)/$(TARGET).hex check-size cpfirmware
+       $(call EXEC_AVRDUDE,eeprom-righthand.eep)
+
 # Convert hex to bin.
 bin: $(BUILD_DIR)/$(TARGET).hex
        $(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
index b29447ac4e203ae741992f1d4da9b515c5455937..2259201b5d99cf37c6b9bf7630c731b3606cd40c 100644 (file)
@@ -11,9 +11,6 @@
 #include "led.h"
 #include "host.h"
 #include "rgblight_reconfig.h"
-#ifdef SPLIT_KEYBOARD
-  #include "split_flags.h"
-#endif
 
 #ifdef PROTOCOL_LUFA
        #include "lufa.h"
@@ -135,9 +132,6 @@ static void power_down(uint8_t wdto) {
     is_suspended = true;
     rgblight_enabled = rgblight_config.enable;
     rgblight_disable_noeeprom();
-    #ifdef SPLIT_KEYBOARD
-        RGB_DIRTY = true;
-    #endif
   }
 #endif
   suspend_power_down_kb();
@@ -216,9 +210,6 @@ void suspend_wakeup_init(void) {
       wait_ms(10);
     #endif
     rgblight_enable_noeeprom();
-    #ifdef SPLIT_KEYBOARD
-        RGB_DIRTY = true;
-    #endif
   }
 #ifdef RGBLIGHT_ANIMATIONS
   rgblight_timer_enable();
index 581e7b8a07250c4dd10f2dabab7b647cc2b92051..87239fbb76b5cc53466c09811ef2347e2e7a279e 100644 (file)
@@ -23,13 +23,24 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "debug.h"
 #include "mousekey.h"
 
+inline int8_t times_inv_sqrt2(int8_t x) {
+  // 181/256 is pretty close to 1/sqrt(2)
+  // 0.70703125                 0.707106781
+  // 1 too small for x=99 and x=198
+  // This ends up being a mult and discard lower 8 bits
+  return (x * 181) >> 8;
+}
 
-
-static report_mouse_t mouse_report = {};
-static uint8_t mousekey_repeat =  0;
+static report_mouse_t mouse_report = {0};
+static void mousekey_debug(void);
 static uint8_t mousekey_accel = 0;
+static uint8_t mousekey_repeat =  0;
+static uint16_t last_timer = 0;
+
+
+
+#ifndef MK_3_SPEED
 
-static void mousekey_debug(void);
 
 
 /*
@@ -52,155 +63,256 @@ uint8_t mk_time_to_max = MOUSEKEY_TIME_TO_MAX;
 uint8_t mk_wheel_max_speed = MOUSEKEY_WHEEL_MAX_SPEED;
 uint8_t mk_wheel_time_to_max = MOUSEKEY_WHEEL_TIME_TO_MAX;
 
+static uint8_t move_unit(void) {
+  uint16_t unit;
+  if (mousekey_accel & (1<<0)) {
+    unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed)/4;
+  } else if (mousekey_accel & (1<<1)) {
+    unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed)/2;
+  } else if (mousekey_accel & (1<<2)) {
+    unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed);
+  } else if (mousekey_repeat == 0) {
+    unit = MOUSEKEY_MOVE_DELTA;
+  } else if (mousekey_repeat >= mk_time_to_max) {
+    unit = MOUSEKEY_MOVE_DELTA * mk_max_speed;
+  } else {
+    unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed * mousekey_repeat) / mk_time_to_max;
+  }
+  return (unit > MOUSEKEY_MOVE_MAX ? MOUSEKEY_MOVE_MAX : (unit == 0 ? 1 : unit));
+}
 
-static uint16_t last_timer = 0;
+static uint8_t wheel_unit(void) {
+  uint16_t unit;
+  if (mousekey_accel & (1<<0)) {
+    unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed)/4;
+  } else if (mousekey_accel & (1<<1)) {
+    unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed)/2;
+  } else if (mousekey_accel & (1<<2)) {
+    unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed);
+  } else if (mousekey_repeat == 0) {
+    unit = MOUSEKEY_WHEEL_DELTA;
+  } else if (mousekey_repeat >= mk_wheel_time_to_max) {
+    unit = MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed;
+  } else {
+    unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed * mousekey_repeat) / mk_wheel_time_to_max;
+  }
+  return (unit > MOUSEKEY_WHEEL_MAX ? MOUSEKEY_WHEEL_MAX : (unit == 0 ? 1 : unit));
+}
 
-inline int8_t times_inv_sqrt2(int8_t x)
-{
-    // 181/256 is pretty close to 1/sqrt(2)
-    // 0.70703125                 0.707106781
-    // 1 too small for x=99 and x=198
-    // This ends up being a mult and discard lower 8 bits
-    return (x * 181) >> 8;
+void mousekey_task(void) {
+  if (timer_elapsed(last_timer) < (mousekey_repeat ? mk_interval : mk_delay*10)) {
+    return;
+  }
+  if (mouse_report.x == 0 && mouse_report.y == 0 && mouse_report.v == 0 && mouse_report.h == 0) {
+    return;
+       }
+  if (mousekey_repeat != UINT8_MAX) mousekey_repeat++;
+  if (mouse_report.x > 0) mouse_report.x = move_unit();
+  if (mouse_report.x < 0) mouse_report.x = move_unit() * -1;
+  if (mouse_report.y > 0) mouse_report.y = move_unit();
+  if (mouse_report.y < 0) mouse_report.y = move_unit() * -1;
+  /* diagonal move [1/sqrt(2)] */
+  if (mouse_report.x && mouse_report.y) {
+    mouse_report.x = times_inv_sqrt2(mouse_report.x);
+    mouse_report.y = times_inv_sqrt2(mouse_report.y);
+  }
+  if (mouse_report.v > 0) mouse_report.v = wheel_unit();
+  if (mouse_report.v < 0) mouse_report.v = wheel_unit() * -1;
+  if (mouse_report.h > 0) mouse_report.h = wheel_unit();
+  if (mouse_report.h < 0) mouse_report.h = wheel_unit() * -1;
+  mousekey_send();
 }
 
-static uint8_t move_unit(void)
-{
-    uint16_t unit;
-    if (mousekey_accel & (1<<0)) {
-        unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed)/4;
-    } else if (mousekey_accel & (1<<1)) {
-        unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed)/2;
-    } else if (mousekey_accel & (1<<2)) {
-        unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed);
-    } else if (mousekey_repeat == 0) {
-        unit = MOUSEKEY_MOVE_DELTA;
-    } else if (mousekey_repeat >= mk_time_to_max) {
-        unit = MOUSEKEY_MOVE_DELTA * mk_max_speed;
-    } else {
-        unit = (MOUSEKEY_MOVE_DELTA * mk_max_speed * mousekey_repeat) / mk_time_to_max;
-    }
-    return (unit > MOUSEKEY_MOVE_MAX ? MOUSEKEY_MOVE_MAX : (unit == 0 ? 1 : unit));
+void mousekey_on(uint8_t code) {
+  if      (code == KC_MS_UP)       mouse_report.y = move_unit() * -1;
+  else if (code == KC_MS_DOWN)     mouse_report.y = move_unit();
+  else if (code == KC_MS_LEFT)     mouse_report.x = move_unit() * -1;
+  else if (code == KC_MS_RIGHT)    mouse_report.x = move_unit();
+  else if (code == KC_MS_WH_UP)    mouse_report.v = wheel_unit();
+  else if (code == KC_MS_WH_DOWN)  mouse_report.v = wheel_unit() * -1;
+  else if (code == KC_MS_WH_LEFT)  mouse_report.h = wheel_unit() * -1;
+  else if (code == KC_MS_WH_RIGHT) mouse_report.h = wheel_unit();
+  else if (code == KC_MS_BTN1)     mouse_report.buttons |= MOUSE_BTN1;
+  else if (code == KC_MS_BTN2)     mouse_report.buttons |= MOUSE_BTN2;
+  else if (code == KC_MS_BTN3)     mouse_report.buttons |= MOUSE_BTN3;
+  else if (code == KC_MS_BTN4)     mouse_report.buttons |= MOUSE_BTN4;
+  else if (code == KC_MS_BTN5)     mouse_report.buttons |= MOUSE_BTN5;
+  else if (code == KC_MS_ACCEL0)   mousekey_accel |= (1<<0);
+  else if (code == KC_MS_ACCEL1)   mousekey_accel |= (1<<1);
+  else if (code == KC_MS_ACCEL2)   mousekey_accel |= (1<<2);
 }
 
-static uint8_t wheel_unit(void)
-{
-    uint16_t unit;
-    if (mousekey_accel & (1<<0)) {
-        unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed)/4;
-    } else if (mousekey_accel & (1<<1)) {
-        unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed)/2;
-    } else if (mousekey_accel & (1<<2)) {
-        unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed);
-    } else if (mousekey_repeat == 0) {
-        unit = MOUSEKEY_WHEEL_DELTA;
-    } else if (mousekey_repeat >= mk_wheel_time_to_max) {
-        unit = MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed;
-    } else {
-        unit = (MOUSEKEY_WHEEL_DELTA * mk_wheel_max_speed * mousekey_repeat) / mk_wheel_time_to_max;
-    }
-    return (unit > MOUSEKEY_WHEEL_MAX ? MOUSEKEY_WHEEL_MAX : (unit == 0 ? 1 : unit));
+void mousekey_off(uint8_t code) {
+  if      (code == KC_MS_UP       && mouse_report.y < 0) mouse_report.y = 0;
+  else if (code == KC_MS_DOWN     && mouse_report.y > 0) mouse_report.y = 0;
+  else if (code == KC_MS_LEFT     && mouse_report.x < 0) mouse_report.x = 0;
+  else if (code == KC_MS_RIGHT    && mouse_report.x > 0) mouse_report.x = 0;
+  else if (code == KC_MS_WH_UP    && mouse_report.v > 0) mouse_report.v = 0;
+  else if (code == KC_MS_WH_DOWN  && mouse_report.v < 0) mouse_report.v = 0;
+  else if (code == KC_MS_WH_LEFT  && mouse_report.h < 0) mouse_report.h = 0;
+  else if (code == KC_MS_WH_RIGHT && mouse_report.h > 0) mouse_report.h = 0;
+  else if (code == KC_MS_BTN1) mouse_report.buttons &= ~MOUSE_BTN1;
+  else if (code == KC_MS_BTN2) mouse_report.buttons &= ~MOUSE_BTN2;
+  else if (code == KC_MS_BTN3) mouse_report.buttons &= ~MOUSE_BTN3;
+  else if (code == KC_MS_BTN4) mouse_report.buttons &= ~MOUSE_BTN4;
+  else if (code == KC_MS_BTN5) mouse_report.buttons &= ~MOUSE_BTN5;
+  else if (code == KC_MS_ACCEL0) mousekey_accel &= ~(1<<0);
+  else if (code == KC_MS_ACCEL1) mousekey_accel &= ~(1<<1);
+  else if (code == KC_MS_ACCEL2) mousekey_accel &= ~(1<<2);
+  if (mouse_report.x == 0 && mouse_report.y == 0 && mouse_report.v == 0 && mouse_report.h == 0)
+    mousekey_repeat = 0;
 }
 
-void mousekey_task(void)
-{
-    if (timer_elapsed(last_timer) < (mousekey_repeat ? mk_interval : mk_delay*10))
-        return;
 
-    if (mouse_report.x == 0 && mouse_report.y == 0 && mouse_report.v == 0 && mouse_report.h == 0)
-        return;
 
-    if (mousekey_repeat != UINT8_MAX)
-        mousekey_repeat++;
+
+#else  /* #ifndef MK_3_SPEED */
 
 
-    if (mouse_report.x > 0) mouse_report.x = move_unit();
-    if (mouse_report.x < 0) mouse_report.x = move_unit() * -1;
-    if (mouse_report.y > 0) mouse_report.y = move_unit();
-    if (mouse_report.y < 0) mouse_report.y = move_unit() * -1;
 
-    /* diagonal move [1/sqrt(2)] */
-    if (mouse_report.x && mouse_report.y) {
-        mouse_report.x = times_inv_sqrt2(mouse_report.x);
-        mouse_report.x = mouse_report.x == 0 ? 1 : mouse_report.x;
-        mouse_report.y = times_inv_sqrt2(mouse_report.y);
-        mouse_report.y = mouse_report.y == 0 ? 1 : mouse_report.y;
-    }
+enum {
+  mkspd_slow,
+  mkspd_med,
+  mkspd_fast,
+  mkspd_COUNT
+};
+static uint8_t mk_speed = mkspd_med;
+#ifdef MK_MOMENTARY_ACCEL
+static uint8_t mkspd_DEFAULT = mkspd_med;
+#endif
+static uint16_t last_timer_c = 0;
+static uint16_t last_timer_w = 0;
+uint16_t c_offsets[mkspd_COUNT] = {
+  MK_C_OFFSET_SLOW, MK_C_OFFSET_MED, MK_C_OFFSET_FAST
+};
+uint16_t c_intervals[mkspd_COUNT] = {
+  MK_C_INTERVAL_SLOW, MK_C_INTERVAL_MED, MK_C_INTERVAL_FAST
+};
+uint16_t w_offsets[mkspd_COUNT] = {
+  MK_W_OFFSET_SLOW, MK_W_OFFSET_MED, MK_W_OFFSET_FAST
+};
+uint16_t w_intervals[mkspd_COUNT] = {
+  MK_W_INTERVAL_SLOW, MK_W_INTERVAL_MED, MK_W_INTERVAL_FAST
+};
 
-    if (mouse_report.v > 0) mouse_report.v = wheel_unit();
-    if (mouse_report.v < 0) mouse_report.v = wheel_unit() * -1;
-    if (mouse_report.h > 0) mouse_report.h = wheel_unit();
-    if (mouse_report.h < 0) mouse_report.h = wheel_unit() * -1;
 
-    mousekey_send();
+void mousekey_task(void) {
+  // report cursor and scroll movement independently
+  report_mouse_t const tmpmr = mouse_report;
+  if ((mouse_report.x  ||  mouse_report.y)  &&  timer_elapsed(last_timer_c) > c_intervals[mk_speed]) {
+  mouse_report.h = 0;
+  mouse_report.v = 0;
+  mousekey_send();
+  last_timer_c = last_timer;
+  mouse_report = tmpmr;
+  }
+  if ((mouse_report.h  ||  mouse_report.v)  &&  timer_elapsed(last_timer_w) > w_intervals[mk_speed]) {
+  mouse_report.x = 0;
+  mouse_report.y = 0;
+  mousekey_send();
+  last_timer_w = last_timer;
+  mouse_report = tmpmr;
+  }
 }
 
-void mousekey_on(uint8_t code)
-{
-    if      (code == KC_MS_UP)       mouse_report.y = move_unit() * -1;
-    else if (code == KC_MS_DOWN)     mouse_report.y = move_unit();
-    else if (code == KC_MS_LEFT)     mouse_report.x = move_unit() * -1;
-    else if (code == KC_MS_RIGHT)    mouse_report.x = move_unit();
-    else if (code == KC_MS_WH_UP)    mouse_report.v = wheel_unit();
-    else if (code == KC_MS_WH_DOWN)  mouse_report.v = wheel_unit() * -1;
-    else if (code == KC_MS_WH_LEFT)  mouse_report.h = wheel_unit() * -1;
-    else if (code == KC_MS_WH_RIGHT) mouse_report.h = wheel_unit();
-    else if (code == KC_MS_BTN1)     mouse_report.buttons |= MOUSE_BTN1;
-    else if (code == KC_MS_BTN2)     mouse_report.buttons |= MOUSE_BTN2;
-    else if (code == KC_MS_BTN3)     mouse_report.buttons |= MOUSE_BTN3;
-    else if (code == KC_MS_BTN4)     mouse_report.buttons |= MOUSE_BTN4;
-    else if (code == KC_MS_BTN5)     mouse_report.buttons |= MOUSE_BTN5;
-    else if (code == KC_MS_ACCEL0)   mousekey_accel |= (1<<0);
-    else if (code == KC_MS_ACCEL1)   mousekey_accel |= (1<<1);
-    else if (code == KC_MS_ACCEL2)   mousekey_accel |= (1<<2);
+void adjust_speed(void) {
+  uint16_t const c_offset = c_offsets[mk_speed];
+  uint16_t const w_offset = w_offsets[mk_speed];
+  if (mouse_report.x > 0) mouse_report.x = c_offset;
+  if (mouse_report.x < 0) mouse_report.x = c_offset * -1;
+  if (mouse_report.y > 0) mouse_report.y = c_offset;
+  if (mouse_report.y < 0) mouse_report.y = c_offset * -1;
+  if (mouse_report.h > 0) mouse_report.h = w_offset;
+  if (mouse_report.h < 0) mouse_report.h = w_offset * -1;
+  if (mouse_report.v > 0) mouse_report.v = w_offset;
+  if (mouse_report.v < 0) mouse_report.v = w_offset * -1;
+  // adjust for diagonals
+  if (mouse_report.x && mouse_report.y) {
+  mouse_report.x = times_inv_sqrt2(mouse_report.x);
+  mouse_report.y = times_inv_sqrt2(mouse_report.y);
+  }
+  if (mouse_report.h && mouse_report.v) {
+  mouse_report.h = times_inv_sqrt2(mouse_report.h);
+  mouse_report.v = times_inv_sqrt2(mouse_report.v);
+  }
 }
 
-void mousekey_off(uint8_t code)
-{
-    if      (code == KC_MS_UP       && mouse_report.y < 0) mouse_report.y = 0;
-    else if (code == KC_MS_DOWN     && mouse_report.y > 0) mouse_report.y = 0;
-    else if (code == KC_MS_LEFT     && mouse_report.x < 0) mouse_report.x = 0;
-    else if (code == KC_MS_RIGHT    && mouse_report.x > 0) mouse_report.x = 0;
-    else if (code == KC_MS_WH_UP    && mouse_report.v > 0) mouse_report.v = 0;
-    else if (code == KC_MS_WH_DOWN  && mouse_report.v < 0) mouse_report.v = 0;
-    else if (code == KC_MS_WH_LEFT  && mouse_report.h < 0) mouse_report.h = 0;
-    else if (code == KC_MS_WH_RIGHT && mouse_report.h > 0) mouse_report.h = 0;
-    else if (code == KC_MS_BTN1) mouse_report.buttons &= ~MOUSE_BTN1;
-    else if (code == KC_MS_BTN2) mouse_report.buttons &= ~MOUSE_BTN2;
-    else if (code == KC_MS_BTN3) mouse_report.buttons &= ~MOUSE_BTN3;
-    else if (code == KC_MS_BTN4) mouse_report.buttons &= ~MOUSE_BTN4;
-    else if (code == KC_MS_BTN5) mouse_report.buttons &= ~MOUSE_BTN5;
-    else if (code == KC_MS_ACCEL0) mousekey_accel &= ~(1<<0);
-    else if (code == KC_MS_ACCEL1) mousekey_accel &= ~(1<<1);
-    else if (code == KC_MS_ACCEL2) mousekey_accel &= ~(1<<2);
-
-    if (mouse_report.x == 0 && mouse_report.y == 0 && mouse_report.v == 0 && mouse_report.h == 0)
-        mousekey_repeat = 0;
+void mousekey_on(uint8_t code) {
+  uint16_t const c_offset = c_offsets[mk_speed];
+  uint16_t const w_offset = w_offsets[mk_speed];
+  uint8_t const old_speed = mk_speed;
+  if      (code == KC_MS_UP)       mouse_report.y = c_offset * -1;
+  else if (code == KC_MS_DOWN)     mouse_report.y = c_offset;
+  else if (code == KC_MS_LEFT)     mouse_report.x = c_offset * -1;
+  else if (code == KC_MS_RIGHT)    mouse_report.x = c_offset;
+  else if (code == KC_MS_WH_UP)    mouse_report.v = w_offset;
+  else if (code == KC_MS_WH_DOWN)  mouse_report.v = w_offset * -1;
+  else if (code == KC_MS_WH_LEFT)  mouse_report.h = w_offset * -1;
+  else if (code == KC_MS_WH_RIGHT) mouse_report.h = w_offset;
+  else if (code == KC_MS_BTN1)     mouse_report.buttons |= MOUSE_BTN1;
+  else if (code == KC_MS_BTN2)     mouse_report.buttons |= MOUSE_BTN2;
+  else if (code == KC_MS_BTN3)     mouse_report.buttons |= MOUSE_BTN3;
+  else if (code == KC_MS_BTN4)     mouse_report.buttons |= MOUSE_BTN4;
+  else if (code == KC_MS_BTN5)     mouse_report.buttons |= MOUSE_BTN5;
+  else if (code == KC_MS_ACCEL0)   mk_speed = mkspd_slow;
+  else if (code == KC_MS_ACCEL1)   mk_speed = mkspd_med;
+  else if (code == KC_MS_ACCEL2)   mk_speed = mkspd_fast;
+  if (mk_speed != old_speed) adjust_speed();
 }
 
-void mousekey_send(void)
-{
-    mousekey_debug();
-    host_mouse_send(&mouse_report);
-    last_timer = timer_read();
+void mousekey_off(uint8_t code) {
+#ifdef MK_MOMENTARY_ACCEL
+  uint8_t const old_speed = mk_speed;
+#endif
+  if      (code == KC_MS_UP       && mouse_report.y < 0) mouse_report.y = 0;
+  else if (code == KC_MS_DOWN     && mouse_report.y > 0) mouse_report.y = 0;
+  else if (code == KC_MS_LEFT     && mouse_report.x < 0) mouse_report.x = 0;
+  else if (code == KC_MS_RIGHT    && mouse_report.x > 0) mouse_report.x = 0;
+  else if (code == KC_MS_WH_UP    && mouse_report.v > 0) mouse_report.v = 0;
+  else if (code == KC_MS_WH_DOWN  && mouse_report.v < 0) mouse_report.v = 0;
+  else if (code == KC_MS_WH_LEFT  && mouse_report.h < 0) mouse_report.h = 0;
+  else if (code == KC_MS_WH_RIGHT && mouse_report.h > 0) mouse_report.h = 0;
+  else if (code == KC_MS_BTN1) mouse_report.buttons &= ~MOUSE_BTN1;
+  else if (code == KC_MS_BTN2) mouse_report.buttons &= ~MOUSE_BTN2;
+  else if (code == KC_MS_BTN3) mouse_report.buttons &= ~MOUSE_BTN3;
+  else if (code == KC_MS_BTN4) mouse_report.buttons &= ~MOUSE_BTN4;
+  else if (code == KC_MS_BTN5) mouse_report.buttons &= ~MOUSE_BTN5;
+#ifdef MK_MOMENTARY_ACCEL
+  else if (code == KC_MS_ACCEL0) mk_speed = mkspd_DEFAULT;
+  else if (code == KC_MS_ACCEL1) mk_speed = mkspd_DEFAULT;
+  else if (code == KC_MS_ACCEL2) mk_speed = mkspd_DEFAULT;
+  if (mk_speed != old_speed) adjust_speed();
+#endif
 }
 
-void mousekey_clear(void)
-{
-    mouse_report = (report_mouse_t){};
-    mousekey_repeat = 0;
-    mousekey_accel = 0;
+
+
+
+#endif /* #ifndef MK_3_SPEED */
+
+
+
+
+void mousekey_send(void) {
+  mousekey_debug();
+  host_mouse_send(&mouse_report);
+  last_timer = timer_read();
+}
+
+void mousekey_clear(void) {
+  mouse_report = (report_mouse_t){};
+  mousekey_repeat = 0;
+  mousekey_accel = 0;
 }
 
-static void mousekey_debug(void)
-{
-    if (!debug_mouse) return;
-    print("mousekey [btn|x y v h](rep/acl): [");
-    phex(mouse_report.buttons); print("|");
-    print_decs(mouse_report.x); print(" ");
-    print_decs(mouse_report.y); print(" ");
-    print_decs(mouse_report.v); print(" ");
-    print_decs(mouse_report.h); print("](");
-    print_dec(mousekey_repeat); print("/");
-    print_dec(mousekey_accel); print(")\n");
+static void mousekey_debug(void) {
+  if (!debug_mouse) return;
+  print("mousekey [btn|x y v h](rep/acl): [");
+  phex(mouse_report.buttons); print("|");
+  print_decs(mouse_report.x); print(" ");
+  print_decs(mouse_report.y); print(" ");
+  print_decs(mouse_report.v); print(" ");
+  print_decs(mouse_report.h); print("](");
+  print_dec(mousekey_repeat); print("/");
+  print_dec(mousekey_accel); print(")\n");
 }
index 9338d0af7799de060c1f67312ad5dae862eae6be..ce3501b232ab0e887afab229547c8f6c61c566e7 100644 (file)
@@ -16,23 +16,25 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #ifndef MOUSEKEY_H
-#define  MOUSEKEY_H
+#define MOUSEKEY_H
+#endif
 
 #include <stdbool.h>
 #include "host.h"
 
+#ifndef MK_3_SPEED
 
 /* max value on report descriptor */
 #ifndef MOUSEKEY_MOVE_MAX
-    #define MOUSEKEY_MOVE_MAX       127
+  #define MOUSEKEY_MOVE_MAX       127
 #elif MOUSEKEY_MOVE_MAX > 127
-    #error MOUSEKEY_MOVE_MAX needs to be smaller than 127
+  #error MOUSEKEY_MOVE_MAX needs to be smaller than 127
 #endif
 
 #ifndef MOUSEKEY_WHEEL_MAX
-    #define MOUSEKEY_WHEEL_MAX      127
+  #define MOUSEKEY_WHEEL_MAX      127
 #elif MOUSEKEY_WHEEL_MAX > 127
-    #error MOUSEKEY_WHEEL_MAX needs to be smaller than 127
+  #error MOUSEKEY_WHEEL_MAX needs to be smaller than 127
 #endif
 
 #ifndef MOUSEKEY_MOVE_DELTA
@@ -60,6 +62,47 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define MOUSEKEY_WHEEL_TIME_TO_MAX 40
 #endif
 
+#else /* #ifndef MK_3_SPEED */
+
+#ifndef MK_C_OFFSET_SLOW
+#define MK_C_OFFSET_SLOW 1
+#endif
+#ifndef MK_C_INTERVAL_SLOW
+#define MK_C_INTERVAL_SLOW 100
+#endif
+#ifndef MK_C_OFFSET_MED
+#define MK_C_OFFSET_MED 4
+#endif
+#ifndef MK_C_INTERVAL_MED
+#define MK_C_INTERVAL_MED 16
+#endif
+#ifndef MK_C_OFFSET_FAST
+#define MK_C_OFFSET_FAST 12
+#endif
+#ifndef MK_C_INTERVAL_FAST
+#define MK_C_INTERVAL_FAST 16
+#endif
+
+#ifndef MK_W_OFFSET_SLOW
+#define MK_W_OFFSET_SLOW 1
+#endif
+#ifndef MK_W_INTERVAL_SLOW
+#define MK_W_INTERVAL_SLOW 400
+#endif
+#ifndef MK_W_OFFSET_MED
+#define MK_W_OFFSET_MED 1
+#endif
+#ifndef MK_W_INTERVAL_MED
+#define MK_W_INTERVAL_MED 200
+#endif
+#ifndef MK_W_OFFSET_FAST
+#define MK_W_OFFSET_FAST 1
+#endif
+#ifndef MK_W_INTERVAL_FAST
+#define MK_W_INTERVAL_FAST 100
+#endif
+
+#endif /* #ifndef MK_3_SPEED */
 
 #ifdef __cplusplus
 extern "C" {
@@ -72,7 +115,6 @@ extern uint8_t mk_time_to_max;
 extern uint8_t mk_wheel_max_speed;
 extern uint8_t mk_wheel_time_to_max;
 
-
 void mousekey_task(void);
 void mousekey_on(uint8_t code);
 void mousekey_off(uint8_t code);
@@ -82,5 +124,3 @@ void mousekey_send(void);
 #ifdef __cplusplus
 }
 #endif
-
-#endif
index 2e8dd8756b3f4aeb1d90fcd06661baeb6cec2afa..30cdc9dcfc9d933c0b83409640bdc4060299dddd 100644 (file)
@@ -95,7 +95,7 @@ const PROGMEM int  usbDescriptorStringDevice[] = {
 #if USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER == 0 && USB_CFG_SERIAL_NUMBER_LEN
 #undef USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
 #define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER    sizeof(usbDescriptorStringSerialNumber)
-PROGMEM int usbDescriptorStringSerialNumber[] = {
+const PROGMEM int usbDescriptorStringSerialNumber[] = {
     USB_STRING_DESCRIPTOR_HEADER(USB_CFG_SERIAL_NUMBER_LEN),
     USB_CFG_SERIAL_NUMBER
 };
index c43f14292aaf39e26d044b65ebea308c9fcaed82..3a322cee4f2569be177c97dd0c70e0a81fb57e26 100644 (file)
@@ -383,6 +383,8 @@ show_path:
        @echo OBJ=$(OBJ)
 
 ifeq ($(findstring avr-gcc,$(CC)),avr-gcc)
+SIZE_MARGIN = 1024
+
 check-size:
        $(eval MAX_SIZE=$(shell n=`$(CC) -E -mmcu=$(MCU) $(CFLAGS) $(OPT_DEFS) tmk_core/common/avr/bootloader_size.c 2> /dev/null | sed -ne '/^#/n;/^AVR_SIZE:/,$${s/^AVR_SIZE: //;p;}'` && echo $$(($$n)) || echo 0))
        $(eval CURRENT_SIZE=$(shell if [ -f $(BUILD_DIR)/$(TARGET).hex ]; then $(SIZE) --target=$(FORMAT) $(BUILD_DIR)/$(TARGET).hex | $(AWK) 'NR==2 {print $$4}'; else printf 0; fi))
@@ -390,7 +392,15 @@ check-size:
        $(eval OVER_SIZE=$(shell expr $(CURRENT_SIZE) - $(MAX_SIZE)))
        if [ $(MAX_SIZE) -gt 0 ] && [ $(CURRENT_SIZE) -gt 0 ]; then \
                $(SILENT) || printf "$(MSG_CHECK_FILESIZE)" | $(AWK_CMD); \
-               if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then printf "\n * $(MSG_FILE_TOO_BIG)"; $(PRINT_ERROR_PLAIN); else $(PRINT_OK); $(SILENT) || printf " * $(MSG_FILE_JUST_RIGHT)";  fi \
+               if [ $(CURRENT_SIZE) -gt $(MAX_SIZE) ]; then \
+                   printf "\n * $(MSG_FILE_TOO_BIG)"; $(PRINT_ERROR_PLAIN); \
+               else \
+                   if [ $(FREE_SIZE) -lt $(SIZE_MARGIN) ]; then \
+                       $(PRINT_WARNING_PLAIN); printf " * $(MSG_FILE_NEAR_LIMIT)"; \
+                   else \
+                       $(PRINT_OK); $(SILENT) || printf " * $(MSG_FILE_JUST_RIGHT)"; \
+                   fi \
+               fi \
        fi
 else
 check-size:
index 212d06de67cf847d8da75b2d6f4682f5cc3f9d0b..9e8c7af247e3f7709d317aea3a1cf47da2432d2b 100644 (file)
@@ -5,34 +5,7 @@
  https://github.com/arkag/qmk_firmware/blob/master/keyboards/mechmini/v2/keymaps/arkag/keymap.c
 */
 
-// Start: Written by konstantin: vomindoraan
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-void send_unicode_hex_string(const char *str) {
-  if (!str) { return; } // Saftey net
-  while (*str) {
-    // Find the next code point (token) in the string
-    for (; *str == ' '; str++);
-    size_t n = strcspn(str, " "); // Length of the current token
-    char code_point[n+1];
-    strncpy(code_point, str, n);
-    code_point[n] = '\0'; // Make sure it's null-terminated
-
-    // Normalize the code point: make all hex digits lowercase
-    for (char *p = code_point; *p; p++) {
-            *p = tolower(*p);
-    }
-
-    // Send the code point as a Unicode input string
-    unicode_input_start();
-    send_string(code_point);
-    unicode_input_finish();
-    str += n; // Move to the first ' ' (or '\0') after the current token
-  }
-}
-// End: Written by konstantin: vomindoraan
+#include <stdbool.h>
 
 // Start: Written by Chris Lewis
 #ifndef MIN
@@ -78,6 +51,8 @@ Color         underglow,
 flashState    flash_state   = no_flash;
 fadeState     fade_state    = add_fade;
 activityState state         = boot;
+bool          aesthetic     = false,
+              shifty        = false;
 
 void set_color (Color new, bool update) {
   rgblight_sethsv_eeprom_helper(new.h, new.s, new.v, update);
@@ -146,7 +121,7 @@ void check_state (void) {
 
   case sleeping:
     if (!slept) {
-      rgblight_mode_noeeprom(4);
+      rgblight_mode_noeeprom(5);
       slept = true;
       activated = false;
       deactivated = false;
@@ -249,11 +224,6 @@ void set_os (uint8_t os, bool update) {
   num_extra_flashes_off = 1;
 }
 
-void tap_key(uint8_t keycode) {
-  register_code(keycode);
-  unregister_code(keycode);
-}
-
 // register GUI if Mac or Ctrl if other
 void pri_mod(bool press) {
   if (press) {
@@ -293,13 +263,13 @@ void surround_type(uint8_t num_of_chars, uint16_t keycode, bool use_shift) {
     register_code(KC_LSFT);
   }
   for (int i = 0; i < num_of_chars; i++) {
-    tap_key(keycode);
+    tap_code(keycode);
   }
   if (use_shift) {
     unregister_code(KC_LSFT);
   }
   for (int i = 0; i < (num_of_chars/2); i++) {
-    tap_key(KC_LEFT);
+    tap_code(KC_LEFT);
   }
 }
 
@@ -307,7 +277,7 @@ void long_keystroke(size_t num_of_keys, uint16_t keys[]) {
   for (int i = 0; i < num_of_keys-1; i++) {
     register_code(keys[i]);
   }
-  tap_key(keys[num_of_keys-1]);
+  tap_code(keys[num_of_keys-1]);
   for (int i = 0; i < num_of_keys-1; i++) {
     unregister_code(keys[i]);
   }
@@ -315,7 +285,10 @@ void long_keystroke(size_t num_of_keys, uint16_t keys[]) {
 
 void dance_grv (qk_tap_dance_state_t *state, void *user_data) {
   if (state->count == 1) {
-    tap_key(KC_GRV);
+    tap_code(KC_GRV);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
+    }
   } else if (state->count == 2) {
     surround_type(2, KC_GRAVE, false);
   } else {
@@ -325,7 +298,10 @@ void dance_grv (qk_tap_dance_state_t *state, void *user_data) {
 
 void dance_quot (qk_tap_dance_state_t *state, void *user_data) {
   if (state->count == 1) {
-    tap_key(KC_QUOT);
+    tap_code(KC_QUOT);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
+    }
   } else if (state->count == 2) {
     surround_type(2, KC_QUOTE, false);
   } else if (state->count == 3) {
@@ -333,35 +309,73 @@ void dance_quot (qk_tap_dance_state_t *state, void *user_data) {
   }
 }
 
-void dance_strk (qk_tap_dance_state_t *state, void *user_data) {
+void dance_hyph (qk_tap_dance_state_t *state, void *user_data) {
   if (state->count == 1) {
-    surround_type(4, KC_TILDE, true);
+    tap_code(KC_MINS);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
+    }
   } else if (state->count == 2) {
-    if (current_os == OS_MAC) {
-      long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_4});
-    } else if (current_os == OS_WIN) {
-      long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_S});
-    } else {
-      return;
+    register_code(KC_LSFT);
+    tap_code(KC_MINS);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
     }
+    unregister_code(KC_LSFT);
+  } else if (state->count == 3) {
+    send_unicode_hex_string("2014");
   }
 }
 
-void dance_3 (qk_tap_dance_state_t *state, void *user_data) {
+void dance_obrck (qk_tap_dance_state_t *state, void *user_data) {
   if (state->count == 1) {
-    tap_key(KC_3);
+    tap_code(KC_LBRC);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
+    }
   } else if (state->count == 2) {
-    send_unicode_hex_string("00E8");
-  } else if (state->count == 3) {
-    send_unicode_hex_string("00E9");
+    register_code(KC_LSFT);
+    tap_code(KC_9);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
+    }
+    unregister_code(KC_LSFT);
   }
 }
 
-void dance_c (qk_tap_dance_state_t *state, void *user_data) {
+void dance_cbrck (qk_tap_dance_state_t *state, void *user_data) {
   if (state->count == 1) {
-    tap_key(KC_C);
+    tap_code(KC_RBRC);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
+    }
   } else if (state->count == 2) {
-    send_unicode_hex_string("00E7");
+    register_code(KC_LSFT);
+    tap_code(KC_0);
+    if (aesthetic) {
+      tap_code(KC_SPACE);
+    }
+    unregister_code(KC_LSFT);
+  }
+}
+
+void dance_game (qk_tap_dance_state_t *state, void *user_data) {
+  if (state->count == 1) {
+
+  } else if (state->count == 2) {
+
+  } else if (state->count == 3) {
+    uint8_t layer = biton32(layer_state);
+    if (layer == _QWERTY) {
+        layer_off(_QWERTY);
+        layer_on(_GAMING);
+        // swirling rgb
+        rgblight_mode_noeeprom(12);
+    } else {
+        layer_off(_GAMING);
+        layer_on(_QWERTY);
+        rgblight_mode_noeeprom(1);
+    }
   }
 }
 
@@ -383,13 +397,29 @@ void matrix_scan_user(void) {
     // begin OS functions
     SEQ_TWO_KEYS(KC_P, KC_B) {
       if (current_os == OS_WIN) {
-              SEND_STRING(SS_DOWN(X_LGUI) SS_TAP(X_PAUSE) SS_UP(X_LGUI));
+        long_keystroke(2, (uint16_t[]){KC_LGUI, KC_PAUSE});
+      } else {
+        return;
+      }
+    }
+    SEQ_TWO_KEYS(KC_LSFT, M_PMOD) {
+      if (current_os == OS_WIN) {
+        long_keystroke(3, (uint16_t[]){KC_LCTL, KC_LSFT, KC_ESC});
+      } else {
+      }
+    }
+    SEQ_TWO_KEYS(KC_S, KC_S) {
+      if (current_os == OS_MAC) {
+        long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_4});
+      } else if (current_os == OS_WIN) {
+        long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_S});
       } else {
+        return;
       }
     }
     SEQ_THREE_KEYS(KC_C, KC_A, KC_D) {
       if (current_os == OS_WIN) {
-              SEND_STRING(SS_DOWN(X_LCTRL) SS_DOWN(X_LALT) SS_TAP(X_DELETE) SS_UP(X_LALT) SS_UP(X_LCTRL));
+        long_keystroke(3, (uint16_t[]){KC_LCTL, KC_LALT, KC_DEL});
       } else {
       }
     }
@@ -415,33 +445,33 @@ void matrix_scan_user(void) {
     SEQ_ONE_KEY(KC_S) {
       surround_type(4, KC_GRAVE, true);
     }
-    SEQ_TWO_KEYS(KC_S, KC_S) {
-      if (current_os == OS_MAC) {
-        long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_4});
-      } else if (current_os == OS_WIN) {
-        long_keystroke(3, (uint16_t[]){KC_LGUI, KC_LSFT, KC_S});
-      } else {
-        return;
-      }
-    }
     SEQ_ONE_KEY(KC_C) {
-      surround_type(2, KC_GRAVE, false);
+      send_unicode_hex_string("00E7");
     }
     SEQ_TWO_KEYS(KC_C, KC_C) {
+      surround_type(2, KC_GRAVE, false);
+    }
+    SEQ_THREE_KEYS(KC_C, KC_C, KC_C) {
       surround_type(6, KC_GRAVE, false);
     }
+    SEQ_ONE_KEY(KC_E) {
+      send_unicode_hex_string("00E8");
+    }
+    SEQ_TWO_KEYS(KC_E, KC_E) {
+      send_unicode_hex_string("00E9");
+    }
     // end format functions
 
     // start fancy functions
-    SEQ_THREE_KEYS(KC_C, KC_C, KC_C) {
+    SEQ_THREE_KEYS(KC_C, KC_C, KC_ENT) {
       surround_type(6, KC_GRAVE, false);
       pri_mod(true);
-      tap_key(KC_V);
+      tap_code(KC_V);
       pri_mod(false);
-      tap_key(KC_RGHT);
-      tap_key(KC_RGHT);
-      tap_key(KC_RGHT);
-      tap_key(KC_ENTER);
+      tap_code(KC_RGHT);
+      tap_code(KC_RGHT);
+      tap_code(KC_RGHT);
+      tap_code(KC_ENTER);
     }
     // end fancy functions
 
@@ -450,8 +480,8 @@ void matrix_scan_user(void) {
       // ™
       send_unicode_hex_string("2122");
     }
-    SEQ_THREE_KEYS(KC_G, KC_G, KC_T) {
-      SEND_STRING("@GrahamGoldenTech.com");
+    SEQ_TWO_KEYS(KC_D, KC_D) {
+      SEND_STRING(".\\Administrator");
     }
     SEQ_THREE_KEYS(KC_L, KC_O, KC_D) {
       // ಠ__ಠ
@@ -482,29 +512,103 @@ void matrix_scan_user(void) {
 }
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  if (aesthetic) {
+    switch (keycode) {
+    case KC_A ... KC_0:
+    case KC_SPACE ... KC_SLASH:
+      if (record->event.pressed) {
+        state = active;
+        velocikey_accelerate();
+        tap_code(keycode);
+        tap_code(KC_SPACE);
+      }
+      return false;
+
+    case KC_BSPACE:
+      if (record->event.pressed) {
+        state = active;
+        velocikey_accelerate();
+        tap_code(keycode);
+        tap_code(keycode);
+      }
+      return false;
+    default: // Do nothing
+      break;
+    }
+  }
+
+  if (shifty) {
+    switch (keycode) {
+    case KC_A ... KC_Z:
+      if (record->event.pressed) {
+        int shift = rand() % 2;
+        state = active;
+        velocikey_accelerate();
+        if (shift == 1){
+          register_code(KC_LSFT);
+        }
+        tap_code(keycode);
+        if (shift == 1){
+          unregister_code(KC_LSFT);
+        }
+      }
+      return false;
+    case KC_SPC:
+      if (record->event.pressed) {
+        state = active;
+        velocikey_accelerate();
+        tap_code(keycode);
+      }
+      return false;
+    default: // Do nothing
+      break;
+    }
+  }
+
   switch (keycode) {
   case M_PMOD:
-    if (record->event.pressed) {
-      pri_mod(true);
-    } else {
-      pri_mod(false);
-    }
+    pri_mod(record->event.pressed);
     return false;
 
   case M_SMOD:
-    if (record->event.pressed) {
-      sec_mod(true);
-    } else {
-      sec_mod(false);
-    }
+    sec_mod(record->event.pressed);
     return false;
 
   case M_OS:
-    if (record->event.pressed) {
+    if (record->event.pressed){
       set_os((current_os+1) % _OS_COUNT, true);
     }
+
     return false;
 
+  case M_SPC:
+    if(record->event.pressed){
+      if (aesthetic) {
+        aesthetic = false;
+        rgblight_mode_noeeprom(1);
+      } else {
+        aesthetic = true;
+        shifty = false;
+        // snake mode
+        rgblight_mode_noeeprom(20);
+      }
+      return false;
+    }
+
+  case M_SFT:
+    if(record->event.pressed){
+      if (shifty) {
+        shifty = false;
+        rgblight_mode_noeeprom(1);
+      } else {
+        shifty = true;
+        aesthetic = false;
+        // knight mode
+        rgblight_mode_noeeprom(23);
+      }
+      return false;
+    }
+
   default:
     if (record->event.pressed) {
       state = active;
@@ -516,13 +620,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
 //Tap Dance Definitions
 qk_tap_dance_action_t tap_dance_actions[] = {
-  [TD_3_GRV_ACT]      = ACTION_TAP_DANCE_FN (dance_3),
-  [TD_C_CED]          = ACTION_TAP_DANCE_FN (dance_c),
   [TD_GRV_3GRV]       = ACTION_TAP_DANCE_FN (dance_grv),
   [TD_SING_DOUB]      = ACTION_TAP_DANCE_FN (dance_quot),
-  [TD_STRK_SHOT]      = ACTION_TAP_DANCE_FN (dance_strk),
-  [TD_HYPH_UNDR]      = ACTION_TAP_DANCE_DOUBLE (KC_MINS, LSFT(KC_MINS)),
-  [TD_BRCK_PARN_O]    = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, LSFT(KC_9)),
-  [TD_BRCK_PARN_C]    = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, LSFT(KC_0)),
+  [TD_HYPH_UNDR]      = ACTION_TAP_DANCE_FN (dance_hyph),
+  [TD_BRCK_PARN_O]    = ACTION_TAP_DANCE_FN (dance_obrck),
+  [TD_BRCK_PARN_C]    = ACTION_TAP_DANCE_FN (dance_cbrck),
   [TD_LALT_RALT]      = ACTION_TAP_DANCE_DOUBLE (KC_LALT, KC_RALT),
+  [TD_GAME]           = ACTION_TAP_DANCE_FN (dance_game),
 };
index a4672a8e82ef3d07b1ef539c71209c23e205ab7c..fdc4a5fee64b144fa2c2a965850c48dfd402fd13 100644 (file)
 #define STRIKE      TD(TD_STRK_SHOT)
 #define HYPHEN      TD(TD_HYPH_UNDR)
 #define CEDILLA     TD(TD_C_CED)
+#define GAME        TD(TD_GAME)
 
 #define RAISE       MO(1)
 #define LOWER       MO(2)
-#define KEEB        MO(3)
-#define MEDIA       MO(4)
-#define LAZY        MO(5)
+#define MEDIA       MO(3)
+#define FUNCT       MO(4)
+#define KEEB        MO(5)
 
 #define MOD_CTL_MASK (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))
 #define MOD_GUI_MASK (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI))
@@ -37,9 +38,10 @@ enum {
   _QWERTY = 0,
   _RAISE,
   _LOWER,
-  _KEEB,
   _MEDIA,
-  _LAZY,
+  _FUNCT,
+  _KEEB,
+  _GAMING,
 };
 
 typedef enum {
@@ -76,22 +78,9 @@ typedef enum {
 enum custom_keycodes {
   M_PMOD = SAFE_RANGE,
   M_SMOD,
-  M_P_B,
-  M_C_A_D,
-  M_CALC,
   M_OS,
-  M_TF,
-  M_TM,
-  M_GGT,
-  M_LOD,
-  M_LENNY,
-  M_BOLD,
-  M_ITAL,
-  M_ULIN,
-  M_SNIPT,
-  M_REPO,
-  M_SHRUG,
-  M_UF,
+  M_SFT,
+  M_SPC,
 };
 
 enum tapdances {
@@ -101,16 +90,13 @@ enum tapdances {
   TD_SLSH_HTTP,
   TD_SING_DOUB,
   TD_HYPH_UNDR,
-  TD_STRK_SHOT,
   TD_SPECIAL,
   TD_BRCK_PARN_O,
   TD_BRCK_PARN_C,
   TD_LALT_RALT,
-  SPC_SFT_NSFT,
+  TD_GAME,
 };
 
-void send_unicode_hex_string(const char *str);
-
 void velocikey_accelerate(void);
 void velocikey_decelerate(void);
 uint8_t velocikey_match_speed(uint8_t minValue, uint8_t maxValue);
@@ -146,6 +132,7 @@ void dance_quot (qk_tap_dance_state_t *state, void *user_data);
 void dance_strk (qk_tap_dance_state_t *state, void *user_data);
 void dance_3 (qk_tap_dance_state_t *state, void *user_data);
 void dance_c (qk_tap_dance_state_t *state, void *user_data);
+void dance_game (qk_tap_dance_state_t *state, void *user_data);
 
 int cur_dance (qk_tap_dance_state_t *state);
 void spc_finished (qk_tap_dance_state_t *state, void *user_data);
index 2e0a9ad019983217657ae8bef840028d5da5f3c1..5a89a18f60f2c121637616b619d1c10999568e26 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 
 #define TAPPING_TERM    200
-#define LEADER_TIMEOUT  250
+#define LEADER_TIMEOUT  300
 
 #define LEADER_PER_KEY_TIMING
diff --git a/users/cbbrowne/cbbrowne.c b/users/cbbrowne/cbbrowne.c
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/users/cbbrowne/cbbrowne.h b/users/cbbrowne/cbbrowne.h
new file mode 100644 (file)
index 0000000..301636c
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef USERSPACE
+#define USERSPACE
+
+#ifdef BACKLIGHT_ENABLE
+#include "backlight.h"
+#endif
+#include "quantum.h"
+#include "config.h"
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#ifndef NO_DEBUG
+#define NO_DEBUG
+#endif
+#ifndef NO_PRINT
+#define NO_PRINT
+#endif
+
+/* cbbrowne user configuration */
+
+#define randadd 53
+#define randmul 181
+#define randmod 167
+
+/* Filler to make layering a bit clearer *
+ * borrowed from basic keymap            */
+
+#define _______ KC_TRNS
+#define _____   KC_NO
+
+#define LEADER_TIMEOUT 300
+#ifndef LIGHT_CONFIG_H
+#define BACKLIGHT_BREATHING
+#endif
+
+#endif
+
+#endif
diff --git a/users/cbbrowne/rules.mk b/users/cbbrowne/rules.mk
new file mode 100644 (file)
index 0000000..497638c
--- /dev/null
@@ -0,0 +1 @@
+SRC += cbbrowne.c
index 2e125d1e4ef042639e94b393201a1a504fdd8bc2..2abd326dac94aeba36a104fd8cb60e1a9990b287 100644 (file)
   // #ifdef RGBLIGHT_ENABLE
   // #define NO_MUSIC_MODE
   // #endif //RGBLIGHT_ENABLE/
-  #ifndef __arm__
-    #undef  NOTE_REST
-    #define NOTE_REST         1.00f
-  #endif // !__arm__
+  // #ifndef __arm__
+  //   #undef  NOTE_REST
+  //   #define NOTE_REST         1.00f
+  // #endif // !__arm__
 
 #define UNICODE_SONG_OSX SONG(RICK_ROLL)
 #define UNICODE_SONG_LNX SONG(RICK_ROLL)
index 8019f26676f2ade937eac21800ace54a962999a1..6968a4b9285866db4939a841d6c1f0e030f7355a 100644 (file)
@@ -144,9 +144,9 @@ void shutdown_user (void) {
     rgblight_setrgb_red();
   #endif // RGBLIGHT_ENABLE
   #ifdef RGB_MATRIX_ENABLE
-    uint16_t timer_start = timer_read();
-    rgb_matrix_set_color_all( 0xFF, 0x00, 0x00 );
-    while(timer_elapsed(timer_start) < 250) { wait_ms(1); }
+    // uint16_t timer_start = timer_read();
+    // rgb_matrix_set_color_all( 0xFF, 0x00, 0x00 );
+    // while(timer_elapsed(timer_start) < 250) { wait_ms(1); }
   #endif //RGB_MATRIX_ENABLE
   shutdown_keymap();
 }
index ca55198e3eb185c3202288f64655edd828fb0a48..c19b189434694352fab9b81dff6bd50f09b6b85c 100644 (file)
@@ -53,11 +53,6 @@ enum userspace_layers {
 /*
 define modifiers here, since MOD_* doesn't seem to work for these
  */
-#define MODS_SHIFT_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-#define MODS_CTRL_MASK  (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
-#define MODS_ALT_MASK  (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
-#define MODS_GUI_MASK  (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
-
 
 
 bool mod_key_press_timer (uint16_t code, uint16_t mod_code, bool pressed);
index 73cad92f60e7ff71edfeeb828e31d2559f851753..2d9025b375b78ccb6d7f1631dc071a2b6d6e51bf 100644 (file)
@@ -12,7 +12,6 @@ bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
   return true;
 }
 
-
 // Defines actions tor my global custom keycodes. Defined in drashna.h file
 // Then runs the _keymap's record handier if not processed here
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
@@ -35,30 +34,28 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
   case KC_MAKE:  // Compiles the firmware, and adds the flash command based on keyboard bootloader
     if (!record->event.pressed) {
-      #if !defined(KEYBOARD_viterbi)
-        uint8_t temp_mod = get_mods();
-        uint8_t temp_osm = get_oneshot_mods();
-        clear_mods(); clear_oneshot_mods();
-      #endif
+      uint8_t temp_mod = get_mods();
+      uint8_t temp_osm = get_oneshot_mods();
+      clear_mods(); clear_oneshot_mods();
       send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), MACRO_TIMER);
-      #if defined(KEYBOARD_viterbi)
-        send_string_with_delay_P(PSTR(":dfu" SS_TAP(X_ENTER)), MACRO_TIMER);
-      #else
-        if (temp_mod & MODS_SHIFT_MASK || temp_osm & MODS_SHIFT_MASK) {
-          #if defined(__arm__)
-            send_string_with_delay_P(PSTR(":dfu-util"), MACRO_TIMER);
-          #elif defined(BOOTLOADER_DFU)
-            send_string_with_delay_P(PSTR(":dfu"), MACRO_TIMER);
-          #elif defined(BOOTLOADER_HALFKAY)
-            send_string_with_delay_P(PSTR(":teensy"), MACRO_TIMER);
-          #elif defined(BOOTLOADER_CATERINA)
-            send_string_with_delay_P(PSTR(":avrdude"), MACRO_TIMER);
-          #endif // bootloader options
-        }
-        if (temp_mod & MODS_CTRL_MASK || temp_osm & MODS_CTRL_MASK) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), MACRO_TIMER); }
-        send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), MACRO_TIMER);
-        set_mods(temp_mod);
-      #endif
+#ifndef MAKE_BOOTLOADER
+      if ( ( temp_mod | temp_osm ) & MOD_MASK_SHIFT )
+#endif
+      {
+        #if defined(__arm__)
+          send_string_with_delay_P(PSTR(":dfu-util"), MACRO_TIMER);
+        #elif defined(BOOTLOADER_DFU)
+          send_string_with_delay_P(PSTR(":dfu"), MACRO_TIMER);
+        #elif defined(BOOTLOADER_HALFKAY)
+          send_string_with_delay_P(PSTR(":teensy"), MACRO_TIMER);
+        #elif defined(BOOTLOADER_CATERINA)
+          send_string_with_delay_P(PSTR(":avrdude"), MACRO_TIMER);
+        #endif // bootloader options
+       }
+      if ( ( temp_mod | temp_osm ) & MOD_MASK_CTRL) { send_string_with_delay_P(PSTR(" -j8 --output-sync"), MACRO_TIMER); }
+      send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), MACRO_TIMER);
+      set_mods(temp_mod);
+      set_oneshot_mods(temp_osm);
     }
     break;
 
index 7eaa7e94918b6b846f3f3432f6106a365da87a94..a98ad590cc73ec27f1d6c57aa38d4f81b8974d22 100644 (file)
@@ -4,6 +4,7 @@
 
 #if defined(RGBLIGHT_ENABLE)
 extern rgblight_config_t rgblight_config;
+bool has_initialized;
 #elif defined(RGB_MATRIX_ENABLE)
 extern rgb_config_t rgb_matrix_config;
 #endif
@@ -17,7 +18,7 @@ void rgblight_sethsv_default_helper(uint8_t index) {
 #ifdef INDICATOR_LIGHTS
 void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
   if (userspace_config.rgb_layer_change && biton32(layer_state) == 0) {
-    if (this_mod & MODS_SHIFT_MASK || this_led & (1<<USB_LED_CAPS_LOCK) || this_osm & MODS_SHIFT_MASK) {
+    if ( (this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1<<USB_LED_CAPS_LOCK) ) {
       #ifdef SHFT_LED1
         rgblight_sethsv_at(120, 255, 255, SHFT_LED1);
       #endif // SHFT_LED1
@@ -32,7 +33,7 @@ void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
         rgblight_sethsv_default_helper(SHFT_LED2);
       #endif // SHFT_LED2
     }
-    if (this_mod & MODS_CTRL_MASK || this_osm & MODS_CTRL_MASK) {
+    if ( (this_mod | this_osm) & MOD_MASK_CTRL) {
       #ifdef CTRL_LED1
         rgblight_sethsv_at(0, 255, 255, CTRL_LED1);
       #endif // CTRL_LED1
@@ -47,7 +48,7 @@ void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
         rgblight_sethsv_default_helper(CTRL_LED2);
       #endif // CTRL_LED2
     }
-    if (this_mod & MODS_GUI_MASK || this_osm & MODS_GUI_MASK) {
+    if ( (this_mod | this_osm) & MOD_MASK_GUI) {
       #ifdef GUI_LED1
         rgblight_sethsv_at(51, 255, 255, GUI_LED1);
       #endif // GUI_LED1
@@ -62,7 +63,7 @@ void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
         rgblight_sethsv_default_helper(GUI_LED2);
       #endif // GUI_LED2
     }
-    if (this_mod & MODS_ALT_MASK || this_osm & MODS_ALT_MASK) {
+    if ( (this_mod | this_osm) & MOD_MASK_ALT) {
       #ifdef ALT_LED1
         rgblight_sethsv_at(240, 255, 255, ALT_LED1);
       #endif // ALT_LED1
@@ -81,7 +82,9 @@ void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
 }
 
 void matrix_scan_indicator(void) {
-  set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
+  if (has_initialized) {
+    set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
+  }
 }
 #endif //INDICATOR_LIGHTS
 
@@ -244,22 +247,16 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
 
 
 void keyboard_post_init_rgb(void) {
-
 #ifdef RGBLIGHT_ENABLE
-  if (userspace_config.rgb_layer_change) {
-    rgblight_enable_noeeprom();
-    switch (biton32(eeconfig_read_default_layer())) {
-      case _COLEMAK:
-        rgblight_sethsv_noeeprom_magenta(); break;
-      case _DVORAK:
-        rgblight_sethsv_noeeprom_springgreen(); break;
-      case _WORKMAN:
-        rgblight_sethsv_noeeprom_goldenrod(); break;
-      default:
-        rgblight_sethsv_noeeprom_cyan(); break;
-    }
-    rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
-  }
+       rgblight_enable_noeeprom();
+       layer_state_set_user(layer_state);
+  uint16_t old_hue = rgblight_config.hue;
+       rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+       for (uint16_t i = 360; i > 0; i--) {
+               rgblight_sethsv_noeeprom( ( i + old_hue) % 360, 255, 255);
+    wait_ms(10);
+       }
+       layer_state_set_user(layer_state);
 #endif
 }
 
index 6d8612e71ae8b572154abbede89cfd7e378dd8eb..5050704a53b3571464774cbcdc467ff23535da63 100644 (file)
@@ -42,3 +42,7 @@ ifdef CONSOLE_ENABLE
     OPT_DEFS += -DKEYLOGGER_ENABLE
   endif
 endif
+
+ifeq ($(strip $(MAKE_BOOTLOADER)), yes)
+    OPT_DEFS += -DMAKE_BOOTLOADER
+endif
index 1ac61079426afd8c374290be85e3fc128e9b5e5f..892ce4be3bae1653adaf541e9828303ade7c7ccf 100644 (file)
@@ -1,10 +1,5 @@
 #include "edvorakjp.h"
 
-void dvorakj_layer_off(void) {
-  layer_off(_EDVORAKJ1);
-  layer_off(_EDVORAKJ2);
-}
-
 void matrix_init_user(void) {
   edvorakjp_status_init();
   matrix_init_keymap();
@@ -25,7 +20,6 @@ uint32_t layer_state_set_keymap(uint32_t state) {
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
   return process_record_keymap(keycode, record) &&\
-         process_record_edvorakjp_ext(keycode, record) &&\
          process_record_edvorakjp_swap_scln(keycode, record) &&\
          process_record_edvorakjp_config(keycode, record) &&\
          process_record_layer(keycode, record) &&\
index e781bf2378e8eafa9bda099c8be3011c82c9ddaa..688cdeffb3a968bbc732caec0c7ed63390ca7b9b 100644 (file)
@@ -10,9 +10,6 @@ extern keymap_config_t keymap_config;
 
 enum edvorakjp_layers {
   _EDVORAK = 0,
-  _EDVORAKJ1,
-  _EDVORAKJ2,
-  _QWERTY,
   _LOWER,
   _RAISE,
   _ADJUST,
@@ -21,26 +18,24 @@ enum edvorakjp_layers {
 
 enum edvorakjp_keycodes {
   EDVORAK = SAFE_RANGE,
-  QWERTY,
   LOWER,
   RAISE,
   KC_MAC,
   KC_WIN,
-  KC_EXTON,
-  KC_EXTOFF,
   KC_JPN,
   KC_ENG,
-  KC_AI,
-  KC_OU,
-  KC_EI,
-  KC_ANN,
-  KC_ONN,
-  KC_ENN,
-  KC_INN,
-  KC_UNN,
   NEW_SAFE_RANGE
 };
 
+#define KC_LC(k) LCTL_T(KC_##k)
+#define KC_LS(k) LSFT_T(KC_##k)
+#define KC_LA(k) LALT_T(KC_##k)
+#define KC_LG(k) LGUI_T(KC_##k)
+#define KC_RC(k) RCTL_T(KC_##k)
+#define KC_RS(k) RSFT_T(KC_##k)
+#define KC_RG(k) RGUI_T(KC_##k)
+#define KC_RA(k) RALT_T(KC_##k)
+
 enum tap_dance_code {
   TD_LOWER = 0,
   TD_RAISE
@@ -57,8 +52,6 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
 
 // status
 void edvorakjp_status_init(void);
-bool get_enable_jp_extra_layer(void);
-void set_enable_jp_extra_layer(bool new_state);
 bool get_enable_kc_lang(void);
 void set_enable_kc_lang(bool new_state);
 bool get_japanese_mode(void);
@@ -69,7 +62,6 @@ void set_japanese_mode(bool new_state);
  * return false if processed, or return true if not processed.
  * You can add your original macros in process_record_keymap() in keymap.c.
  */
-bool process_record_edvorakjp_ext(uint16_t keycode, keyrecord_t *record);
 bool process_record_edvorakjp_swap_scln(uint16_t keycode, keyrecord_t *record);
 bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record);
 bool process_record_layer(uint16_t keycode, keyrecord_t *record);
index 2dcdab2a25f97cce445de613f7b543f96932f029..ecc8db93637d95cc3cb5c258dd4414bc002a2ea8 100644 (file)
@@ -7,114 +7,6 @@ static uint16_t time_on_pressed;
  * Each process_record_* methods defined here are
  * return false if handle edvorak_keycodes, or return true others.
  */
-bool process_record_edvorakjp_ext(uint16_t keycode, keyrecord_t *record) {
-  if (!(default_layer_state == 1UL<<_EDVORAK &&
-        get_enable_jp_extra_layer() && get_japanese_mode())) {
-    return true;
-  }
-
-  // consonant keys
-  // layer_on(J1) or layer_on(J2) are defined based on key positions.
-  switch (keycode) {
-    // right hand's left side w/o N
-    case KC_F:
-    case KC_G:
-    case KC_R:
-    case KC_D:
-    case KC_T:
-    case KC_B:
-    case KC_H:
-    case KC_J:
-      if (record->event.pressed) {
-        layer_on(_EDVORAKJ1);
-      }
-      return true;
-
-    // N: toggle layer
-    case KC_N:
-      if (record->event.pressed) {
-        biton32(layer_state) == _EDVORAK ? layer_on(_EDVORAKJ1) : dvorakj_layer_off();
-      }
-      return true;
-
-    // left hand up and right hand's right side
-    case KC_Y:
-    case KC_P:
-    case KC_W:
-    case KC_Q:
-    case KC_S:
-    case KC_M:
-    case KC_K:
-    case KC_L:
-      if (record->event.pressed) {
-        layer_on(_EDVORAKJ2);
-      }
-      return true;
-    // left hand down
-    // If return true, QMK sends keycode in new layer,
-    // but these keys are only available in old layer.
-    case KC_X:
-    case KC_C:
-    case KC_V:
-    case KC_Z:
-      if (record->event.pressed) {
-        layer_on(_EDVORAKJ2);
-        tap_code(keycode);
-      }
-      return false;
-  }
-
-  // vowel keys, symbol keys and modifier keys
-  if (record->event.pressed) {
-    dvorakj_layer_off();
-  }
-  switch (keycode) {
-    // combination vowel keys
-    case KC_AI:
-      if (record->event.pressed) {
-        SEND_STRING("ai");
-      }
-      return false;
-    case KC_OU:
-      if (record->event.pressed) {
-        SEND_STRING("ou");
-      }
-      return false;
-    case KC_EI:
-      if (record->event.pressed) {
-        SEND_STRING("ei");
-      }
-      return false;
-    case KC_ANN:
-      if (record->event.pressed) {
-        SEND_STRING("ann");
-      }
-      return false;
-    case KC_ONN:
-      if (record->event.pressed) {
-        SEND_STRING("onn");
-      }
-      return false;
-    case KC_ENN:
-      if (record->event.pressed) {
-        SEND_STRING("enn");
-      }
-      return false;
-    case KC_INN:
-      if (record->event.pressed) {
-        SEND_STRING("inn");
-      }
-      return false;
-    case KC_UNN:
-      if (record->event.pressed) {
-        SEND_STRING("unn");
-      }
-      return false;
-  }
-  // AOEIU and other (symbol, modifier) keys
-  return true;
-}
-
 bool process_record_edvorakjp_swap_scln(uint16_t keycode, keyrecord_t *record) {
 #ifdef SWAP_SCLN
   static const uint8_t shift_bits = MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT);
@@ -146,30 +38,13 @@ bool process_record_edvorakjp_config(uint16_t keycode, keyrecord_t *record) {
         set_enable_kc_lang(keycode == KC_MAC);
       }
       return false;
-    case KC_EXTON:
-    case KC_EXTOFF:
-      if (record->event.pressed) {
-        set_enable_jp_extra_layer(keycode == KC_EXTON);
-      }
-      return false;
   }
   return true;
 }
 
 bool process_record_layer(uint16_t keycode, keyrecord_t *record) {
-  switch (keycode) {
-    case EDVORAK:
-      if (record->event.pressed) {
-        set_single_persistent_default_layer(_EDVORAK);
-      }
-      return false;
-    case QWERTY:
-      if (record->event.pressed) {
-        dvorakj_layer_off();
-        set_single_persistent_default_layer(_QWERTY);
-      }
-      return false;
 #if TAP_DANCE_ENABLE != yes
+  switch (keycode) {
     case LOWER:
       if (record->event.pressed) {
         layer_on(_LOWER);
@@ -196,8 +71,8 @@ bool process_record_layer(uint16_t keycode, keyrecord_t *record) {
         time_on_pressed = 0;
       }
       return false;
-#endif
   }
+#endif
   return true;
 }
 
index a60c8d853b0a632d696cbed0e9b601ece33787b7..128fc3bd28eb273795885cb73dd09a688cdf1570 100644 (file)
@@ -4,8 +4,7 @@
 typedef union {
   uint8_t raw;
   struct {
-    bool enable_jp_extra_layer : 1;
-    bool enable_kc_lang        : 1;  // for macOS
+    bool enable_kc_lang;  // for macOS
   };
 } edvorakjp_config_t;
 static edvorakjp_config_t edvorakjp_config;
@@ -34,15 +33,6 @@ void edvorakjp_status_init(void) {
   edvorakjp_config.raw = eeconfig_read_edvorakjp();
 }
 
-bool get_enable_jp_extra_layer(void) {
-  return edvorakjp_config.enable_jp_extra_layer;
-}
-
-void set_enable_jp_extra_layer(bool new_state) {
-  edvorakjp_config.enable_jp_extra_layer = new_state;
-  eeconfig_update_edvorakjp(edvorakjp_config.raw);
-}
-
 bool get_enable_kc_lang(void) {
   return edvorakjp_config.enable_kc_lang;
 }
@@ -65,7 +55,6 @@ void set_japanese_mode(bool new_state) {
       SEND_STRING(SS_LALT("`"));
     }
   } else {
-    dvorakj_layer_off();
     if (edvorakjp_config.enable_kc_lang) {
       SEND_STRING(SS_TAP(X_LANG2));
     } else {
index 62c0c100a22b766af08430bb5de4b7762a95b40a..d5369f9266e6a4dca957ec2d7c0f5d40f56b7b2b 100644 (file)
@@ -8,8 +8,11 @@ enum tap_state {
   HOLD
 };
 
-static int td_status_lower = NONE;
-static int td_status_raise = NONE;
+typedef struct {
+  uint8_t lower;
+  uint8_t raise;
+} td_status_t;
+static td_status_t td_status = {NONE, NONE};
 
 int cur_dance(qk_tap_dance_state_t *state) {
   if (state->interrupted || !state->pressed) {
@@ -20,14 +23,14 @@ int cur_dance(qk_tap_dance_state_t *state) {
 }
 
 void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
-  td_status_lower = cur_dance(state);
-  switch(td_status_lower) {
+  td_status.lower = cur_dance(state);
+  switch(td_status.lower) {
     case SINGLE_TAP:
       set_japanese_mode(false);
-      register_code(KC_ESC);
       break;
     case DOUBLE_TAP:
       set_japanese_mode(false);
+      register_code(KC_ESC);
       break;
     case HOLD:
       break;
@@ -36,18 +39,19 @@ void td_lower_finished(qk_tap_dance_state_t *state, void *user_data) {
 }
 
 void td_lower_reset(qk_tap_dance_state_t *state, void *user_data) {
-  if (td_status_lower == SINGLE_TAP) {
+  if (td_status.lower == DOUBLE_TAP) {
     unregister_code(KC_ESC);
   }
   layer_off(_LOWER);
-  td_status_lower = NONE;
+  td_status.lower = NONE;
 }
 
 void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
-  td_status_raise = cur_dance(state);
-  switch(td_status_raise) {
-    case SINGLE_TAP:
+  td_status.raise = cur_dance(state);
+  switch(td_status.raise) {
     case DOUBLE_TAP:
+      // same as single
+    case SINGLE_TAP:
       set_japanese_mode(true);
       break;
     case HOLD:
@@ -58,14 +62,12 @@ void td_raise_finished(qk_tap_dance_state_t *state, void *user_data) {
 
 void td_raise_reset(qk_tap_dance_state_t *state, void *user_data) {
   layer_off(_RAISE);
-  td_status_raise = NONE;
+  td_status.raise = NONE;
 }
 
 qk_tap_dance_action_t tap_dance_actions[] = {
-  [TD_LOWER] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(
-      NULL, td_lower_finished, td_lower_reset, TAPPING_TERM * 1.5
-      ),
-  [TD_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(
-      NULL, td_raise_finished, td_raise_reset, TAPPING_TERM * 1.5
-      )
+  [TD_LOWER] =
+    ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_lower_finished, td_lower_reset, 100),
+  [TD_RAISE] =
+    ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, td_raise_finished, td_raise_reset, 100)
 };
index 077ba4abdcfcec571a8043901b97149a68f1760c..679d84b3deff93ecefff93925647dabdb59bd6da 100644 (file)
@@ -5,49 +5,20 @@ epaew's Enhanced Dvorak layout for Japanese Programmer
 ## Layout overview
 This is a sample. You can swap any symbol keys and modifier keys.
 
-- Base layer (for ansi layout)
+- Basic layout (for ansi)
 ```
   //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
       `  , !  , @  , #  , $  , %  , ^  , &  , *  , (  , )  , [  , ]  ,  BSPC   ,
   //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
-      TAB  , '  , ,  , .  , Y  , P  , F  , G  , R  , W  , Q  , /  , =  ,   \   ,
+      TAB  , '  , ,  , .  , Y  , Q  , F  , G  , R  , W  , P  , /  , =  ,   \   ,
   //+------++---++---++---++---++---++---++---++---++---++---++---++---+-------+
       CAPS  , A  , O  , E  , I  , U  , D  , T  , N  , S  , M  , -  ,    ENT    ,
   //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-----------+
-       LSFT   , ;  , X  , C  , V  , Z  , B  , H  , J  , K  , L  ,     RSFT     ,
+       LSFT   , :  , X  , C  , V  , Z  , H  , J  , K  , L  , B  ,     RSFT     ,
   //+------+--+---++----++---+----+----+----+----+-+--+---++----++------+------+
       LCTL , LGUI , LALT ,          SPACE          , RALT , RGUI , MENU , RCTL
   //+------+------+------+-------------------------+------+------+------+------+
 ```
-- Base layer (for iso layout)
-  - Two C keys are placed, it's on purpose.
-```
-  //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
-      `  , !  , @  , #  , $  , %  , ^  , &  , *  , (  , )  , [  , ]  ,  BSPC   ,
-  //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
-      TAB  , '  , ,  , .  , Y  , P  , F  , G  , R  , W  , C  , /  , =  ,
-  //+------++---++---++---++---++---++---++---++---++---++---++---++---++
-      CAPS  , A  , O  , E  , I  , U  , D  , T  , N  , S  , M  , ;  , -  , ENT  ,
-  //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+------+
-       LSFT   , Q  , X  , C  , V  , Z  , B  , H  , J  , K  , L  , \  ,  RSFT   ,
-  //+------+--+---++----++---+----+----+----+----+-+--+---++----++---+--+------+
-      LCTL , LGUI , LALT ,          SPACE          , RALT , RGUI , MENU , RCTL
-  //+------+------+------+-------------------------+------+------+------+------+
-```
-- Additional layer (common, blanks are transparent)
-```
-  //+----+----+----+----+----+----+----+----+----+----+----+----+----+---------+
-         ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,    ,         ,
-  //+----+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+-------+
-           , AI , OU , EI ,    ,    ,    ,    ,    ,    ,    ,    ,    ,       ,
-  //+------++---++---++---++---++---++---++---++---++---++---++---++---+-------+
-            , A  , O  , E  , I  , U  ,    , Y1 , N  , Y2 ,    ,    ,           ,
-  //+-------+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-+--+-----------+
-              ,ANN ,ONN ,ENN ,INN ,UNN ,    ,    ,    ,    ,    ,              ,
-  //+------+--+---++----++---+----+----+----+----+-+--+---++----++------+------+
-           ,      ,      ,                         ,      ,      ,      ,
-  //+------+------+------+-------------------------+------+------+------+------+
-```
 
  And you can see [my iris keyboard layout](../../keyboards/iris/keymaps/edvorakjp/keymap.c) for sample implementation, too.
 
@@ -57,36 +28,25 @@ This is a sample. You can swap any symbol keys and modifier keys.
   - IME 切り替えキー
     - 長押しでレイヤー切り替え、短押しでIME切り替え
     - macOS(かな/英数)、Windows(Alt+\`)の両方に対応
-  - DvorakJP(<http://www7.plala.or.jp/dvorakjp/>)を参考にした日本語入力用キーの導入
-    - 拗音入力用のYキーを追加配置
-    - 二重母音入力用のキー(AI, OU, EI)
-    - 撥音入力用のキー(ANN, ONN, ENN, INN, UNN)
-    - いずれかの子音を押下することで Additional layer が出現し、いずれかの母音を押下することで Base layer に戻ります(※1※2)
-      - ※1促音の入力に使うため、また連続で同じ指での打鍵を減らすために、  
-        FGRDTNBHJ を押下した場合はy1が、それ以外の子音を押下した場合はy2が出現しません
-      - ※2撥音の入力のため、nを2連打すると、Base layerに戻ります
 - Define some custom keys for typing Japanese
   - IME switching
     - act as LOWER/RAISE when hold, act as IME switching when tapped
     - for macOS(かな/英数), for Windows(Alt+\`)
-  - oneshot combination keys, inspired from DvorakJP (<http://www7.plala.or.jp/dvorakjp/>)
-    - additional Y key to enter a contracted sound
-    - diphthong keys (AI, OU, EI)
-    - syllabic nasal (ANN, ONN, ENN, INN, UNN)
-    - Additional layer is appeared when you taps any consonant keys, and disappeared when you taps any diphthong keys.
 
 ## for Programmer
 
 - Dvorak 配列をベースに、ショートカットでよく利用される XCV は QWERTY 配列の位置を維持
 - 一部にVimユーザ用のキー配置を実施
     - HJKL キーを横並びで配置
-    - Shift押下時と非押下時で、";"キーの挙動を入れ替え(`config.h` 内で `#define SWAP_SCLN` の宣言が必要です)
+    - Shift押下時と非押下時で、";"キーの挙動を入れ替え  
+      (`config.h` 内で `#define SWAP_SCLN` の宣言が必要です)
 - デフォルトレイヤーには、数字キーの代わりに記号 `!@#$%^&*()` を配置
 
 - mainly based on Dvorak layout, but XCV is available in the same position of QWERTY layout
 - for Vim users
     - HJKL is lining side by side
-    - swap the ";" key behavior. i.e. send ":" normally and send ";" when you hold shift. (need `#define SWAP_SCLN` in your `config.h`)
+    - swap the ";" key behavior. i.e. send ":" normally and send ";" when you hold shift.  
+      (need `#define SWAP_SCLN` in your `config.h`)
 - we can type `!@#$%^&*()` keys without shift keys in base layer
 
 ## License
index f282088144d84ccf0fd4c47f3878465a20cb3831..e63ec4d9b7aa5862a61bffd62ebda9ed43f90c29 100644 (file)
@@ -39,6 +39,7 @@
 #undef TAPPING_TERM
 #undef IGNORE_MOD_TAP_INTERRUPT
 
+#define PERMISSIVE_HOLD
 #define TAPPING_TOGGLE  1
 #define TAPPING_TERM    200
 #define IGNORE_MOD_TAP_INTERRUPT
index 33162b6891a4913197d13d1f47dc5b25be73761d..b37c4cfbb7591bade677e8152d970860229a4353 100644 (file)
 #include "jarred.h"
 #include "version.h"
 
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+bool lowerPressed, raisePressed;
+
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 
   switch (keycode) {
+    case LOWER:
+    case RAISE:
+      // Both lower and raise activate the same layer
+      if (record->event.pressed) {
+        layer_on(_LW);
+      } else {
+        layer_off(_LW);
+      }
+      
+      // But keep track of each to active adjust layer
+      if (keycode == LOWER) {
+        lowerPressed = record->event.pressed;
+      } else {
+        raisePressed = record->event.pressed;
+      }
+      
+      // When both are pressed, activate adjust
+      if (lowerPressed && raisePressed) {
+        layer_on(_NP);
+      } else {
+        layer_off(_NP);
+      }
+      
+      break;
+    
+    case NUMPAD:
+        if (record->event.pressed) {
+          layer_on(_NP);
+        } else {
+          layer_off(_NP);
+        }
+        break;
+    
+    case NAVI:
+      if (record->event.pressed) {
+        layer_on(_NV);
+      } else {
+        layer_off(_NV);
+        
+        // Release mods set by ALT_TAB and CTL_TAB
+        unregister_code(KC_LALT);
+        unregister_code(KC_LCTL);
+      }
+      break;
+    
     case VRSN: // Prints firmware version
       if (record->event.pressed) {
         send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), MACRO_TIMER);
       }
-      return false;
+      break;
+      
+    case ALT_TAB:
+      if (record->event.pressed) {
+        register_code(KC_LALT);
+        tap_code(KC_TAB);
+      }
+      break;
+      
+    case CTL_TAB:
+      if (record->event.pressed) {
+        register_code(KC_LCTL);
+        tap_code(KC_TAB);
+      }
       break;
   }
 
-  return true;
+  return process_record_keymap(keycode, record);
 }
index a6774ce264e7d95f950c1d5beaac648d60752d3d..ae48adb70c1545cd5d2ddd313ddc3f630ccac157 100644 (file)
@@ -13,6 +13,8 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
+
+// TODO: Add Alt-Tab to nav + W layer
  
 #ifndef USERSPACE
 #define USERSPACE
 #include "quantum.h"
 
 enum userspace_custom_keycodes {
-  VRSN = SAFE_RANGE               // Prints QMK Firmware and board info
+  VRSN = SAFE_RANGE,               // Prints QMK Firmware and board info
+  ALT_TAB,
+  CTL_TAB,
+  
+  // Layer keys
+  NAVI,
+  LOWER,
+  RAISE,
+  NUMPAD
 };
 
 // Layers
-#define _QW 0
-#define _LW 1
-#define _NV 2
-#define _NP 3
-#define _MS 4 // Mouse
+enum {
+  _QW = 0,
+  _GAME,
+  _LW,
+  _NV,
+  _NP,
+  _MS,
+};
+
+#define MS_A       LT(_MS,KC_A)
 
-#define MS_A LT(_MS,KC_A)
+#define WIN_Z      LGUI_T(KC_Z)
+#define CTL_SLH    RCTL_T(KC_SLSH)
 
 // Wrappers
 #define LAYOUT_planck_grid_wrapper(...)      LAYOUT_planck_grid(__VA_ARGS__)
+#define LAYOUT_atreus62_grid_wrapper(...)      LAYOUT(__VA_ARGS__)
+#define LAYOUT_ergotravel_grid_wrapper(...)      LAYOUT(__VA_ARGS__)
 
 /* Qwerty Layer */
 #define QWERTY_L1   KC_TAB,     KC_Q,    KC_W,    KC_E,    KC_R,    KC_T
-#define QWERTY_L2   MO(_NV),    KC_A,    KC_S,    KC_D,    KC_F,    KC_G
-#define QWERTY_L3   KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B
-#define QWERTY_L4   KC_LCTL, KC_LGUI, MO(_NP), KC_LALT, MO(_LW),  KC_SPC
+#define QWERTY_L2   NAVI,       KC_A,    KC_S,    KC_D,    KC_F,    KC_G
+#define QWERTY_L3   KC_LSFT,   WIN_Z,    KC_X,    KC_C,    KC_V,    KC_B
+#define QWERTY_L4   KC_LCTL, KC_LGUI,  NUMPAD, KC_LALT,   LOWER,  KC_SPC
 
 #define QWERTY_R1                                                           KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSPC
 #define QWERTY_R2                                                           KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT
-#define QWERTY_R3                                                           KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, KC_RSFT
-#define QWERTY_R4                                                         KC_ENT, MO(_LW), KC_RALT, MO(_MS),  KC_APP, KC_RCTL
+#define QWERTY_R3                                                           KC_N,    KC_M, KC_COMM,  KC_DOT, CTL_SLH, KC_RSFT
+#define QWERTY_R4                                                         KC_ENT,   RAISE, KC_RALT, MO(_MS),  KC_APP, KC_RCTL
+
+#define QWERTY_4_DOX                           KC_LCTL,   LOWER,  KC_SPC, KC_ENT,   RAISE, KC_RALT
+
+/* Game Layer */
+#define GAME_L1   _______, _______, _______, _______, _______, _______
+#define GAME_L2   _______, _______, _______, _______, _______, _______
+#define GAME_L3   _______, _______, _______, _______, _______, _______
+#define GAME_L4   _______, _______, KC_LALT,   LOWER,  KC_SPC,  KC_SPC
+
+#define GAME_R1                                                         _______, _______, _______, _______, _______, _______
+#define GAME_R2                                                         _______, _______, _______, _______, _______, _______
+#define GAME_R3                                                         _______, _______, _______, _______, _______, _______
+#define GAME_R4                                                         _______, _______, _______, _______, _______, _______
 
 /* Lower / Upper Layer */
 #define LOWER_L1   KC_ESC ,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5
@@ -57,27 +88,33 @@ enum userspace_custom_keycodes {
 #define LOWER_R3                                                          KC_F12,  KC_GRV, _______, _______, _______, _______
 #define LOWER_R4                                                         _______, _______, _______, _______, _______, _______
 
+#define LOWER_4_DOX                           _______, _______, _______, _______, _______, _______
+
 /* Navigation Layer */
 #define NAV_L1     _______, _______, _______, KC_LGUI,  KC_DEL, KC_BSPC
 #define NAV_L2     _______, _______, _______, KC_LSFT, KC_LCTL,  KC_ENT
 #define NAV_L3     _______, _______, _______, _______, _______, _______
-#define NAV_L4     _______, _______, _______, _______, _______, _______
+#define NAV_L4     _______, _______, _______, CTL_TAB, ALT_TAB, _______
 
 #define NAV_R1                                                           _______, KC_HOME, KC_UP  , KC_END ,  KC_INS, _______
 #define NAV_R2                                                           _______, KC_LEFT, KC_DOWN, KC_RGHT,  KC_DEL, _______
 #define NAV_R3                                                           _______, KC_PGUP, KC_PGDN, _______, _______, _______
-#define NAV_R4                                                           _______, _______, _______, _______, _______, _______
+#define NAV_R4                                                           _______,  KC_APP, _______, _______, _______, _______
+
+#define NAV_4_DOX                             CTL_TAB, ALT_TAB, _______, _______,  KC_APP, _______
 
 /* Numpad Layer */
-#define NUMPAD_L1  RGB_TOG, RGB_MOD, _______, _______, RGB_HUD, RGB_HUI
+#define NUMPAD_L1  RGB_TOG, RGB_MOD,RGB_RMOD, _______, RGB_HUD, RGB_HUI
 #define NUMPAD_L2  BL_TOGG, BL_STEP, BL_BRTG, _______, RGB_SAD, RGB_SAI
 #define NUMPAD_L3  _______, _______, _______, _______, RGB_VAD, RGB_VAI
-#define NUMPAD_L4    RESET,    VRSN, _______, _______, RGB_SPD, RGB_SPI
+#define NUMPAD_L4  _______, _______, _______, _______, RGB_SPD, RGB_SPI
+
+#define NUMPAD_R1                                                        DF(_QW),DF(_GAME), _______, _______, _______,   RESET
+#define NUMPAD_R2                                                        _______, _______, _______, _______, _______, _______
+#define NUMPAD_R3                                                           VRSN, _______, _______, _______, _______, _______ 
+#define NUMPAD_R4                                                        _______, _______, _______, _______, _______, _______ 
 
-#define NUMPAD_R1                                                        _______, KC_P7,   KC_P8,   KC_P9,   KC_PMNS, _______
-#define NUMPAD_R2                                                        _______, KC_P4,   KC_P5,   KC_P6,   KC_PPLS, _______
-#define NUMPAD_R3                                                        _______, KC_P1,   KC_P2,   KC_P3,   KC_PAST, KC_ENT 
-#define NUMPAD_R4                                                        _______, KC_P0,   XXXXXXX, KC_PDOT, KC_PSLS, KC_ENT 
+#define NUMPAD_4_DOX                          _______, _______, _______, _______, _______, _______
 
 /* Mouse Layer */
 #define MOUSE_L1   _______, _______, _______, _______, _______, _______
@@ -90,11 +127,20 @@ enum userspace_custom_keycodes {
 #define MOUSE_R3                                                         _______, _______, _______, _______, _______, _______
 #define MOUSE_R4                                                         KC_BTN2, _______, _______, _______, _______, _______
 
+#define MOUSE_4_DOX                           _______, _______, _______, _______, _______, _______
+
+#define BLANK_12 KC_NO  ,       KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  ,                     KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO  , KC_NO
+
 #define QWERTY_1_12 QWERTY_L1, QWERTY_R1
 #define QWERTY_2_12 QWERTY_L2, QWERTY_R2
 #define QWERTY_3_12 QWERTY_L3, QWERTY_R3
 #define QWERTY_4_12 QWERTY_L4, QWERTY_R4
 
+#define GAME_1_12 GAME_L1, GAME_R1
+#define GAME_2_12 GAME_L2, GAME_R2
+#define GAME_3_12 GAME_L3, GAME_R3
+#define GAME_4_12 GAME_L4, GAME_R4
+
 #define LOWER_1_12 LOWER_L1, LOWER_R1
 #define LOWER_2_12 LOWER_L2, LOWER_R2
 #define LOWER_3_12 LOWER_L3, LOWER_R3
@@ -116,6 +162,7 @@ enum userspace_custom_keycodes {
 #define MOUSE_4_12 MOUSE_L4, MOUSE_R4
 
 #define QWERTY_4x12 QWERTY_1_12, QWERTY_2_12, QWERTY_3_12, QWERTY_4_12
+#define GAME_4x12 GAME_1_12, GAME_2_12, GAME_3_12, GAME_4_12
 #define LOWER_4x12 LOWER_1_12, LOWER_2_12, LOWER_3_12, LOWER_4_12
 #define NAV_4x12 NAV_1_12, NAV_2_12, NAV_3_12, NAV_4_12
 #define NUMPAD_4x12 NUMPAD_1_12, NUMPAD_2_12, NUMPAD_3_12, NUMPAD_4_12
index 47596279c363d98ef46f8ce744123b464b55d0b1..753742fa781006b554d38cf15b6024f81f8d0594 100644 (file)
@@ -1,15 +1,25 @@
 #include "konstantin.h"
 
-#ifdef LAYER_NUMPAD
-static void toggle_numpad(void) {
-  layer_invert(L_NUMPAD);
-  bool numpad_on = IS_LAYER_ON(L_NUMPAD);
-  bool num_lock_on = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
-  if (num_lock_on != numpad_on) {
-    tap_code(KC_NLCK); // Toggle Num Lock to match layer state
-  }
+__attribute__((weak))
+void keyboard_pre_init_keymap(void) {}
+
+void keyboard_pre_init_user(void) {
+  keyboard_pre_init_keymap();
+}
+
+__attribute__((weak))
+void eeconfig_init_keymap(void) {}
+
+void eeconfig_init_user(void) {
+  eeconfig_init_keymap();
+}
+
+__attribute__((weak))
+void keyboard_post_init_keymap(void) {}
+
+void keyboard_post_init_user(void) {
+  keyboard_post_init_keymap();
 }
-#endif
 
 __attribute__((weak))
 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
@@ -21,6 +31,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     return false;
   }
 
+#ifdef LAYER_NUMPAD
+  void toggle_numpad(void) {
+    layer_invert(L_NUMPAD);
+    bool numpad = IS_LAYER_ON(L_NUMPAD), num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
+    if (num_lock != numpad) {
+      tap_code(KC_NLCK);  // Toggle Num Lock to match layer state
+    }
+  }
+#endif
+
   switch (keycode) {
   case CLEAR:
     if (record->event.pressed) {
@@ -28,12 +48,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     }
     return false;
 
+  case DST_P_R:
+    (record->event.pressed ? register_code16 : unregister_code16)(
+      (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV
+    );
+    return false;
+
+  case DST_N_A:
+    (record->event.pressed ? register_code16 : unregister_code16)(
+      (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT
+    );
+    return false;
+
 #ifdef LAYER_FN
-  static bool fn_lock;
+    static bool fn_lock;
 
   case FN_FNLK:
     if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
-      fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
+      fn_lock = !IS_LAYER_ON(L_FN);  // Fn layer will be toggled after this
     }
     return true;
 #endif
index f67f9f1b7ef045ec10d0a7d8ae94f8dbe6e6d353..0639b93a6dead7d707f5c550fd86d71ac9086df6 100644 (file)
@@ -1,10 +1,13 @@
 #pragma once
 
 #include "quantum.h"
+#if defined(RGBLIGHT_ENABLE) || defined(RGBMATRIX_ENABLE)
+  #include "rgb.h"
+#endif
 #ifdef TAP_DANCE_ENABLE
   #include "tap_dance.h"
 #endif
-#ifdef UNICODE_ENABLE
+#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE)
   #include "unicode.h"
 #endif
 
   #define FN_FNLK TT(L_FN)
 #endif
 
+#define KC_SYSR LALT(KC_PSCR)
+#undef  KC_BRK
+#define KC_BRK  LCTL(KC_PAUS)
+
 #define MV_UP   LCTL(KC_UP)
 #define MV_DOWN LCTL(KC_DOWN)
 #define MV_LEFT LCTL(KC_LEFT)
 #define PRV_TAB LCTL(KC_PGUP)
 #define NXT_TAB LCTL(KC_PGDN)
 
+#define DST_ADD LCTL(LGUI(KC_D))
+#define DST_REM LCTL(LGUI(KC_F4))
+#define DST_PRV LCTL(LGUI(KC_LEFT))
+#define DST_NXT LCTL(LGUI(KC_RGHT))
+#ifndef DST_MOD_MASK
+  #define DST_MOD_MASK MOD_MASK_CTRL
+#endif
+
 #define LCT_CPS LCTL_T(KC_CAPS)
 
 #ifdef SEND_STRING_CLEAN
   #undef  SEND_STRING
-  #define SEND_STRING(...) {            \
-      uint8_t ss_mods = get_mods();     \
-      clear_mods();                     \
-      send_string_P(PSTR(__VA_ARGS__)); \
-      set_mods(ss_mods);                \
+  #define SEND_STRING(string) {     \
+      uint8_t ss_mods = get_mods(); \
+      clear_mods();                 \
+      send_string_P(PSTR(string));  \
+      set_mods(ss_mods);            \
     }
 #endif
 
 enum keycodes_user {
   CLEAR = SAFE_RANGE,
+  DST_P_R,
+  DST_N_A,
 #ifdef LAYER_NUMPAD
   NUMPAD,
 #endif
@@ -56,5 +73,9 @@ enum layers_user {
   L_RANGE_KEYMAP,
 };
 
+void keyboard_pre_init_keymap(void);
+void eeconfig_init_keymap(void);
+void keyboard_post_init_keymap(void);
+
 bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
 uint32_t layer_state_set_keymap(uint32_t state);
diff --git a/users/konstantin/rgb.c b/users/konstantin/rgb.c
new file mode 100644 (file)
index 0000000..0f0c73c
--- /dev/null
@@ -0,0 +1,24 @@
+#include "rgb.h"
+
+#ifdef RGBLIGHT_EFFECT_BREATHING
+const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {20, 30, 5, 10};
+#endif
+
+#ifdef RGBLIGHT_EFFECT_RAINBOW_MOOD
+const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {20, 50, 100};
+#endif
+
+#ifdef RGBLIGHT_EFFECT_RAINBOW_SWIRL
+const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 50, 100};
+#endif
+
+#ifdef RGBLIGHT_EFFECT_SNAKE
+const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {20, 50, 100};
+#endif
+
+#ifdef RGBLIGHT_EFFECT_KNIGHT
+const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {20, 50, 100};
+#endif
+
+const hsv_t GODSPEED_BLUE   = { .h = 280, .s = 68,  .v = RGBLIGHT_LIMIT_VAL };
+const hsv_t GODSPEED_YELLOW = { .h = 38,  .s = 153, .v = RGBLIGHT_LIMIT_VAL };
diff --git a/users/konstantin/rgb.h b/users/konstantin/rgb.h
new file mode 100644 (file)
index 0000000..53b5821
--- /dev/null
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "quantum.h"
+
+typedef struct {
+  uint16_t h;  // 0–360
+  uint8_t  s;  // 0–255
+  uint8_t  v;  // 0–255
+} hsv_t;
+
+typedef struct {
+  uint8_t r;  // 0–255
+  uint8_t g;  // 0–255
+  uint8_t b;  // 0–255
+} rgb_t;
+
+extern const hsv_t GODSPEED_BLUE;
+extern const hsv_t GODSPEED_YELLOW;
index d2522b952384f84900d42054aa2175a9c2ea8278..6bda030fb0b3404a23f4a9617f8653abe40ee190 100644 (file)
@@ -1,15 +1,12 @@
-BOOTMAGIC_ENABLE   = no
-COMMAND_ENABLE     = yes
-CONSOLE_ENABLE     = yes
-EXTRAKEY_ENABLE    = yes
-MOUSEKEY_ENABLE    = yes
-NKRO_ENABLE        = yes
-TAP_DANCE_ENABLE   = yes
-UNICODE_ENABLE     = yes
-
 SRC += konstantin.c
+ifneq (,$(filter yes,$(RGBLIGHT_ENABLE) $(RGB_MATRIX_ENABLE)))  # if either is yes
+  SRC += rgb.c
+endif
 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
   SRC += tap_dance.c
 endif
+ifneq (,$(filter yes,$(UNICODE_ENABLE) $(UNICODEMAP_ENABLE)))  # if either is yes
+  SRC += unicode.c
+endif
 
 EXTRAFLAGS += -flto
index b13f33c024f2d9584de07396f9af1bdad73cd0b5..0b405939b34c4a3d15ddc87b492a9bf0e39f98a8 100644 (file)
 #include "tap_dance.h"
 #include "konstantin.h"
 
-#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \
-    .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \
-    .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
+#define ACTION_TAP_DANCE_DOUBLE_MOD(mod1, mod2) {                   \
+    .fn        = { td_double_mod_each, NULL, td_double_mod_reset }, \
+    .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 },              \
   }
 
-void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) {
-  qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+void td_double_mod_each(qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_pair_t *data = (qk_tap_dance_pair_t *)user_data;
+
   // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
   if (state->count == 1 || state->count == 3) {
-    register_code(mods->kc1);
+    register_code(data->kc1);
   } else if (state->count == 2) {
-    unregister_code(mods->kc1);
-    register_code(mods->kc2);
+    unregister_code(data->kc1);
+    register_code(data->kc2);
   }
-  // Prevent tap dance from sending kc1 and kc2 as weak mods
-  state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2));
+  // Prevent tap dance from sending the mods as weak mods
+  state->weak_mods &= ~(MOD_BIT(data->kc1) | MOD_BIT(data->kc2));
 }
 
-void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) {
-  qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+void td_double_mod_reset(qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_pair_t *data = (qk_tap_dance_pair_t *)user_data;
+
   if (state->count == 1 || state->count >= 3) {
-    unregister_code(mods->kc1);
+    unregister_code(data->kc1);
   }
   if (state->count >= 2) {
-    unregister_code(mods->kc2);
+    unregister_code(data->kc2);
   }
 }
 
-struct {
-  bool fn_on; // Layer state when tap dance started
-  bool started;
-} td_fn_rctrl_data;
-
-void td_fn_rctrl_each(qk_tap_dance_state_t *state, void *user_data) {
-  if (!td_fn_rctrl_data.started) {
-    td_fn_rctrl_data.fn_on = IS_LAYER_ON(L_FN);
-    td_fn_rctrl_data.started = true;
+#define ACTION_TAP_DANCE_MOD_LAYER(mod, layer) {                  \
+    .fn        = { td_mod_layer_each, NULL, td_mod_layer_reset }, \
+    .user_data = &(qk_tap_dance_dual_role_t){ mod, layer },       \
   }
-  // Single tap → Fn, double tap → RCtrl, triple tap etc. → Fn+RCtrl
+
+void td_mod_layer_each(qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_dual_role_t *data = (qk_tap_dance_dual_role_t *)user_data;
+
+  // Single tap → mod, double tap → layer, triple tap etc. → mod+layer
   if (state->count == 1 || state->count == 3) {
-    layer_on(L_FN);
+    register_code(data->kc);
   } else if (state->count == 2) {
-    if (!td_fn_rctrl_data.fn_on) {
-      layer_off(L_FN);
-    }
-    register_code(KC_RCTL);
+    unregister_code(data->kc);
+    // Prevent tap dance from sending the mod as a weak mod
+    state->weak_mods &= ~MOD_BIT(data->kc);
+    layer_on(data->layer);
   }
 }
 
-void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) {
-  if ((state->count == 1 || state->count >= 3) && !td_fn_rctrl_data.fn_on) {
-    layer_off(L_FN);
+void td_mod_layer_reset(qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_dual_role_t *data = (qk_tap_dance_dual_role_t *)user_data;
+
+  if (state->count == 1 || state->count >= 3) {
+    unregister_code(data->kc);
   }
   if (state->count >= 2) {
-    unregister_code(KC_RCTL);
+    layer_off(data->layer);
   }
-  td_fn_rctrl_data.started = false;
 }
 
-void td_lsft_fn_each(qk_tap_dance_state_t *state, void *user_data) {
-  // Single tap → LShift, double tap → Fn, triple tap etc. → Fn+LShift
+#define ACTION_TAP_DANCE_LAYER_MOD(layer, mod) {                  \
+    .fn        = { td_layer_mod_each, NULL, td_layer_mod_reset }, \
+    .user_data = &(qk_tap_dance_layer_mod_t){ layer, mod, 0, 0 }, \
+  }
+
+typedef struct {
+  uint8_t  layer;
+  uint16_t kc;
+  bool     layer_on;  // Layer state when tap dance started
+  bool     started;
+} qk_tap_dance_layer_mod_t;
+
+void td_layer_mod_each(qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_layer_mod_t *data = (qk_tap_dance_layer_mod_t *)user_data;
+  if (!data->started) {
+    data->layer_on = IS_LAYER_ON(data->layer);
+    data->started = true;
+  }
+
+  // Single tap → layer, double tap → mod, triple tap etc. → layer+mod
   if (state->count == 1 || state->count == 3) {
-    register_code(KC_LSFT);
+    layer_on(data->layer);
   } else if (state->count == 2) {
-    unregister_code(KC_LSFT);
-    // Prevent tap dance from sending LShift as a weak mod
-    state->weak_mods &= ~MOD_BIT(KC_LSFT);
-    layer_on(L_FN);
+    if (!data->layer_on) {
+      layer_off(data->layer);
+    }
+    register_code(data->kc);
   }
 }
 
-void td_lsft_fn_reset(qk_tap_dance_state_t *state, void *user_data) {
-  if (state->count == 1 || state->count >= 3) {
-    unregister_code(KC_LSFT);
+void td_layer_mod_reset(qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_layer_mod_t *data = (qk_tap_dance_layer_mod_t *)user_data;
+
+  if ((state->count == 1 || state->count >= 3) && !data->layer_on) {
+    layer_off(data->layer);
   }
   if (state->count >= 2) {
-    layer_off(L_FN);
+    unregister_code(data->kc);
   }
+
+  data->started = false;
 }
 
 qk_tap_dance_action_t tap_dance_actions[] = {
-  [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop
+  [TD_DST_A_R] = ACTION_TAP_DANCE_DOUBLE(DST_ADD, DST_REM),
 
-  [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT),
-  [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI),
-  [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT),
+  [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_LALT),
+  [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RALT, KC_RGUI),
+  [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MOD(KC_RCTL, KC_RSFT),
 
-  [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset),
-  [TD_LSFT_FN] = ACTION_TAP_DANCE_FN_ADVANCED(td_lsft_fn_each, NULL, td_lsft_fn_reset),
+  [TD_LSFT_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_LSFT, L_FN),
+  [TD_RCTL_FN] = ACTION_TAP_DANCE_MOD_LAYER(KC_RCTL, L_FN),
+  [TD_FN_RCTL] = ACTION_TAP_DANCE_LAYER_MOD(L_FN, KC_RCTL),
 };
index 922a635141667c1457cf2ac2b5704e8535c1d5f8..ad7c04cb7f1565028cd069e0177e7df1d7760b52 100644 (file)
@@ -2,24 +2,24 @@
 
 #include "quantum.h"
 
-#define DESKTOP TD(TD_DESKTOP)
-#define DSKTP_L LCTL(LGUI(KC_LEFT))
-#define DSKTP_R LCTL(LGUI(KC_RGHT))
+#define DST_A_R TD(TD_DST_A_R)
 
 #define RAL_LAL TD(TD_RAL_LAL)
 #define RAL_RGU TD(TD_RAL_RGU)
 #define RCT_RSF TD(TD_RCT_RSF)
 
-#define FN_RCTL TD(TD_FN_RCTL)
 #define LSFT_FN TD(TD_LSFT_FN)
+#define RCTL_FN TD(TD_RCTL_FN)
+#define FN_RCTL TD(TD_FN_RCTL)
 
 enum tap_dance {
-  TD_DESKTOP,
+  TD_DST_A_R,
 
   TD_RAL_LAL,
   TD_RAL_RGU,
   TD_RCT_RSF,
 
-  TD_FN_RCTL,
   TD_LSFT_FN,
+  TD_RCTL_FN,
+  TD_FN_RCTL,
 };
diff --git a/users/konstantin/unicode.c b/users/konstantin/unicode.c
new file mode 100644 (file)
index 0000000..144c0aa
--- /dev/null
@@ -0,0 +1,7 @@
+#include "unicode.h"
+
+#ifdef UNICODEMAP_ENABLE
+const uint32_t PROGMEM unicode_map[] = {
+  FOREACH_UNICODE(UCM_ENTRY)
+};
+#endif
index 09af7e1c7f6c04c5149c1d95057fb0b81933abaf..c8eddabb71381f15d7d46d3765829a1e8fb8fb59 100644 (file)
@@ -2,10 +2,33 @@
 
 #include "quantum.h"
 
-#define COMMA   UC(0x002C)
-#define L_PAREN UC(0x0028)
-#define R_PAREN UC(0x0029)
-#define EQUALS  UC(0x003D)
-#define TIMES   UC(0x00D7)
-#define DIVIDE  UC(0x00F7)
-#define MINUS   UC(0x2212)
+#define FOREACH_UNICODE(M) \
+  M(COMMA,   0x002C)       \
+  M(L_PAREN, 0x0028)       \
+  M(R_PAREN, 0x0029)       \
+  M(EQUALS,  0x003D)       \
+  M(TIMES,   0x00D7)       \
+  M(DIVIDE,  0x00F7)       \
+  M(MINUS,   0x2212)
+
+#define UC_KEYCODE(name, code)  name = UC(code),
+
+#define UCM_NAME(name, code)    UCM_ ## name,
+#define UCM_ENTRY(name, code)   [UCM_ ## name] = code,
+#define UCM_KEYCODE(name, code) name = X(UCM_ ## name),
+
+#if defined(UNICODE_ENABLE)
+enum unicode_keycodes {
+  FOREACH_UNICODE(UC_KEYCODE)
+};
+#elif defined(UNICODEMAP_ENABLE)
+enum unicode_names {
+  FOREACH_UNICODE(UCM_NAME)
+};
+
+extern const uint32_t PROGMEM unicode_map[];
+
+enum unicode_keycodes {
+  FOREACH_UNICODE(UCM_KEYCODE)
+};
+#endif
index 11b3ba708f6bb54295506a37654deb990968f8f9..ec4b20108f787e80f8c25980252ecc85fe31787c 100644 (file)
@@ -1,6 +1,14 @@
 # Changelog
 All notable changes to my userspace will be documented in this file.
 
+## [0.2.1] - 2019-03-01
+### Fixed
+- `config.h` usage of `#ifdef RGBLIGHT_ENABLE` caused problems for other of my boards that had `RGBLIGHT_ENABLE`.  
+
+## [0.2.0] - 2019-02-27
+### Changed
+- Moved `AUDIO_CLICKY` from community layout `66_ansi` into user space. 
+
 ## [0.1.1] - 2018-10-26
 ### Added
 - Added a changelog, aka THIS VERY FILE! 
index 3d58c230af6549094ed2cedf3e64838c87eaba46..9ca39a12ac6e3eea7abc7e6c50a8d9b37f461048 100644 (file)
@@ -1,5 +1,37 @@
 #pragma once
 
 #ifdef RGBLIGHT_ENABLE
-#define RGBLIGHT_SLEEP
+    #define RGBLIGHT_SLEEP
+    #define RGBLIGHT_ANIMATIONS
 #endif // RGBLIGHT_ENABLE
+
+#ifdef AUDIO_CLICKY
+    #define AUDIO_CLICKY_ON
+    #define AUDIO_CLICKY_FREQ_DEFAULT 261.63f
+    #define AUDIO_CLICKY_FREQ_MIN 65.41f
+    #define AUDIO_CLICKY_FREQ_MAX 1046.5f
+    //#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f
+    //#define AUDIO_CLICKY_FREQ_FACTOR 2.71828f  // e
+    #define AUDIO_CLICKY_FREQ_FACTOR 1.61803f // golden ratio
+    #define AUDIO_CLICKY_FREQ_RANDOMNESS 17.0f
+#endif
+
+// Enable features depending on keyboard
+#if defined(KEYBOARD_clueboard_66_hotswap_prototype)
+    #ifndef RGBLIGHT_ENABLE
+        #define RGBLIGHT_ENABLE
+    #endif
+
+    #ifndef AUDIO_CLICKY
+        #define AUDIO_CLICKY
+    #endif
+
+#elif defined(KEYBOARD_clueboard_66_hotswap_gen1)
+    #ifndef AUDIO_CLICKY
+        #define AUDIO_CLICKY
+    #endif
+#else
+    #ifndef RGBLIGHT_ENABLE
+        #define RGBLIGHT_ENABLE
+    #endif
+#endif
index 1e86a64107fc94d123119fb54a63b94a4f4d894a..24335a7ce22d772d519a7781ef485c09618b2fcf 100644 (file)
@@ -1,4 +1,4 @@
-# MechMerlin's Userspace v0.1.1
+# MechMerlin's Userspace v0.2.0
 
 This is a collection of my most commonly used QMK features. 
 
@@ -38,3 +38,11 @@ This is just a wrapper for `CTL_T(KC_CAPS)`. This is a hold for control and tap
 ### RGBLIGHT_SLEEP
 
 Ensures that when my computer is in sleep mode, the keyboard underglow lights will also be off. 
+
+### Audio Clicky
+
+If a board has a speaker, enable beeps and boops per switch actuation. This is currently only available on prototype/gen1 clueboard 66_hotswaps. 
+
+### Velocikey
+
+[Velocikey](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_velocikey.md) is an RGBLIGHT feature in which the faster you type, the faster the ARE GEE BEES. 
index 70c20ec71ecda080831ae0211f5f7d9a0a68cff6..088743c4679c0d61941a79049cd0c808850fe235 100644 (file)
@@ -1 +1 @@
-SRC += mechmerlin.c
\ No newline at end of file
+SRC += mechmerlin.c
diff --git a/users/stanrc85/config.h b/users/stanrc85/config.h
new file mode 100644 (file)
index 0000000..1428443
--- /dev/null
@@ -0,0 +1,9 @@
+#pragma once
+
+#define TAPPING_TERM 200
+#define RETRO_TAPPING
+
+#ifdef RGBLIGHT_ENABLE
+  #define RGBLIGHT_LIMIT_VAL 175
+  #define RGBLIGHT_SLEEP
+#endif
diff --git a/users/stanrc85/layer_rgb.c b/users/stanrc85/layer_rgb.c
new file mode 100644 (file)
index 0000000..ac5d181
--- /dev/null
@@ -0,0 +1,26 @@
+#include "stanrc85.h"
+
+void matrix_init_user(void) {
+  rgblight_setrgb(0xFF,  0x00, 0x00);
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+    switch (biton32(state)) {
+    case 0:
+        rgblight_setrgb (0xFF,  0x00, 0x00);
+        break;
+    case 1:
+        rgblight_setrgb (0x00,  0xFF, 0x00);
+        break;
+    case 2:
+        rgblight_setrgb (0x00,  0x00, 0xFF);
+        break;
+    case 3:
+        rgblight_setrgb (0xFF,  0xFF, 0xFF);
+        break;
+    default: //  for any other layers, or the default layer
+        rgblight_setrgb (0xFF,  0x00, 0x00);
+        break;
+    }
+  return state;
+}
diff --git a/users/stanrc85/readme.md b/users/stanrc85/readme.md
new file mode 100644 (file)
index 0000000..9009a71
--- /dev/null
@@ -0,0 +1,52 @@
+<!-- Copyright 2019 Stanrc85
+
+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/>.-->
+
+# Stanrc85's Standard ANSI 60% Layout
+
+Shared keymap between two 60% PCB:
+- 1upkeyboards60HSE
+- DZ60 (hotswap)
+
+## Keymap Notes
+- Layer 0 is default QWERTY layout with additional custom features:
+    - SpaceFN to function layer 2 on `Space`
+    - `CTRL` when held and `ESC` when tapped on `CAPS LOCK`
+    - Tap Dance on `Fn1` for `CTRL+ALT+DEL` and `WIN+L`
+    - Tap Dance on `ESC` for `ESC` and  ` ` ` 
+
+![Base QWERTY Layer](https://imgur.com/lGcyLJx.png)
+
+- Layer 1 is default QWERTY with no custom features used mostly for gaming
+    - Enabled by `Fn2+CAPS` from base layer
+
+![Default ANSI Layer](https://imgur.com/M7T9PNT.png)
+
+- Layer 2 is Function layer:
+    - F keys
+    - Arrows
+    - Volume and Media controls
+    - AutoHotkey shortcuts based on [Speaker Control](https://github.com/stanrc85/Speaker-Control) script
+        - AHK Mic is used to mute/unmute microphone
+        - AHK Speaker switches audio output between headphones and speakers
+
+![Function Layer](https://imgur.com/YPl0JrU.png)
+
+- Layer 3 is RGB Underglow control and RESET
+    - `Fn2+CAPS` used to toggle Default QWERTY layer on and off
+
+![RGB and RESET Layer](https://imgur.com/PyB8z7k.png)
+
+### Build
+To build the firmware file associated with this keymap, simply run `make your_keyboard:stanrc85-ansi`.
diff --git a/users/stanrc85/rules.mk b/users/stanrc85/rules.mk
new file mode 100644 (file)
index 0000000..4b66f96
--- /dev/null
@@ -0,0 +1,16 @@
+TAP_DANCE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+BACKLIGHT_ENABLE = no
+COMMAND_ENABLE = no
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+AUDIO_ENABLE = no
+CONSOLE_ENABLE = no
+NKRO_ENABLE = no
+
+SRC += stanrc85.c
+
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+  # Include my fancy rgb functions source here
+  SRC += layer_rgb.c
+endif
diff --git a/users/stanrc85/stanrc85.c b/users/stanrc85/stanrc85.c
new file mode 100644 (file)
index 0000000..3838f33
--- /dev/null
@@ -0,0 +1,84 @@
+#include "stanrc85.h"
+
+static td_state_t td_state;
+
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+  return true;
+}
+
+// determine the tapdance state to return
+int cur_dance (qk_tap_dance_state_t *state) {
+  if (state->count == 1) {
+    if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
+    else { return SINGLE_HOLD; }
+  }
+  if (state->count == 2) { return DOUBLE_TAP; }
+  else { return 3; } // any number higher than the maximum state value you return above
+}
+
+// handle the possible states for each tapdance keycode you define:
+void ctl_copy_finished (qk_tap_dance_state_t *state, void *user_data) {
+  td_state = cur_dance(state);
+  switch (td_state) {
+    case SINGLE_TAP:
+      SEND_STRING(SS_LCTRL("c"));
+      break;
+    case SINGLE_HOLD:
+      register_mods(MOD_BIT(KC_RCTL));
+      break;
+    case DOUBLE_TAP:
+      SEND_STRING(SS_LCTRL("v"));
+  }
+}
+
+void ctl_copy_reset (qk_tap_dance_state_t *state, void *user_data) {
+  switch (td_state) {
+    case SINGLE_TAP:
+      break;
+    case SINGLE_HOLD:
+      unregister_mods(MOD_BIT(KC_RCTL));
+      break;
+    case DOUBLE_TAP:
+      break;
+  }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+       [TD_WIN] = ACTION_TAP_DANCE_DOUBLE(KC_CAD, KC_LOCK),
+       [TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV),
+  [TD_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctl_copy_finished, ctl_copy_reset)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+  case KC_MAKE:
+    if (!record->event.pressed) {
+      uint8_t mods = get_mods();
+      clear_mods();
+      send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), 10);
+        if (mods & MOD_MASK_SHIFT) {
+          //RESET board for flashing if SHIFT held or tapped with KC_MAKE
+          #if defined(__arm__)
+            send_string_with_delay_P(PSTR(":dfu-util"), 10);
+          #elif defined(BOOTLOADER_DFU)
+            send_string_with_delay_P(PSTR(":dfu"), 10);
+          #elif defined(BOOTLOADER_HALFKAY)
+            send_string_with_delay_P(PSTR(":teensy"), 10);
+          #elif defined(BOOTLOADER_CATERINA)
+            send_string_with_delay_P(PSTR(":avrdude"), 10);
+          #endif // bootloader options
+          send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
+          reset_keyboard();
+        }
+        if (mods & MOD_MASK_CTRL) {
+          send_string_with_delay_P(PSTR(" -j8 --output-sync"), 10);
+        }
+        send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), 10);
+        set_mods(mods);
+      }
+    return false;
+    break;
+  }
+  return process_record_keymap(keycode, record);
+}
diff --git a/users/stanrc85/stanrc85.h b/users/stanrc85/stanrc85.h
new file mode 100644 (file)
index 0000000..2f999ff
--- /dev/null
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "quantum.h"
+#include "version.h"
+
+#define DEFAULT 0  //Custom ANSI
+#define LAYER1 1   //Default ANSI (enable with Fn2+CAPS)
+#define LAYER2 2   //Function keys, arrows, custom shortcuts, volume control
+#define LAYER3 3   //RGB Underglow controls and RESET
+
+//Aliases for longer keycodes
+#define KC_CAD LALT(LCTL(KC_DEL))
+#define KC_LOCK        LGUI(KC_L)
+#define CA_QUOT LCA(KC_QUOT)
+#define CA_SCLN LCA(KC_SCLN)
+#define KC_CTLE LCTL_T(KC_ESC)
+#define LT_SPCF LT(2, KC_SPC)
+#define TD_TESC TD(TD_ESC)
+#define TD_TWIN TD(TD_WIN)
+#define TD_TCTL TD(TD_RCTL)
+
+enum cust_keys {
+       KC_MAKE = SAFE_RANGE
+};
+
+enum tap_dance {
+  TD_WIN,
+  TD_ESC,
+  TD_RCTL
+};
+
+// define a type containing as many tapdance states as you need
+typedef enum {
+  SINGLE_TAP,
+  SINGLE_HOLD,
+  DOUBLE_TAP
+} td_state_t;
+
+// function to determine the current tapdance state
+int cur_dance (qk_tap_dance_state_t *state);
+
+// `finished` and `reset` functions for each tapdance keycode
+void ctl_copy_finished (qk_tap_dance_state_t *state, void *user_data);
+void ctl_copy_reset (qk_tap_dance_state_t *state, void *user_data);
diff --git a/util/bootloader_atmega32a_1_0_0.hex b/util/bootloader_atmega32a_1_0_0.hex
new file mode 100644 (file)
index 0000000..b35a310
--- /dev/null
@@ -0,0 +1,154 @@
+:107000000C9468380C94A0380C9485380C9485380E\r
+:107010000C9485380C9485380C9485380C948538FC\r
+:107020000C9485380C9485380C9485380C948538EC\r
+:107030000C9485380C9485380C9485380C948538DC\r
+:107040000C9485380C9485380C9485380C948538CC\r
+:107050000C9485380403090412036F006200640075\r
+:10706000650076002E00610074001003480049009E\r
+:10707000440042006F006F00740012011001000014\r
+:107080000008C016DF05000101020001090222000C\r
+:107090000101008032090400000103000000092101\r
+:1070A00001010001222100070581030800C8060034\r
+:1070B000FF0901A101150026FF007508850195064D\r
+:1070C0000900B20201850295830900B20201C000E5\r
+:1070D00011241FBECFE5D8E0DEBFCDBF10E0A0E693\r
+:1070E000B0E0ECE6F9E702C005900D92AA36B107D0\r
+:1070F000D9F710E0AAE6B0E001C01D92A43AB107AA\r
+:10710000E1F70E94173C0C94B43C0C940038A82F73\r
+:10711000B92F80E090E041E050EA609530E009C08E\r
+:107120002D9182279795879510F084279527305EBB\r
+:10713000C8F36F5FA8F30895EADF8D939D930895D8\r
+:10714000CF93CFB7CF93C395839BE9F7839B09C0B8\r
+:10715000839B07C0839B05C0839B03C0839B01C0A7\r
+:10716000A3C0DF93C0918700DD27C257DF4F839B09\r
+:1071700002C0DF91EBCF2F930F931F9300B32FEF3C\r
+:1071800003FB20F94F933F9310B34FEF012703FB0D\r
+:1071900021F93BE031C04E7F012F10B3216028C0A0\r
+:1071A000102F4D7F2260000000B329C04B7F246068\r
+:1071B000012F000010B32BC010B3477F28602AC0F6\r
+:1071C0004F7E00B320612CC04F7D10B320622FC0D2\r
+:1071D0004F7B00B3206432C0422700B349934FEF86\r
+:1071E0000000102713FB20F910B31C70C9F1297F90\r
+:1071F00091F2012703FB21F900B3237F89F231507B\r
+:1072000058F1102713FB22F910B3277E79F20127DA\r
+:1072100003FB23F92F7C81F200B3102713FB24F921\r
+:107220002F7971F200C010B3012703FB25F92F73EA\r
+:1072300059F200C000B3102713FB26F9223040F2A8\r
+:1072400000C010B3012703FB27F9243028F64F773D\r
+:10725000206810B30000F9CF10E41ABF002719C04E\r
+:107260003B503195C31BD04010E41ABF0881033C4A\r
+:10727000F9F00B34E9F0209185001981110F1213F8\r
+:10728000EDCF4A81441F093641F10D3211F0013E24\r
+:1072900029F700938C003F914F911F910F912F91EF\r
+:1072A000DF91CAB7C6FD4FCFCF91CFBFCF91189511\r
+:1072B00020918C00222379F310918A00112321F56B\r
+:1072C000343022F130938A00209386001091870099\r
+:1072D0003BE0311B3093870019C000918A000130D8\r
+:1072E0009CF40AE54F7081F43091600034FD10C0C9\r
+:1072F00000936000C9E7D0E00FC02795A8F4515073\r
+:10730000A9F4220F0000F9CF4AE503C042ED01C005\r
+:10731000432FC4E1D0E032E011B31C60939A11BB5B\r
+:1073200002B320E41CE05F93012756E002BB2795DF\r
+:1073300020F4515021F4220FF9CF012756E000002C\r
+:107340003B5A02BBD0F2279528F4515029F4220F62\r
+:107350000000F9CF012756E0279502BB20F45150D9\r
+:1073600021F4220FF9CF012756E02991332302BBE4\r
+:1073700021F6037F10918B00110FC651D04002BB44\r
+:1073800011F01093850010E41ABF086011B3137F49\r
+:10739000402F437F5F9100C000C002BB11BB42BBC6\r
+:1073A0007ACF80916D00882309F445C088EB9BE07B\r
+:1073B0000197F1F780916A008F5F80936A00909146\r
+:1073C00061008917B1F510926A0080916B008230DC\r
+:1073D000C1F0833028F4882341F0813041F50CC09E\r
+:1073E0008330B9F0843019F519C082B38C7A82BB2E\r
+:1073F00081E080936B0017C082B3836582BB82E01B\r
+:1074000004C082B38C7A82BB83E080936B008FE7E9\r
+:107410000BC082B3836582BB84E0F7CF82B38C7AE2\r
+:1074200082BB10926B008FEF8093610002C01092BC\r
+:107430006B0081E0089529B3237040916E000DC068\r
+:1074400089B330E090E0837090702817390711F00D\r
+:1074500040E001C04F5F29B32370463088F320938A\r
+:10746000720040936E00233018F481E080936D0029\r
+:1074700080916D00089585B7826085BF8BB7806469\r
+:107480008BBF0895F89481E180935700E8951BBE67\r
+:1074900015BE81E08BBF1BBE8B9AE0917700F09107\r
+:1074A0007800099521E020936C00FC0181818930EE\r
+:1074B00069F48281823029F420937500209384003E\r
+:1074C00003C082E0809384008FEF0895813011F033\r
+:1074D00080E0089582E690E0909389008093880090\r
+:1074E00087E00895CF93DF93DC01C0917000D091C5\r
+:1074F0007100413051F410926F001196CC911197A8\r
+:107500001296DC9112971496645030916F00360FEA\r
+:1075100030936F00AE014F7751F4F89483E0FE0191\r
+:1075200080935700E895789407B600FCFDCFF89457\r
+:10753000AE018D919C91119721E0FE010C012093E9\r
+:107540005700E895112478942296FE01EF7751F4C4\r
+:10755000F89485E0FA0180935700E895789407B68F\r
+:1075600000FCFDCF625011F01296D4CFD093710081\r
+:10757000C0937000832F8078DF91CF910895CF93CF\r
+:10758000DF93FC0180918400813071F4809175005B\r
+:10759000813029F410927500CF0141E002C0CF0183\r
+:1075A00040E00E94723A2FC0823061F581818130C3\r
+:1075B00011F40E94423A8F3F21F484E090E06FEF93\r
+:1075C00019C08E3F91F482B3836582BBC0E0D0E0E6\r
+:1075D000CE016FEF0E94A73C219684E0C030D8070F\r
+:1075E000B9F782B38C7A82BB0BC08D3F31F48281B4\r
+:1075F000938164810E94A73C03C081E08093760060\r
+:107600001092840081E0DF91CF9108951F93CF9372\r
+:10761000DF9360918A00635067FDBAC08091870054\r
+:10762000CCE0D0E0C81BD109C257DF4F8091860063\r
+:107630008D3209F09AC0683009F0A8C083EC8093BD\r
+:1076400079008AE5809360001092740088818076CA\r
+:1076500041F0CE010E94523A282F8F3F09F474C0A6\r
+:107660007AC09A81109282008981882321F4109235\r
+:10767000830022E062C0853019F490938B005CC0D7\r
+:10768000863009F04AC08B81813019F48AE790E78F\r
+:107690001BC0823041F48CE890E79093890080937E\r
+:1076A000880022E236C08330F9F48A81882341F4CD\r
+:1076B00084E590E7909389008093880024E029C0B6\r
+:1076C000813041F488E590E79093890080938800A9\r
+:1076D00022E11FC08230E1F48AE690E790938900AE\r
+:1076E0008093880020E115C0813241F48EE990E753\r
+:1076F000909389008093880029E00BC0823241F486\r
+:107700008EEA90E7909389008093880021E201C07F\r
+:1077100020E080E4809374001EC0883021F421E0D2\r
+:107720008DE890E00CC0893019F490938D0004C06E\r
+:107730008A3011F421E001C020E082E890E09093CB\r
+:1077400089008093880007C0888187FD2E8180E8AA\r
+:107750008093740006C08F81882319F48E8182176C\r
+:1077600008F0822F8093690011C08091740087FF18\r
+:107770000DC0CE010E94BF3A8F3F21F48EE180936D\r
+:10778000600004C0882311F01092690010928A00F2\r
+:107790008091600084FF3DC0809169008F3FC9F1F6\r
+:1077A000182F893008F018E0811B809369008091C0\r
+:1077B000790098E88927809379001123E1F0E0911E\r
+:1077C0008800F09189008091740086FF09C0912F94\r
+:1077D000AAE7B0E084918D9331969150D9F707C014\r
+:1077E000912FAAE7B0E081918D939150E1F7F0934A\r
+:1077F0008900E09388008AE790E0612F0E949C381E\r
+:10780000612F6C5F6C3019F08FEF8093690060938B\r
+:10781000600094E180B38C7031F49150D9F71092EC\r
+:107820008B0010928500DF91CF911F91089581B355\r
+:10783000836581BB82B38C7A82BB8D98959A8AB31B\r
+:107840008C7F8ABB8BB383608BBBB89AC09881E076\r
+:1078500090E00E948E3C80937300882349F481E07D\r
+:1078600080936D0081E090E06FEF0E94A73C08C01C\r
+:10787000E0E0F0E0E491EF3F19F481E080936D00E7\r
+:107880000E94D139882309F447C081E08BBF82E090\r
+:107890008BBF0E943B3A88E991E00E948E3C88238E\r
+:1078A00049F48B9A20E0A89588EB9BE00197F1F7CB\r
+:1078B0002150C9F78B9878940FEF10E0C0E0D0E02A\r
+:1078C00080916C008823B9F483E0C93ED80714F492\r
+:1078D000219611C0F89481E090E060E00E94963C0F\r
+:1078E0008B9A28E088E190E00FB6F894A89581BDC6\r
+:1078F0000FBE21BDFFCFA8950E94063B8091760068\r
+:10790000882331F0002319F4115011F405C00150FF\r
+:107910000E94D1398823A1F60E94423AE199FECF14\r
+:107920009FBB8EBBE09A99278DB30895262FE199CE\r
+:10793000FECF9FBB8EBBE09A01970DB2021631F0CD\r
+:107940002DBB0FB6F894E29AE19A0FBE0895262F48\r
+:10795000E199FECF9FBB8EBB2DBB0FB6F894E29A88\r
+:0C796000E19A0FBE01960895F894FFCF45\r
+:0A796C005A7F01800000800000FF38\r
+:040000030000700089\r
+:00000001FF\r
index d1d1ed82ca3848337164d72211c5bb917cc5a2cf..9dec714b02a2160849cd2531f6396a5bf260e156 100755 (executable)
@@ -43,7 +43,11 @@ GIT=$(whereis git)
 if [ "$GIT" != "" ]; then
   IS_GIT_REPO=$($GIT log >>/dev/null 2>&1; echo $?)
   if [ "$IS_GIT_REPO" -eq 0 ]; then
-    ID="'$($GIT config --get user.name)'"
+    ID="$($GIT config --get user.name)"
+    read -rp "What is your name? [$ID] " YOUR_NAME
+    if [ -n "$YOUR_NAME" ]; then
+      ID=$YOUR_NAME
+    fi
     echo "Using $ID as user name"
 
     for i in "$NEW_KBD/config.h" \
@@ -52,7 +56,7 @@ if [ "$GIT" != "" ]; then
              "$NEW_KBD/keymaps/default/config.h" \
              "$NEW_KBD/keymaps/default/keymap.c"
     do
-      awk -v id="$ID" '{sub(/REPLACE_WITH_YOUR_NAME/,id); print}' < "$i" > "$i.$$"
+      awk -v id="$ID" '{sub(/%YOUR_NAME%/,id); print}' < "$i" > "$i.$$"
       mv "$i.$$" "$i"
     done
   fi