Compare commits

..

55 Commits

Author SHA1 Message Date
Konstantin Đorđević
64c957d907 Add missing parentheses to some important macros (#4775)
* Add missing parentheses to quantum_keycodes macros

* Add missing parentheses to progmem macros
2019-01-08 15:08:17 -08:00
noroadsleft
9eb7b7919f Keyboard: Downbubble refactor and Configurator fix (#4798)
* Downbubble: Configurator fix

Fix the visual key alignment and some typos.

* Downbubble: refactor

Rename layout macros:

- LAYOUT_downbubble_standard to LAYOUT_standard
- LAYOUT_downbubble_splitbackspace to LAYOUT_split_bs
- LAYOUT_downbubble_splitrightshift to LAYOUT_split_rshift
- LAYOUT_downbubble_splitnumpad to LAYOUT_split_numpad
- LAYOUT_downbubble_spliteverything to LAYOUT_all
2019-01-07 23:16:50 -08:00
Vasken Dermardiros
103d904fab Alternate keymap for Alpha keyboard, enjoy! (#4797)
* Create README.md

* Add files via upload

* Update README.md
2019-01-07 13:06:34 -08:00
Elvis Pfützenreuter
c5707708ed Keymap: Added Model F-inspired layout for YMD[K]96 (#4777) 2019-01-07 13:00:15 -08:00
Konstantin Đorđević
cd9262d7b2 Improve consistency in UNICODEMAP code and docs, update docs/understanding_qmk (#4774)
* Remove unused UNICODE(n) macro, update docs

* Add note about max length of unicode_map to docs

* QK_UNICODE_MAP → QK_UNICODEMAP

* Refactor process_unicode_map

* process_unicode_map → process_unicodemap

This is done for consistency: UNICODEMAP is the method (hence UNICODEMAP_ENABLE, process_unicodemap), whereas unicode_map is the mapping table itself.

* Update references and ordering in docs/understanding_qmk

* Add additional note to docs/understanding_qmk

* &unicode_map[index] → unicode_map + index

This avoids the issue of the compiler sometimes complaining about the array index being out of range

* Update docs/getting_started_make_guide

* Update method sections in docs/feature_unicode
2019-01-07 12:56:57 -08:00
patrickmt
6e984a8b5e Update to arm_atsam wait and timer routines
Microsecond (us) delays are now handled by a busy wait loop according to MCU frequency. This replaces the system counter method which had an overhead of around 12us.
TC5 device and supporting routines removed as it was the old us delay counter.
wait_ms is now properly a macro to CLK_delay_ms.
wait_us is now properly a macro to CLK_delay_us.
Removed CLK_get_us as it has no use.
All calls to CLK_get_ms() have been replaced by timer_read64() with corrected typing.
All calls to CLK_delay_ms() have been replaced by wait_ms().
All calls to CLK_delay_us() have been replaced by wait_us() and timings verified or updated as needed after review on scope.
Corrected typing of variables using 64bit ms timer readings if needed.
2019-01-07 12:44:55 -08:00
flehrad
2898699804 Add Downbubble to Handwired repository (#4794)
* add snagpad

* Update keyboards/snagpad/kb.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Rename kb.c to snagpad.c

* Update and rename kb.h to snagpad.h

* Update snagpad.h

* Update keymap.c

* Update config.h

* Update config.h

* Update rules.mk

* Update README.md

* Add files via upload

* Update info.json

* Update keymap.c

* Update snagpad.h

* Delete snagpad_numpad.json

* Delete snagpad_ortho.json

* Update README.md

* Update keyboards/snagpad/info.json

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* add tradestation

* --all

* Did something weird messing with git -_- hopefully fixed

* Update keyboards/tradestation/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/config.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/config.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update snagpad.h

* Update rules.mk

* Update keymap.c

* fixed merge conflict, updated to LAYOUT_numpad_5x4

* relocated to handwire, updated naming, added layouts to rules.mk

* Update keyboards/handwired/tradestation/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Rename LICENSE to license

* Rename README.md to readme.md

* Rename LICENSE to license

* Rename README.md to readme.md

* Update info.json

* Update keymap.c

* Update info.json

* Adding Numbrero QMK to Handwire Repository

* Update config.h

* Update readme.md

* Update keyboards/handwired/numbrero/numbrero.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keymap.c

* Update keyboards/handwired/numbrero/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Add handwired/downbubble keyboard to QMK Repository

* Update readme.md

* Create license

* Update keyboards/handwired/downbubble/readme.md

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/handwired/downbubble/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* fixed .h with noroadsleft's gist
2019-01-07 07:29:37 -08:00
yiancar
2bfac351ed Final HS60v2 changes. (#4790)
* initial commit, this now mostly works

- RGB controls work
- Dynamic keymap still broken due to eeprom
- Via works

* STM32 eeprom update

- Update EEPROM emulation library to handle 8bit data like AVR.
- This library also allows for multiple page pairs resulting in greater EEPROM size flexibility

* hs60 changes

* HS60 hhkb added

* Update keyboards/hs60/v2/config.h

Co-Authored-By: yiancar <yiangosyiangou@cytanet.com.cy>
2019-01-06 17:22:19 -08:00
noroadsleft
2c0bc5ed6b Keyboard: Fractal layout macro and readme cleanup (#4789)
* Fractal: layout macro cleanup

Removed KEYMAP alias for LAYOUT_preonic_mit. Alias was unused, and the terminology usage is deprecated.

* Fractal: readme cleanup

Updated the line containing the documentation links in the readme.

* Fractal: disable preonic_mit community layout

QMK doesn't have a preonic_mit community layout at this time.

Disables preonic_mit as an option for community layout. Can be re-enabled when the layout is added.
2019-01-06 11:05:24 -08:00
mikethetiger
4aaa4b3428 Keymap: added my espectro keymap (#4791)
* adding my planck keymap

* adding my planck keymap

* added my espectro keymap
2019-01-06 10:36:24 -08:00
noroadsleft
90046af17f Keyboard: Numbrero: Configurator fix and code tidy (#4787)
* Numbrero: fix Configurator mismatch

Key object order in info.json didn't match the layout macro, leading to keys being assigned out-of-sequence.

* Numbrero: tidy

- white space changes in numbrero.h (alignment/readability/QMK conventions)
- minor changes to readme.md (grammar, mostly)
2019-01-05 15:34:38 -08:00
noroadsleft
27b512d9f5 Keyboard: Tradestation code tidy and readme refactor (#4784)
* Tradestation: tidy code

- correct JSON syntax on info.json
- visual key alignment on info.json
- white space changes on rules.mk and tradestation.h (readability/QMK conventions)

* Tradestation: readme refactor

Modify readme.md to more closely match QMK template.

* Tradestation: readme update

Update The Board podcast link for libsyn.
2019-01-05 15:34:19 -08:00
MechMerlin
9153ff59d4 Keyboard: update readme with ps2avr flashing instructions (#4776) 2019-01-05 10:04:45 -08:00
Masayuki Sunahara
ac7a9e3c66 add Pinky keyboard (#4748)
add Pinky (https://github.com/tamanishi/Pinky3) keyboard
2019-01-05 09:35:48 -08:00
Naoki Katahira
ea47be936b Keyboard: Lily58 update serial.c and add OLED (#4715)
* update serial.c and add OLED

* update readme

* keymap fix

* keymap fix2
2019-01-05 09:30:48 -08:00
mikethetiger
5b5f452bf9 adding my planck keymap (#4782)
* adding my planck keymap

* adding my planck keymap
2019-01-05 08:56:00 -08:00
Konstantin Đorđević
be666b2d8a Add underscores to names of brightness control constants in report.h (#4764) 2019-01-05 08:31:24 -08:00
noroadsleft
d6cc90d027 S65-X and S65-Plus updates and refactoring (#4780)
* S65-X: remove S65-Plus support

The original QMK codebase for the Sentraq S65-X actually supported both the S65-X and the S65-Plus. In the interim, the S65-Plus has been broken off into its own directory.

This commit removes support for the S65-Plus from the `keyboards/s65_x/` directory, as that code has been superseded by the code in the S65-Plus directory (`keyboards/s65_plus/`).

- deleted S65-Plus layout macros from s65_x.h and info.json
- deleted s65plus keymap directory
- removed references to the unused column pins
- removed the two unused columns for the switch matrices
- renamed switch K300 in LAYOUT_ansi to K301 (reflects matrix position)
- renamed switch K214 in LAYOUT_iso to K114 (reflects matrix position)

* S65-X: keymap refactor

- all keymaps now use #include QMK_KEYBOARD_H
- default and iso keymaps refactored for readability
- deleted redundant KC_TRNS and KC_NO keycode definitions from smt keymap

* S65-X: readme update

- updated Hardware Availability link
- updated Docs links

* S65-Plus: add LAYOUT_iso data

Adds LAYOUT_iso macro to s65_plus.h and info.json, and an ISO layout version of the default keymap.

* S65-Plus: refactor default keymap

- refactor for alignment/readability
- removed fn_actions code block
- add empty process_record_user block

* S65-Plus: readme update

- Hardware Availability link is now a hyperlink
- updated Docs links

* S65-X: enable 65_ansi and 65_iso community layouts

Thi commit allows the Sentraq S65-X to use the 65_ansi and 65_iso community layouts.

- LAYOUT_ansi renamed to LAYOUT_65_ansi
- LAYOUT_iso renamed to LAYOUT_65_iso
- added LAYOUTS rule to rules.mk
2019-01-04 21:47:13 -08:00
flehrad
3527efcbd2 Adding keyboards/handwire/numbrero (#4773)
* add snagpad

* Update keyboards/snagpad/kb.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Rename kb.c to snagpad.c

* Update and rename kb.h to snagpad.h

* Update snagpad.h

* Update keymap.c

* Update config.h

* Update config.h

* Update rules.mk

* Update README.md

* Add files via upload

* Update info.json

* Update keymap.c

* Update snagpad.h

* Delete snagpad_numpad.json

* Delete snagpad_ortho.json

* Update README.md

* Update keyboards/snagpad/info.json

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* add tradestation

* --all

* Did something weird messing with git -_- hopefully fixed

* Update keyboards/tradestation/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/config.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/config.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update snagpad.h

* Update rules.mk

* Update keymap.c

* fixed merge conflict, updated to LAYOUT_numpad_5x4

* relocated to handwire, updated naming, added layouts to rules.mk

* Update keyboards/handwired/tradestation/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Rename LICENSE to license

* Rename README.md to readme.md

* Rename LICENSE to license

* Rename README.md to readme.md

* Update info.json

* Update keymap.c

* Update info.json

* Adding Numbrero QMK to Handwire Repository

* Update config.h

* Update readme.md

* Update keyboards/handwired/numbrero/numbrero.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keymap.c

* Update keyboards/handwired/numbrero/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>
2019-01-04 21:38:22 -08:00
Jordi Pakey-Rodriguez
3e45bc775e Add novelpad 0xdec keymap (#4779) 2019-01-04 15:28:01 -08:00
noroadsleft
aff5c49ee9 Layouts: add 65_iso (#4778) 2019-01-04 15:27:21 -08:00
noroadsleft
7f4f0f7685 Remove deprecated QUANTUM_DIR code blocks from makefiles (#4754)
* Remove QUANTUM_DIR code blocks from keyboard rules

This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files that affect entire keyboards.

* remove QUANTUM_DIR code blocks from rules for default keymaps

This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files that affect default keymaps.

* remove QUANTUM_DIR code blocks from rules for user keymaps

This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files that affect "user" keymaps. (It's actually any keymap
that isn't named `default`.)

* remove QUANTUM_DIR code blocks from rules for community layouts

This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files for community layouts.

* remove QUANTUM_DIR code blocks from rules for userspaces

This commit removes the deprecated "QUANTUM_DIR" code block from
rules.mk files for userspaces.
2019-01-04 07:25:48 -08:00
noroadsleft
b1ed855871 Dichotomy: fix info.json mismatch (#4771)
The info.json file was missing the two keys that correspond to the
rotary encoders.
2019-01-04 07:24:45 -08:00
James Churchill
563ce3f225 Add explicit eeprom include in split_common
Fixes builds that set EE_HANDS.
2019-01-03 20:00:27 -08:00
James Churchill
38e01a7480 Convert split_common to use generic GPIO api 2019-01-03 20:00:27 -08:00
noroadsleft
54b572159f Preonic rev. 3: fix info.json file
File was saved with an invalid JSON structure.
2019-01-03 21:52:35 -05:00
noroadsleft
6f80217958 Snagpad: fix Configurator mismatch (#4767)
Key objects for the LAYOUT_numpad_5x4 macro were out-of-order in
info.json.

Also white space changes because I'm that guy.
2019-01-03 16:33:32 -08:00
Konstantin Đorđević
e76bf17d36 Remove redundant, language-specific aliases for KC_ALGR (#4720)
* Use standard KC_ALGR, remove language-specific redefinitions

* Use ALGR instead of ALTGR in BÉPO and Canadian multilingual keymaps

* Remove BE_LALT, BE_LGUI aliases
2019-01-03 08:13:55 -08:00
Gam3cat
6cb2d7ba6d Keymap updates (#4706)
* adding my keymap

* update keymap

* adding gamecat keymap for jc65 keyboard

* updating jc65-gamecat keymap

* updating jc65-gamecat keymap

* updating jc65-gamecat keymap

* updating jc65-gamecat keymap

* M10a keymap and M65a updates

* keymap updates

* keymap updates

* M10a/M65a keymap updates

* M10a/M65a keymap updates

* Delete test.txt

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65/M10 keymap updates

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65/M10 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* M65 keymap update

* Set theme jekyll-theme-cayman

* Set theme jekyll-theme-slate

* M65 keymap update

* M10a/M65a keymap updates

* M10a keymap update

* M65a keymap update

* M65a keymap update

* M65a keymap update

* M65a readme update

* M65a/M10a updates

* M65a readme updates

* M65a/M10a updates

* M65A update

* M65A update

* M65A update

* M65A update

* M65A/M10A keymap update

* M10A keymap update

* Set theme jekyll-theme-tactile

* M10A keymap update

* M65A keymap.c update

* M65 keymap added LED backlight toggle, inc/dec to adjust layer.

* M65 keymap/readme updates.

* M65 keymap fix

* M65 keymap update

* remove theme

* fix comments/readme

* update keymap

* LED backlight update, guess based on reading atmega32u4 documentation for DDRB/PORTB regs, believe DDRB should only be written to once not every time CAPS is hit, but really not too sure.

* LED backlight update, guess based on reading atmega32u4 documentation for DDRB/PORTB regs, believe DDRB should only be written to once not every time CAPS is hit, but really not too sure.

* M65 keymap update

* Updated M65, M10, and gonNerd keymaps.

* update

* del

* keymap updates M65, M10, gonnerd

* update keymaps

* adding back readme that somehow got removed.

* updated keymap

* update keymap

* add back readme

* Added h87a keymap, updated m10a/jc65/gonnerd

* Update h87a keymap

* Updates after feedback

* Updates after feedback

* Updates after feedback

* Updates after feedback
2019-01-03 08:12:58 -08:00
flehrad
526bc4c7cc Keyboard: add snagpad and trainstation keyboards (#4755)
* add snagpad

* Update keyboards/snagpad/kb.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Rename kb.c to snagpad.c

* Update and rename kb.h to snagpad.h

* Update snagpad.h

* Update keymap.c

* Update config.h

* Update config.h

* Update rules.mk

* Update README.md

* Add files via upload

* Update info.json

* Update keymap.c

* Update snagpad.h

* Delete snagpad_numpad.json

* Delete snagpad_ortho.json

* Update README.md

* Update keyboards/snagpad/info.json

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* add tradestation

* --all

* Did something weird messing with git -_- hopefully fixed

* Update keyboards/tradestation/keymaps/default/keymap.c

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/config.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/config.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/tradestation/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update snagpad.h

* Update rules.mk

* Update keymap.c

* fixed merge conflict, updated to LAYOUT_numpad_5x4

* relocated to handwire, updated naming, added layouts to rules.mk

* Update keyboards/handwired/tradestation/rules.mk

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Update keyboards/snagpad/snagpad.h

Co-Authored-By: flehrad <20124416+flehrad@users.noreply.github.com>

* Rename LICENSE to license

* Rename README.md to readme.md

* Rename LICENSE to license

* Rename README.md to readme.md

* Update info.json

* Update keymap.c

* Update info.json
2019-01-03 08:05:33 -08:00
ishtob
484c85bd0d Adding default settings for ERM motors for Hadron v3 haptic feedback (#4761)
* adding default settings to support 3v ERM vibration motors

* set default settings of haptic motor for LV061228B-L64-A 2v LRA

* update ishtob keymap and fix config settings
2019-01-02 13:30:59 -08:00
Jacob Jerrell
a7b1b146d1 Keymap: Bocaj Layout and Userspace Refactor (#4753)
* Bocaj Layout Revamp

* Pull in Upstream (#1)

* Various tweaks for some Input:Club build processes

* change KEYMAP to LAYOUT for all new keyboards made using this script

* Add support for rev3 of the Atom47 (#2672)

* Added support for rev3 of the Atom47

* Updated Atom47 readme's

* Fix redefine error on rev2 and add maartenwut's keymap

* Fix redefine error on LEdiodes keymap

* Add Nyquist keymap (#2692)

* nyquist

* danielhklein nyquist setup

* shift left controls

* remove readme

* cleanup before pr

* ready for pr

* Adds Phantom TKL support (#2696)

* Add an info.json to phantom keyboard

* Add layouts

 - KEYMAP_WINKEYLESS
 - KEYMAP_7BIT
 - KEYMAP_ISO
 - KEYMAP_ISO_WINKEYLESS

* Add key_counts

* Add 2 missing F-Row keys

* Add TKC1800 info.json

Created an info.json for the tkc1800.

* Clueboard 60 info.json

 - adds
   - LAYOUT_60_ansi
   - LAYOUT_60_iso
   - KEYMAP_AEK
   - KEYMAP
   - LAYOUT_60_ansi_split_bs_rshift

* Add the Speedo keyboard

* Fix KC60 info.json file (#2707)

* change KEYMAP to LAYOUT in all the KC60 files

* Redo the info.json file

* Small fixes to TKC1800

 - adjust F-row to use 0.25 spacing
 - split left shift
 - add key_count

* Fix some Configurator Warnings regarding LAYOUT vs KEYMAP (#2708)

* change diverge 3 KC_KEYMAP to LAYOUT

* Change KEYMAP to LAYOUT for handwired arrow pad

* change M10A to LAYOUT for m10-a

* Change KC_KEYMAP to LAYOUT_kc and KEYMAP to LAYOUT for mf68

* change KC_KEYMAP to LAYOUT for nano

* Refactor to LAYOUT

* refactor to LAYOUT-ansi and LAYOUT_iso for s65

* LAYOUT conversions for lfkkeyboards

* missed a few renames

* mini1800 for lfkeyobards support of LAYOUT

* Improve state/chord handling and clean up namespace

Some values that can never, ever, change were held in local
variables, rather than in PROGMEM. Fixed.

Change "pressed" to a signed int so the test for < 0 makes
sense, and to avoid possible weird failure modes in the
case where a key release comes in when pressed is already
zero. (Shouldn't happen, sure, but computers are weird.)

A lot of things in process_steno had external linkage for no
particular reason. They've been marked static. Stuff still
builds.

Distinguish between currently-held keys and keys that have
been held, and expose these values through a nicely-named API
so other code could, say, check on the current set of steno
chording in order to make displays. Also in passing fix up the
"state" value having external linkage so it could clash with
other people's variable declarations.

The API also provides hooks for key processing and steno chord
events, so you can monitor those events without having to
run in matrix_scan_user and recheck the values directly. Also
document these.

There is no path through processing a key that doesn't
end with a return false, so the nested return foo() are
gone and we just return false.

* Pull information from config.h and rules.mk (#2711)

* Pull information from config.h and rules.mk

* Readd the kbd75 maintainer

* Remove obsolete info.json entries (#2712)

* Clean up some long-standing errors when populating the API (#2715)

* More Configurator Warning Fixes (#2716)

* mf68_ble did not have the correct .c and .h files

* Fix JC65 KEYMAP to LAYOUT

* Change KEYMAP to LAYOUT for s60_x

* Convert KEYMAP to LAYOUT for lets_split boards

* Convert KEYMAP to LAYOUT

* more fixes to keymap for iris

* convert KEYMAP to LAYOUT for levinson keyboard

* change losinggeneration's KEYMAP to LAYOUT

* convert KEYMAP to LAYOUT

* convert KEYMAP to LAYOUT for nyquist

* convert KEYMAP to LAYOUT

* convert KEYMAP to LAYOUT for viterbi

* convert KEYMAP to LAYOUT

* convert KEYMAP and its subsidiries to the LAYOUT standard

* convert KEYMAP and its subsidiries to the new LAYOUT standard

* Normacos keymap for let's split keyboard (#2691)

* Cheers let's split keymap

* fixed typo on norman layer of cheers keymap for let's split

* fixed right handed mappings for home row

* cheers keymap for let's split redefinition

* updated Cheers keymap for let's split

* cheers keymap for let's split updated with some terminal macros

* renamed cheers let's split keymap to a more appropriate normacos

* updated normacos keymap doc / removed non functional keys

* reset let's split rules to default values

* added more spotlight search macros

* normalized keymap comments

* Moved numpad on lower layer

* hhkb jp personal keymap (#2698)

* Add JJ40 Cockpit personal keymap (#2713)

* Add JJ40 Cockpit keymap

* Fix lower layer symbols

* Add readme for "major" keyboards to eliminate more QMK Configurator errors (#2718)

* add readme to ktype keyboard

* add readme to m10a

* add readme to mini1800

* add readme to parent directory

* Revert "Pull in Upstream (#1)"

This reverts commit eeba0cec17.

* Updates to Bocaj Files

- Gave up on Tap Dance for ' -> '
+ Added another 'Secret'
+ Add ' -> ' to the Swap Hands key
+ Add Swap Hands to the ' -> ' key
+ Made Hand Swapping a momentary toggle
- Removed Auto Shift
+ Added Layer Toggle to KC_QUOTE for the _TOOLS layer
- Disabled Tap Dance

* Merge remote-tracking branch 'upstream/master'

* Updates to Bocaj

Added Game Layers, Removed Unused Macros

* Removed 'secrets.h'

* Updates to Bocaj

Remove 'secrets'.
Remove 'sendstring_workman.h' and set related layer back to qwerty due to macro compatibility issues

* Total revisioning of keymap and layout structure

* Missed readme.md file

* Bocaj - Permissive Hold setting enabled

* Switching from ErgoDox EZ centric configuration to the layout/user approach

* Bocaj - Create Userspace and Ergodox layout

* Update settings.json

* Pushing local updates

* Reverting .vscode/settings.json

* Adds pretty_osx and _win wrappers

* Utilize Windows and Mac Wrappers

* Update layouts/community/ergodox/bocaj/keymap.c

* Updates to Bocaj keymap.c

- Extended pretty_osx and pretty_win wrappers to allow modification of the bottom rows and thumb clusters.
- Fixed already wrapped layouts to align with the change
- Wrapped _NUMS and _CLICKY layers with the _osx wrapper because I main with a Mac

* Updates to Bocaj

Small documentation updates, added KC_MAKE from Drashna's layout, added KC_LOCK back to the diablo layer.

* Add LShift to _Adjust layer

* Minor changes to bocaj

Put wrappers in userspace and added RESET keycode to the Adjust layer

* Updates to Bocaj config & keymap; Fixed problem with process_leader.c

- Made lots of changes to the bocaj layout and userspace
- Pulled in latest upstream/master
- Attempted to compile with latest and found an unneccessary `break` in process_leader.c

* Bocaj - Updates to Layout and Userspace

* Adjust LEADER_TIMEOUT to 350
* Put KC_GRAVE on _ADJUST layer
* Eliminate _LOWER layer and associated definitions
* Adjusted layer indicating LEDs to match changes
* Fixed Diablo leader sequence
* Added build info leader sequence
* Got rid of obsoleted IGNORE_MOD_TAP_INTERRUPT/PERMISSIVE_HOLD/PREVENT_STUCK_MODIFIERS (may add STRICT_LAYER_RELEASE in the future)

* Remove type_traits

Not sure what in my VSCode config always brings this one in

* refactor stage 1

* Bocaj Refactor Phase II

* Made LED_2 brighter if both CTRL & GUI are being held
* Enabled unicode because I got it to work in Mac OS
* Finalized Build Info leader combination after testing in Mac OS
* Not sure why KC_D3_1 was set to ASDF if !TAP_DANCE_ENABLE. So I changed that back
* Experienced issues with `EXTRAFLAGS += -flto` using Docker in MacOS. Not sure what it does, but I don't seem to be missing anything
* Wrote obligatory readme.md files and mentioned Drashna too many times... I don't think I can actually take credit for much of anything here.

* Updates to Bocaj

Made LED changes, added LM_DFLT which is similar to the grave macro, enabled retro tapping, working on a unicode idea -- currently fails to build.

* Bocaj Refactor Phase 3 Part 2

- Continuation of implementing unicode switching based on default layer
- Slight adjustments to _DIABLO and base wrapper because LM_DFLT macro didn't function as I'd hoped

* Slight adjustment to KC_MAKE
2019-01-02 09:23:42 -08:00
Frank Tackitt
7b5fa4b13e Keymap: Add userspace for @kageurufu (#4752)
* Add userspace for @kageurufu

* Remove custom keycodes for layer keys

Add some common defaults for my rules.mk
2019-01-02 09:16:55 -08:00
lbibass
c71c078dff Added brightness controls and Media controls to my keymap. (#4760)
* Added my Mechmini2 layout to qmk.

* Added more info to the readme.

* Made changes.

* Update keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c

Co-Authored-By: lbibass <ewdries02@gmail.com>

* Update keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c

Co-Authored-By: lbibass <ewdries02@gmail.com>

* Added brightness and volume controls to MechMini 625 layout.
2019-01-02 08:42:03 -08:00
Frank Tackitt
134a69f4ad Keyboard: Enable defaults for Sol (#4751)
The enables RGB, Mousekeys, and Extrakeys for users of config.qmk.fm
2018-12-31 14:55:48 -08:00
Drashna Jaelre
40383089d0 Keymap: Update for Drashna code - Proton C Prep Edition (#4708)
* Make CRKBD keylogger output actually show tap keys

* check MT/LT for twinkling

* Add ortho 5x12 support for fractal keyboard

* Use newer interface for setting pins/ports

* Remove custom unicode methods

* Reomve unicode input info

* Odd rules issue

* Redefine REST note to be more pleasing

* Properly disable PM LEDs with GPIO commands

* Update gitlab CI yaml file

* Remove extra mod tap check

* Remove initial state on ergodox glow

* Rev6 Cleanup

* Fix KC_MAKE macro

* Update GitLab CI yaml file

* More GitLab CI changes

* One final GitLab CI change

* Remove unneeded unicode support

* Optimize KC_MAKE
2018-12-31 14:29:56 -08:00
Drashna Jaelre
7f0def77a2 Move Split Common VPATH addition (#4716)
Specifically, only add the split_common folder to COMMON_VPATH if the feature is eanbled, to prevent issues with compilation
2018-12-31 08:45:44 -08:00
David Dai
b7688590b8 Change rgblight_get_mode & rgb_matrix_get_mode's return type to uint8_t. (#4747)
* Change rgblight_get_mode's return type to uint8_t.

Since rgblight_get_mode() is just returning rgblight_config_t.mode,
it should match rgblight_config_t.mode's type: uint8_t.

* Update rgb_matrix_get_mode to return uint8_t.
2018-12-31 08:42:58 -08:00
takashiski
0c0e208a36 define brainfuck keymap (#4742)
* define brainfuck keymap

* Update keyboards/namecard2x4/keymaps/brainfuck/readme.md

Co-Authored-By: takashiski <takashiskibb@gmail.com>
2018-12-30 14:53:09 -08:00
Giuseppe Rota
3ddec14eb8 Register the interrupting keycode in the tap dance state struct 2018-12-30 08:35:12 -08:00
satt99
46b4b4407f Comet46 add support for OLED (#4745)
* Add OLED support for Comet46

* fix length of char "name" of keylogger.c

* update ssd1306

* fix rules.mk

* update led-receiver keymap

* Update OLED related code

* add mod_state_reader & modify led_state_reader

* Update OLED related files

* Update kemaps

* Update readme

* change default-oled-display to default

* Add OSM compatibility to mod_state_reader

* Code formatting

* Use PROGMEM to store code_to_name

* Clean up satt keymap

* Rename default-led keymap to defult-rgbled
2018-12-30 08:34:06 -08:00
Matthew Lyon
c2390bf321 Keymap: mattly: more tweaks (#4746) 2018-12-30 07:54:10 -08:00
wanleg
c043edd138 Keymap: Wanleg 5x5 Keymap changes (#4738)
* config fixes (including for issue #3678)

* put back audio

* jj40 backlighting setup

* jj40 backlighting setup

* rules.mk fix

* jj40 backlighting settings

* iris setup

* iris setup

* iris setup

* iris setup

* iris setup - onehand

* remove commented-out section

* edits due to #4403

* xd75 testing

* fix 5x15 layout issues with 5x5 bluetooth & xd75

* commenting out unused placeholders

* change iris to more wanleg-like 4x12 layout

* formatting changes

* onehand layout cleanup/fix

* revert temp change

* create centre numpad option

* 1st working version

* change keypad numbers to regular numbers - doesn't work otherwise

* adding comparison files, no change to core

* fixed 5x5 with cleave

* fixed 5x5 with cleave

* switch mouse scroll buttons

* clean up left/right/centre pad placement in 5x15 layouts

* minor comment change

* Update layouts/community/ortho_5x15/wanleg/keymap.c

Co-Authored-By: wanleg <32079073+wanleg@users.noreply.github.com>

* Update layouts/community/ortho_5x15/wanleg/keymap.c

Co-Authored-By: wanleg <32079073+wanleg@users.noreply.github.com>

* Update layouts/community/ortho_5x15/wanleg/keymap.c

Co-Authored-By: wanleg <32079073+wanleg@users.noreply.github.com>

* revert to original
2018-12-30 07:53:02 -08:00
ginjake
cc7bf108a9 Keymap: add ginjake keymap for the zinc keyboard (#4741)
* サンシャインぴっかぴかモード実装

* サンシャインぴっかぴかモード
2018-12-29 08:19:34 -08:00
Giuseppe Rota
bb1b441325 Fix leader processing 2018-12-29 08:17:43 -08:00
Menchen
e2f60eba2f Fix capkey led for dz60. 2018-12-28 23:29:58 -08:00
Stephen Gelman
8443481aea Fix apparent typo in WhiteFox LED config
It seems the led_mask is set incorrectly on the WhiteFox meaning that
the LED at C9-1 (the space bar) doesn't get lit.  I can't see any reason
for this to be intentional so I am pretty sure it's a typo.  At the very
least it fixes the space bar LED for me.
2018-12-28 22:55:59 -08:00
Jason Thigpen
d9abb833e5 Add my zeal60 keymap (#4732)
* Add my zeal60 keymap

* Temporarily remove failing community layout from zeal60 make rules

* Revert "Temporarily remove failing community layout from zeal60 make rules"

This reverts commit ffd0018fb1.
2018-12-28 22:27:35 -08:00
Max
2c6c483096 refactored cyclops keyboard project (#4734)
* refactored cyclops keyboard project

Moved the files into a subfolder to allow consistency in preparation for additional commits to come in the future.

made some small adjustments to the configuration and keymap

* Update keyboards/westfoxtrot/cyclops/keymaps/default/keymap.c

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cyclops/readme.md

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cyclops/readme.md

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>

* Update keyboards/westfoxtrot/cyclops/readme.md

Co-Authored-By: westfoxtrot <17062872+westfoxtrot@users.noreply.github.com>
2018-12-28 15:07:47 -08:00
Drashna Jaelre
6b46c06018 Fix Split Common Split_util.c typo 2018-12-28 14:52:58 -08:00
Danny
c0859ac096 Update split keyboard docs (#4735)
* Remove unused I2C_MASTER_RIGHT setting

* Update documentation about split keyboard options
2018-12-28 13:02:53 -08:00
Konstantin Đorđević
93b004c943 Keep pressed keys on layer state change (fixes #2053, #2279) (#3905)
* Keep pressed keys on layer state change

* Add doc comment for clear_keyboard_but_mods_and_keys

* Keep pressed keys only if PREVENT_STUCK_MODIFIERS is on

* Check STRICT_LAYER_RELEASE instead of PREVENT_STUCK_MODIFIERS
2018-12-28 11:07:56 -08:00
Kyle Brown
fbcbf44926 Update feature_advanced_keycodes.md (#3672)
* Update feature_advanced_keycodes.md

Probably a better way to word it, but I've solved this issue on reddit several times, had to solve this for friends, ect. It's something worth being in the docs as it's a common issue, and not always intuitive. I have offered this change as I was told by several people "It was never mentioned in the docs".

* Update feature_advanced_keycodes.md

Clear up what was meant to be said.
2018-12-28 10:31:15 -08:00
Jumail Mundekkat
3744a2b641 Added Skog TKL support (#4727)
* Added Skog TKL support

* Updated manufacturer/product name
2018-12-27 08:40:33 -08:00
noroadsleft
cfba216541 S65-Plus: fix layout macro name in info.json (#4728) 2018-12-27 08:37:29 -08:00
640 changed files with 16359 additions and 5393 deletions

View File

@@ -21,5 +21,4 @@ COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
COMMON_VPATH += $(QUANTUM_PATH)/audio
COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
COMMON_VPATH += $(QUANTUM_PATH)/api
COMMON_VPATH += $(QUANTUM_PATH)/split_common
COMMON_VPATH += $(DRIVER_PATH)

View File

@@ -268,4 +268,5 @@ ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
$(QUANTUM_DIR)/split_common/split_util.c
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/i2c.c
QUANTUM_LIB_SRC += $(QUANTUM_DIR)/split_common/serial.c
COMMON_VPATH += $(QUANTUM_PATH)/split_common
endif

View File

@@ -197,8 +197,27 @@ If you define these options you will enable the associated feature, which may in
Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk
* `#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 you can still use the EEHANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses.
### Setting Handedness
One thing to remember, the side that the USB port is plugged into is always the master half. The side not plugged into USB is the slave.
There are a few different ways to set handedness for split keyboards (listed in order of precedence):
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
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
* `#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.
* `#define EE_HANDS` (only works if `SPLIT_HAND_PIN` is not defined)
* Reads the handedness value stored in the EEPROM after `eeprom-lefthand.eep`/`eeprom-righthand.eep` has been flashed to their respective halves.
* `#define MASTER_RIGHT`
* Master half is defined to be the right half.
### Other Options
* `#define USE_I2C`
* For using I2C instead of Serial (defaults to serial)
@@ -206,6 +225,20 @@ Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in yo
* `#define SOFT_SERIAL_PIN D0`
* When using serial, define this. `D0` or `D1`,`D2`,`D3`,`E6`.
* `#define MATRIX_ROW_PINS_RIGHT { <row pins> }`
* `#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 SELECT_SOFT_SERIAL_SPEED <speed>` (default speed is 1)
* Sets the protocol speed when using serial communication
* Speeds:
* 0: about 189kbps (Experimental only)
* 1: about 137kbps (default)
* 2: about 75kbps
* 3: about 39kbps
* 4: about 26kbps
* 5: about 20kbps
# The `rules.mk` File
This is a [make](https://www.gnu.org/software/make/manual/make.html) file that is included by the top-level `Makefile`. It is used to set some information about the MCU that we will be compiling for as well as enabling and disabling certain features.

View File

@@ -21,7 +21,7 @@ Additionally, if at least one right-handed modifier is specified in a Mod Tap or
# Switching and Toggling Layers
These functions allow you to activate layers in various ways. Note that layers are not generally independent layouts -- multiple layers can be activated at once, and it's typical for layers to use `KC_TRNS` to allow keypresses to pass through to lower layers. For a detailed explanation of layers, see [Keymap Overview](keymap.md#keymap-and-layers)
These functions allow you to activate layers in various ways. Note that layers are not generally independent layouts -- multiple layers can be activated at once, and it's typical for layers to use `KC_TRNS` to allow keypresses to pass through to lower layers. For a detailed explanation of layers, see [Keymap Overview](keymap.md#keymap-and-layers) When using momentary layer switching with MO(), LM(), TT(), or LT(), make sure to leave the key on the above layers transparent or it may not work as intended.
* `DF(layer)` - switches the default layer. The default layer is the always-active base layer that other layers stack on top of. See below for more about the default layer. This might be used to switch from QWERTY to Dvorak layout. (Note that this is a temporary switch that only persists until the keyboard loses power. To modify the default layer in a persistent way requires deeper customization, such as calling the `set_single_persistent_default_layer` function inside of [process_record_user](custom_quantum_functions.md#programming-the-behavior-of-any-keycode).)
* `MO(layer)` - momentarily activates *layer*. As soon as you let go of the key, the layer is deactivated.

View File

@@ -2,15 +2,15 @@
There are three Unicode keymap definition methods available in QMK:
## UNICODE_ENABLE
## `UNICODE_ENABLE`
Supports Unicode up to `0xFFFF`. The keycode function is `UC(n)` in the keymap file, where _n_ is a 4 digit hexadecimal number.
Supports Unicode up to `0x7FFF`. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji. The keycode function is `UC(c)` in the keymap file, where _c_ is the code point's number (preferably hexadecimal, up to 4 digits long). For example: `UC(0x45B)`, `UC(0x30C4)`.
## UNICODEMAP_ENABLE
## `UNICODEMAP_ENABLE`
Supports Unicode up to `0x10FFFF` (all possible code points). You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(n)`, where _n_ is an array index into the mapping table.
Supports Unicode up to `0x10FFFF` (all possible code points). You need to maintain a separate mapping table `const uint32_t PROGMEM unicode_map[] = {...}` in your keymap file. The keycode function is `X(i)`, where _i_ is an array index into the mapping table. The table may contain at most 1024 entries.
And you may want to have an enum to make reference easier. So you'd want to add something like this to your keymap:
You may want to have an enum to make referencing easier. So, you could add something like this to your keymap file:
```c
enum unicode_names {
@@ -20,38 +20,37 @@ enum unicode_names {
};
const uint32_t PROGMEM unicode_map[] = {
[BANG] = 0x203D, // ‽
[IRONY] = 0x2E2E, // ⸮
[SNEK] = 0x1F40D, // 🐍
[BANG] = 0x203D, // ‽
[IRONY] = 0x2E2E, // ⸮
[SNEK] = 0x1F40D, // 🐍
};
```
Make sure that the order for both matches.
Then you can use `X(BANG)` etc. in your keymap.
## UCIS_ENABLE
## `UCIS_ENABLE`
Supports Unicode up to `0x10FFFF` (all possible code points). As with `UNICODEMAP`, you may want to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you will have to add a keycode or function that calls `qk_ucis_start()`. Once it's been called, you can type the mnemonic for your character, then hit Space or Enter to complete it or Esc to cancel. If the mnemonic matches an entry in your table, the typed text will automatically be erased and the corresponding Unicode sequence inserted.
Supports Unicode up to `0x10FFFF` (all possible code points). As with `UNICODEMAP`, you need to maintain a mapping table in your keymap file. However, there are no built-in keycodes for this feature — you will have to add a keycode or function that calls `qk_ucis_start()`. Once this function's been called, you can type the corresponding mnemonic for your character, then hit Space or Enter to complete it, or Esc to cancel. If the mnemonic matches an entry in your table, the typed text will automatically be erased and the corresponding Unicode character inserted.
For instance, you would need to have a table like this in your keymap:
For instance, you would define a table like this in your keymap file:
```c
const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE
(
UCIS_SYM("poop", 0x1f4a9),
UCIS_SYM("rofl", 0x1f923),
UCIS_SYM("kiss", 0x1f619)
const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE(
UCIS_SYM("poop", 0x1F4A9), // 💩
UCIS_SYM("rofl", 0x1F923), // 🤣
UCIS_SYM("kiss", 0x1F619) // 😙
);
```
You run the function, and then type "rofl" and hit enter, it should backspace remove "rofl" and input the `0x1f923` unicode.
You call `qk_ucis_start()`, then type "rofl" and hit Enter. QMK should erase the "rofl" text and input the laughing emoji.
### Customization
There are several functions that you can add to your keymap to customize the functionality of this feature.
There are several functions that you can define in your keymap to customize the functionality of this feature.
* `void qk_ucis_start_user(void)` - This runs when you run the "start" function, and can be used to provide feedback. By default, it types out a keyboard emoji.
* `void qk_ucis_success(uint8_t symbol_index)` - This runs when the unicode input has matched something, and has completed. Default doesn't do anything.
* `void qk_ucis_symbol_fallback (void)` - This runs if the input text doesn't match anything. The default function falls back to trying that input as a unicode code.
* `void qk_ucis_start_user(void)` This runs when you call the "start" function, and can be used to provide feedback. By default, it types out a keyboard emoji.
* `void qk_ucis_success(uint8_t symbol_index)` This runs when the input has matched something and has completed. By default, it doesn't do anything.
* `void qk_ucis_symbol_fallback (void)` This runs when the input doesn't match anything. By default, it falls back to trying that input as a Unicode code.
You can find the default implementations of these functions in [`process_ucis.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_ucis.c).
@@ -66,7 +65,7 @@ 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.
* **`UC_LNX`**: Linux built-in IBus Unicode input. Supports all possible code points (`0x10FFFF`).
* **`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.
@@ -77,7 +76,7 @@ The following input modes are available:
* **`UC_BSD`**: _(non implemented)_ Unicode input under BSD. Not implemented at this time. If you're a BSD user and want to help add support for it, please [open an issue on GitHub](https://github.com/qmk/qmk_firmware/issues).
* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.8.2, supports code points up to `0xFFFFF`.
* **`UC_WINC`**: Windows Unicode input using [WinCompose](https://github.com/samhocevar/wincompose). As of v0.8.2, supports code points up to `0xFFFFF` (all currently assigned code points).
To enable, install the [latest release](https://github.com/samhocevar/wincompose/releases/latest). Once installed, WinCompose will automatically run on startup. Works reliably under all version of Windows supported by the app.
By default, this mode uses the right Alt key (`KC_RALT`), but this can be changed in the WinCompose settings and by defining [`UNICODE_WINC_KEY`](#input-key-configuration) with another keycode.

View File

@@ -93,19 +93,17 @@ This enables MIDI sending and receiving with your keyboard. To enter MIDI send m
`UNICODE_ENABLE`
This allows you to send unicode symbols via `UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported.
This allows you to send Unicode characters using `UC(<code point>)` in your keymap. Code points up to `0x7FFF` are supported. This covers characters for most modern languages, as well as symbols, but it doesn't cover emoji.
`UNICODEMAP_ENABLE`
This allows sending unicode symbols using `X(<unicode>)` in your keymap. Codes
up to 0xFFFFFFFF are supported, including emojis. You will need to maintain
a separate mapping table in your keymap file.
This allows you to send Unicode characters using `X(<map index>)` in your keymap. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported.
Known limitations:
- Under Mac OS, only codes up to 0xFFFF are supported.
- Under Linux ibus, only codes up to 0xFFFFF are supported (but anything important is still under this limit for now).
`UCIS_ENABLE`
Characters out of range supported by the OS will be ignored.
This allows you to send Unicode characters by inputting a mnemonic corresponding to the character you want to send. You will need to maintain a mapping table in your keymap file. All possible code points (up to `0x10FFFF`) are supported.
For further details, as well as limitations, see the [Unicode page](feature_unicode.md).
`BLUETOOTH_ENABLE`
@@ -117,7 +115,7 @@ This allows you output audio on the C6 pin (needs abstracting). See the [audio p
`FAUXCLICKY_ENABLE`
Uses buzzer to emulate clicky switches. A cheap imitation of the Cherry blue switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
Uses buzzer to emulate clicky switches. A cheap imitation of the Cherry blue switches. By default, uses the C6 pin, same as `AUDIO_ENABLE`.
`VARIABLE_TRACE`

View File

@@ -454,7 +454,7 @@ This is a reference only. Each group of keys links to the page documenting their
## [Unicode Support](feature_unicode.md)
|Key |Aliases| |
|------------|-------|-------------------------------------------------|
|`UNICODE(n)`|`UC(n)`|Send Unicode character `n` |
|`X(n)` | |Send Unicode character `n` via a different method|
|Key |Description |
|-------|---------------------------------------------------------------------------|
|`UC(c)`|Send Unicode code point `c` (`UNICODE_ENABLE`) |
|`X(i)` |Send Unicode code point at index `i` in `unicode_map` (`UNICODEMAP_ENABLE`)|

View File

@@ -12,7 +12,7 @@ You can think of QMK as no different from any other computer program. It is star
The reason for this is the different platforms that QMK supports. The most common platform is `lufa`, which runs on AVR processors such at the atmega32u4. We also support `chibios` and `vusb`.
We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1019). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/protocol/lufa/lufa.c#L1060). This is [The Main Loop](#the-main-loop).
We'll focus on AVR processors for the moment, which use the `lufa` platform. You can find the `main()` function in [tmk_core/protocol/lufa/lufa.c](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/protocol/lufa/lufa.c#L1028). If you browse through that function you'll find that it initializes any hardware that has been configured (including USB to the host) and then it starts the core part of the program with a [`while(1)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/protocol/lufa/lufa.c#L1069). This is [The Main Loop](#the-main-loop).
## The Main Loop
@@ -22,7 +22,7 @@ This section of code is called "The Main Loop" because it's responsible for loop
keyboard_task();
```
This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/tmk_core/common/keyboard.c#L206), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
This is where all the keyboard specific functionality is dispatched. The source code for `keyboard_task()` can be found in [tmk_core/common/keyboard.c](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/tmk_core/common/keyboard.c#L216), and it is responsible for detecting changes in the matrix and turning status LED's on and off.
Within `keyboard_task()` you'll find code to handle:
@@ -77,7 +77,7 @@ At the keyboard level we define a C macro (typically named `KEYMAP()`) which map
Notice how the second block of our `KEYMAP()` macro matches the Matrix Scanning array above? This macro is what will map the matrix scanning array to keycodes. However, if you look at a 17 key numpad you'll notice that it has 3 places where the matrix could have a switch but doesn't, due to larger keys. We have populated those spaces with `KC_NO` so that our keymap definition doesn't have to.
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
You can also use this macro to handle unusual matrix layouts, for example the [Clueboard rev 2](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/keyboards/clueboard/66/rev2/rev2.h). Explaining that is outside the scope of this document.
##### Keycode Assignment
@@ -130,31 +130,33 @@ Comparing against our keymap we can see that the pressed key is KC_NLCK. From he
##### Process Record
The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is listed below, using cluecard whenever we need to look at the keyboard/keymap level functions. Depending on options set in rule.mk or elsewhere, only a subset of the functions below will be included in final firmware.
The `process_record()` function itself is deceptively simple, but hidden within is a gateway to overriding functionality at various levels of QMK. The chain of events is listed below, using cluecard whenever we need to look at the keyboard/keymap level functions. Depending on options set in `rules.mk` or elsewhere, only a subset of the functions below will be included in final firmware.
* [`void process_record(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/tmk_core/common/action.c#L172)
* [`bool process_record_quantum(keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L193)
* [Map this record to a keycode](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/quantum.c#L213)
* [`void preprocess_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_tap_dance.c#L115)
* [`bool process_key_lock(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_key_lock.c#L62)
* [`bool process_clicky(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/quantum/process_keycode/process_clicky.c#L44)
* [`bool process_record_kb(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/keyboards/clueboard/card/card.c#L20)
* [`bool process_record_user(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/08c682c193f43e5d54df990680ae93fc2e06150a/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/fdd0f915271f79b104aa5d216566bcc3fd134e85/quantum/rgb_matrix.c#L139)
* [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_midi.c#L81)
* [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_audio.c#L19)
* [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_steno.c#L160)
* [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_music.c#L114)
* [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_tap_dance.c#L136)
* [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_leader.c#L38)
* [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_combo.c#L115)
* [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicode.c#L22)
* [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_ucis.c#L91)
* [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_printer.c#L77)
* [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_auto_shift.c#L94)
* [`bool process_unicode_map(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_unicodemap.c#L47)
* [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/process_keycode/process_terminal.c#L264)
* [Identify and process quantum specific keycodes](https://github.com/qmk/qmk_firmware/blob/661ca4440cc42f3b60697e98985c44b0571ccfc1/quantum/quantum.c#L287)
* [`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 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_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)
* [`bool process_midi(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_midi.c#L81)
* [`bool process_audio(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_audio.c#L19)
* [`bool process_steno(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_steno.c#L160)
* [`bool process_music(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_music.c#L114)
* [`bool process_tap_dance(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_tap_dance.c#L141)
* [`bool process_unicode_common(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode_common.c#L169)
calls one of:
* [`bool process_unicode(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicode.c#L20)
* [`bool process_unicodemap(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_unicodemap.c#L46)
* [`bool process_ucis(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_ucis.c#L95)
* [`bool process_leader(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_leader.c#L51)
* [`bool process_combo(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_combo.c#L115)
* [`bool process_printer(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_printer.c#L77)
* [`bool process_auto_shift(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_auto_shift.c#L94)
* [`bool process_terminal(uint16_t keycode, keyrecord_t *record)`](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/process_keycode/process_terminal.c#L264)
* [Identify and process Quantum-specific keycodes](https://github.com/qmk/qmk_firmware/blob/e1203a222bb12ab9733916164a000ef3ac48da93/quantum/quantum.c#L291)
At any step during this chain of events a function (such as `process_record_kb()`) can `return false` to halt all further processing.

View File

@@ -24,10 +24,10 @@
#include "wait.h"
#endif
#include "is31fl3733.h"
#include <string.h>
#include "i2c_master.h"
#include "progmem.h"
#include "rgb_matrix.h"
// This is a 7-bit address, that gets left-shifted and bit 0
// set to 0 for write, 1 for read (as per I2C protocol)

View File

@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -0,0 +1,35 @@
# Alpha 28-Key Keyboard Alternate Keymap
Alternate keymap for [Alpha 28-key keyboard](https://github.com/qmk/qmk_firmware/tree/master/keyboards/alpha).
## How-to
Assuming you've followed all the instructions from the original post, put my "keymap.c" file in "$qmk-firmware-folder$/keyboards/alpha/keymaps/vderm/" and then run your make command ("make alpha:vderm" while in $qmk-firmware-folder$ where this folder is what you've downloaded from the official github page) to compile the hex file to upload to your microcontroller. I've also uploaded my hex file.
## Description
Instead of going up and down layers like in the original Alpha keyboard, I've made the bottom row keys all have alternate functions:
+ Like in the original Alpha28 keymap, the 2U spacebar is a shift key when held down and space when tapped
+ Z and M are Ctrl keys when held down or Z and M when tapped
+ X and N are Alt keys
+ C activates the function keys layer (arrows, page up/dn, esc, tab, etc.)
+ V activates the characters and numbers layer
+ C and V combined activated the F-keys layer (F1, F2, F3, etc.)
+ The enter key is an enter key in the home layer, backspace in the function keys and characters/numbers layer and a delete in the F-keys layer
+ While in the other layers, the bottom row acts like a "regular" bottom modified row: ctrl, alt, winkey
## Keymap
![keymap](https://imgur.com/ZbDz0eL.jpg)
## Build Images
Here is my keyboard.
+ Switches: Aliaz Silent Switches (Tactile), PCB mount, 80g from [KBDfans](https://kbdfans.cn/collections/aliaz-switches/products/pre-orderaliaz-silent-switch-tactile?variant=2519899832333)
+ PCB board: ordered from JLCPCB, in white
+ Keycaps: ebay, can't find link :S
+ Bottom plate: I cut a piece of canary wood that was laying around, needs to be varnished; I also need to actually screw the pcb to the wood instead of relying on double-sided tape
![vderm_alpha0](https://imgur.com/MjjoVtr.jpg)
![vderm_alpha1](https://imgur.com/mIFu9WV.jpg)
![vderm_alpha2](https://imgur.com/A70Iemw.jpg)
![vderm_alpha3](https://imgur.com/eYljPWh.jpg)
![vderm_alpha4](https://imgur.com/OhUKowj.jpg)
Good luck on your build!
//vderm

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,34 @@
#include QMK_KEYBOARD_H
#define HOME 0
#define FN 1
#define FNCHAR 2
#define FKEYS 3
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[HOME] = LAYOUT(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(1, KC_C), LT(2, KC_V), MT(MOD_LSFT, KC_SPC), MT(MOD_RGUI,KC_B), MT(MOD_RALT, KC_N), MT(MOD_RCTL, KC_M)),
[FN] = LAYOUT(
KC_ESC, KC__MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_NO,
KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC,
KC_LCTL, KC_LALT, KC_TRNS, MO(3), MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
[FNCHAR] = LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
KC_GRV,KC_NO,KC_MINS,KC_EQL,KC_BSLS,KC_LBRC,KC_RBRC,KC_SCLN,KC_QUOT,KC_BSPC,
KC_LCTL, KC_LALT, MO(3), KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_COMM, KC_DOT, KC_SLSH),
[FKEYS] = 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_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_NO,KC_DEL,
KC_LCTL, KC_LALT, KC_TRNS, KC_TRNS, MT(MOD_LSFT, KC_SPC), KC_RGUI, KC_RALT, KC_RCTL),
};
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}

View File

@@ -10,6 +10,3 @@ AUDIO_ENABLE ?= no
RGBLIGHT_ENABLE ?= yes
UNICODE_ENABLE ?= yes
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -18,7 +18,3 @@ 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
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -18,6 +18,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -13,6 +13,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -44,6 +44,3 @@
#
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -4,19 +4,11 @@ void uart_init(void) {
SERIAL_UART_INIT();
}
void led_init(void) {
DDRD |= (1<<1);
PORTD |= (1<<1);
DDRF |= (1<<4) | (1<<5);
PORTF |= (1<<4) | (1<<5);
}
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
uart_init();
led_init();
}
void matrix_scan_kb(void) {

View File

@@ -6,46 +6,6 @@
#include "backlight.h"
#include <stddef.h>
#define red_led_off PORTF |= (1<<5)
#define red_led_on PORTF &= ~(1<<5)
#define blu_led_off PORTF |= (1<<4)
#define blu_led_on PORTF &= ~(1<<4)
#define grn_led_off PORTD |= (1<<1)
#define grn_led_on PORTD &= ~(1<<1)
#define set_led_off red_led_off; grn_led_off; blu_led_off
#define set_led_red red_led_on; grn_led_off; blu_led_off
#define set_led_blue red_led_off; grn_led_off; blu_led_on
#define set_led_green red_led_off; grn_led_on; blu_led_off
#define set_led_yellow red_led_on; grn_led_on; blu_led_off
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
#define set_led_white red_led_on; grn_led_on; blu_led_on
/*
#define LED_B 5
#define LED_R 6
#define LED_G 7
#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
#define red_led_on PORTF |= (1<<LED_R)
#define red_led_off PORTF &= ~(1<<LED_R)
#define grn_led_on PORTF |= (1<<LED_G)
#define grn_led_off PORTF &= ~(1<<LED_G)
#define blu_led_on PORTF |= (1<<LED_B)
#define blu_led_off PORTF &= ~(1<<LED_B)
#define set_led_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
#define set_led_red PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
#define set_led_blue PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
#define set_led_green PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
#define set_led_yellow PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
#define set_led_cyan PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
#define set_led_white PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
*/
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array

View File

@@ -41,12 +41,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ONESHOT_TIMEOUT 500
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/*
* Feature disable options
* These options are also useful to firmware size reduction.
@@ -65,6 +59,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
// Define masks for modifiers
#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))
//UART settings for communication with the RF microcontroller
#define SERIAL_UART_BAUD 1000000
#define SERIAL_UART_DATA UDR1

162
keyboards/comet46/i2c.c Normal file
View File

@@ -0,0 +1,162 @@
#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"
#ifdef USE_I2C
// Limits the amount of we wait for any one i2c transaction.
// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
// 9 bits, a single transaction will take around 90μs to complete.
//
// (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 or 400kHz (see ./i2c.h SCL_CLOCK)
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;
}
// 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;
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);
}
#endif

49
keyboards/comet46/i2c.h Normal file
View File

@@ -0,0 +1,49 @@
#ifndef I2C_H
#define I2C_H
#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
#define SLAVE_BUFFER_SIZE 0x10
// i2c SCL clock frequency 400kHz
#define SCL_CLOCK 400000L
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_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();
#endif

View File

@@ -0,0 +1,226 @@
// 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 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 comet46_layers
{
_QWERTY,
_COLEMAK,
_DVORAK,
_LOWER,
_RAISE,
_ADJUST,
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
LOWER,
RAISE,
};
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#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 |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Ctl | A | S | D | F | G | Esc | | Del | H | J | K | L | ; | " |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | { | | } | N | M | , | . | / | Shift|
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | GUI | Lower| Space| | Enter| Raise| Alt |
* +--------------------/ \--------------------+
*/
[_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_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_ESC, KC_DEL, 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_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
),
/* Colemak
* ,-----------------------------------------+ +-----------------------------------------.
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Ctl | A | R | S | T | D | Esc | | Del | H | N | E | I | O | " |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | { | | } | K | M | , | . | / | Shift|
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | GUI | Lower| Space| | Enter| Raise| Alt |
* +--------------------/ \--------------------+
*/
[_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_BSPC,
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_ESC, KC_DEL, 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_LCBR, KC_RCBR, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
),
/* Dvorak
* ,-----------------------------------------+ +-----------------------------------------.
* | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Ctl | A | O | E | U | I | Esc | | Del | D | H | T | N | S | / |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | { | | } | B | M | W | V | Z | Shift|
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | GUI | Lower| Space| | Enter| Raise| Alt |
* +--------------------/ \--------------------+
*/
[_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_BSPC,
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_ESC, KC_DEL, 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_LCBR, KC_RCBR, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
),
/* Lower
* ,-----------------------------------------+ +-----------------------------------------.
* | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | | | | | | | | ` | \ | - | = | [ | ] | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | | | | | | | | ~ | | | _ | + | { | } | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | | | | | | | |
* +--------------------/ \--------------------+
*/
[_LOWER] = LAYOUT(
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
_______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
_______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
_______, _______, _______, _______, _______, _______
),
/* Raise
* ,-----------------------------------------+ +-----------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | | | | | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | End | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | PgDn | PgUp | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | | | | | | | |
* +--------------------/ \--------------------+
*/
[_RAISE] = LAYOUT(
_______, 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, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, _______,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______,
_______, _______, _______, _______, _______, _______
),
/* Adjust
* ,-----------------------------------------+ +-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | | | | | |Qwerty| |Colemk| | | | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | | | | | |Reset | |Dvorak| | | | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | | | | | | | |
* +--------------------/ \--------------------+
*/
[_ADJUST] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, RESET, DVORAK, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
)
};
uint32_t layer_state_set_user(uint32_t state) {
return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
}
// settings for LED on receiver
void led_init(void) {
DDRD |= (1<<1);
PORTD |= (1<<1);
DDRF |= (1<<4) | (1<<5);
PORTF |= (1<<4) | (1<<5);
}
#define red_led_off PORTF |= (1<<5)
#define red_led_on PORTF &= ~(1<<5)
#define blu_led_off PORTF |= (1<<4)
#define blu_led_on PORTF &= ~(1<<4)
#define grn_led_off PORTD |= (1<<1)
#define grn_led_on PORTD &= ~(1<<1)
#define set_led_off red_led_off; grn_led_off; blu_led_off
#define set_led_red red_led_on; grn_led_off; blu_led_off
#define set_led_blue red_led_off; grn_led_off; blu_led_on
#define set_led_green red_led_off; grn_led_on; blu_led_off
#define set_led_yellow red_led_on; grn_led_on; blu_led_off
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
#define set_led_white red_led_on; grn_led_on; blu_led_on
void matrix_init_user(void) {
led_init();
}
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
uint8_t default_layer = biton32(eeconfig_read_default_layer());
switch (layer) {
case _LOWER:
set_led_red;
break;
case _RAISE:
set_led_blue;
break;
case _ADJUST:
set_led_magenta;
break;
default:
switch (default_layer) {
case _COLEMAK:
set_led_white;
break;
case _DVORAK:
set_led_yellow;
break;
default:
set_led_green;
break;
}
break;
}
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
break;
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
break;
case DVORAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_DVORAK);
}
break;
}
return true;
}

View File

@@ -0,0 +1,3 @@
## default-led
A keymap that is compatible with mitosis-type receivers, which use RGB LED for layer indication.

View File

@@ -18,8 +18,14 @@ 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
// #include "../../config.h"
// place overrides here
/* Use I2C or Serial */
#define USE_I2C
#define SSD1306OLED
#endif

View File

@@ -2,6 +2,10 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
#include QMK_KEYBOARD_H
#ifdef SSD1306OLED
#include "ssd1306.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.
@@ -9,13 +13,18 @@
// entirely and just use numbers.
enum comet46_layers
{
_QWERTY,
_LOWER,
_RAISE,
_QWERTY,
_COLEMAK,
_DVORAK,
_LOWER,
_RAISE,
_ADJUST,
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
LOWER,
RAISE,
};
@@ -46,6 +55,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
),
/* Colemak
* ,-----------------------------------------+ +-----------------------------------------.
* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Ctl | A | R | S | T | D | Esc | | Del | H | N | E | I | O | " |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | { | | } | K | M | , | . | / | Shift|
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | GUI | Lower| Space| | Enter| Raise| Alt |
* +--------------------/ \--------------------+
*/
[_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_BSPC,
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_ESC, KC_DEL, 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_LCBR, KC_RCBR, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
),
/* Dvorak
* ,-----------------------------------------+ +-----------------------------------------.
* | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Ctl | A | O | E | U | I | Esc | | Del | D | H | T | N | S | / |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | { | | } | B | M | W | V | Z | Shift|
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | GUI | Lower| Space| | Enter| Raise| Alt |
* +--------------------/ \--------------------+
*/
[_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_BSPC,
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_ESC, KC_DEL, 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_LCBR, KC_RCBR, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
),
/* Lower
* ,-----------------------------------------+ +-----------------------------------------.
* | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
@@ -70,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | End | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | | | | | |
* | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | PgDn | PgUp | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | | | | | | | |
* +--------------------/ \--------------------+
@@ -78,26 +123,134 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_RAISE] = LAYOUT(
_______, 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, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, _______,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______,
_______, _______, _______, _______, _______, _______
),
/* Adjust
* ,-----------------------------------------+ +-----------------------------------------.
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | | | | | |Qwerty| |Colemk| | | | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | | | | | |Reset | |Dvorak| | | | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | | | | | | | |
* +--------------------/ \--------------------+
*/
[_ADJUST] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, RESET, DVORAK, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
)
};
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
switch (layer) {
case _QWERTY:
set_led_green;
break;
case _RAISE:
set_led_blue;
break;
case _LOWER:
set_led_red;
break;
default:
set_led_green;
break;
}
uint32_t layer_state_set_user(uint32_t state) {
return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
}
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
// You need to add source files to SRC in rules.mk when using OLED display functions
void set_keylog(uint16_t keycode);
const char *read_keylog(void);
const char *read_modifier_state(void);
const char *read_host_led_state(void);
void matrix_init_user(void) {
iota_gfx_init(false); // turns on the display
}
void matrix_scan_user(void) {
iota_gfx_task(); // this is what updates the display continuously
}
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 render_status(struct CharacterMatrix *matrix) {
// Layer state
char layer_str[22];
matrix_write(matrix, "Layer: ");
uint8_t layer = biton32(layer_state);
uint8_t default_layer = biton32(eeconfig_read_default_layer());
switch (layer) {
case _QWERTY:
switch (default_layer) {
case _QWERTY:
snprintf(layer_str, sizeof(layer_str), "Qwerty");
break;
case _COLEMAK:
snprintf(layer_str, sizeof(layer_str), "Colemak");
break;
case _DVORAK:
snprintf(layer_str, sizeof(layer_str), "Dvorak");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
break;
}
break;
case _RAISE:
snprintf(layer_str, sizeof(layer_str), "Raise");
break;
case _LOWER:
snprintf(layer_str, sizeof(layer_str), "Lower");
break;
case _ADJUST:
snprintf(layer_str, sizeof(layer_str), "Adjust");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
}
matrix_write_ln(matrix, layer_str);
// Last entered keycode
matrix_write_ln(matrix, read_keylog());
// Modifier state
matrix_write_ln(matrix, read_modifier_state());
// Host Keyboard LED Status
matrix_write(matrix, read_host_led_state());
}
void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
matrix_clear(&matrix);
render_status(&matrix);
matrix_update(&display, &matrix);
}
#endif//SSD1306OLED
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef SSD1306OLED
if (record->event.pressed) {
set_keylog(keycode);
}
#endif
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
break;
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
break;
case DVORAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_DVORAK);
}
break;
}
return true;
}

View File

@@ -0,0 +1,3 @@
## default-oled-display
A keymap that is compatible with receivers with an OLED display.

View File

@@ -0,0 +1,5 @@
# If you want to change display settings of the OLED, you need to change the following lines
SRC += ./lib/glcdfont.c \
./lib/keylogger.c \
./lib/modifier_state_reader.c \
./lib/host_led_state_reader.c

View File

@@ -10,133 +10,133 @@ static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE];
* Memo: Using other layer keymap to get keycode
*/
void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) {
uint8_t prev_shift;
uint16_t keycode;
uint16_t pseudo_keycode;
uint8_t prev_shift;
uint16_t keycode;
uint16_t pseudo_keycode;
/* get keycode from keymap you specified */
keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
/* get keycode from keymap you specified */
keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
if (record->event.pressed) {
/* when magic commands entered, keycode does not converted */
if (IS_COMMAND()) {
if (prev_shift) {
add_shift_bit(keycode);
}
register_code(keycode);
return;
}
if (prev_shift) {
pseudo_keycode = convert_keycode(keymap, keycode, true);
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
add_shift_bit(keycode);
if (IS_LSFT(pseudo_keycode)) {
register_code(QK_LSFT ^ pseudo_keycode);
} else {
/* delete shift mod temporarily */
del_mods(prev_shift);
send_keyboard_report();
register_code(pseudo_keycode);
add_mods(prev_shift);
send_keyboard_report();
}
} else {
pseudo_keycode = convert_keycode(keymap, keycode, false);
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
if (IS_LSFT(pseudo_keycode)) {
add_weak_mods(MOD_BIT(KC_LSFT));
send_keyboard_report();
register_code(QK_LSFT ^ pseudo_keycode);
/* on Windows, prevent key repeat to avoid unintended output */
unregister_code(QK_LSFT ^ pseudo_keycode);
del_weak_mods(MOD_BIT(KC_LSFT));
send_keyboard_report();
} else {
register_code(pseudo_keycode);
}
}
} else {
if (get_shift_bit(keycode)) {
del_shift_bit(keycode);
pseudo_keycode = convert_keycode(keymap, keycode, true);
} else {
pseudo_keycode = convert_keycode(keymap, keycode, false);
}
dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
if (IS_LSFT(pseudo_keycode)) {
unregister_code(QK_LSFT ^ pseudo_keycode);
} else {
unregister_code(pseudo_keycode);
}
if (record->event.pressed) {
/* when magic commands entered, keycode does not converted */
if (IS_COMMAND()) {
if (prev_shift) {
add_shift_bit(keycode);
}
register_code(keycode);
return;
}
if (prev_shift) {
pseudo_keycode = convert_keycode(keymap, keycode, true);
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
add_shift_bit(keycode);
if (IS_LSFT(pseudo_keycode)) {
register_code(QK_LSFT ^ pseudo_keycode);
} else {
/* delete shift mod temporarily */
del_mods(prev_shift);
send_keyboard_report();
register_code(pseudo_keycode);
add_mods(prev_shift);
send_keyboard_report();
}
} else {
pseudo_keycode = convert_keycode(keymap, keycode, false);
dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
if (IS_LSFT(pseudo_keycode)) {
add_weak_mods(MOD_BIT(KC_LSFT));
send_keyboard_report();
register_code(QK_LSFT ^ pseudo_keycode);
/* on Windows, prevent key repeat to avoid unintended output */
unregister_code(QK_LSFT ^ pseudo_keycode);
del_weak_mods(MOD_BIT(KC_LSFT));
send_keyboard_report();
} else {
register_code(pseudo_keycode);
}
}
} else {
if (get_shift_bit(keycode)) {
del_shift_bit(keycode);
pseudo_keycode = convert_keycode(keymap, keycode, true);
} else {
pseudo_keycode = convert_keycode(keymap, keycode, false);
}
dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
if (IS_LSFT(pseudo_keycode)) {
unregister_code(QK_LSFT ^ pseudo_keycode);
} else {
unregister_code(pseudo_keycode);
}
}
}
uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded)
{
uint16_t pseudo_keycode;
uint16_t pseudo_keycode;
switch (keycode) {
case KC_A ... KC_CAPSLOCK:
#if defined(__AVR__)
if (shift_modded) {
pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
} else {
pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
}
#else
if (shift_modded) {
pseudo_keycode = keymap[keycode][1];
} else {
pseudo_keycode = keymap[keycode][0];
}
#endif
/* if undefined, use got keycode as it is */
if (pseudo_keycode == 0x00) {
if (shift_modded) {
pseudo_keycode = S(keycode);
} else {
pseudo_keycode = keycode;
}
}
break;
default:
if (shift_modded) {
pseudo_keycode = S(keycode);
} else {
pseudo_keycode = keycode;
}
break;
}
return pseudo_keycode;
switch (keycode) {
case KC_A ... KC_CAPSLOCK:
#if defined(__AVR__)
if (shift_modded) {
pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
} else {
pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
}
#else
if (shift_modded) {
pseudo_keycode = keymap[keycode][1];
} else {
pseudo_keycode = keymap[keycode][0];
}
#endif
/* if undefined, use got keycode as it is */
if (pseudo_keycode == 0x00) {
if (shift_modded) {
pseudo_keycode = S(keycode);
} else {
pseudo_keycode = keycode;
}
}
break;
default:
if (shift_modded) {
pseudo_keycode = S(keycode);
} else {
pseudo_keycode = keycode;
}
break;
}
return pseudo_keycode;
}
uint8_t get_shift_bit(uint16_t keycode) {
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
} else {
dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
return 0;
}
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
} else {
dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
return 0;
}
}
void add_shift_bit(uint16_t keycode) {
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
} else {
dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
}
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
} else {
dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
}
}
void del_shift_bit(uint16_t keycode) {
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
} else {
dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
}
if ((keycode >> 3) < SHIFT_BIT_SIZE) {
send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
} else {
dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
}
}

View File

@@ -0,0 +1,34 @@
/*
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/>.
*/
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
)
/* Use I2C or Serial */
#define USE_I2C
#define SSD1306OLED
#endif

View File

@@ -4,64 +4,96 @@
#include QMK_KEYBOARD_H
#include "keymap_jis2us.h"
#include "action_pseudo_lut.h"
#include "keymap_jp.h"
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum comet46_layers {
_QWERTY,
_LOWER,
_RAISE,
_PSEUDO_US,
_PSEUDO_US_LOWER,
_PSEUDO_US_RAISE,
_ADJUST
_QWERTY,
_LOWER,
_RAISE,
_PSEUDO_US,
_PSEUDO_US_LOWER,
_PSEUDO_US_RAISE,
_ADJUST
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
PSEUDO_US,
JIS2US,
};
#define KC_LWR MO(_LOWER)
#define KC_RSE MO(_RAISE)
// JIS keycodes
#define KC_JZHT JP_ZHTG // hankaku/zenkaku|kanzi
#define KC_JCIR JP_CIRC // ^, ~
#define KC_JAT JP_AT // @, `
#define KC_JLBR JP_LBRC // [, {
#define KC_JCOL JP_COLN // :, *
#define KC_JRBR JP_RBRC // ], }
#define KC_JBSL JP_BSLS // \, _
#define KC_JMHE JP_MHEN // muhenkan
#define KC_JHEN JP_HENK // henkan
#define KC_JKAN JP_KANA // katakana/hiragana|ro-mazi
#define KC_JMKA JP_MKANA //kana on MacOSX
#define KC_JMEI JP_MEISU //eisu on MacOSX
#define KC_JAMP JP_AMPR // &
#define KC_JQUO JP_QUOT // '
#define KC_JLPR JP_LPRN // (
#define KC_JRPR JP_RPRN // )
#define KC_JEQL JP_EQL // =
#define KC_JTIL JP_TILD // ~
#define KC_JPIP JP_PIPE // |
#define KC_JGRV JP_GRV // `
#define KC_JLCB JP_LCBR // {
#define KC_JPLU JP_PLUS // +
#define KC_JAST JP_ASTR // *
#define KC_JRCB JP_RCBR // }
#define KC_JUND JP_UNDS // _
// Layer related keycodes
#define KC_LWR MO(_LOWER)
#define KC_RSE MO(_RAISE)
#define KC_P_LW MO(_PSEUDO_US_LOWER)
#define KC_P_RS MO(_PSEUDO_US_RAISE)
#define KC_QWRT QWERTY
#define KC_P_US PSEUDO_US
#define KC_J2US JIS2US
// Special keycodes
#define KC_SPCT CTL_T(KC_SPC)
#define KC_ENSF SFT_T(KC_ENT)
#define KC_SFTA SFT_T(KC_A)
#define KC_CTSF S(KC_LCTL)
#define KC_CAEC MT(MOD_LCTL | MOD_LALT, KC_ESC)
#define KC_CSTB C_S_T(KC_TAB)
#define KC_IMON ALT_T(KC_F13)
#define KC_IMOF GUI_T(KC_F14)
#define KC_SRO S(KC_RO)
#define KC_SYEN S(KC_JYEN)
#define KC_CAD LCA(KC_DEL)
#define KC_RST RESET
#define LONGPRESS_DELAY 150
// Fillers to make layering more clear
#define KC_ KC_TRNS
#define KC_ KC_TRNS
#define KC_XXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_kc(
[_QWERTY] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
CAEC, Q , W , E , R , T , Y , U , I , O , P ,DEL ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
TAB ,SFTA, S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,BSPC,
CSTB, A , S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,BSPC,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
CTSF, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,QUOT,
LSFT, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,QUOT,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
IMOF,LWR ,SPCT, ENSF,RSE ,IMON
// +----+----+---/ \---+----+----+
),
[_LOWER] = LAYOUT_kc(
[_LOWER] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
@@ -69,60 +101,60 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, F7 , F8 , F9 , F10, F11, F12, TILD,PIPE,UNDS,PLUS,LCBR,RCBR, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , ,
, , , , ,
// +----+----+---/ \---+----+----+
),
[_RAISE] = LAYOUT_kc(
[_RAISE] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
, , , , , , , XXXX,LEFT,DOWN, UP ,RGHT,END , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
, , , , , , , HOME,XXXX,PGDN,PGUP,XXXX,XXXX, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , ,
, , , , ,
// +----+----+---/ \---+----+----+
),
[_PSEUDO_US] = LAYOUT_kc(
[_PSEUDO_US] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
CAEC, Q , W , E , R , T , Y , U , I , O , P ,DEL ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
TAB ,SFTA, S , D , F , G ,ASTR, LPRN, H , J , K , L ,FN0 ,BSPC,
CSTB, A , S , D , F , G ,JLPR, JRPR, H , J , K , L ,J2US,BSPC,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
CTSF, Z , X , C , V , B ,FN0 , FN0 , N , M ,COMM,DOT ,SLSH,FN0 ,
LSFT, Z , X , C , V , B ,J2US, J2US, N , M ,COMM,DOT ,SLSH,J2US,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
IMOF,P_LW,SPCT, ENSF,P_RS,IMON
// +----+----+---/ \---+----+----+
),
[_PSEUDO_US_LOWER] = LAYOUT_kc(
[_PSEUDO_US_LOWER] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
,EXLM,LBRC,HASH,DLR ,PERC, EQL ,CIRC, DQT,ASTR,LPRN, ,
,EXLM,JAT ,HASH,DLR ,PERC, JCIR,JAMP,JAST,JLPR,JRPR, ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
, F1 , F2 , F3 , F4 , F5 , F6 , LCBR,JYEN,MINS,UNDS,RBRC,BSLS, ,
, F1 , F2 , F3 , F4 , F5 , F6 , JGRV,JBSL,MINS,JEQL,JLBR,JRBR, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, F7 , F8 , F9 , F10, F11, F12, PLUS,SYEN,SRO ,COLN,RCBR,PIPE, ,
, F7 , F8 , F9 , F10, F11, F12, JTIL,JPIP,JUND,JPLU,JLCB,JRCB, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , ,
, , , , ,
// +----+----+---/ \---+----+----+
),
[_PSEUDO_US_RAISE] = LAYOUT_kc(
[_PSEUDO_US_RAISE] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
, , , , , , GRV, XXXX,LEFT,DOWN, UP ,RGHT,END , ,
, , , , , ,JZHT, XXXX,LEFT,DOWN, UP ,RGHT,END , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
, , , , , , , HOME,XXXX,PGDN,PGUP,XXXX,XXXX, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , ,
, , , , ,
// +----+----+---/ \---+----+----+
),
[_ADJUST] = LAYOUT_kc(
[_ADJUST] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
, , , , , , , , , , , ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
@@ -130,69 +162,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , ,RST , P_US, , , , , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , ,
, , , , ,
// +----+----+---/ \---+----+----+
)
};
/*
* user defined action function
*/
enum function_id {
PSEUDO_US_FUNCTION,
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch (id)
{
case PSEUDO_US_FUNCTION:
action_pseudo_lut(record, _QWERTY, keymap_jis2us);
break;
}
}
/*
* Fn action definition
*/
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
};
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
switch (layer) {
case _LOWER:
set_led_red;
break;
case _RAISE:
set_led_blue;
break;
case _PSEUDO_US_LOWER:
set_led_yellow;
break;
case _PSEUDO_US_RAISE:
set_led_cyan;
break;
case _ADJUST:
set_led_magenta;
break;
default:
set_led_green;
break;
}
};
uint32_t layer_state_set_user(uint32_t state) {
switch (biton32(state)) {
case _PSEUDO_US:
return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
break;
case _PSEUDO_US_LOWER:
return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
break;
case _PSEUDO_US_RAISE:
case _PSEUDO_US_RAISE:
return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
break;
default:
@@ -201,19 +180,112 @@ uint32_t layer_state_set_user(uint32_t state) {
}
}
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
// You need to add source files to SRC in rules.mk when using OLED display functions
void set_keylog(uint16_t keycode);
const char *read_keylog(void);
const char *read_modifier_state(void);
const char *read_host_led_state(void);
void matrix_init_user(void) {
iota_gfx_init(false); // turns on the display
}
void matrix_scan_user(void) {
iota_gfx_task(); // this is what updates the display continuously
}
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 render_status(struct CharacterMatrix *matrix) {
// Layer state
char layer_str[22];
matrix_write(matrix, "Layer: ");
uint8_t layer = biton32(layer_state);
uint8_t default_layer = biton32(eeconfig_read_default_layer());
switch (layer) {
case _QWERTY:
switch (default_layer) {
case _QWERTY:
snprintf(layer_str, sizeof(layer_str), "Qwerty");
break;
case _PSEUDO_US:
snprintf(layer_str, sizeof(layer_str), "Psuedo_US");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
break;
}
break;
case _RAISE:
snprintf(layer_str, sizeof(layer_str), "Raise");
break;
case _LOWER:
snprintf(layer_str, sizeof(layer_str), "Lower");
break;
case _PSEUDO_US_RAISE:
snprintf(layer_str, sizeof(layer_str), "P_US_Raise");
break;
case _PSEUDO_US_LOWER:
snprintf(layer_str, sizeof(layer_str), "P_US_Lower");
break;
case _ADJUST:
snprintf(layer_str, sizeof(layer_str), "Adjust");
break;
default:
snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
}
matrix_write_ln(matrix, layer_str);
// Last entered keycode
matrix_write_ln(matrix, read_keylog());
// Modifier state
matrix_write_ln(matrix, read_modifier_state());
// Host Keyboard LED Status
matrix_write(matrix, read_host_led_state());
}
void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
#if DEBUG_TO_SCREEN
if (debug_enable) {
return;
}
#endif
matrix_clear(&matrix);
render_status(&matrix);
matrix_update(&display, &matrix);
}
#endif//SSD1306OLED
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef SSD1306OLED
if (record->event.pressed) {
set_keylog(keycode);
}
#endif
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
break;
case PSEUDO_US:
if (record->event.pressed) {
set_single_persistent_default_layer(_PSEUDO_US);
}
return false;
break;
case JIS2US:
action_pseudo_lut(record, _QWERTY, keymap_jis2us);
break;
}
return true;

View File

@@ -3,30 +3,30 @@
/* keymap for convert from JIS to US */
const uint16_t PROGMEM keymap_jis2us[][2] = {
[KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
[KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
[KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
[KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
[KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
[KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
[KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
[KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
[KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
[KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
[KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
[KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
[KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
[KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
[KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
[KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
[KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
[KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
[KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
[KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
[KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
[KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
[KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
[KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
[KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
[KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
[KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
[KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
[KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
[KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
[KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
[KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
[KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
[KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
[KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
[KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
[KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
[KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
[KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
[KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
[KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
[KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
[KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
[KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
[KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
[KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
};
#endif

View File

@@ -1,26 +1,8 @@
SRC += action_pseudo_lut.c
# 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 = no # Enable WS2812 RGB underlight.
ONEHAND_ENABLE = no # Enable one-hand typing
# If you want to change display settings of the OLED, you need to change the following lines
SRC += ./lib/glcdfont.c \
./lib/keylogger.c \
./lib/modifier_state_reader.c \
./lib/host_led_state_reader.c
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -0,0 +1,148 @@
// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
// See gfxfont.h for newer custom bitmap font info.
#ifndef FONT5X7_H
#define FONT5X7_H
#ifdef __AVR__
#include <avr/io.h>
#include <avr/pgmspace.h>
#elif defined(ESP8266)
#include <pgmspace.h>
#else
#define PROGMEM
#endif
// Standard ASCII 5x7 font
const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00
};
#endif // FONT5X7_H

View File

@@ -0,0 +1,15 @@
#include <stdio.h>
#include "comet46.h"
char host_led_state_str[22];
const char *read_host_led_state(void) {
uint8_t leds = host_keyboard_leds();
snprintf(host_led_state_str, sizeof(host_led_state_str), "Lock: %s%s%s",
(leds & (1 << USB_LED_CAPS_LOCK)) ? "CAPL " : "",
(leds & (1 << USB_LED_SCROLL_LOCK)) ? "SCRL " : "",
(leds & (1 << USB_LED_NUM_LOCK)) ? "NUML" : "");
return host_led_state_str;
}

View File

@@ -0,0 +1,294 @@
#include <stdio.h>
#ifdef __AVR__
#include <avr/io.h>
#include <avr/pgmspace.h>
#else
#define PROGMEM
#endif
#define NUM_USB_HID_KEYCODES 255
#define LEN_KEYCODE_STR 4
char keylog[22] = {"KC: ID: "};
// Quick and dirty way to display USB HID keycodes used in QMK
// USB HID keycodes from 0x0000 to 0x00FF are stored in a 4x256+1 length char
const char code_to_name[] PROGMEM = {
"NO " //0x00
"TRNS"
"? "
"? "
"A "
"B "
"C "
"D "
"E "
"F "
"G "
"H "
"I "
"J "
"K "
"L "
"M " //0x10
"N "
"O "
"P "
"Q "
"R "
"S "
"T "
"U "
"V "
"W "
"X "
"Y "
"Z "
"1 "
"2 "
"3 " //0x20
"4 "
"5 "
"6 "
"7 "
"8 "
"9 "
"0 "
"ENT "
"ESC "
"BSPC"
"TAB "
"SPC "
"MINS"
"EQL "
"LBRC"
"RBRC" //0x30
"BSLS"
"NUHS"
"SCLN"
"QUOT"
"GRV "
"COMM"
"DOT "
"SLSH"
"CAPS"
"F1 "
"F2 "
"F3 "
"F4 "
"F5 "
"F6 "
"F7 " //0x40
"F8 "
"F9 "
"F10 "
"F11 "
"F12 "
"PSCR"
"SLCK"
"PAUS"
"INS "
"HOME"
"PGUP"
"DEL "
"END "
"PGDN"
"RGHT"
"LEFT" //0x50
"DOWN"
"UP "
"NLCK"
"PSLS"
"PAST"
"PMNS"
"PPLS"
"PENT"
"P1 "
"P2 "
"P3 "
"P4 "
"P5 "
"P6 "
"P7 "
"P8 " //0x60
"P9 "
"P0 "
"PDOT"
"NUBS"
"APP "
"POW "
"PEQL"
"F13 "
"F14 "
"F15 "
"F16 "
"F17 "
"F18 "
"F19 "
"F20 "
"F21 " //0x70
"F22 "
"F23 "
"F24 "
"EXEC"
"HELP"
"MENU"
"SLCT"
"STOP"
"AGIN"
"UNDO"
"CUT "
"COPY"
"PSTE"
"FIND"
"_MUT"
"_VUP" //0x80
"_VDN"
"LCAP"
"LNUM"
"LSCR"
"PCMM"
"PEQA"
"INT1"
"INT2"
"INT3"
"INT4"
"INT5"
"INT6"
"INT7"
"INT8"
"INT9"
"LAN1" //0x90
"LAN2"
"LAN3"
"LAN4"
"LAN5"
"LAN6"
"LAN7"
"LAN8"
"LAN9"
"ERAS"
"SYSR"
"CNCL"
"CLR "
"PRIR"
"RTRN"
"SEP "
"OUT " //0xA0
"OPER"
"CLRA"
"CSEL"
"ESEL"
"PWR " //0xA5
"SLEP"
"WAKE"
"MUTE"
"VOLU"
"VOLD"
"MNXT"
"MPRV"
"MSTP"
"MPLY"
"MSEL"
"EJCT" //0xB0
"MAIL"
"CALC"
"MYCM"
"WSCH"
"WHOM"
"WBAK"
"WFWD"
"WSTP"
"WREF"
"WFAV"
"MFFD"
"MRWD"
"BRIU"
"BRID"
"? "
"FN0 " //0xC0
"FN1 "
"FN2 "
"FN3 "
"FN4 "
"FN5 "
"FN6 "
"FN7 "
"FN8 "
"FN9 "
"FN10"
"FN11"
"FN12"
"FN13"
"FN14"
"FN15"
"FN16" //0xD0
"FN17"
"FN18"
"FN19"
"FN20"
"FN21"
"FN22"
"FN23"
"FN24"
"FN25"
"FN26"
"FN27"
"FN28"
"FN29"
"FN30"
"FN31"
"LCTL" //0xE0
"LSFT"
"LALT"
"LGUI"
"RCTL"
"RSFT"
"RALT"
"RGUI"
"? "
"? "
"? "
"? "
"? "
"? "
"? "
"? "
"MS_U" //0xF0
"MS_D"
"MS_L"
"MS_R"
"BTN1"
"BTN2"
"BTN3"
"BTN4"
"BTN5"
"WH_U"
"WH_D"
"WH_L"
"WH_R"
"ACL0"
"ACL1"
"ACL2"
};
void set_keylog(uint16_t keycode)
{
char name[LEN_KEYCODE_STR+1] = "? ";
if (keycode <= NUM_USB_HID_KEYCODES) {
for (uint8_t k = 0; k < LEN_KEYCODE_STR; k++) {
name[k] = pgm_read_byte_near(code_to_name + keycode * LEN_KEYCODE_STR + k);
}
} else if (keycode > NUM_USB_HID_KEYCODES) {
snprintf(name, sizeof(name), "QMK ");
}
// update keylog
snprintf(keylog, sizeof(keylog), "KC: %s ID: %d", name, keycode);
}
const char *read_keylog(void) {
return keylog;
}

View File

@@ -0,0 +1,18 @@
#include <stdio.h>
#include "comet46.h"
char modifier_state_str[22];
const char *read_modifier_state(void) {
uint8_t modifiers = get_mods();
uint8_t one_shot = get_oneshot_mods();
snprintf(modifier_state_str, sizeof(modifier_state_str), "Mod: %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" : ""
);
return modifier_state_str;
}

View File

@@ -1,6 +1,6 @@
# Comet46
![Comet46](https://user-images.githubusercontent.com/39004890/42418180-d5bb188c-82d5-11e8-99fa-65020ce5ac5d.jpg)
![Comet46](https://user-images.githubusercontent.com/39004890/50396817-a1660600-07af-11e9-8611-3156c635db43.jpg)
A split wireless 40% column-staggered keyboard
@@ -13,4 +13,5 @@ Make example for this keyboard (after setting up your build environment):
make comet46:default
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
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.

View File

@@ -1,12 +1,8 @@
OPT_DEFS += -DCOMET46_ORTHO_===PROMICRO
COMET46_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
# # project specific files
SRC = matrix.c
SRC += matrix.c \
i2c.c \
ssd1306.c
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -24,8 +20,6 @@ MCU = atmega32u4
# software delays.
F_CPU = 16000000
#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
@@ -48,7 +42,7 @@ F_USB = $(F_CPU)
# 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
# BOOTLOADER = caterina
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT

344
keyboards/comet46/ssd1306.c Normal file
View File

@@ -0,0 +1,344 @@
#ifdef SSD1306OLED
#include "ssd1306.h"
#include "i2c.h"
#include <string.h>
#include "print.h"
#ifdef ADAFRUIT_BLE_ENABLE
#include "adafruit_ble.h"
#endif
#ifdef PROTOCOL_LUFA
#include "lufa.h"
#endif
#include "sendchar.h"
#include "timer.h"
static const unsigned char font[] PROGMEM;
// Set this to 1 to help diagnose early startup problems
// when testing power-on with ble. Turn it off otherwise,
// as the latency of printing most of the debug info messes
// with the matrix scan, causing keys to drop.
#define DEBUG_TO_SCREEN 0
//static uint16_t last_battery_update;
//static uint32_t vbat;
//#define BatteryUpdateInterval 10000 /* milliseconds */
// 'last_flush' is declared as uint16_t,
// so this must be less than 65535
#define ScreenOffInterval 60000 /* milliseconds */
#if DEBUG_TO_SCREEN
static uint8_t displaying;
#endif
static uint16_t last_flush;
static bool force_dirty = true;
// Write command sequence.
// Returns true on success.
static inline bool _send_cmd1(uint8_t cmd) {
bool res = false;
if (i2c_start_write(SSD1306_ADDRESS)) {
xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
goto done;
}
if (i2c_master_write(0x0 /* command byte follows */)) {
print("failed to write control byte\n");
goto done;
}
if (i2c_master_write(cmd)) {
xprintf("failed to write command %d\n", cmd);
goto done;
}
res = true;
done:
i2c_master_stop();
return res;
}
// Write 2-byte command sequence.
// Returns true on success
static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) {
if (!_send_cmd1(cmd)) {
return false;
}
return _send_cmd1(opr);
}
// Write 3-byte command sequence.
// Returns true on success
static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
if (!_send_cmd1(cmd)) {
return false;
}
if (!_send_cmd1(opr1)) {
return false;
}
return _send_cmd1(opr2);
}
#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
static void clear_display(void) {
matrix_clear(&display);
// Clear all of the display bits (there can be random noise
// in the RAM on startup)
send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
if (i2c_start_write(SSD1306_ADDRESS)) {
goto done;
}
if (i2c_master_write(0x40)) {
// Data mode
goto done;
}
for (uint8_t row = 0; row < MatrixRows; ++row) {
for (uint8_t col = 0; col < DisplayWidth; ++col) {
i2c_master_write(0);
}
}
display.dirty = false;
done:
i2c_master_stop();
}
#if DEBUG_TO_SCREEN
#undef sendchar
static int8_t capture_sendchar(uint8_t c) {
sendchar(c);
iota_gfx_write_char(c);
if (!displaying) {
iota_gfx_flush();
}
return 0;
}
#endif
bool iota_gfx_init(bool rotate) {
bool success = false;
i2c_master_init();
send_cmd1(DisplayOff);
send_cmd2(SetDisplayClockDiv, 0x80);
send_cmd2(SetMultiPlex, DisplayHeight - 1);
send_cmd2(SetDisplayOffset, 0);
send_cmd1(SetStartLine | 0x0);
send_cmd2(SetChargePump, 0x14 /* Enable */);
send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
if(rotate){
// the following Flip the display orientation 180 degrees
send_cmd1(SegRemap);
send_cmd1(ComScanInc);
}else{
// Flips the display orientation 0 degrees
send_cmd1(SegRemap | 0x1);
send_cmd1(ComScanDec);
}
send_cmd2(SetComPins, 0x2);
send_cmd2(SetContrast, 0x8f);
send_cmd2(SetPreCharge, 0xf1);
send_cmd2(SetVComDetect, 0x40);
send_cmd1(DisplayAllOnResume);
send_cmd1(NormalDisplay);
send_cmd1(DeActivateScroll);
send_cmd1(DisplayOn);
send_cmd2(SetContrast, 0); // Dim
clear_display();
success = true;
iota_gfx_flush();
#if DEBUG_TO_SCREEN
print_set_sendchar(capture_sendchar);
#endif
done:
return success;
}
bool iota_gfx_off(void) {
bool success = false;
send_cmd1(DisplayOff);
success = true;
done:
return success;
}
bool iota_gfx_on(void) {
bool success = false;
send_cmd1(DisplayOn);
success = true;
done:
return success;
}
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
*matrix->cursor = c;
++matrix->cursor;
if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
// We went off the end; scroll the display upwards by one line
memmove(&matrix->display[0], &matrix->display[1],
MatrixCols * (MatrixRows - 1));
matrix->cursor = &matrix->display[MatrixRows - 1][0];
memset(matrix->cursor, ' ', MatrixCols);
}
}
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
matrix->dirty = true;
if (c == '\n') {
// Clear to end of line from the cursor and then move to the
// start of the next line
uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
while (cursor_col++ < MatrixCols) {
matrix_write_char_inner(matrix, ' ');
}
return;
}
matrix_write_char_inner(matrix, c);
}
void iota_gfx_write_char(uint8_t c) {
matrix_write_char(&display, c);
}
void matrix_write(struct CharacterMatrix *matrix, const char *data) {
const char *end = data + strlen(data);
while (data < end) {
matrix_write_char(matrix, *data);
++data;
}
}
void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) {
char data_ln[strlen(data)+2];
snprintf(data_ln, sizeof(data_ln), "%s\n", data);
matrix_write(matrix, data_ln);
}
void iota_gfx_write(const char *data) {
matrix_write(&display, data);
}
void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
while (true) {
uint8_t c = pgm_read_byte(data);
if (c == 0) {
return;
}
matrix_write_char(matrix, c);
++data;
}
}
void iota_gfx_write_P(const char *data) {
matrix_write_P(&display, data);
}
void matrix_clear(struct CharacterMatrix *matrix) {
memset(matrix->display, ' ', sizeof(matrix->display));
matrix->cursor = &matrix->display[0][0];
matrix->dirty = true;
}
void iota_gfx_clear_screen(void) {
matrix_clear(&display);
}
void matrix_render(struct CharacterMatrix *matrix) {
last_flush = timer_read();
iota_gfx_on();
#if DEBUG_TO_SCREEN
++displaying;
#endif
// Move to the home position
send_cmd3(PageAddr, 0, MatrixRows - 1);
send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
if (i2c_start_write(SSD1306_ADDRESS)) {
goto done;
}
if (i2c_master_write(0x40)) {
// Data mode
goto done;
}
for (uint8_t row = 0; row < MatrixRows; ++row) {
for (uint8_t col = 0; col < MatrixCols; ++col) {
const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth);
for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) {
uint8_t colBits = pgm_read_byte(glyph + glyphCol);
i2c_master_write(colBits);
}
// 1 column of space between chars (it's not included in the glyph)
//i2c_master_write(0);
}
}
matrix->dirty = false;
done:
i2c_master_stop();
#if DEBUG_TO_SCREEN
--displaying;
#endif
}
void iota_gfx_flush(void) {
matrix_render(&display);
}
__attribute__ ((weak))
void iota_gfx_task_user(void) {
}
void iota_gfx_task(void) {
iota_gfx_task_user();
if (display.dirty|| force_dirty) {
iota_gfx_flush();
force_dirty = false;
}
if (timer_elapsed(last_flush) > ScreenOffInterval) {
iota_gfx_off();
}
}
bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
force_dirty = true;
return true;
}
#endif

View File

@@ -0,0 +1,91 @@
#pragma once
#include <stdbool.h>
#include <stdio.h>
#include "pincontrol.h"
#include "action.h"
enum ssd1306_cmds {
DisplayOff = 0xAE,
DisplayOn = 0xAF,
SetContrast = 0x81,
DisplayAllOnResume = 0xA4,
DisplayAllOn = 0xA5,
NormalDisplay = 0xA6,
InvertDisplay = 0xA7,
SetDisplayOffset = 0xD3,
SetComPins = 0xda,
SetVComDetect = 0xdb,
SetDisplayClockDiv = 0xD5,
SetPreCharge = 0xd9,
SetMultiPlex = 0xa8,
SetLowColumn = 0x00,
SetHighColumn = 0x10,
SetStartLine = 0x40,
SetMemoryMode = 0x20,
ColumnAddr = 0x21,
PageAddr = 0x22,
ComScanInc = 0xc0,
ComScanDec = 0xc8,
SegRemap = 0xa0,
SetChargePump = 0x8d,
ExternalVcc = 0x01,
SwitchCapVcc = 0x02,
ActivateScroll = 0x2f,
DeActivateScroll = 0x2e,
SetVerticalScrollArea = 0xa3,
RightHorizontalScroll = 0x26,
LeftHorizontalScroll = 0x27,
VerticalAndRightHorizontalScroll = 0x29,
VerticalAndLeftHorizontalScroll = 0x2a,
};
// Controls the SSD1306 128x32 OLED display via i2c
#ifndef SSD1306_ADDRESS
#define SSD1306_ADDRESS 0x3C
#endif
#define DisplayHeight 32
#define DisplayWidth 128
#define FontHeight 8
#define FontWidth 6
#define MatrixRows (DisplayHeight / FontHeight)
#define MatrixCols (DisplayWidth / FontWidth)
struct CharacterMatrix {
uint8_t display[MatrixRows][MatrixCols];
uint8_t *cursor;
bool dirty;
};
struct CharacterMatrix display;
bool iota_gfx_init(bool rotate);
void iota_gfx_task(void);
bool iota_gfx_off(void);
bool iota_gfx_on(void);
void iota_gfx_flush(void);
void iota_gfx_write_char(uint8_t c);
void iota_gfx_write(const char *data);
void iota_gfx_write_P(const char *data);
void iota_gfx_clear_screen(void);
void iota_gfx_task_user(void);
void matrix_clear(struct CharacterMatrix *matrix);
void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c);
void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
void matrix_write(struct CharacterMatrix *matrix, const char *data);
void matrix_write_ln(struct CharacterMatrix *matrix, const char *data);
void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
void matrix_render(struct CharacterMatrix *matrix);
bool process_record_gfx(uint16_t keycode, keyrecord_t *record);

View File

@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -12,6 +12,3 @@ MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -127,11 +127,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
case NR_L3:
if (record->event.pressed) {
register_code(DE_ALGR);
register_code(KC_ALGR);
layer_on(_NUMROW_L3);
} else {
layer_off(_NUMROW_L3);
unregister_code(DE_ALGR);
unregister_code(KC_ALGR);
}
return false;
default:

View File

@@ -9,6 +9,3 @@ MOUSEKEY_ENABLE = no
CONSOLE_ENABLE = no # yes
COMMAND_ENABLE = no
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -88,16 +88,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
void matrix_init_keymap(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 init, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
iota_gfx_init(!has_usb()); // turns on the display
#endif
DDRD &= ~(1<<5);
PORTD &= ~(1<<5);
#ifndef CONVERT_TO_PROTON_C
setPinOutput(D5);
writePinHigh(D5);
DDRB &= ~(1<<0);
PORTB &= ~(1<<0);
setPinOutput(B0);
writePinHigh(B0);
#endif
}
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
@@ -126,10 +128,10 @@ const char code_to_name[60] = {
void set_keylog(uint16_t keycode, keyrecord_t *record) {
char name = ' ';
if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
if (keycode < 60) {
name = code_to_name[keycode];
}
// update keylog
snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
record->event.key.row, record->event.key.col,

View File

@@ -23,10 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install thi
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif

View File

@@ -23,10 +23,6 @@ ISSI_ENABLE = no # If the I2C pullup resistors aren't install this
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif

View File

@@ -1,65 +0,0 @@
/* Copyright 2018 '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_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_PGDN,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_RGHT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(1), KC_0, KC_UP,
KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_ENT, KC_DOWN),
};
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) {
}

View File

@@ -2,6 +2,3 @@ RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
AUDIO_ENABLE = no # Audio disabled while using RGB underlight.
EXTRAKEY_ENABLE = yes
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -6,7 +6,7 @@
"height": 6,
"layouts": {
"LAYOUT": {
"layout": [{"label":"k00", "x":0, "y":0.5}, {"label":"k01", "x":1, "y":0.5}, {"label":"k02", "x":2, "y":0.25}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0.5}, {"label":"k05", "x":5, "y":0.5}, {"label":"k06", "x":7, "y":0.5}, {"label":"k07", "x":8, "y":0.5}, {"label":"k08", "x":9, "y":0}, {"label":"k09", "x":10, "y":0.25}, {"label":"k0A", "x":11, "y":0.5}, {"label":"k0B", "x":12, "y":0.5}, {"label":"k10", "x":0, "y":1.5}, {"label":"k11", "x":1, "y":1.5}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1}, {"label":"k14", "x":4, "y":1.5}, {"label":"k15", "x":5, "y":1.5}, {"label":"k16", "x":7, "y":1.5}, {"label":"k17", "x":8, "y":1.5}, {"label":"k18", "x":9, "y":1}, {"label":"k19", "x":10, "y":1.25}, {"label":"k1A", "x":11, "y":1.5}, {"label":"k1B", "x":12, "y":1.5}, {"label":"k20", "x":0, "y":2.5}, {"label":"k21", "x":1, "y":2.5}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2}, {"label":"k24", "x":4, "y":2.5}, {"label":"k25", "x":5, "y":2.5}, {"label":"k26", "x":7, "y":2.5}, {"label":"k27", "x":8, "y":2.5}, {"label":"k28", "x":9, "y":2}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2A", "x":11, "y":2.5}, {"label":"k2B", "x":12, "y":2.5}, {"label":"k33", "x":3, "y":4}, {"label":"k34", "x":4, "y":4}, {"label":"k35", "x":5, "y":4}, {"label":"k36", "x":7, "y":4}, {"label":"k37", "x":8, "y":4}, {"label":"k38", "x":9, "y":4}, {"label":"k43", "x":3, "y":5}, {"label":"k44", "x":4, "y":5}, {"label":"k45", "x":5, "y":5}, {"label":"k46", "x":7, "y":5}, {"label":"k47", "x":8, "y":5}, {"label":"k48", "x":9, "y":5}]
"layout": [{"label":"k00", "x":0, "y":0.5}, {"label":"k01", "x":1, "y":0.5}, {"label":"k02", "x":2, "y":0.25}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0.5}, {"label":"k05", "x":5, "y":0.5}, {"label":"k06", "x":7, "y":0.5}, {"label":"k07", "x":8, "y":0.5}, {"label":"k08", "x":9, "y":0}, {"label":"k09", "x":10, "y":0.25}, {"label":"k0A", "x":11, "y":0.5}, {"label":"k0B", "x":12, "y":0.5}, {"label":"k10", "x":0, "y":1.5}, {"label":"k11", "x":1, "y":1.5}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1}, {"label":"k14", "x":4, "y":1.5}, {"label":"k15", "x":5, "y":1.5}, {"label":"k16", "x":7, "y":1.5}, {"label":"k17", "x":8, "y":1.5}, {"label":"k18", "x":9, "y":1}, {"label":"k19", "x":10, "y":1.25}, {"label":"k1A", "x":11, "y":1.5}, {"label":"k1B", "x":12, "y":1.5}, {"label":"k20", "x":0, "y":2.5}, {"label":"k21", "x":1, "y":2.5}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2}, {"label":"k24", "x":4, "y":2.5}, {"label":"k25", "x":5, "y":2.5}, {"label":"k26", "x":7, "y":2.5}, {"label":"k27", "x":8, "y":2.5}, {"label":"k28", "x":9, "y":2}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2A", "x":11, "y":2.5}, {"label":"k2B", "x":12, "y":2.5}, {"label":"k33", "x":3, "y":4}, {"label":"k34", "x":4, "y":4}, {"label":"k35", "x":5, "y":4}, {"label":"k36", "x":7, "y":4}, {"label":"k37", "x":8, "y":4}, {"label":"k38", "x":9, "y":4}, {"label":"k42", "x":2, "y":5}, {"label":"k43", "x":3, "y":5}, {"label":"k44", "x":4, "y":5}, {"label":"k45", "x":5, "y":5}, {"label":"k46", "x":7, "y":5}, {"label":"k47", "x":8, "y":5}, {"label":"k48", "x":9, "y":5}, {"label":"k49", "x":10, "y":5}]
}
}
}

View File

@@ -23,11 +23,9 @@ void led_init_ports(void) {
void led_set_kb(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
DDRB |= (1 << 2);
PORTB &= ~(1 << 2);
} else {
DDRB &= ~(1 << 2);
PORTB &= ~(1 << 2);
PORTB |= (1 << 2);
}
led_set_user(usb_led);

View File

@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -20,6 +20,3 @@ RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -30,6 +30,3 @@ KEYMAP_BRANCH = $(shell \
OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\"
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -80,7 +80,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AA,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, NO_OSLH), LT(SYMB, NO_AE),
KC_WFWD, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, KC_RSPC,
KC_SPC, KC_BSPC, NO_ALGR, NO_ASTR, CTL_T(NO_TILD),
KC_SPC, KC_BSPC, KC_ALGR, NO_ASTR, CTL_T(NO_TILD),
KC_HOME, NO_CIRC,
KC_PGUP, KC_UP, KC_DOWN,
KC_LGUI, ALT_T(KC_ESC), CTL_T(KC_ENT)

View File

@@ -0,0 +1,88 @@
/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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 _BL 0 //Base layer
#define _FN1 1 //Function layer
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* BL
____________________________________________________________________________________________________________________________________________________________________________
| | | | | | | | | | | | | | | | | | | |
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | PRT SC | SCR LK | PAUSE | P UP | P DOWN |
|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
| | | | | | | | | | | | | | BACK | NUM | | | |
| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - |
|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________|
| | | | | | | | | | | | [ | ] | | | | | |
| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | |
|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + |
| | | | | | | | | | | ; | ' | | | | | |
| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | |
|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
| | | | | | | | | , | . | / | | | | | | |
| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | |
|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER |
| | | | | | | MO | | | | | | |
| CTRL | LGUI | L ALT | SPACE | VOL Dn | VOL Up | _FN | LEFT | DOWN | RIGHT | 0 | . | |
|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
*/
[_BL] = LAYOUT_default(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, 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_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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_VOLD, KC_VOLU, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
),
/* FN_1
____________________________________________________________________________________________________________________________________________________________________________
| | | | | | | | | | | | | | | VOL | VOL | NEXT | | |
| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | TRACK | HOME | END |
|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | |
| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | SAT | | | | | DELETE | | | | |
|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________|
| | BACK | BACK | | | | | | | | | | | | | | | |
| | LIGHT | LIGHT | | | | | | | | | | | | | | | |
|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| |
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | |
|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
| | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | |
|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
*/
[_FN1] = LAYOUT_default(
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_HOME, KC_END, \
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, \
_______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
};

View File

@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,5 +1,4 @@
#ifndef FRACTAL_H
#define FRACTAL_H
#pragma once
#include "quantum.h"
@@ -30,7 +29,3 @@
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 }, \
{ K400, K401, K402, K403, K404, KC_NO, K406, K407, K408, K409, K410, K411 } \
}
#define KEYMAP LAYOUT_preonic_mit
#endif

View File

@@ -11,4 +11,4 @@ Make example for this keyboard (after setting up your build environment):
make fractal:default
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) 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).

View File

@@ -57,5 +57,5 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
LAYOUTS = preonic_mit ortho_5x12
LAYOUTS = ortho_5x12 # preonic_mit
LAYOUTS_HAS_RGB = no

View File

@@ -106,7 +106,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: htt
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable RGB Underglow
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -106,6 +106,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: htt
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable RGB Underglow
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -106,7 +106,3 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:/
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable RGB Underglow
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,6 +1,10 @@
#include "../../config.h"
#pragma once
//Force NKRO to be enabled.
#define FORCE_NKRO
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
#define GRAVE_ESC_CTRL_OVERRIDE
//#define GRAVE_ESC_CTRL_OVERRIDE
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
//#define TAPPING_TERM 200

View File

@@ -11,13 +11,16 @@ enum layers {
_AL, // Adjust Layer
};
enum gonnerd_keycodes {
enum custom_keycodes {
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
QMK_REV,
KC_WEB,
KC_SP4
};
extern backlight_config_t backlight_config;
#include "dynamic_macro.h"
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#define FN_CAPS LT(_FL, KC_CAPS)
#define KC_DMR1 DYN_REC_START1
#define KC_DMR2 DYN_REC_START2
@@ -25,47 +28,44 @@ enum gonnerd_keycodes {
#define KC_DMP2 DYN_MACRO_PLAY2
#define KC_DMRS DYN_REC_STOP
static uint8_t current_layer;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* _BL: Base Layer, mostly standard TKL QWERTY layout.
* .-----------------------------------------------------------------------.
* |Esc||||| F1| F2| F3| F4||| F5| F6| F7| F8||| F9|F10|F11|F12|PSc|SLk|Pau|
* |-----------------------------------------------------------|-----------|
* | ~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|Hom|PgU|
* |-----------------------------------------------------------|-----------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
* |-----------------------------------------------------------|-----------|
* |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
* |-----------------------------------------------------------|-----------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
* |-----------------------------------------------------------|-----------|
* |Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
* *-----------------------------------------------------------------------*
/*#### _BL: Base Layer - Standard TKL QWERTY layout.
* .-----------------------------------------------------------------------.
* |Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
* |-----------------------------------------------------------|-----------|
* |~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
* |-----------------------------------------------------------|-----------|
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
* |-----------------------------------------------------------|-----------|
* |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
* |-----------------------------------------------------------|-----------|
* |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
* |-----------------------------------------------------------|-----------|
* |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
* *-----------------------------------------------------------------------*
*/
[_BL] = LAYOUT_tkl( \
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
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, MO(_FL), KC_UP, \
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* _WL: Workman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | -| =| | | | |
* |-----------------------------------------------------------|-----------|
* | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| S| H| T| G| Y| N| E| O| I| '| | |
* |-----------------------------------------------------------|-----------|
* | | Z| X| M| C| V| K| L| ,| .| /| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
/*#### _WL: Workman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |- |= | | | | |
* |-----------------------------------------------------------|-----------|
* | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |S |H |T |G |Y |N |E |O |I |' | | |
* |-----------------------------------------------------------|-----------|
* | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_WL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -75,21 +75,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _NL: Norman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | -| =| | | | |
* |-----------------------------------------------------------|-----------|
* | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| S| E| T| G| Y| N| I| O| H| '| | |
* |-----------------------------------------------------------|-----------|
* | | Z| X| C| V| B| P| M| ,| .| /| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
/*#### _NL: Norman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |- |= | | | | |
* |-----------------------------------------------------------|-----------|
* | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |S |E |T |G |Y |N |I |O |H |' | | |
* |-----------------------------------------------------------|-----------|
* | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_NL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -99,21 +98,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _DL: Dvorak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | [| ]| | | | |
* |-----------------------------------------------------------|-----------|
* | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| O| E| U| I| D| H| T| N| S| -| | |
* |-----------------------------------------------------------|-----------|
* | | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
/*#### _DL: Dvorak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |[ |] | | | | |
* |-----------------------------------------------------------|-----------|
* | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |O |E |U |I |D |H |T |N |S |- | | |
* |-----------------------------------------------------------|-----------|
* | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_DL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -123,21 +121,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _CL: Colmak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | -| =| | | | |
* |-----------------------------------------------------------|-----------|
* | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
* |-----------------------------------------------------------|-----------|
* | | A| R| S| T| D| H| N| E| I| O| '| | |
* |-----------------------------------------------------------|-----------|
* | | Z| X| C| V| B| K| M| ,| .| /| | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
/*#### _CL: Colmak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |- |= | | | | |
* |-----------------------------------------------------------|-----------|
* | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |R |S |T |D |H |N |E |I |O |' | | |
* |-----------------------------------------------------------|-----------|
* | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_CL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -147,142 +144,126 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* _FL: Function Layer.
* M0 opens Chrome
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
* .-----------------------------------------------------------|-----------|
* | M0| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* |Fn_AL| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* |FnCaps| | | | | | |Lft|Dwn|Up |Rgt| | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| |WBk| |WFw|
* *-----------------------------------------------------------------------*
/*#### _FL: Function Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
* .-----------------------------------------------------------|-----------|
* |Web| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* |Fn_AL| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | |Lft|Dwn|Up |Rgt| | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | |Fn | | | |
* |-----------------------------------------------------------|-----------|
* | | | | SP4 | |Fn | |WBk| |WFw|
* *-----------------------------------------------------------------------*
*/
[_FL] = LAYOUT_tkl( \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, \
M(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_WEB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
XXXXXXX, XXXXXXX, KC_MENU, M(1), XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
),
/* _AL: Adjust Layer.
* Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
* .-----------------------------------------------------------------------.
* |Rst||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
* |-----------------------------------------------------------|-----------|
* |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
* |-----------------------------------------------------------|-----------|
* |FnCaps| | |_DL| | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | |_CL| |_BL|_NL| | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | ||||| | | ||||| | | | |
* *-----------------------------------------------------------------------*
/*#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
* .-----------------------------------------------------------------------.
* |Rst||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
* |-----------------------------------------------------------|-----------|
* |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
* |-----------------------------------------------------------|-----------|
* | | | |_DL| | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | |Fn | | | | |
* *-----------------------------------------------------------------------*
*/
[_AL] = LAYOUT_tkl( \
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
F(0), RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS, KC_DMR2, KC_DMP2, \
_______, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), 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 \
),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch(id) {
case 0:
if (record->event.pressed) {
return MACRO(I(0), D(LGUI), T(R), U(LGUI), END);
}
else {
SEND_STRING("chrome.exe\n");
return false;
}
break;
case 1:
if (record->event.pressed) {
return MACRO(I(0), T(SPC), T(SPC), T(SPC), T(SPC), END);
}
else {
return false;
}
break;
}
return MACRO_NONE;
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_FUNCTION(0),
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
switch (id) {
case 0:
if (record->event.pressed) {
SEND_STRING ("[QMK:" QMK_KEYBOARD ":" QMK_KEYMAP ":" QMK_VERSION "]");
}
break;
}
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
backlight_level(0);
#endif
}
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
if (current_layer == layer) {
}
else {
current_layer = layer;
switch (layer) {
case 0:
backlight_level(0);
break;
case 1:
backlight_level(1);
break;
case 2:
backlight_level(1);
break;
case 3:
backlight_level(1);
break;
case 4:
backlight_level(1);
break;
case 5:
backlight_level(2);
break;
case 6:
backlight_level(3);
break;
default:
backlight_level(0);
break;
}
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Enable Dynamic Macros.
switch (keycode) {
case QMK_REV:
if (record->event.pressed) {
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
}
return false;
break;
case KC_WEB:
if (record->event.pressed) {
SEND_STRING(SS_LGUI("r"));
wait_ms(100);
SEND_STRING("chrome.exe\n");
}
return false;
break;
case KC_SP4:
if (record->event.pressed) {
SEND_STRING (" ");
}
return false;
break;
}
// Dynamic Macros.
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
return true;
}
void custom_backlight_level(uint8_t level) {
if (level > BACKLIGHT_LEVELS)
level = BACKLIGHT_LEVELS;
backlight_config.level = level;
backlight_config.enable = !!backlight_config.level;
backlight_set(backlight_config.level);
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
custom_backlight_level(0);
#endif
}
void matrix_scan_user(void) {
}
uint32_t layer_state_set_user(uint32_t state) {
switch (biton32(state)) {
case _BL:
custom_backlight_level(0);
break;
case _WL:
case _NL:
case _DL:
case _CL:
custom_backlight_level(1);
break;
case _FL:
custom_backlight_level(2);
break;
case _AL:
custom_backlight_level(3);
break;
default:
custom_backlight_level(0);
break;
}
return state;
}
void led_set_user(uint8_t usb_led) {
}

View File

@@ -1,120 +1,114 @@
# Keymap Maintainer: Gam3cat
make gonnerd:gam3cat
## Layout Config:
2u backspace, 2.25u left shift/enter, 1.75u right shift.
2x1.5u, 1x7.0u, 2x1.5u, 3x1u bottom row.
FN_CAPS = MO(_FL) when held, CAPS when tapped.
GRAVE_ESC + GUI = `
GRAVE_ESC + SHIFT = ~
2u backspace, 2.25u lshift/enter, [2.75u rshift] or [1.75u rshift, 1u Fn].
[1.5u, 1u, 1.5u 1x7.0u, 1.5u, 1u, 1.5u, 3x1u] or [2x1.5u, 1x7.0u, 2x1.5u, 3x1u] bottom row.
## Base Layer Selection:
(Caps+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
(Fn+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
### Base Layer Options:
_BL: Base Layer, mostly standard TKL QWERTY layout.
#### _BL: Base Layer - Standard TKL QWERTY layout.
.-----------------------------------------------------------------------.
|Esc||||| F1| F2| F3| F4||| F5| F6| F7| F8||| F9|F10|F11|F12|PSc|SLk|Pau|
|Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
|-----------------------------------------------------------|-----------|
| ~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|Hom|PgU|
|~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
|-----------------------------------------------------------|-----------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
|-----------------------------------------------------------|-----------|
|FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
|Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
|-----------------------------------------------------------|-----------|
|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
|Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
|-----------------------------------------------------------|-----------|
|Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
|Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
*-----------------------------------------------------------------------*
_WL: Workman Layer.
#### _WL: Workman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | -| =| | | | |
| | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
| | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
| |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
| | A| S| H| T| G| Y| N| E| O| I| '| | |
| |A |S |H |T |G |Y |N |E |O |I |' | | |
|-----------------------------------------------------------|-----------|
| | Z| X| M| C| V| K| L| ,| .| /| | | | | |
| |Z |X |M |C |V |K |L |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
| | | | | | | | | | |
*-----------------------------------------------------------------------*
_NL: Norman Layer.
#### _NL: Norman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | -| =| | | | |
| | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
| | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
| |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
| | A| S| E| T| G| Y| N| I| O| H| '| | |
| |A |S |E |T |G |Y |N |I |O |H |' | | |
|-----------------------------------------------------------|-----------|
| | Z| X| C| V| B| P| M| ,| .| /| | | | | |
| |Z |X |C |V |B |P |M |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
| | | | | | | | | | |
*-----------------------------------------------------------------------*
_DL: Dvorak Layer.
#### _DL: Dvorak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | [| ]| | | | |
| | | | | | | | | | | |[ |] | | | | |
|-----------------------------------------------------------|-----------|
| | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
| |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
|-----------------------------------------------------------|-----------|
| | A| O| E| U| I| D| H| T| N| S| -| | |
| |A |O |E |U |I |D |H |T |N |S |- | | |
|-----------------------------------------------------------|-----------|
| | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
| |; |Q |J |K |X |B |M |W |V |Z | | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
| | | | | | | | | | |
*-----------------------------------------------------------------------*
_CL: Colmak Layer.
#### _CL: Colmak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | | -| =| | | | |
| | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
| | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
| |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
| | A| R| S| T| D| H| N| E| I| O| '| | |
| |A |R |S |T |D |H |N |E |I |O |' | | |
|-----------------------------------------------------------|-----------|
| | Z| X| C| V| B| K| M| ,| .| /| | | | | |
| |Z |X |C |V |B |K |M |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
| | | | | | | | | | |
*-----------------------------------------------------------------------*
_FL: Function Layer.
M0 opens Chrome
#### _FL: Function Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
.-----------------------------------------------------------|-----------|
| M0| | | | | | | | | | | | | | | | |
|Web| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | | | | | | | | |
|Fn_AL| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | |Lft|Dwn|Up |Rgt| | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | | | | | | | |
| | | | | | | | | | | | |Fn | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| |WBk| |WFw|
| | | | SP4 | |Fn | |WBk| |WFw|
*-----------------------------------------------------------------------*
_AL: Adjust Layer.
Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
.-----------------------------------------------------------------------.
|Rst||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
|Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|-----------------------------------------------------------|-----------|
|Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|-----------------------------------------------------------|-----------|
|FnCaps| | |_DL| | | | | | | | | | |
| | | |_DL| | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | |_CL| |_BL|_NL| | | | | | | | | |
| | | |_CL| |_BL|_NL| | | | | |Fn | | | |
|-----------------------------------------------------------|-----------|
| ||||| | | ||||| | | | |
| | | | | |Fn | | | | |
*-----------------------------------------------------------------------*

View File

@@ -2,20 +2,24 @@
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
TAP_DANCE_ENABLE = no # Enable TapDance functionality
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+1500)
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 # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = no # Enable extended unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
#VARIABLE_TRACE = no # Use this to debug changes to variable values
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -16,6 +16,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -0,0 +1,10 @@
#pragma once
//Force NKRO to be enabled.
#define FORCE_NKRO
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
//#define GRAVE_ESC_CTRL_OVERRIDE
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
//#define TAPPING_TERM 200

View File

@@ -0,0 +1,292 @@
#include QMK_KEYBOARD_H
#include "version.h"
enum layers {
_BL = 0, // Base Layer
_WL, // Workman Layer
_NL, // Norman Layer
_DL, // Dvorak Layer
_CL, // Base Layer
_FL, // Function Layer
_AL, // Adjust Layer
};
enum custom_keycodes {
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
QMK_REV,
KC_WEB,
KC_SP4
};
extern backlight_config_t backlight_config;
#include "dynamic_macro.h"
#define FN_CAPS LT(_FL, KC_CAPS)
#define KC_DMR1 DYN_REC_START1
#define KC_DMR2 DYN_REC_START2
#define KC_DMP1 DYN_MACRO_PLAY1
#define KC_DMP2 DYN_MACRO_PLAY2
#define KC_DMRS DYN_REC_STOP
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*#### _BL: Base Layer - Standard TKL QWERTY layout.
* .-----------------------------------------------------------------------.
* |Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
* |-----------------------------------------------------------|-----------|
* |~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
* |-----------------------------------------------------------|-----------|
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
* |-----------------------------------------------------------|-----------|
* |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
* |-----------------------------------------------------------|-----------|
* |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
* |-----------------------------------------------------------|-----------|
* |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
* *-----------------------------------------------------------------------*
*/
[_BL] = 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_PSCR, KC_SLCK, KC_PAUS, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
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, MO(_FL), KC_UP, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
/*#### _WL: Workman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |- |= | | | | |
* |-----------------------------------------------------------|-----------|
* | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |S |H |T |G |Y |N |E |O |I |' | | |
* |-----------------------------------------------------------|-----------|
* | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_WL] = LAYOUT_all( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN, _______, _______, _______, _______, _______, _______, \
_______, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , _______, _______, _______, \
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*#### _NL: Norman Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |- |= | | | | |
* |-----------------------------------------------------------|-----------|
* | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |S |E |T |G |Y |N |I |O |H |' | | |
* |-----------------------------------------------------------|-----------|
* | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_NL] = LAYOUT_all( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_Q , KC_W , KC_D , KC_F , KC_K , KC_J , KC_U , KC_R , KC_L , KC_SCLN, _______, _______, _______, _______, _______, _______, \
_______, KC_A , KC_S , KC_E , KC_T , KC_G , KC_Y , KC_N , KC_I , KC_O , KC_H , _______, _______, _______, \
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*#### _DL: Dvorak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |[ |] | | | | |
* |-----------------------------------------------------------|-----------|
* | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |O |E |U |I |D |H |T |N |S |- | | |
* |-----------------------------------------------------------|-----------|
* | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_DL] = LAYOUT_all( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, \
_______, KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLSH, KC_EQL , _______, _______, _______, _______, \
_______, KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS, _______, _______, \
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*#### _CL: Colmak Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* | | | | | | | | | | | |- |= | | | | |
* |-----------------------------------------------------------|-----------|
* | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
* |-----------------------------------------------------------|-----------|
* | |A |R |S |T |D |H |N |E |I |O |' | | |
* |-----------------------------------------------------------|-----------|
* | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | |
* *-----------------------------------------------------------------------*
*/
[_CL] = LAYOUT_all( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, _______, _______, _______, _______, _______, _______, \
_______, KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , _______, _______, _______, \
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/*#### _FL: Function Layer.
* .-----------------------------------------------------------------------.
* | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
* .-----------------------------------------------------------|-----------|
* |Web| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* |Fn_AL| | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | |Lft|Dwn|Up |Rgt| | | |
* |-----------------------------------------------------------|-----------|
* | | | | | | | | | | | | |Fn | | | |
* |-----------------------------------------------------------|-----------|
* | | | | SP4 | |Fn | |WBk| |WFw|
* *-----------------------------------------------------------------------*
*/
[_FL] = LAYOUT_all( \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, \
KC_WEB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
),
/*#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
* .-----------------------------------------------------------------------.
* |Rst||||| | | | ||| | | | ||| | | | | | | |
* .-----------------------------------------------------------|-----------|
* |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
* |-----------------------------------------------------------|-----------|
* |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
* |-----------------------------------------------------------|-----------|
* | | | |_DL| | | | | | | | | | |
* |-----------------------------------------------------------|-----------|
* | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
* |-----------------------------------------------------------|-----------|
* | | | | | |Fn | | | | |
* *-----------------------------------------------------------------------*
*/
[_AL] = LAYOUT_all( \
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS, KC_DMR2, KC_DMP2, \
XXXXXXX, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QMK_REV:
if (record->event.pressed) {
SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
}
return false;
break;
case KC_WEB:
if (record->event.pressed) {
SEND_STRING(SS_LGUI("r"));
wait_ms(100);
SEND_STRING("chrome.exe\n");
}
return false;
break;
case KC_SP4:
if (record->event.pressed) {
SEND_STRING (" ");
}
return false;
break;
}
// Dynamic Macros.
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
return true;
}
void custom_backlight_level(uint8_t level) {
if (level > BACKLIGHT_LEVELS)
level = BACKLIGHT_LEVELS;
backlight_config.level = level;
backlight_config.enable = !!backlight_config.level;
backlight_set(backlight_config.level);
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
custom_backlight_level(0);
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_mode(1);
rgblight_sethsv_noeeprom(180,100,100);
#endif
}
void matrix_scan_user(void) {
}
uint32_t layer_state_set_user(uint32_t state) {
switch (biton32(state)) {
case _BL:
custom_backlight_level(0);
rgblight_sethsv_noeeprom(180,100,255);
break;
case _WL:
case _NL:
case _DL:
case _CL:
custom_backlight_level(1);
rgblight_sethsv_noeeprom(230,255,255);
break;
case _FL:
custom_backlight_level(2);
rgblight_sethsv_noeeprom(280,255,255);
break;
case _AL:
custom_backlight_level(3);
rgblight_sethsv_noeeprom(350,255,255);
break;
default:
custom_backlight_level(0);
rgblight_sethsv_noeeprom(180,100,100);
break;
}
return state;
}
void led_init_ports(void) {
DDRD |= (1<<5); // OUT
DDRE |= (1<<6); // OUT
}
void led_set_user(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
DDRD |= (1 << 5); PORTD &= ~(1 << 5);
} else {
DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
}
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
DDRE |= (1 << 6); PORTE &= ~(1 << 6);
} else {
DDRE &= ~(1 << 6); PORTE &= ~(1 << 6);
}
}

View File

@@ -0,0 +1,114 @@
# Keymap Maintainer: Gam3cat
make h87a:gam3cat
## Layout Config:
2u backspace, 2.25u lshift/enter, [2.75u rshift] or [1.75u rshift, 1u Fn].
[1.5u, 1u, 1.5u 1x7.0u, 1.5u, 1u, 1.5u, 3x1u] or [2x1.5u, 1x7.0u, 2x1.5u, 3x1u] bottom row.
## Base Layer Selection:
(Fn+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
### Base Layer Options:
#### _BL: Base Layer - Standard TKL QWERTY layout.
.-----------------------------------------------------------------------.
|Esc|||||F1 |F2 |F3 |F4 |||F5 |F6 |F7 |F8 |||F9 |F10|F11|F12|PSc|SLk|Pau|
|-----------------------------------------------------------|-----------|
|~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
|-----------------------------------------------------------|-----------|
|Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
|-----------------------------------------------------------|-----------|
|Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
|-----------------------------------------------------------|-----------|
|Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
|-----------------------------------------------------------|-----------|
|Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
*-----------------------------------------------------------------------*
#### _WL: Workman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
| |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
| |A |S |H |T |G |Y |N |E |O |I |' | | |
|-----------------------------------------------------------|-----------|
| |Z |X |M |C |V |K |L |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | |
*-----------------------------------------------------------------------*
#### _NL: Norman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
| |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
| |A |S |E |T |G |Y |N |I |O |H |' | | |
|-----------------------------------------------------------|-----------|
| |Z |X |C |V |B |P |M |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | |
*-----------------------------------------------------------------------*
#### _DL: Dvorak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | |[ |] | | | | |
|-----------------------------------------------------------|-----------|
| |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
|-----------------------------------------------------------|-----------|
| |A |O |E |U |I |D |H |T |N |S |- | | |
|-----------------------------------------------------------|-----------|
| |; |Q |J |K |X |B |M |W |V |Z | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | |
*-----------------------------------------------------------------------*
#### _CL: Colmak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
| | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
| |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
| |A |R |S |T |D |H |N |E |I |O |' | | |
|-----------------------------------------------------------|-----------|
| |Z |X |C |V |B |K |M |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | |
*-----------------------------------------------------------------------*
#### _FL: Function Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
.-----------------------------------------------------------|-----------|
|Web| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
|Fn_AL| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | |Lft|Dwn|Up |Rgt| | | |
|-----------------------------------------------------------|-----------|
| | | | | | | | | | | | |Fn | | | |
|-----------------------------------------------------------|-----------|
| | | | SP4 | |Fn | |WBk| |WFw|
*-----------------------------------------------------------------------*
#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
.-----------------------------------------------------------------------.
|Rst||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
|Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|-----------------------------------------------------------|-----------|
|Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|-----------------------------------------------------------|-----------|
| | | |_DL| | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | |_CL| |_BL|_NL| | | | | |Fn | | | |
|-----------------------------------------------------------|-----------|
| | | | | |Fn | | | | |
*-----------------------------------------------------------------------*

View File

@@ -0,0 +1,24 @@
# 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
#
TAP_DANCE_ENABLE = no # Enable TapDance functionality
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+1500)
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 # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = no # Enable extended unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
#VARIABLE_TRACE = no # Use this to debug changes to variable values
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
KEY_LOCK_ENABLE = no # This enables key lock(+260)
SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common

View File

@@ -21,6 +21,3 @@ 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
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -148,13 +148,26 @@
#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* default 3V ERM vibration motor voltage and library*/
#if FB_ERM_LRA == 0
#define RATED_VOLTAGE 3
#define V_RMS 2.3
#define V_PEAK 3.30
/* Library Selection */
#define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
/* default 2V LRA voltage and library */
#elif FB_ERM_LRA == 1
#define RATED_VOLTAGE 2
#define V_RMS 2.0
#define V_PEAK 2.85
#define F_LRA 205
#define F_LRA 200
/* Library Selection */
#define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
#endif
/* Control 1 register settings */
#define DRIVE_TIME 25
#define AC_COUPLE 0
@@ -179,14 +192,11 @@
#define ZC_DET_TIME 0
#define AUTO_CAL_TIME 3
//#define WS2812_LED_N 2
//#define RGBLED_NUM WS2812_LED_N
//#define WS2812_TIM_N 2
//#define WS2812_TIM_CH 2
//#define PORT_WS2812 GPIOA
//#define PIN_WS2812 15
//#define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
//#define WS2812_DMA_CHANNEL 7 // DMA channel for TIMx_UP
//#define WS2812_EXTERNAL_PULLUP
//#define RGBLIGHT_ANIMATIONS
//#define RGBLED_NUM 10
//#define RGB_DI_PIN B5
//#define DRIVER_LED_TOTAL RGBLED_NUM
//#define RGB_MATRIX_KEYPRESSES
#endif

View File

@@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LOWER] = LAYOUT_wrapper(
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_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_PIPE, \
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12,S(KC_NUHS),S(KC_NUBS),_______,_______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),

View File

@@ -159,7 +159,7 @@
#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_USE_DMA FALSE
#define STM32_I2C_I2C1_DMA_PRIORITY 1
#define STM32_I2C_I2C2_DMA_PRIORITY 1
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")

View File

@@ -1,7 +1,3 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
AUDIO_ENABLE = no
MOUSEKEY_ENABLE = yes

View File

@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -1,3 +0,0 @@
ifndef QUANTUM_DIR
include ../../../../Makefile
endif

View File

@@ -0,0 +1,245 @@
/*
Copyright 2018 Don Chiou
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
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 Flehrad
#define PRODUCT downbubble
#define DESCRIPTION An Ergonomic Centered Numpad Keyboard
/* key matrix size */
#define MATRIX_ROWS 6
#define MATRIX_COLS 20
/*
* 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 { F1, F2, F3, F4, F5, F6 }
#define MATRIX_COL_PINS { F7, C7, C6, C5, C4, C3, C2, C1, C0, E1, E0, D7, D6, D5, D4, D3, D2, D1, D0, B7 }
#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.
*
*/
/* key combination for magic key command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
/* override magic key keymap */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
//#define MAGIC_KEY_HELP1 H
//#define MAGIC_KEY_HELP2 SLASH
//#define MAGIC_KEY_DEBUG D
//#define MAGIC_KEY_DEBUG_MATRIX X
//#define MAGIC_KEY_DEBUG_KBD K
//#define MAGIC_KEY_DEBUG_MOUSE M
//#define MAGIC_KEY_VERSION V
//#define MAGIC_KEY_STATUS S
//#define MAGIC_KEY_CONSOLE C
//#define MAGIC_KEY_LAYER0_ALT1 ESC
//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
//#define MAGIC_KEY_LAYER0 0
//#define MAGIC_KEY_LAYER1 1
//#define MAGIC_KEY_LAYER2 2
//#define MAGIC_KEY_LAYER3 3
//#define MAGIC_KEY_LAYER4 4
//#define MAGIC_KEY_LAYER5 5
//#define MAGIC_KEY_LAYER6 6
//#define MAGIC_KEY_LAYER7 7
//#define MAGIC_KEY_LAYER8 8
//#define MAGIC_KEY_LAYER9 9
//#define MAGIC_KEY_BOOTLOADER PAUSE
//#define MAGIC_KEY_LOCK CAPS
//#define MAGIC_KEY_EEPROM E
//#define MAGIC_KEY_NKRO N
//#define MAGIC_KEY_SLEEP_LED Z
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
/* disable debug print */
//#define NO_DEBUG
/* disable print */
//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
/*
* 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

View File

@@ -0,0 +1,16 @@
/* Copyright 2018 REPLACE_WITH_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
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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 "downbubble.h"

View File

@@ -0,0 +1,111 @@
/* Copyright 2018 REPLACE_WITH_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
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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_standard( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K418, \
K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
#define LAYOUT_split_bs( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K418, \
K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
#define LAYOUT_split_rshift( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
K30, K31, K32, K33, K34, K35, K36, K37, K38, K29, K310, K311, K312, K313, K314, K315, K317, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K410, K411, K412, K413, K414, K416, K417, K418, \
K50, K51, K52, K53, K54, K56, K58, K49, K510, K512, K513, K514, K516, K517, K518, K519 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, KC_NO, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, K417, K418, KC_NO }, \
{ K50, K51, K52, K53, K54, KC_NO, K56, KC_NO, K58, KC_NO, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
#define LAYOUT_split_numpad( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, K317, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, K416, K418, \
K50, K51, K52, K53, K54, K56, K57, K58, K59, K510, K512, K513, K514, K516, K517, K518, K519 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, KC_NO, K118, K119 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, KC_NO, K418, KC_NO }, \
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, K58, K59, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}
#define LAYOUT_all( \
K00, K01, K02, K03, K04, K05, K06, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019,\
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119,\
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219,\
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, K317, \
K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, K416, K417, K418, \
K50, K51, K52, K53, K54, K56, K57, K58, K59, K510, K512, K513, K514, K516, K517, K518, K519 \
) \
{ \
{ K00, K01, K02, K03, K04, K05, K06, KC_NO, KC_NO, KC_NO, K010, K011, K012, K013, K014, K015, K016, K017, K018, K019 }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119 }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, K213, K214, K215, K216, K217, K218, K219 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K310, K311, K312, K313, K314, K315, KC_NO, K317, KC_NO, KC_NO }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K410, K411, K412, K413, K414, KC_NO, K416, K417, K418, KC_NO }, \
{ K50, K51, K52, K53, K54, KC_NO, K56, K57, K58, K59, K510, KC_NO, K512, K513, K514, KC_NO, K516, K517, K518, K519 }, \
}

View File

@@ -0,0 +1,559 @@
{
"keyboard_name": "downbubble",
"url": "",
"maintainer": "flehrad",
"width": 22.75,
"height": 6,
"layouts": {
"LAYOUT_standard": {
"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":"K010", "x":12.75, "y":0},
{"label":"K011", "x":13.75, "y":0},
{"label":"K012", "x":14.75, "y":0},
{"label":"K013", "x":15.75, "y":0},
{"label":"K014", "x":16.75, "y":0},
{"label":"K015", "x":17.75, "y":0},
{"label":"K016", "x":18.75, "y":0},
{"label":"K017", "x":19.75, "y":0},
{"label":"K018", "x":20.75, "y":0},
{"label":"K019", "x":21.75, "y":0},
{"label":"K10", "x":0, "y":1},
{"label":"K11", "x":1, "y":1},
{"label":"K12", "x":2, "y":1},
{"label":"K13", "x":3, "y":1},
{"label":"K14", "x":4, "y":1},
{"label":"K15", "x":5, "y":1},
{"label":"K16", "x":6, "y":1},
{"label":"K17", "x":8.75, "y":1},
{"label":"K18", "x":9.75, "y":1},
{"label":"K19", "x":10.75, "y":1},
{"label":"K110", "x":12.75, "y":1},
{"label":"K111", "x":13.75, "y":1},
{"label":"K112", "x":14.75, "y":1},
{"label":"K113", "x":15.75, "y":1},
{"label":"K114", "x":16.75, "y":1},
{"label":"K115", "x":17.75, "y":1},
{"label":"K116", "x":18.75, "y":1, "w":2},
{"label":"K118", "x":20.75, "y":1},
{"label":"K119", "x":21.75, "y":1},
{"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":7.75, "y":2},
{"label":"K17", "x":8.75, "y":2},
{"label":"K28", "x":9.75, "y":2},
{"label":"K210", "x":12.25, "y":2},
{"label":"K211", "x":13.25, "y":2},
{"label":"K212", "x":14.25, "y":2},
{"label":"K213", "x":15.25, "y":2},
{"label":"K214", "x":16.25, "y":2},
{"label":"K215", "x":17.25, "y":2},
{"label":"K216", "x":18.25, "y":2},
{"label":"K217", "x":19.25, "y":2, "w":1.5},
{"label":"K218", "x":20.75, "y":2},
{"label":"K219", "x":21.75, "y":2},
{"label":"K30", "x":0, "y":3, "w":1.75},
{"label":"K31", "x":1.75, "y":3},
{"label":"K32", "x":2.75, "y":3},
{"label":"K33", "x":3.75, "y":3},
{"label":"K34", "x":4.75, "y":3},
{"label":"K35", "x":5.75, "y":3},
{"label":"K36", "x":7.75, "y":3},
{"label":"K37", "x":8.75, "y":3},
{"label":"K38", "x":9.75, "y":3},
{"label":"K29", "x":10.75, "y":2, "h":2},
{"label":"K310", "x":12.5, "y":3},
{"label":"K311", "x":13.5, "y":3},
{"label":"K312", "x":14.5, "y":3},
{"label":"K313", "x":15.5, "y":3},
{"label":"K314", "x":16.5, "y":3},
{"label":"K315", "x":17.5, "y":3},
{"label":"K317", "x":18.5, "y":3, "w":2.25},
{"label":"K40", "x":0, "y":4, "w":2.25},
{"label":"K41", "x":2.25, "y":4},
{"label":"K42", "x":3.25, "y":4},
{"label":"K43", "x":4.25, "y":4},
{"label":"K44", "x":5.25, "y":4},
{"label":"K45", "x":6.25, "y":4},
{"label":"K46", "x":7.75, "y":4},
{"label":"K47", "x":8.75, "y":4},
{"label":"K48", "x":9.75, "y":4},
{"label":"K410", "x":13, "y":4},
{"label":"K411", "x":14, "y":4},
{"label":"K412", "x":15, "y":4},
{"label":"K413", "x":16, "y":4},
{"label":"K414", "x":17, "y":4},
{"label":"K416", "x":18, "y":4, "w":2.75},
{"label":"K418", "x":20.75, "y":4},
{"label":"K50", "x":0, "y":5, "w":1.25},
{"label":"K51", "x":1.25, "y":5, "w":1.25},
{"label":"K52", "x":2.5, "y":5, "w":1.25},
{"label":"K53", "x":3.75, "y":5, "w":1.25},
{"label":"K54", "x":5, "y":5, "w":2.25},
{"label":"K56", "x":7.75, "y":5, "w":2},
{"label":"K58", "x":9.75, "y":5},
{"label":"K49", "x":10.75, "y":4, "h":2},
{"label":"K510", "x":13, "y":5, "w":2},
{"label":"K512", "x":15, "y":5, "w":1.25},
{"label":"K513", "x":16.25, "y":5, "w":1.25},
{"label":"K514", "x":17.5, "y":5, "w":1.25},
{"label":"K516", "x":18.75, "y":5},
{"label":"K517", "x":19.75, "y":5},
{"label":"K518", "x":20.75, "y":5},
{"label":"K519", "x":21.75, "y":5}
]
},
"LAYOUT_split_bs": {
"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":"K010", "x":12.75, "y":0},
{"label":"K011", "x":13.75, "y":0},
{"label":"K012", "x":14.75, "y":0},
{"label":"K013", "x":15.75, "y":0},
{"label":"K014", "x":16.75, "y":0},
{"label":"K015", "x":17.75, "y":0},
{"label":"K016", "x":18.75, "y":0},
{"label":"K017", "x":19.75, "y":0},
{"label":"K018", "x":20.75, "y":0},
{"label":"K019", "x":21.75, "y":0},
{"label":"K10", "x":0, "y":1},
{"label":"K11", "x":1, "y":1},
{"label":"K12", "x":2, "y":1},
{"label":"K13", "x":3, "y":1},
{"label":"K14", "x":4, "y":1},
{"label":"K15", "x":5, "y":1},
{"label":"K16", "x":6, "y":1},
{"label":"K17", "x":8.75, "y":1},
{"label":"K18", "x":9.75, "y":1},
{"label":"K19", "x":10.75, "y":1},
{"label":"K110", "x":12.75, "y":1},
{"label":"K111", "x":13.75, "y":1},
{"label":"K112", "x":14.75, "y":1},
{"label":"K113", "x":15.75, "y":1},
{"label":"K114", "x":16.75, "y":1},
{"label":"K115", "x":17.75, "y":1},
{"label":"K116", "x":18.75, "y":1},
{"label":"K117", "x":19.75, "y":1},
{"label":"K118", "x":20.75, "y":1},
{"label":"K119", "x":21.75, "y":1},
{"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":7.75, "y":2},
{"label":"K17", "x":8.75, "y":2},
{"label":"K28", "x":9.75, "y":2},
{"label":"K210", "x":12.25, "y":2},
{"label":"K211", "x":13.25, "y":2},
{"label":"K212", "x":14.25, "y":2},
{"label":"K213", "x":15.25, "y":2},
{"label":"K214", "x":16.25, "y":2},
{"label":"K215", "x":17.25, "y":2},
{"label":"K216", "x":18.25, "y":2},
{"label":"K217", "x":19.25, "y":2, "w":1.5},
{"label":"K218", "x":20.75, "y":2},
{"label":"K219", "x":21.75, "y":2},
{"label":"K30", "x":0, "y":3, "w":1.75},
{"label":"K31", "x":1.75, "y":3},
{"label":"K32", "x":2.75, "y":3},
{"label":"K33", "x":3.75, "y":3},
{"label":"K34", "x":4.75, "y":3},
{"label":"K35", "x":5.75, "y":3},
{"label":"K36", "x":7.75, "y":3},
{"label":"K37", "x":8.75, "y":3},
{"label":"K38", "x":9.75, "y":3},
{"label":"K29", "x":10.75, "y":2, "h":2},
{"label":"K310", "x":12.5, "y":3},
{"label":"K311", "x":13.5, "y":3},
{"label":"K312", "x":14.5, "y":3},
{"label":"K313", "x":15.5, "y":3},
{"label":"K314", "x":16.5, "y":3},
{"label":"K315", "x":17.5, "y":3},
{"label":"K317", "x":18.5, "y":3, "w":2.25},
{"label":"K40", "x":0, "y":4, "w":2.25},
{"label":"K41", "x":2.25, "y":4},
{"label":"K42", "x":3.25, "y":4},
{"label":"K43", "x":4.25, "y":4},
{"label":"K44", "x":5.25, "y":4},
{"label":"K45", "x":6.25, "y":4},
{"label":"K46", "x":7.75, "y":4},
{"label":"K47", "x":8.75, "y":4},
{"label":"K48", "x":9.75, "y":4},
{"label":"K410", "x":13, "y":4},
{"label":"K411", "x":14, "y":4},
{"label":"K412", "x":15, "y":4},
{"label":"K413", "x":16, "y":4},
{"label":"K414", "x":17, "y":4},
{"label":"K416", "x":18, "y":4, "w":2.75},
{"label":"K418", "x":20.75, "y":4},
{"label":"K50", "x":0, "y":5, "w":1.25},
{"label":"K51", "x":1.25, "y":5, "w":1.25},
{"label":"K52", "x":2.5, "y":5, "w":1.25},
{"label":"K53", "x":3.75, "y":5, "w":1.25},
{"label":"K54", "x":5, "y":5, "w":2.25},
{"label":"K56", "x":7.75, "y":5, "w":2},
{"label":"K58", "x":9.75, "y":5},
{"label":"K49", "x":10.75, "y":4, "h":2},
{"label":"K510", "x":13, "y":5, "w":2},
{"label":"K512", "x":15, "y":5, "w":1.25},
{"label":"K513", "x":16.25, "y":5, "w":1.25},
{"label":"K514", "x":17.5, "y":5, "w":1.25},
{"label":"K516", "x":18.75, "y":5},
{"label":"K517", "x":19.75, "y":5},
{"label":"K518", "x":20.75, "y":5},
{"label":"K519", "x":21.75, "y":5}
]
},
"LAYOUT_split_rshift": {
"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":"K010", "x":12.75, "y":0},
{"label":"K011", "x":13.75, "y":0},
{"label":"K012", "x":14.75, "y":0},
{"label":"K013", "x":15.75, "y":0},
{"label":"K014", "x":16.75, "y":0},
{"label":"K015", "x":17.75, "y":0},
{"label":"K016", "x":18.75, "y":0},
{"label":"K017", "x":19.75, "y":0},
{"label":"K018", "x":20.75, "y":0},
{"label":"K019", "x":21.75, "y":0},
{"label":"K10", "x":0, "y":1},
{"label":"K11", "x":1, "y":1},
{"label":"K12", "x":2, "y":1},
{"label":"K13", "x":3, "y":1},
{"label":"K14", "x":4, "y":1},
{"label":"K15", "x":5, "y":1},
{"label":"K16", "x":6, "y":1},
{"label":"K17", "x":8.75, "y":1},
{"label":"K18", "x":9.75, "y":1},
{"label":"K19", "x":10.75, "y":1},
{"label":"K110", "x":12.75, "y":1},
{"label":"K111", "x":13.75, "y":1},
{"label":"K112", "x":14.75, "y":1},
{"label":"K113", "x":15.75, "y":1},
{"label":"K114", "x":16.75, "y":1},
{"label":"K115", "x":17.75, "y":1},
{"label":"K116", "x":18.75, "y":1, "w":2},
{"label":"K118", "x":20.75, "y":1},
{"label":"K119", "x":21.75, "y":1},
{"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":7.75, "y":2},
{"label":"K17", "x":8.75, "y":2},
{"label":"K28", "x":9.75, "y":2},
{"label":"K210", "x":12.25, "y":2},
{"label":"K211", "x":13.25, "y":2},
{"label":"K212", "x":14.25, "y":2},
{"label":"K213", "x":15.25, "y":2},
{"label":"K214", "x":16.25, "y":2},
{"label":"K215", "x":17.25, "y":2},
{"label":"K216", "x":18.25, "y":2},
{"label":"K217", "x":19.25, "y":2, "w":1.5},
{"label":"K218", "x":20.75, "y":2},
{"label":"K219", "x":21.75, "y":2},
{"label":"K30", "x":0, "y":3, "w":1.75},
{"label":"K31", "x":1.75, "y":3},
{"label":"K32", "x":2.75, "y":3},
{"label":"K33", "x":3.75, "y":3},
{"label":"K34", "x":4.75, "y":3},
{"label":"K35", "x":5.75, "y":3},
{"label":"K36", "x":7.75, "y":3},
{"label":"K37", "x":8.75, "y":3},
{"label":"K38", "x":9.75, "y":3},
{"label":"K29", "x":10.75, "y":2, "h":2},
{"label":"K310", "x":12.5, "y":3},
{"label":"K311", "x":13.5, "y":3},
{"label":"K312", "x":14.5, "y":3},
{"label":"K313", "x":15.5, "y":3},
{"label":"K314", "x":16.5, "y":3},
{"label":"K315", "x":17.5, "y":3},
{"label":"K317", "x":18.5, "y":3, "w":2.25},
{"label":"K40", "x":0, "y":4, "w":2.25},
{"label":"K41", "x":2.25, "y":4},
{"label":"K42", "x":3.25, "y":4},
{"label":"K43", "x":4.25, "y":4},
{"label":"K44", "x":5.25, "y":4},
{"label":"K45", "x":6.25, "y":4},
{"label":"K46", "x":7.75, "y":4},
{"label":"K47", "x":8.75, "y":4},
{"label":"K48", "x":9.75, "y":4},
{"label":"K410", "x":13, "y":4},
{"label":"K411", "x":14, "y":4},
{"label":"K412", "x":15, "y":4},
{"label":"K413", "x":16, "y":4},
{"label":"K414", "x":17, "y":4},
{"label":"K416", "x":18, "y":4, "w":1.75},
{"label":"K417", "x":19.75, "y":4},
{"label":"K418", "x":20.75, "y":4},
{"label":"K50", "x":0, "y":5, "w":1.25},
{"label":"K51", "x":1.25, "y":5, "w":1.25},
{"label":"K52", "x":2.5, "y":5, "w":1.25},
{"label":"K53", "x":3.75, "y":5, "w":1.25},
{"label":"K54", "x":5, "y":5, "w":2.25},
{"label":"K56", "x":7.75, "y":5, "w":2},
{"label":"K58", "x":9.75, "y":5},
{"label":"K49", "x":10.75, "y":4, "h":2},
{"label":"K510", "x":13, "y":5, "w":2},
{"label":"K512", "x":15, "y":5, "w":1.25},
{"label":"K513", "x":16.25, "y":5, "w":1.25},
{"label":"K514", "x":17.5, "y":5, "w":1.25},
{"label":"K516", "x":18.75, "y":5},
{"label":"K517", "x":19.75, "y":5},
{"label":"K518", "x":20.75, "y":5},
{"label":"K519", "x":21.75, "y":5}
]
},
"LAYOUT_split_numpad": {
"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":"K010", "x":12.75, "y":0},
{"label":"K011", "x":13.75, "y":0},
{"label":"K012", "x":14.75, "y":0},
{"label":"K013", "x":15.75, "y":0},
{"label":"K014", "x":16.75, "y":0},
{"label":"K015", "x":17.75, "y":0},
{"label":"K016", "x":18.75, "y":0},
{"label":"K017", "x":19.75, "y":0},
{"label":"K018", "x":20.75, "y":0},
{"label":"K019", "x":21.75, "y":0},
{"label":"K10", "x":0, "y":1},
{"label":"K11", "x":1, "y":1},
{"label":"K12", "x":2, "y":1},
{"label":"K13", "x":3, "y":1},
{"label":"K14", "x":4, "y":1},
{"label":"K15", "x":5, "y":1},
{"label":"K16", "x":6, "y":1},
{"label":"K17", "x":8.75, "y":1},
{"label":"K18", "x":9.75, "y":1},
{"label":"K19", "x":10.75, "y":1},
{"label":"K110", "x":12.75, "y":1},
{"label":"K111", "x":13.75, "y":1},
{"label":"K112", "x":14.75, "y":1},
{"label":"K113", "x":15.75, "y":1},
{"label":"K114", "x":16.75, "y":1},
{"label":"K115", "x":17.75, "y":1},
{"label":"K116", "x":18.75, "y":1, "w":2},
{"label":"K118", "x":20.75, "y":1},
{"label":"K119", "x":21.75, "y":1},
{"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":7.75, "y":2},
{"label":"K17", "x":8.75, "y":2},
{"label":"K28", "x":9.75, "y":2},
{"label":"K29", "x":10.75, "y":2},
{"label":"K210", "x":12.25, "y":2},
{"label":"K211", "x":13.25, "y":2},
{"label":"K212", "x":14.25, "y":2},
{"label":"K213", "x":15.25, "y":2},
{"label":"K214", "x":16.25, "y":2},
{"label":"K215", "x":17.25, "y":2},
{"label":"K216", "x":18.25, "y":2},
{"label":"K217", "x":19.25, "y":2, "w":1.5},
{"label":"K218", "x":20.75, "y":2},
{"label":"K219", "x":21.75, "y":2},
{"label":"K30", "x":0, "y":3, "w":1.75},
{"label":"K31", "x":1.75, "y":3},
{"label":"K32", "x":2.75, "y":3},
{"label":"K33", "x":3.75, "y":3},
{"label":"K34", "x":4.75, "y":3},
{"label":"K35", "x":5.75, "y":3},
{"label":"K36", "x":7.75, "y":3},
{"label":"K37", "x":8.75, "y":3},
{"label":"K38", "x":9.75, "y":3},
{"label":"K39", "x":10.75, "y":3},
{"label":"K310", "x":12.5, "y":3},
{"label":"K311", "x":13.5, "y":3},
{"label":"K312", "x":14.5, "y":3},
{"label":"K313", "x":15.5, "y":3},
{"label":"K314", "x":16.5, "y":3},
{"label":"K315", "x":17.5, "y":3},
{"label":"K317", "x":18.5, "y":3, "w":2.25},
{"label":"K40", "x":0, "y":4, "w":2.25},
{"label":"K41", "x":2.25, "y":4},
{"label":"K42", "x":3.25, "y":4},
{"label":"K43", "x":4.25, "y":4},
{"label":"K44", "x":5.25, "y":4},
{"label":"K45", "x":6.25, "y":4},
{"label":"K46", "x":7.75, "y":4},
{"label":"K47", "x":8.75, "y":4},
{"label":"K48", "x":9.75, "y":4},
{"label":"K49", "x":10.75, "y":4},
{"label":"K410", "x":13, "y":4},
{"label":"K411", "x":14, "y":4},
{"label":"K412", "x":15, "y":4},
{"label":"K413", "x":16, "y":4},
{"label":"K414", "x":17, "y":4},
{"label":"K416", "x":18, "y":4, "w":2.75},
{"label":"K418", "x":20.75, "y":4},
{"label":"K50", "x":0, "y":5, "w":1.25},
{"label":"K51", "x":1.25, "y":5, "w":1.25},
{"label":"K52", "x":2.5, "y":5, "w":1.25},
{"label":"K53", "x":3.75, "y":5, "w":1.25},
{"label":"K54", "x":5, "y":5, "w":2.25},
{"label":"K56", "x":7.75, "y":5},
{"Label":"K57", "x":8.75, "y":5},
{"label":"K58", "x":9.75, "y":5},
{"label":"K59", "x":10.75, "y":5},
{"label":"K510", "x":13, "y":5, "w":2},
{"label":"K512", "x":15, "y":5, "w":1.25},
{"label":"K513", "x":16.25, "y":5, "w":1.25},
{"label":"K514", "x":17.5, "y":5, "w":1.25},
{"label":"K516", "x":18.75, "y":5},
{"label":"K517", "x":19.75, "y":5},
{"label":"K518", "x":20.75, "y":5},
{"label":"K519", "x":21.75, "y":5}
]
},
"LAYOUT_all": {
"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":"K010", "x":12.75, "y":0},
{"label":"K011", "x":13.75, "y":0},
{"label":"K012", "x":14.75, "y":0},
{"label":"K013", "x":15.75, "y":0},
{"label":"K014", "x":16.75, "y":0},
{"label":"K015", "x":17.75, "y":0},
{"label":"K016", "x":18.75, "y":0},
{"label":"K017", "x":19.75, "y":0},
{"label":"K018", "x":20.75, "y":0},
{"label":"K019", "x":21.75, "y":0},
{"label":"K10", "x":0, "y":1},
{"label":"K11", "x":1, "y":1},
{"label":"K12", "x":2, "y":1},
{"label":"K13", "x":3, "y":1},
{"label":"K14", "x":4, "y":1},
{"label":"K15", "x":5, "y":1},
{"label":"K16", "x":6, "y":1},
{"label":"K17", "x":8.75, "y":1},
{"label":"K18", "x":9.75, "y":1},
{"label":"K19", "x":10.75, "y":1},
{"label":"K110", "x":12.75, "y":1},
{"label":"K111", "x":13.75, "y":1},
{"label":"K112", "x":14.75, "y":1},
{"label":"K113", "x":15.75, "y":1},
{"label":"K114", "x":16.75, "y":1},
{"label":"K115", "x":17.75, "y":1},
{"label":"K116", "x":18.75, "y":1},
{"label":"K117", "x":19.75, "y":1},
{"label":"K118", "x":20.75, "y":1},
{"label":"K119", "x":21.75, "y":1},
{"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":7.75, "y":2},
{"label":"K27", "x":8.75, "y":2},
{"label":"K28", "x":9.75, "y":2},
{"label":"K29", "x":10.75, "y":2},
{"label":"K210", "x":12.25, "y":2},
{"label":"K211", "x":13.25, "y":2},
{"label":"K212", "x":14.25, "y":2},
{"label":"K213", "x":15.25, "y":2},
{"label":"K214", "x":16.25, "y":2},
{"label":"K215", "x":17.25, "y":2},
{"label":"K216", "x":18.25, "y":2},
{"label":"K217", "x":19.25, "y":2, "w":1.5},
{"label":"K218", "x":20.75, "y":2},
{"label":"K219", "x":21.75, "y":2},
{"label":"K30", "x":0, "y":3, "w":1.75},
{"label":"K31", "x":1.75, "y":3},
{"label":"K32", "x":2.75, "y":3},
{"label":"K33", "x":3.75, "y":3},
{"label":"K34", "x":4.75, "y":3},
{"label":"K35", "x":5.75, "y":3},
{"label":"K36", "x":7.75, "y":3},
{"label":"K37", "x":8.75, "y":3},
{"label":"K38", "x":9.75, "y":3},
{"label":"K39", "x":10.75, "y":3},
{"label":"K310", "x":12.5, "y":3},
{"label":"K311", "x":13.5, "y":3},
{"label":"K312", "x":14.5, "y":3},
{"label":"K313", "x":15.5, "y":3},
{"label":"K314", "x":16.5, "y":3},
{"label":"K315", "x":17.5, "y":3},
{"label":"K317", "x":18.5, "y":3, "w":2.25},
{"label":"K40", "x":0, "y":4, "w":2.25},
{"label":"K41", "x":2.25, "y":4},
{"label":"K42", "x":3.25, "y":4},
{"label":"K43", "x":4.25, "y":4},
{"label":"K44", "x":5.25, "y":4},
{"label":"K45", "x":6.25, "y":4},
{"label":"K46", "x":7.75, "y":4},
{"label":"K47", "x":8.75, "y":4},
{"label":"K48", "x":9.75, "y":4},
{"label":"K49", "x":10.75, "y":4},
{"label":"K410", "x":13, "y":4},
{"label":"K411", "x":14, "y":4},
{"label":"K412", "x":15, "y":4},
{"label":"K413", "x":16, "y":4},
{"label":"K414", "x":17, "y":4},
{"label":"K416", "x":18, "y":4, "w":1.75},
{"label":"K417", "x":19.75, "y":4},
{"label":"K418", "x":20.75, "y":4},
{"label":"K50", "x":0, "y":5, "w":1.25},
{"label":"K51", "x":1.25, "y":5, "w":1.25},
{"label":"K52", "x":2.5, "y":5, "w":1.25},
{"label":"K53", "x":3.75, "y":5, "w":1.25},
{"label":"K54", "x":5, "y":5, "w":2.25},
{"label":"K56", "x":7.75, "y":5},
{"label":"K57", "x":8.75, "y":5},
{"label":"K58", "x":9.75, "y":5},
{"label":"K59", "x":10.75, "y":5},
{"label":"K510", "x":13, "y":5, "w":2},
{"label":"K512", "x":15, "y":5, "w":1.25},
{"label":"K513", "x":16.25, "y":5, "w":1.25},
{"label":"K514", "x":17.5, "y":5, "w":1.25},
{"label":"K516", "x":18.75, "y":5},
{"label":"K517", "x":19.75, "y":5},
{"label":"K518", "x":20.75, "y":5},
{"label":"K519", "x":21.75, "y":5}
]
}
}
}

View File

@@ -0,0 +1,19 @@
/* Copyright 2018 REPLACE_WITH_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
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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

View File

@@ -0,0 +1,103 @@
/* Copyright 2018 REPLACE_WITH_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
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* 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_standard(\
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_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, 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_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
LAYOUT_split_bs(\
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_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, 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_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
LAYOUT_split_rshift(\
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_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_PPLS, 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_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_PDOT, KC_PENT, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
LAYOUT_split_numpad(\
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_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_TRNS, 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_P1, KC_P2, KC_P3, KC_PENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_TRNS, KC_PDOT, KC_TRNS, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
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_PSCR, KC_NLCK, KC_HOME, KC_TRNS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_PSLS, KC_PAST, KC_PMNS, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_END, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_TRNS, 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_P1, KC_P2, KC_P3, KC_PENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_SPC, KC_P0, KC_TRNS, KC_PDOT, KC_TRNS, KC_BSPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
};
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) {
}

View File

@@ -0,0 +1 @@
# The default keymaps for downbubble

Some files were not shown because too many files have changed in this diff Show More