From 2ae44470e01287c48f3852ac54a87d7fc4e747c2 Mon Sep 17 00:00:00 2001 From: Noah Andrews Date: Tue, 29 Mar 2016 12:06:32 -0400 Subject: [PATCH 01/16] Fix error in Planck makefile comment [This comment](https://www.reddit.com/r/olkb/comments/428umx/rgb_underglow/czaivbc) states that because both audio output and RGB support require the user of timer 3, they can't be enabled at the same time. That makes sense, I can see where audio.c uses timer 3. But this comment in the code states that the incompatibility is with MIDI support, which doesn't make sense based on what I see in the code. Please enlighten me if I'm mistaken. --- keyboard/planck/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 307b0c7f4f..03d2601761 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -143,7 +143,7 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality # AUDIO_ENABLE = YES # Audio output on port C6 # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID -# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time. +# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. ifdef BACKLIGHT_ENABLE SRC += backlight.c From 8f1ea16ad5e34446bad63bf2357432f256c4298a Mon Sep 17 00:00:00 2001 From: Noah Andrews Date: Tue, 29 Mar 2016 16:35:06 -0400 Subject: [PATCH 02/16] Fix #198 --- 1-setup-path-win.bat | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/1-setup-path-win.bat b/1-setup-path-win.bat index 49fb00e149..6957dbc3f4 100644 --- a/1-setup-path-win.bat +++ b/1-setup-path-win.bat @@ -1,9 +1,14 @@ @echo off -setx /M path "%PATH%;C:\MinGW\bin;C:\MinGW\msys\1.0\bin" > nul 2>&1 + +reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /f /v Path /t REG_SZ /d "%path%;C:\MinGW\bin;C:\MinGW\msys\1.0\bin" > nul +echo. + if NOT ["%errorlevel%"]==["0"] ( - echo FAILED. Rerun with administrator privileges. - pause + echo FAILED. You probably just need to run the script with administrator privileges. ) else ( echo Success! - pause + setx QMK QMK > nul ) + +echo. +pause From 95fba250ef2029ccdedb34500c5d1e96f6d065cf Mon Sep 17 00:00:00 2001 From: Noah Andrews Date: Tue, 29 Mar 2016 21:53:36 -0400 Subject: [PATCH 03/16] Updated several keyboard folders to use new keymap naming scheme --- BUILD_GUIDE.md | 5 ++++- keyboard/alps64/Makefile | 4 ++-- .../alps64/{keymap_plain.c => keymaps/default.c} | 0 keyboard/alps64/{keymap_hasu.c => keymaps/hasu.c} | 0 keyboard/atomic/Makefile | 4 ++-- keyboard/atomic/README.md | 4 ++-- .../atomic/keymaps/{keymap_abienz.c => abienz.c} | 0 .../atomic/keymaps/{keymap_default.c => default.c} | 0 .../keymaps/{keymap_michelle.c => michelle.c} | 0 keyboard/atreus/Makefile | 4 ++-- keyboard/atreus/README.md | 4 ++-- .../atreus/keymaps/{keymap_default.c => default.c} | 0 keyboard/atreus/keymaps/{keymap_gerb.c => gerb.c} | 0 keyboard/gh60/Makefile | 4 ++-- keyboard/gh60/Makefile.pjrc | 4 ++-- keyboard/gh60/README.md | 14 +++++++------- keyboard/gh60/{keymap_hasu.c => keymaps/hasu.c} | 0 keyboard/gh60/{keymap_hhkb.c => keymaps/hhkb.c} | 0 keyboard/gh60/{keymap_plain.c => keymaps/plain.c} | 0 keyboard/gh60/{keymap_poker.c => keymaps/poker.c} | 0 .../{keymap_poker_bit.c => keymaps/poker_bit.c} | 0 .../{keymap_poker_set.c => keymaps/poker_set.c} | 0 .../gh60/{keymap_spacefn.c => keymaps/spacefn.c} | 0 keyboard/hhkb/Makefile | 8 ++++---- keyboard/hhkb/Makefile.pjrc | 4 ++-- keyboard/hhkb/Makefile.rn42 | 8 ++++---- keyboard/hhkb/README.md | 2 +- keyboard/hhkb/{keymap_hasu.c => keymaps/hasu.c} | 0 keyboard/hhkb/{keymap_hhkb.c => keymaps/hhkb.c} | 0 keyboard/hhkb/{keymap_jp.c => keymaps/jp.c} | 0 .../hhkb/{keymap_spacefn.c => keymaps/spacefn.c} | 0 keyboard/hhkb_qmk/Makefile | 4 ++-- keyboard/hhkb_qmk/README.md | 4 ++-- .../keymaps/{keymap_default.c => default.c} | 0 .../hhkb_qmk/keymaps/{keymap_lxol.c => lxol.c} | 0 keyboard/jd45/Makefile | 4 ++-- .../jd45/keymaps/{keymap_default.c => default.c} | 0 .../jd45/keymaps/{keymap_justin.c => justin.c} | 0 keyboard/planck/README.md | 4 ++-- .../common_keymaps/keymap_mitch.c | 0 quantum/template/README.md | 2 +- 41 files changed, 45 insertions(+), 42 deletions(-) rename keyboard/alps64/{keymap_plain.c => keymaps/default.c} (100%) rename keyboard/alps64/{keymap_hasu.c => keymaps/hasu.c} (100%) rename keyboard/atomic/keymaps/{keymap_abienz.c => abienz.c} (100%) rename keyboard/atomic/keymaps/{keymap_default.c => default.c} (100%) rename keyboard/atomic/keymaps/{keymap_michelle.c => michelle.c} (100%) rename keyboard/atreus/keymaps/{keymap_default.c => default.c} (100%) rename keyboard/atreus/keymaps/{keymap_gerb.c => gerb.c} (100%) rename keyboard/gh60/{keymap_hasu.c => keymaps/hasu.c} (100%) rename keyboard/gh60/{keymap_hhkb.c => keymaps/hhkb.c} (100%) rename keyboard/gh60/{keymap_plain.c => keymaps/plain.c} (100%) rename keyboard/gh60/{keymap_poker.c => keymaps/poker.c} (100%) rename keyboard/gh60/{keymap_poker_bit.c => keymaps/poker_bit.c} (100%) rename keyboard/gh60/{keymap_poker_set.c => keymaps/poker_set.c} (100%) rename keyboard/gh60/{keymap_spacefn.c => keymaps/spacefn.c} (100%) rename keyboard/hhkb/{keymap_hasu.c => keymaps/hasu.c} (100%) rename keyboard/hhkb/{keymap_hhkb.c => keymaps/hhkb.c} (100%) rename keyboard/hhkb/{keymap_jp.c => keymaps/jp.c} (100%) rename keyboard/hhkb/{keymap_spacefn.c => keymaps/spacefn.c} (100%) rename keyboard/hhkb_qmk/keymaps/{keymap_default.c => default.c} (100%) rename keyboard/hhkb_qmk/keymaps/{keymap_lxol.c => lxol.c} (100%) rename keyboard/jd45/keymaps/{keymap_default.c => default.c} (100%) rename keyboard/jd45/keymaps/{keymap_justin.c => justin.c} (100%) rename keyboard/planck/{ => old_keymap_files}/common_keymaps/keymap_mitch.c (100%) diff --git a/BUILD_GUIDE.md b/BUILD_GUIDE.md index 22df53c30d..f7a57d2fc9 100644 --- a/BUILD_GUIDE.md +++ b/BUILD_GUIDE.md @@ -44,7 +44,10 @@ If you have any problems building the firmware, you can try using a tool called 4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. ## Customizing, Building, and Deploying Your Firmware -1. Running the `make` command from your keyboard's folder will generate a .hex file based on the default keymap. All keymaps for a particular keyboard live in the `keymaps` folder in that keyboard's folder. To create your own keymap, copy `keymaps/default/keymap.c` to the `keymaps` folder, and rename it with your name, for example jack.c. Or, if you don't care about the ability to share your keymap with the community via GitHub, you can just modify the default keymap itself. Details on how to program keymap files can be found in other guides. + +Note: Some keyboard folders have non-standard organizations, and may not even support specifying alternate keymaps. Until these get reorganized, you will need to edit their default keymaps directly. + +1. Running the `make` command from your keyboard's folder will generate a .hex file based on the default keymap. All keymaps for a particular keyboard live in the `keymaps` folder in that keyboard's folder. To create your own keymap, copy `keymaps/default/keymap.c` to the `keymaps` folder, and rename it with your name, for example jack.c. Or, if you don't care about the ability to share your keymap with the community via GitHub, you can just modify the default keymap itself. Details on how to program keymap files can be found in other guides. 2. To build a keymap other than the default, type `KEYMAP=` after `make`. So if I've named my keymap jack.c, the full command would be `make KEYMAP=jack`. 3. How you deploy the firmware will depend on whether you are using a PCB or a Teensy. In both cases, you'll need to put the keyboard in bootloader mode, either by pressing a button on the PCB/Teensy or pressing the key with the `RESET` keycode. Then, if you're using a PCB, just run `make KEYMAP= dfu` to both build and deploy the firmware. If you're using a Teensy, you'll probably need to take the .hex file that make produces in the keyboard's folder, and deploy it using the [Teensy Loader.](https://www.pjrc.com/teensy/loader.html) diff --git a/keyboard/alps64/Makefile b/keyboard/alps64/Makefile index e90dcedb67..7634c4280e 100644 --- a/keyboard/alps64/Makefile +++ b/keyboard/alps64/Makefile @@ -53,9 +53,9 @@ SRC = keymap_common.c \ led.c ifdef KEYMAP - SRC := keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else - SRC := keymap_plain.c $(SRC) + SRC := keymaps/default.c $(SRC) endif CONFIG_H = config.h diff --git a/keyboard/alps64/keymap_plain.c b/keyboard/alps64/keymaps/default.c similarity index 100% rename from keyboard/alps64/keymap_plain.c rename to keyboard/alps64/keymaps/default.c diff --git a/keyboard/alps64/keymap_hasu.c b/keyboard/alps64/keymaps/hasu.c similarity index 100% rename from keyboard/alps64/keymap_hasu.c rename to keyboard/alps64/keymaps/hasu.c diff --git a/keyboard/atomic/Makefile b/keyboard/atomic/Makefile index e678b4efa8..da6d0ac60c 100644 --- a/keyboard/atomic/Makefile +++ b/keyboard/atomic/Makefile @@ -54,9 +54,9 @@ SRC = atomic.c \ backlight.c ifdef KEYMAP - SRC := keymaps/keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else - SRC := keymaps/keymap_default.c $(SRC) + SRC := keymaps/default.c $(SRC) endif CONFIG_H = config.h diff --git a/keyboard/atomic/README.md b/keyboard/atomic/README.md index c8e83cf55a..0e42370ba6 100644 --- a/keyboard/atomic/README.md +++ b/keyboard/atomic/README.md @@ -16,10 +16,10 @@ Depending on which keymap you would like to use, you will have to compile slight To build with the default keymap, simply run `make`. ### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_.c` and see keymap document (you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `.c` and see keymap document (you can find in top README.md) and existent keymap files. To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: ``` $ make KEYMAP=[default|jack|] ``` -Keymaps follow the format **__keymap\_\.c__** and are stored in the `keymaps` folder. +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboard/atomic/keymaps/keymap_abienz.c b/keyboard/atomic/keymaps/abienz.c similarity index 100% rename from keyboard/atomic/keymaps/keymap_abienz.c rename to keyboard/atomic/keymaps/abienz.c diff --git a/keyboard/atomic/keymaps/keymap_default.c b/keyboard/atomic/keymaps/default.c similarity index 100% rename from keyboard/atomic/keymaps/keymap_default.c rename to keyboard/atomic/keymaps/default.c diff --git a/keyboard/atomic/keymaps/keymap_michelle.c b/keyboard/atomic/keymaps/michelle.c similarity index 100% rename from keyboard/atomic/keymaps/keymap_michelle.c rename to keyboard/atomic/keymaps/michelle.c diff --git a/keyboard/atreus/Makefile b/keyboard/atreus/Makefile index 2e542d62ed..a6fddd70d2 100644 --- a/keyboard/atreus/Makefile +++ b/keyboard/atreus/Makefile @@ -53,9 +53,9 @@ TARGET_DIR = . SRC = atreus.c ifdef KEYMAP - SRC := keymaps/keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else - SRC := keymaps/keymap_default.c $(SRC) + SRC := keymaps/default.c $(SRC) endif ifdef TEENSY2 diff --git a/keyboard/atreus/README.md b/keyboard/atreus/README.md index 4db7ac1203..aacf2841f4 100644 --- a/keyboard/atreus/README.md +++ b/keyboard/atreus/README.md @@ -177,10 +177,10 @@ Depending on which keymap you would like to use, you will have to compile slight To build with the default keymap, simply run `make`. ### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_.c` and see keymap document (you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` and see keymap document (you can find in top README.md) and existent keymap files. To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: ``` $ make KEYMAP=[default|jack|] ``` -Keymaps follow the format **__keymap\_\.c__** and are stored in the `keymaps` folder. +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboard/atreus/keymaps/keymap_default.c b/keyboard/atreus/keymaps/default.c similarity index 100% rename from keyboard/atreus/keymaps/keymap_default.c rename to keyboard/atreus/keymaps/default.c diff --git a/keyboard/atreus/keymaps/keymap_gerb.c b/keyboard/atreus/keymaps/gerb.c similarity index 100% rename from keyboard/atreus/keymaps/keymap_gerb.c rename to keyboard/atreus/keymaps/gerb.c diff --git a/keyboard/gh60/Makefile b/keyboard/gh60/Makefile index daba0f6449..4c8f9dc8ab 100644 --- a/keyboard/gh60/Makefile +++ b/keyboard/gh60/Makefile @@ -53,9 +53,9 @@ SRC = keymap_common.c \ led.c ifdef KEYMAP - SRC := keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else - SRC := keymap_poker.c $(SRC) + SRC := keymaps/poker.c $(SRC) endif CONFIG_H = config.h diff --git a/keyboard/gh60/Makefile.pjrc b/keyboard/gh60/Makefile.pjrc index 11bd3b7840..8ed73a248d 100644 --- a/keyboard/gh60/Makefile.pjrc +++ b/keyboard/gh60/Makefile.pjrc @@ -53,9 +53,9 @@ SRC = keymap_common.c \ led.c ifdef KEYMAP - SRC := keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else - SRC := keymap_poker.c $(SRC) + SRC := keymaps/poker.c $(SRC) endif CONFIG_H = config.h diff --git a/keyboard/gh60/README.md b/keyboard/gh60/README.md index 510cb5c8b6..41a757ea3a 100644 --- a/keyboard/gh60/README.md +++ b/keyboard/gh60/README.md @@ -21,7 +21,7 @@ Use `make -f Makefile.pjrc` if you want to use PJRC stack but I find no reason t ## Keymap -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_.c` and see keymap document(you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, and see keymap document(you can find in top README.md) and existent keymap files. To build firmware binary hex file with a certain keymap just do `make` with `KEYMAP` option like: @@ -29,8 +29,8 @@ To build firmware binary hex file with a certain keymap just do `make` with `KEY ### 1 Poker -[keymap_poker.c](keymap_poker.c) emulates original Poker layers -while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys. +[poker.c](keymaps/poker.c) emulates original Poker layers +while both [poker_bit.c](keymaps/poker_bit.c) and [poker_set.c](keymaps/poker_set.c) implement the same layout in different ways and they fix a minor issue of original Poker and enhance arrow keys. Fn + Esc = ` Fn + {left, down, up, right} = {home, pgdown, pgup, end} @@ -63,7 +63,7 @@ while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](key ### 2. Plain Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host. -See [keymap_plain.c](keymap_plain.c) for detail. +See [plain.c](keymaps/plain.c) for detail. #### 1.0 Plain Default layer ,-----------------------------------------------------------. @@ -80,11 +80,11 @@ See [keymap_plain.c](keymap_plain.c) for detail. ### 3. Hasu -This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail. +This is my favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [hasu.c](keymaps/hasu.c) for detail. ### 4. SpaceFN -This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0). +This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [spacefn.c](keymaps/spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0). #### 4.0 Default layer ,-----------------------------------------------------------. @@ -113,7 +113,7 @@ This layout proposed by spiceBar uses space bar to change layer with using Dual ### 5. HHKB -[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers. +[hhkb.c](keymaps/hhkb.c) emulates original HHKB layers. #### 5.0: Default layer ,-----------------------------------------------------------. |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \| `| diff --git a/keyboard/gh60/keymap_hasu.c b/keyboard/gh60/keymaps/hasu.c similarity index 100% rename from keyboard/gh60/keymap_hasu.c rename to keyboard/gh60/keymaps/hasu.c diff --git a/keyboard/gh60/keymap_hhkb.c b/keyboard/gh60/keymaps/hhkb.c similarity index 100% rename from keyboard/gh60/keymap_hhkb.c rename to keyboard/gh60/keymaps/hhkb.c diff --git a/keyboard/gh60/keymap_plain.c b/keyboard/gh60/keymaps/plain.c similarity index 100% rename from keyboard/gh60/keymap_plain.c rename to keyboard/gh60/keymaps/plain.c diff --git a/keyboard/gh60/keymap_poker.c b/keyboard/gh60/keymaps/poker.c similarity index 100% rename from keyboard/gh60/keymap_poker.c rename to keyboard/gh60/keymaps/poker.c diff --git a/keyboard/gh60/keymap_poker_bit.c b/keyboard/gh60/keymaps/poker_bit.c similarity index 100% rename from keyboard/gh60/keymap_poker_bit.c rename to keyboard/gh60/keymaps/poker_bit.c diff --git a/keyboard/gh60/keymap_poker_set.c b/keyboard/gh60/keymaps/poker_set.c similarity index 100% rename from keyboard/gh60/keymap_poker_set.c rename to keyboard/gh60/keymaps/poker_set.c diff --git a/keyboard/gh60/keymap_spacefn.c b/keyboard/gh60/keymaps/spacefn.c similarity index 100% rename from keyboard/gh60/keymap_spacefn.c rename to keyboard/gh60/keymaps/spacefn.c diff --git a/keyboard/hhkb/Makefile b/keyboard/hhkb/Makefile index 5a179bd24d..d434246cef 100644 --- a/keyboard/hhkb/Makefile +++ b/keyboard/hhkb/Makefile @@ -129,17 +129,17 @@ NKRO_ENABLE = yes # USB Nkey Rollover # Keymap file # ifdef KEYMAP - SRC := keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else ifdef HHKB_JP - SRC := keymap_jp.c $(SRC) + SRC := keymaps/jp.c $(SRC) else - SRC := keymap_hhkb.c $(SRC) + SRC := keymaps/hhkb.c $(SRC) endif endif -ifneq (, $(or $(findstring keymap_jp.c, $(SRC)), $(findstring yes, $(HHKB_JP)))) +ifneq (, $(or $(findstring jp.c, $(SRC)), $(findstring yes, $(HHKB_JP)))) OPT_DEFS += -DHHKB_JP endif diff --git a/keyboard/hhkb/Makefile.pjrc b/keyboard/hhkb/Makefile.pjrc index 7d0f8c3a9c..403a8ec60a 100644 --- a/keyboard/hhkb/Makefile.pjrc +++ b/keyboard/hhkb/Makefile.pjrc @@ -18,9 +18,9 @@ SRC = keymap_common.c \ led.c ifdef KEYMAP - SRC := keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else - SRC := keymap_hasu.c $(SRC) + SRC := keymaps/hasu.c $(SRC) endif CONFIG_H = config.h diff --git a/keyboard/hhkb/Makefile.rn42 b/keyboard/hhkb/Makefile.rn42 index cbb2b744c9..a730442af0 100644 --- a/keyboard/hhkb/Makefile.rn42 +++ b/keyboard/hhkb/Makefile.rn42 @@ -122,17 +122,17 @@ COMMAND_ENABLE = yes # Commands for debug and configuration # Keymap file # ifdef KEYMAP - SRC := keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/$(KEYMAP).c $(SRC) else ifdef HHKB_JP - SRC := keymap_jp.c $(SRC) + SRC := keymaps/jp.c $(SRC) else - SRC := keymap_hhkb.c $(SRC) + SRC := keymaps/hhkb.c $(SRC) endif endif -ifneq (, $(or $(findstring keymap_jp.c, $(SRC)), $(findstring yes, $(HHKB_JP)))) +ifneq (, $(or $(findstring jp.c, $(SRC)), $(findstring yes, $(HHKB_JP)))) OPT_DEFS += -DHHKB_JP endif diff --git a/keyboard/hhkb/README.md b/keyboard/hhkb/README.md index fcd72e1941..e20c23d823 100644 --- a/keyboard/hhkb/README.md +++ b/keyboard/hhkb/README.md @@ -76,7 +76,7 @@ Use [Teensy Loader] if your controller is Teensy/Teensy++. ##Keymap -To define your own keymap create file named `keymap_.c` and see [keymap document](../../doc/keymap.md) and existent keymap files. +To define your own keymap create a file in the keymaps folder named `.c` and see keymap document (you can find in top README.md) and existent keymap files. ##Hardware diff --git a/keyboard/hhkb/keymap_hasu.c b/keyboard/hhkb/keymaps/hasu.c similarity index 100% rename from keyboard/hhkb/keymap_hasu.c rename to keyboard/hhkb/keymaps/hasu.c diff --git a/keyboard/hhkb/keymap_hhkb.c b/keyboard/hhkb/keymaps/hhkb.c similarity index 100% rename from keyboard/hhkb/keymap_hhkb.c rename to keyboard/hhkb/keymaps/hhkb.c diff --git a/keyboard/hhkb/keymap_jp.c b/keyboard/hhkb/keymaps/jp.c similarity index 100% rename from keyboard/hhkb/keymap_jp.c rename to keyboard/hhkb/keymaps/jp.c diff --git a/keyboard/hhkb/keymap_spacefn.c b/keyboard/hhkb/keymaps/spacefn.c similarity index 100% rename from keyboard/hhkb/keymap_spacefn.c rename to keyboard/hhkb/keymaps/spacefn.c diff --git a/keyboard/hhkb_qmk/Makefile b/keyboard/hhkb_qmk/Makefile index 8bd44100b7..21ba261a23 100644 --- a/keyboard/hhkb_qmk/Makefile +++ b/keyboard/hhkb_qmk/Makefile @@ -54,9 +54,9 @@ SRC = hhkb_qmk.c \ matrix.c ifdef KEYMAP - SRC := keymaps/keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/keymaps/$(KEYMAP).c $(SRC) else - SRC := keymaps/keymap_default.c $(SRC) + SRC := keymaps/keymaps/default.c $(SRC) endif CONFIG_H = config.h diff --git a/keyboard/hhkb_qmk/README.md b/keyboard/hhkb_qmk/README.md index 606025c411..389407b3aa 100644 --- a/keyboard/hhkb_qmk/README.md +++ b/keyboard/hhkb_qmk/README.md @@ -171,10 +171,10 @@ Depending on which keymap you would like to use, you will have to compile slight To build with the default keymap, simply run `make`. ### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_.c` and see keymap document (you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `.c` and see keymap document (you can find in top README.md) and existent keymap files. To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: ``` $ make KEYMAP=[default|jack|] ``` -Keymaps follow the format **__keymap\_\.c__** and are stored in the `keymaps` folder. +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. diff --git a/keyboard/hhkb_qmk/keymaps/keymap_default.c b/keyboard/hhkb_qmk/keymaps/default.c similarity index 100% rename from keyboard/hhkb_qmk/keymaps/keymap_default.c rename to keyboard/hhkb_qmk/keymaps/default.c diff --git a/keyboard/hhkb_qmk/keymaps/keymap_lxol.c b/keyboard/hhkb_qmk/keymaps/lxol.c similarity index 100% rename from keyboard/hhkb_qmk/keymaps/keymap_lxol.c rename to keyboard/hhkb_qmk/keymaps/lxol.c diff --git a/keyboard/jd45/Makefile b/keyboard/jd45/Makefile index 076dced829..f6a8d10c58 100644 --- a/keyboard/jd45/Makefile +++ b/keyboard/jd45/Makefile @@ -54,9 +54,9 @@ SRC = jd45.c \ backlight.c ifdef KEYMAP - SRC := keymaps/keymap_$(KEYMAP).c $(SRC) + SRC := keymaps/keymaps/(KEYMAP).c $(SRC) else - SRC := keymaps/keymap_default.c $(SRC) + SRC := keymaps/keymaps/default.c $(SRC) endif CONFIG_H = config.h diff --git a/keyboard/jd45/keymaps/keymap_default.c b/keyboard/jd45/keymaps/default.c similarity index 100% rename from keyboard/jd45/keymaps/keymap_default.c rename to keyboard/jd45/keymaps/default.c diff --git a/keyboard/jd45/keymaps/keymap_justin.c b/keyboard/jd45/keymaps/justin.c similarity index 100% rename from keyboard/jd45/keymaps/keymap_justin.c rename to keyboard/jd45/keymaps/justin.c diff --git a/keyboard/planck/README.md b/keyboard/planck/README.md index 3ba0cc1527..d9a1e3beee 100644 --- a/keyboard/planck/README.md +++ b/keyboard/planck/README.md @@ -16,13 +16,13 @@ Depending on which keymap you would like to use, you will have to compile slight To build with the default keymap, simply run `make`. ### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` and see keymap document (you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files. To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: ``` $ make KEYMAP=[default|jack|] ``` -Keymaps follow the format **__.c__** and are stored in the `keymaps` folder. +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. ### Notable forks (which some of the keymap files are from) - [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) diff --git a/keyboard/planck/common_keymaps/keymap_mitch.c b/keyboard/planck/old_keymap_files/common_keymaps/keymap_mitch.c similarity index 100% rename from keyboard/planck/common_keymaps/keymap_mitch.c rename to keyboard/planck/old_keymap_files/common_keymaps/keymap_mitch.c diff --git a/quantum/template/README.md b/quantum/template/README.md index dc163a2f4b..39f9f59d10 100644 --- a/quantum/template/README.md +++ b/quantum/template/README.md @@ -15,7 +15,7 @@ Depending on which keymap you would like to use, you will have to compile slight To build with the default keymap, simply run `make`. ### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` and see keymap document (you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files. To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: ``` From ac0729787ff0e8d1bd1202a28f5edf9125c00b0c Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 30 Mar 2016 00:43:07 -0400 Subject: [PATCH 04/16] preonic update --- keyboard/preonic/Makefile | 54 ++-- keyboard/preonic/Makefile.pjrc | 116 --------- keyboard/preonic/PCB_GUIDE.md | 116 --------- keyboard/preonic/README.md | 49 +--- keyboard/preonic/__avr_gdbinit | 6 - keyboard/preonic/analog.c | 53 ---- keyboard/preonic/analog.h | 36 --- keyboard/preonic/beeps.c | 246 ------------------ keyboard/preonic/beeps.h | 12 - keyboard/preonic/config.h | 18 +- keyboard/preonic/config_definitions.h | 50 ---- keyboard/preonic/extended_keymap_common.c | 216 --------------- keyboard/preonic/extended_keymap_common.h | 181 ------------- .../extended_keymap_default.c | 70 ----- .../extended_keymaps/extended_keymap_lock.c | 81 ------ keyboard/preonic/keymap_midi.c | 110 -------- keyboard/preonic/keymap_midi.h | 220 ---------------- keyboard/preonic/led.c | 38 --- keyboard/preonic/matrix.c | 234 ----------------- quantum/keymap_midi.c | 4 +- 20 files changed, 65 insertions(+), 1845 deletions(-) delete mode 100644 keyboard/preonic/Makefile.pjrc delete mode 100644 keyboard/preonic/PCB_GUIDE.md delete mode 100644 keyboard/preonic/__avr_gdbinit delete mode 100644 keyboard/preonic/analog.c delete mode 100644 keyboard/preonic/analog.h delete mode 100644 keyboard/preonic/beeps.c delete mode 100644 keyboard/preonic/beeps.h delete mode 100644 keyboard/preonic/config_definitions.h delete mode 100644 keyboard/preonic/extended_keymap_common.c delete mode 100644 keyboard/preonic/extended_keymap_common.h delete mode 100644 keyboard/preonic/extended_keymaps/extended_keymap_default.c delete mode 100644 keyboard/preonic/extended_keymaps/extended_keymap_lock.c delete mode 100644 keyboard/preonic/keymap_midi.c delete mode 100644 keyboard/preonic/keymap_midi.h delete mode 100644 keyboard/preonic/led.c delete mode 100644 keyboard/preonic/matrix.c diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile index 0145e44bc6..664aff7321 100644 --- a/keyboard/preonic/Makefile +++ b/keyboard/preonic/Makefile @@ -27,7 +27,7 @@ # make flip-ee = Download the eeprom file to the device, using Atmel FLIP # (must have Atmel FLIP installed). # -# make debug = Start either simulavr or avarice as specified for debugging, +# make debug = Start either simulavr or avarice as specified for debugging, # with avr-gdb or avr-insight as the front end for debugging. # # make filename.s = Just compile filename.c into the assembler code only. @@ -39,25 +39,41 @@ #---------------------------------------------------------------------------- # Target file name (without extension). -TARGET = preonic_lufa +TARGET = preonic + # Directory common source filess exist TOP_DIR = ../.. +TMK_DIR = ../../tmk_core # Directory keyboard dependent files exist TARGET_DIR = . # # project specific files -SRC = extended_keymap_common.c \ - matrix.c \ - led.c \ - backlight.c +SRC = preonic.c + +ifdef keymap + KEYMAP = $(keymap) +endif ifdef KEYMAP - SRC := extended_keymaps/extended_keymap_$(KEYMAP).c $(SRC) +ifneq ("$(wildcard keymaps/$(KEYMAP).c)","") + KEYMAP_FILE = keymaps/$(KEYMAP).c else - SRC := extended_keymaps/extended_keymap_default.c $(SRC) +ifneq ("$(wildcard keymaps/$(KEYMAP)/keymap.c)","") + KEYMAP_FILE = keymaps/$(KEYMAP)/keymap.c +else +$(error Keymap file does not exist) endif +endif +else +ifneq ("$(wildcard keymaps/default.c)","") + KEYMAP_FILE = keymaps/default.c +else + KEYMAP_FILE = keymaps/default/keymap.c +endif +endif +SRC := $(KEYMAP_FILE) $(SRC) CONFIG_H = config.h @@ -120,24 +136,26 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE -#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend -NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA +# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = yes # MIDI controls -BACKLIGHT_ENABLE = yes +MIDI_ENABLE = YES # MIDI controls +AUDIO_ENABLE = YES # Audio output on port C6 +# UNICODE_ENABLE = YES # Unicode +# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID +# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time. -ifdef MIDI_ENABLE - SRC += keymap_midi.c \ - beeps.c +ifdef BACKLIGHT_ENABLE + SRC += backlight.c endif + # Optimize size but this may cause error "relocation truncated to fit" #EXTRALDFLAGS = -Wl,--relax # Search Path VPATH += $(TARGET_DIR) VPATH += $(TOP_DIR) +VPATH += $(TMK_DIR) -include $(TOP_DIR)/protocol/lufa.mk -include $(TOP_DIR)/common.mk -include $(TOP_DIR)/rules.mk +include $(TOP_DIR)/quantum/quantum.mk diff --git a/keyboard/preonic/Makefile.pjrc b/keyboard/preonic/Makefile.pjrc deleted file mode 100644 index be83ba18b1..0000000000 --- a/keyboard/preonic/Makefile.pjrc +++ /dev/null @@ -1,116 +0,0 @@ -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device. -# Please customize your programmer settings(PROGRAM_CMD) -# -# make teensy = Download the hex file to the device, using teensy_loader_cli. -# (must have teensy_loader_cli installed). -# -# make dfu = Download the hex file to the device, using dfu-programmer (must -# have dfu-programmer installed). -# -# make flip = Download the hex file to the device, using Atmel FLIP (must -# have Atmel FLIP installed). -# -# make dfu-ee = Download the eeprom file to the device, using dfu-programmer -# (must have dfu-programmer installed). -# -# make flip-ee = Download the eeprom file to the device, using Atmel FLIP -# (must have Atmel FLIP installed). -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - -# Target file name (without extension). -TARGET = gh60_pjrc - -# Directory common source filess exist -TOP_DIR = ../.. - -# Directory keyboard dependent files exist -TARGET_DIR = . - -# project specific files -SRC = keymap_common.c \ - matrix.c \ - led.c - -ifdef KEYMAP - SRC := keymap_$(KEYMAP).c $(SRC) -else - SRC := keymap_jack.c $(SRC) -endif - -CONFIG_H = config.h - - -# MCU name, you MUST set this to match the board you are using -# type "make clean" after changing this, so all files will be rebuilt -MCU = atmega32u4 -#MCU = at90usb1286 - - -# Processor frequency. -# Normally the first thing your program should do is set the clock prescaler, -# so your program will run at the correct speed. You should also set this -# variable to same clock speed. The _delay_ms() macro uses this, and many -# examples use this variable to calculate timings. Do not add a "UL" here. -F_CPU = 16000000 - - -# Boot Section Size in *bytes* -# Teensy halfKay 512 -# Atmel DFU loader 4096 -# LUFA bootloader 4096 -OPT_DEFS += -DBOOTLOADER_SIZE=4096 - - -# Build Options -# comment out to disable the options. -# -BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000) -MOUSEKEY_ENABLE = yes # Mouse keys(+5000) -EXTRAKEY_ENABLE = yes # Audio control and System control(+600) -CONSOLE_ENABLE = yes # Console for debug -COMMAND_ENABLE = yes # Commands for debug and configuration -SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend -NKRO_ENABLE = yes # USB Nkey Rollover(+500) -#PS2_MOUSE_ENABLE = yes # PS/2 mouse(TrackPoint) support - - -# Search Path -VPATH += $(TARGET_DIR) -VPATH += $(TOP_DIR) - -include $(TOP_DIR)/protocol/pjrc.mk -include $(TOP_DIR)/common.mk -include $(TOP_DIR)/rules.mk - -plain: OPT_DEFS += -DKEYMAP_PLAIN -plain: all - -poker: OPT_DEFS += -DKEYMAP_POKER -poker: all - -poker_set: OPT_DEFS += -DKEYMAP_POKER_SET -poker_set: all - -poker_bit: OPT_DEFS += -DKEYMAP_POKER_BIT -poker_bit: all diff --git a/keyboard/preonic/PCB_GUIDE.md b/keyboard/preonic/PCB_GUIDE.md deleted file mode 100644 index c3004c75a4..0000000000 --- a/keyboard/preonic/PCB_GUIDE.md +++ /dev/null @@ -1,116 +0,0 @@ -# Planck Firmware Guide - -## Setting up the environment - -### Windows -1. Install [WinAVR Tools](http://sourceforge.net/projects/winavr/) for AVR GCC compiler. -2. Install [DFU-Programmer][dfu-prog] (the -win one). -3. Start DFU bootloader on the chip first time you will see 'Found New Hardware Wizard' to install driver. If you install device driver properly you can find chip name like 'ATmega32U4' under 'LibUSB-Win32 Devices' tree on 'Device Manager'. If not you will need to update its driver on 'Device Manager' to the `dfu-programmer` driver. - -### Mac -1. Install [CrossPack](http://www.obdev.at/products/crosspack/index.html) or install Xcode from the App Store and install the Command Line Tools from `Xcode->Preferences->Downloads`. -2. Install [DFU-Programmer][dfu-prog]. - -### Linux -1. Install AVR GCC with your favorite package manager. -2. Install [DFU-Programmer][dfu-prog]. - -##Verify Your Installation -1. Clone the following repository: https://github.com/jackhumbert/tmk_keyboard -2. Open a Terminal and `cd` into `tmk_keyboard/keyboard/planck` -3. Run `make`. This should output a lot of information about the build process. - -## Using the built-in functions - -Here is a list of some of the functions available from the command line: - -* `make clean`: clean the environment - may be required in-between builds -* `make`: compile the code -* `make COMMON=true`: compile with the common (non-extended) keymap -* `make MATRIX=`: compile with the referenced matrix file. Default if unspecified is `matrix_pcb.c`. For handwired boards, use `matrix_handwired.c`. -* `make KEYMAP=`: compile with the extended keymap file `extended_keymaps/extended_keymap_.c` -* `make COMMON=true KEYMAP=`: compile with the common keymap file `common_keymaps/keymap_.c` -* `make dfu`: build and flash the layout to the PCB -* `make dfu-force`: build and force-flash the layout to the PCB (may be require for first flash) - -Generally, the instructions to flash the PCB are as follows: - -1. Make changes to the appropriate keymap file -2. Save the file -3. `make clean` -4. Press the reset button on the PCB/press the key with the `RESET` keycode -5. `make dfu` - use the necessary `KEYMAP=` and/or `COMMON=true` arguments here. - -## Extended keymap - -### Keymap - -Unlike the common keymap, prefixing the keycodes with `KC_` is required. A full list of the keycodes is available [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keycode.txt). For the keycodes available only in the extended keymap, see this [header file](https://github.com/jackhumbert/tmk_keyboard/blob/master/keyboard/planck/extended_keymap_common.h). - -You can use modifiers with keycodes like this: - - LCTL(KC_C) - -Which will generate Ctrl+c. These are daisy-chainable, meaning you can do things like: - - LCTL(LALT(KC_C)) - -That will generate Ctrl+Alt+c. The entire list of these functions is here: - -* `LCTL()`: Left control -* `LSFT()` / `S()`: Left shift -* `LALT()`: Left alt/opt -* `LGUI()`: Left win/cmd -* `RCTL()`: Right control -* `RSFT()`: Right shift -* `RALT()`: Right alt/opt -* `RGUI()`: Right win/cmd - -`S(KC_1)`-like entries are useful in writing keymaps for the Planck. - -### Other keycodes - -A number of other keycodes have been added that you may find useful: - -* `CM_`: the Colemak equivalent of a key (in place of `KC_`), when using Colemak in software (`CM_O` generates `KC_SCLN`) -* `RESET`: jump to bootloader for flashing (same as press the reset button) -* `BL_STEP`: step through the backlight brightnesses -* `BL_<0-15>`: set backlight brightness to 0-15 -* `BL_DEC`: lower the backlight brightness -* `BL_INC`: raise the backlight brightness -* `BL_TOGG`: toggle the backlight on/off - -### Function layers - -The extended keymap extends the number of function layers from 32 to the near-infinite value of 256. Rather than using `FN` notation (still available, but limited to `FN0`-`FN31`), you can use the `FUNC()` notation. `F()` is a shortcut for this. - -The function actions are unchanged, and you can see the full list of them [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/common/action_code.h). They are explained in detail [here](https://github.com/jackhumbert/tmk_keyboard/blob/master/doc/keymap.md#2-action). - -### Macros - -Macros have been setup in the `extended_keymaps/extended_keymaps_default.c` file so that you can use `M()` to access a macro in the `action_get_macro` section on your keymap. The switch/case structure you see here is required, and is setup for `M(0)` - you'll need to copy and paste the code to look like this (e.g. to support `M(3)`): - - switch(id) { - case 0: - return MACRODOWN(TYPE(KC_A), END); - break; - case 1: - return MACRODOWN(TYPE(KC_B), END); - break; - case 2: - return MACRODOWN(TYPE(KC_C), END); - break; - case 3: - return MACRODOWN(TYPE(KC_D), END); - break; - } - return MACRO_NONE; - -`MACRODOWN()` is a shortcut for `(record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE)` which tells the macro to execute when the key is pressed. Without this, the macro will be executed on both the down and up stroke. - -[cygwin]: https://www.cygwin.com/ -[mingw]: http://www.mingw.org/ -[mhv]: https://infernoembedded.com/products/avr-tools -[winavr]: http://winavr.sourceforge.net/ -[crosspack]: http://www.obdev.at/products/crosspack/index.html -[dfu-prog]: http://dfu-programmer.sourceforge.net/ diff --git a/keyboard/preonic/README.md b/keyboard/preonic/README.md index ee824d26e0..3ba0cc1527 100644 --- a/keyboard/preonic/README.md +++ b/keyboard/preonic/README.md @@ -2,54 +2,29 @@ Planck keyboard firmware ====================== DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). -## Extended Keymap -If you include extended_keymap_common.h instead of keymap_common.h at the top of your file, you'll have access to a bunch of goodies: +## Quantum MK Firmware -- Use `LSFT()`, `LCTL()`, et. al. (listed in extended_keymap_common.h) as modifiers for keys (daisy-chain-able) -- Use `FUNC(1)` instead of `FN1` (etc.) to access the function layers beyond the 32 function layer limit -- Use `CM_F` instead of `KC_F` to get the ColeMak equivilent for shortcuts (maps backwards) -- Use `MACRODOWN()` instead of `MACRO()` to easily make a keydown macro (`CM_*` works here too) +For the full Quantum feature list, see [the parent README.md](/README.md). -### Some notes on usage: +## Building -- The `KEYMAP()` macro is unable to be used due to the bitwise modifications that take place - refer to extended_keymap_jack.c to see how to set things up with the `KC_` prefix -- Keep an eye on the Makefile - this needs to include the correct files to work -- Don't forget to use `const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {` instead of the 8bit equivilent - -## Build - -Follow [this guide](http://deskthority.net/workshop-f7/how-to-build-your-very-own-keyboard-firmware-t7177.html) to setup your development environment before anything else. Abbreviated instructions are provide at the [bottom of this document](https://github.com/rswiernik/tmk_keyboard/tree/rswiernik_dev/keyboard/planck#environment-setup) - -Download the whole firmware [here](https://github.com/jackhumbert/tmk_keyboard/archive/master.zip) and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex that you can load with the Teensy app onto your Planck (once you've hit reset/shorted GND & RST). +Download or clone the whole firmware and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. Depending on which keymap you would like to use, you will have to compile slightly differently. -####Default -To build with the default keymap, simply move to the tmk\_keyboard/keyboard/planck/ and run `make` as follows: -``` -$ make -``` +### Default +To build with the default keymap, simply run `make`. -## Keymap -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `keymap_.c` and see keymap document (you can find in top README.md) and existent keymap files. - -####**Extended Keymaps** +### Other Keymaps +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` and see keymap document (you can find in top README.md) and existent keymap files. -To build the firmware binary hex file with an extended keymap just do `make` with `KEYMAP` option like: +To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: ``` -$ make KEYMAP=[common|jack|] +$ make KEYMAP=[default|jack|] ``` -_The only applicable keymaps will work with this option._ Extended keymaps follow the format **__extended\_keymap\_\.c__** +Keymaps follow the format **__.c__** and are stored in the `keymaps` folder. -####**Common Keymaps** - -Building with a common keymap is as simple as adding the COMMON option. Note that only -``` -$ make KEYMAP=[common|jack|] COMMON=true -``` -_The only applicable keymaps will work with this option._ Common keymaps follow the format **__keymap\_\.c__** - -## Notable TMK forks (which some of the keymap files are from) +### Notable forks (which some of the keymap files are from) - [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) - [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c) - [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck) diff --git a/keyboard/preonic/__avr_gdbinit b/keyboard/preonic/__avr_gdbinit deleted file mode 100644 index afc51e6d19..0000000000 --- a/keyboard/preonic/__avr_gdbinit +++ /dev/null @@ -1,6 +0,0 @@ -define reset -SIGNAL SIGHUP -end -file planck_lufa.elf -target remote localhost:4242 -break main diff --git a/keyboard/preonic/analog.c b/keyboard/preonic/analog.c deleted file mode 100644 index 49b84ee0e8..0000000000 --- a/keyboard/preonic/analog.c +++ /dev/null @@ -1,53 +0,0 @@ -// Simple analog to digitial conversion - -#include -#include -#include -#include "analog.h" - - -static uint8_t aref = (1<= 12) return 0; - return adc_read(pgm_read_byte(pin_to_mux + pin)); -#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) - if (pin >= 8) return 0; - return adc_read(pin); -#else - return 0; -#endif -} - -// Mux input -int16_t adc_read(uint8_t mux) -{ -#if defined(__AVR_AT90USB162__) - return 0; -#else - uint8_t low; - - ADCSRA = (1< - -void analogReference(uint8_t mode); -int16_t analogRead(uint8_t pin); -int16_t adc_read(uint8_t mux); - -#define ADC_REF_POWER (1< -#include -#include -#include - -#define PI 3.14159265 - -void delay_us(int count) { - while(count--) { - _delay_us(1); - } -} - -int voices = 0; -double frequency = 0; -int volume = 0; -int position = 0; - -double frequencies[8] = {0, 0, 0, 0, 0, 0, 0, 0}; -int volumes[8] = {0, 0, 0, 0, 0, 0, 0, 0}; -bool sliding = false; -#define RANGE 1000 -volatile int i=0; //elements of the wave - - -void beeps() { - play_notes(); -} - -void send_freq(double freq, int vol) { - int duty = (((double)F_CPU) / freq); - ICR3 = duty; // Set max to the period - OCR3A = duty >> (0x10 - vol); // Set compare to half the period -} - -void stop_all_notes() { - voices = 0; - TCCR3A = 0; - TCCR3B = 0; - frequency = 0; - volume = 0; - - for (int i = 0; i < 8; i++) { - frequencies[i] = 0; - volumes[i] = 0; - } -} - -void stop_note(double freq) { - for (int i = 7; i >= 0; i--) { - if (frequencies[i] == freq) { - frequencies[i] = 0; - volumes[i] = 0; - for (int j = i; (j < 7); j++) { - frequencies[j] = frequencies[j+1]; - frequencies[j+1] = 0; - volumes[j] = volumes[j+1]; - volumes[j+1] = 0; - } - } - } - voices--; - if (voices < 0) - voices = 0; - if (voices == 0) { - TCCR3A = 0; - TCCR3B = 0; - frequency = 0; - volume = 0; - } else { - double freq = frequencies[voices - 1]; - int vol = volumes[voices - 1]; - if (frequency < freq) { - sliding = true; - for (double f = frequency; f <= freq; f += ((freq - frequency) / 500.0)) { - send_freq(f, vol); - } - sliding = false; - } else if (frequency > freq) { - sliding = true; - for (double f = frequency; f >= freq; f -= ((frequency - freq) / 500.0)) { - send_freq(f, vol); - } - sliding = false; - } - send_freq(freq, vol); - frequency = freq; - volume = vol; - } -} - -void init_notes() { - // TCCR1A = (1 << COM1A1) | (0 << COM1A0) | (1 << WGM11) | (1 << WGM10); - // TCCR1B = (1 << COM1B1) | (0 << COM1A0) | (1 << WGM13) | (1 << WGM12) | (0 << CS12) | (0 << CS11) | (1 << CS10); - - // DDRC |= (1<<6); - - // TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); - // TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (0 << CS31) | (1 << CS30); - - // ICR3 = 0xFFFF; - // OCR3A = (int)((float)wave[i]*ICR3/RANGE); //go to next array element - - - // cli(); - - // /* Enable interrupt on timer2 == 127, with clk/8 prescaler. At 16MHz, - // this gives a timer interrupt at 15625Hz. */ - // TIMSK3 = (1 << OCIE3A); - - // /* clear/reset timer on match */ - // // TCCR3A = 1<> 8) & 0x00FF) -// #define lowByte(c) (c & 0x00FF) - -ISR(TIMER3_COMPA_vect) { - - if (ICR3 > 0 && !sliding) { - switch (position) { - case 0: { - int duty = (((double)F_CPU) / (frequency)); - ICR3 = duty; // Set max to the period - OCR3A = duty >> 1; // Set compare to half the period - break; - } - case 1: { - int duty = (((double)F_CPU) / (frequency*2)); - ICR3 = duty; // Set max to the period - OCR3A = duty >> 1; // Set compare to half the period - break; - } - case 2: { - int duty = (((double)F_CPU) / (frequency*3)); - ICR3 = duty; // Set max to the period - OCR3A = duty >> 1; // Set compare to half the period - break; - } - } - position = (position + 1) % 3; - } -// /* OCR2A has been cleared, per TCCR2A above */ -// // OCR3A = 127; - -// // pos1 += incr1; -// // pos2 += incr2; -// // pos3 += incr3; - -// // sample = sinewave[highByte(pos1)] + sinewave[highByte(pos2)] + sinewave[highByte(pos3)]; - -// // OCR3A = sample; - - -// OCR3A=pgm_read_byte(&sinewave[pos1]); -// pos1++; -// // PORTC &= ~(1<<6); - -// /* buffered, 1x gain, active mode */ -// // SPDR = highByte(sample) | 0x70; -// // while (!(SPSR & (1< 0) { - DDRC |= (1<<6); - - TCCR3A = (1 << COM3A1) | (0 << COM3A0) | (1 << WGM31) | (0 << WGM30); - TCCR3B = (1 << WGM33) | (1 << WGM32) | (0 << CS32) | (1 << CS31) | (0 << CS30); - - if (frequency != 0) { - if (frequency < freq) { - for (double f = frequency; f <= freq; f += ((freq - frequency) / 500.0)) { - send_freq(f, vol); - } - } else if (frequency > freq) { - for (double f = frequency; f >= freq; f -= ((frequency - freq) / 500.0)) { - send_freq(f, vol); - } - } - } - send_freq(freq, vol); - frequency = freq; - volume = vol; - - frequencies[voices] = frequency; - volumes[voices] = volume; - voices++; - } - // ICR3 = 0xFFFF; - // for (int i = 0; i < 10000; i++) { - // OCR3A = round((sin(i*freq)*.5)+.5)*0xFFFF; - // // _delay_us(50); - // } - - // TCCR3A = 0; - // TCCR3B = 0; -} - -// void note(int x, float length) { -// DDRC |= (1<<6); -// int t = (int)(440*pow(2,-x/12.0)); // starting note -// for (int y = 0; y < length*1000/t; y++) { // note length -// PORTC |= (1<<6); -// delay_us(t); -// PORTC &= ~(1<<6); -// delay_us(t); -// } -// PORTC &= ~(1<<6); -// } - -// void true_note(float x, float y, float length) { -// for (uint32_t i = 0; i < length * 50; i++) { -// uint32_t v = (uint32_t) (round(sin(PI*2*i*640000*pow(2, x/12.0))*.5+1 + sin(PI*2*i*640000*pow(2, y/12.0))*.5+1) / 2 * pow(2, 8)); -// for (int u = 0; u < 8; u++) { -// if (v & (1 << u) && !(PORTC&(1<<6))) -// PORTC |= (1<<6); -// else if (PORTC&(1<<6)) -// PORTC &= ~(1<<6); -// } -// } -// PORTC &= ~(1<<6); -// } \ No newline at end of file diff --git a/keyboard/preonic/beeps.h b/keyboard/preonic/beeps.h deleted file mode 100644 index 378983c605..0000000000 --- a/keyboard/preonic/beeps.h +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include -#include -#include - -void note(int x, float length); -void beeps(); -void true_note(float x, float y, float length); -void play_note(double freq, int vol); -void stop_note(double freq); -void stop_all_notes(); -void init_notes(); \ No newline at end of file diff --git a/keyboard/preonic/config.h b/keyboard/preonic/config.h index cad269c9d4..5528667fa7 100644 --- a/keyboard/preonic/config.h +++ b/keyboard/preonic/config.h @@ -18,11 +18,11 @@ along with this program. If not, see . #ifndef CONFIG_H #define CONFIG_H -#include "config_definitions.h" +#include "config_common.h" /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED -#define PRODUCT_ID 0x6062 +#define PRODUCT_ID 0x6061 #define DEVICE_VER 0x0001 #define MANUFACTURER Ortholinear Keyboards #define PRODUCT The Preonic Keyboard @@ -34,7 +34,10 @@ along with this program. If not, see . /* Planck PCB default pin-out */ #define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 } -#define ROWS (int []){ D1, D0, D5, B5, B6 } +#define ROWS (int []){ D2, D5, B5, B6, D3 } + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST @@ -55,6 +58,15 @@ along with this program. If not, see . keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \ ) +/* ws2812 RGB LED */ +#define ws2812_PORTREG PORTD +#define ws2812_DDRREG DDRD +#define ws2812_pin PD1 +#define RGBLED_NUM 28 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + /* * Feature disable options * These options are also useful to firmware size reduction. diff --git a/keyboard/preonic/config_definitions.h b/keyboard/preonic/config_definitions.h deleted file mode 100644 index fd138b8841..0000000000 --- a/keyboard/preonic/config_definitions.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef CONFIG_DEFINITIONS_H -#define CONFIG_DEFINITIONS_H - -#define B0 0x20 -#define B1 0x21 -#define B2 0x22 -#define B3 0x23 -#define B4 0x24 -#define B5 0x25 -#define B6 0x26 -#define B7 0x27 -#define C0 0x30 -#define C1 0x31 -#define C2 0x32 -#define C3 0x33 -#define C4 0x34 -#define C5 0x35 -#define C6 0x36 -#define C7 0x37 -#define D0 0x40 -#define D1 0x41 -#define D2 0x42 -#define D3 0x43 -#define D4 0x44 -#define D5 0x45 -#define D6 0x46 -#define D7 0x47 -#define E0 0x50 -#define E1 0x51 -#define E2 0x52 -#define E3 0x53 -#define E4 0x54 -#define E5 0x55 -#define E6 0x56 -#define E7 0x57 -#define F0 0x60 -#define F1 0x61 -#define F2 0x62 -#define F3 0x63 -#define F4 0x64 -#define F5 0x65 -#define F6 0x66 -#define F7 0x67 - - - - - -#endif - diff --git a/keyboard/preonic/extended_keymap_common.c b/keyboard/preonic/extended_keymap_common.c deleted file mode 100644 index 4fa80de7cf..0000000000 --- a/keyboard/preonic/extended_keymap_common.c +++ /dev/null @@ -1,216 +0,0 @@ -/* -Copyright 2012,2013 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include "extended_keymap_common.h" -#include "report.h" -#include "keycode.h" -#include "action_layer.h" -#include "action.h" -#include "action_macro.h" -#include "debug.h" -#include "backlight.h" -#include "keymap_midi.h" -#include - -static action_t keycode_to_action(uint16_t keycode); - -/* converts key to action */ -action_t action_for_key(uint8_t layer, keypos_t key) -{ - // 16bit keycodes - important - uint16_t keycode = keymap_key_to_keycode(layer, key); - - if (keycode >= 0x0100 && keycode < 0x2000) { - // Has a modifier - action_t action; - // Split it up - action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); - return action; - } else if (keycode >= 0x2000 && keycode < 0x3000) { - // Is a shortcut for function layer, pull last 12bits - return keymap_func_to_action(keycode & 0xFFF); - } else if (keycode >= 0x3000 && keycode < 0x4000) { - action_t action; - action.code = ACTION_MACRO(keycode & 0xFF); - return action; - } else if (keycode >= BL_0 & keycode <= BL_15) { - action_t action; - action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F); - return action; - } else if (keycode == BL_DEC) { - action_t action; - action.code = ACTION_BACKLIGHT_DECREASE(); - return action; - } else if (keycode == BL_INC) { - action_t action; - action.code = ACTION_BACKLIGHT_INCREASE(); - return action; - } else if (keycode == BL_TOGG) { - action_t action; - action.code = ACTION_BACKLIGHT_TOGGLE(); - return action; - } else if (keycode == BL_STEP) { - action_t action; - action.code = ACTION_BACKLIGHT_STEP(); - return action; - } else if (keycode == RESET) { - bootloader_jump(); - return; - } else if (keycode == DEBUG) { - print("\nDEBUG: enabled.\n"); - debug_enable = true; - return; - } else if (keycode >= 0x6000 && keycode < 0x7000) { - action_t action; - action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8); - return action; - } - - switch (keycode) { - case KC_FN0 ... KC_FN31: - return keymap_fn_to_action(keycode); -#ifdef BOOTMAGIC_ENABLE - case KC_CAPSLOCK: - case KC_LOCKING_CAPS: - if (keymap_config.swap_control_capslock || keymap_config.capslock_to_control) { - return keycode_to_action(KC_LCTL); - } - return keycode_to_action(keycode); - case KC_LCTL: - if (keymap_config.swap_control_capslock) { - return keycode_to_action(KC_CAPSLOCK); - } - return keycode_to_action(KC_LCTL); - case KC_LALT: - if (keymap_config.swap_lalt_lgui) { - if (keymap_config.no_gui) { - return keycode_to_action(ACTION_NO); - } - return keycode_to_action(KC_LGUI); - } - return keycode_to_action(KC_LALT); - case KC_LGUI: - if (keymap_config.swap_lalt_lgui) { - return keycode_to_action(KC_LALT); - } - if (keymap_config.no_gui) { - return keycode_to_action(ACTION_NO); - } - return keycode_to_action(KC_LGUI); - case KC_RALT: - if (keymap_config.swap_ralt_rgui) { - if (keymap_config.no_gui) { - return keycode_to_action(ACTION_NO); - } - return keycode_to_action(KC_RGUI); - } - return keycode_to_action(KC_RALT); - case KC_RGUI: - if (keymap_config.swap_ralt_rgui) { - return keycode_to_action(KC_RALT); - } - if (keymap_config.no_gui) { - return keycode_to_action(ACTION_NO); - } - return keycode_to_action(KC_RGUI); - case KC_GRAVE: - if (keymap_config.swap_grave_esc) { - return keycode_to_action(KC_ESC); - } - return keycode_to_action(KC_GRAVE); - case KC_ESC: - if (keymap_config.swap_grave_esc) { - return keycode_to_action(KC_GRAVE); - } - return keycode_to_action(KC_ESC); - case KC_BSLASH: - if (keymap_config.swap_backslash_backspace) { - return keycode_to_action(KC_BSPACE); - } - return keycode_to_action(KC_BSLASH); - case KC_BSPACE: - if (keymap_config.swap_backslash_backspace) { - return keycode_to_action(KC_BSLASH); - } - return keycode_to_action(KC_BSPACE); -#endif - default: - return keycode_to_action(keycode); - } -} - - -/* Macro */ -__attribute__ ((weak)) -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - return MACRO_NONE; -} - -/* Function */ -__attribute__ ((weak)) -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) -{ -} - -/* translates keycode to action */ -static action_t keycode_to_action(uint16_t keycode) -{ - action_t action; - switch (keycode) { - case KC_A ... KC_EXSEL: - case KC_LCTRL ... KC_RGUI: - action.code = ACTION_KEY(keycode); - break; - case KC_SYSTEM_POWER ... KC_SYSTEM_WAKE: - action.code = ACTION_USAGE_SYSTEM(KEYCODE2SYSTEM(keycode)); - break; - case KC_AUDIO_MUTE ... KC_WWW_FAVORITES: - action.code = ACTION_USAGE_CONSUMER(KEYCODE2CONSUMER(keycode)); - break; - case KC_MS_UP ... KC_MS_ACCEL2: - action.code = ACTION_MOUSEKEY(keycode); - break; - case KC_TRNS: - action.code = ACTION_TRANSPARENT; - break; - default: - action.code = ACTION_NO; - break; - } - return action; -} - - -/* translates key to keycode */ -uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key) -{ - // Read entire word (16bits) - return pgm_read_word(&keymaps[(layer)][(key.row)][(key.col)]); -} - -/* translates Fn keycode to action */ -action_t keymap_fn_to_action(uint16_t keycode) -{ - return (action_t){ .code = pgm_read_word(&fn_actions[FN_INDEX(keycode)]) }; -} - -action_t keymap_func_to_action(uint16_t keycode) -{ - // For FUNC without 8bit limit - return (action_t){ .code = pgm_read_word(&fn_actions[(int)keycode]) }; -} diff --git a/keyboard/preonic/extended_keymap_common.h b/keyboard/preonic/extended_keymap_common.h deleted file mode 100644 index 7ccfa1b039..0000000000 --- a/keyboard/preonic/extended_keymap_common.h +++ /dev/null @@ -1,181 +0,0 @@ -/* -Copyright 2012,2013 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#ifndef KEYMAP_H -#define KEYMAP_H - -#include -#include -#include "action.h" -#include -#include "keycode.h" -#include "keymap.h" -#include "action_macro.h" -#include "report.h" -#include "host.h" -// #include "print.h" -#include "debug.h" - -#ifdef BOOTMAGIC_ENABLE -/* NOTE: Not portable. Bit field order depends on implementation */ -typedef union { - uint16_t raw; - struct { - bool swap_control_capslock:1; - bool capslock_to_control:1; - bool swap_lalt_lgui:1; - bool swap_ralt_rgui:1; - bool no_gui:1; - bool swap_grave_esc:1; - bool swap_backslash_backspace:1; - bool nkro:1; - }; -} keymap_config_t; -keymap_config_t keymap_config; -#endif - - -/* translates key to keycode */ -uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key); - -/* translates Fn keycode to action */ -action_t keymap_fn_to_action(uint16_t keycode); - -/* translates Fn keycode to action */ -action_t keymap_func_to_action(uint16_t keycode); - -extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS]; -extern const uint16_t fn_actions[]; - -// Ability to use mods in layouts -#define LCTL(kc) kc | 0x0100 -#define LSFT(kc) kc | 0x0200 -#define LALT(kc) kc | 0x0400 -#define LGUI(kc) kc | 0x0800 -#define RCTL(kc) kc | 0x1100 -#define RSFT(kc) kc | 0x1200 -#define RALT(kc) kc | 0x1400 -#define RGUI(kc) kc | 0x1800 - -// Alias for function layers than expand past FN31 -#define FUNC(kc) kc | 0x2000 - -// Aliases -#define S(kc) LSFT(kc) -#define F(kc) FUNC(kc) - -// For software implementation of colemak -#define CM_Q KC_Q -#define CM_W KC_W -#define CM_F KC_E -#define CM_P KC_R -#define CM_G KC_T -#define CM_J KC_Y -#define CM_L KC_U -#define CM_U KC_I -#define CM_Y KC_O -#define CM_SCLN KC_P - -#define CM_A KC_A -#define CM_R KC_S -#define CM_S KC_D -#define CM_T KC_F -#define CM_D KC_G -#define CM_H KC_H -#define CM_N KC_J -#define CM_E KC_K -#define CM_I KC_L -#define CM_O KC_SCLN - -#define CM_Z KC_Z -#define CM_X KC_X -#define CM_C KC_C -#define CM_V KC_V -#define CM_B KC_B -#define CM_K KC_N -#define CM_M KC_M -#define CM_COMM KC_COMM -#define CM_DOT KC_DOT -#define CM_SLSH KC_SLSH - -// Make it easy to support these in macros -#define KC_CM_Q CM_Q -#define KC_CM_W CM_W -#define KC_CM_F CM_F -#define KC_CM_P CM_P -#define KC_CM_G CM_G -#define KC_CM_J CM_J -#define KC_CM_L CM_L -#define KC_CM_U CM_U -#define KC_CM_Y CM_Y -#define KC_CM_SCLN CM_SCLN - -#define KC_CM_A CM_A -#define KC_CM_R CM_R -#define KC_CM_S CM_S -#define KC_CM_T CM_T -#define KC_CM_D CM_D -#define KC_CM_H CM_H -#define KC_CM_N CM_N -#define KC_CM_E CM_E -#define KC_CM_I CM_I -#define KC_CM_O CM_O - -#define KC_CM_Z CM_Z -#define KC_CM_X CM_X -#define KC_CM_C CM_C -#define KC_CM_V CM_V -#define KC_CM_B CM_B -#define KC_CM_K CM_K -#define KC_CM_M CM_M -#define KC_CM_COMM CM_COMM -#define KC_CM_DOT CM_DOT -#define KC_CM_SLSH CM_SLSH - -#define M(kc) kc | 0x3000 - -#define MACRODOWN(...) (record->event.pressed ? MACRO(__VA_ARGS__) : MACRO_NONE) - -#define BL_ON 0x4009 -#define BL_OFF 0x4000 -#define BL_0 0x4000 -#define BL_1 0x4001 -#define BL_2 0x4002 -#define BL_3 0x4003 -#define BL_4 0x4004 -#define BL_5 0x4005 -#define BL_6 0x4006 -#define BL_7 0x4007 -#define BL_8 0x4008 -#define BL_9 0x4009 -#define BL_10 0x400A -#define BL_11 0x400B -#define BL_12 0x400C -#define BL_13 0x400D -#define BL_14 0x400E -#define BL_15 0x400F -#define BL_DEC 0x4010 -#define BL_INC 0x4011 -#define BL_TOGG 0x4012 -#define BL_STEP 0x4013 - -#define RESET 0x5000 -#define DEBUG 0x5001 - -#define MIDI(n) n | 0x6000 - -#endif diff --git a/keyboard/preonic/extended_keymaps/extended_keymap_default.c b/keyboard/preonic/extended_keymaps/extended_keymap_default.c deleted file mode 100644 index b52f60fd08..0000000000 --- a/keyboard/preonic/extended_keymaps/extended_keymap_default.c +++ /dev/null @@ -1,70 +0,0 @@ -#include "extended_keymap_common.h" -#include "backlight.h" -#include "lufa.h" -#include "debug.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[4] = { /* TENKEY */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, - {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -} -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - // MACRODOWN only works in this function - switch(id) { - case 0: - if (record->event.pressed) { - register_code(KC_RSFT); - midi_send_noteon(&midi_device, 1, 64, 127); - backlight_step(); - } else { - unregister_code(KC_RSFT); - midi_send_noteoff(&midi_device, 1, 64, 127); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/preonic/extended_keymaps/extended_keymap_lock.c b/keyboard/preonic/extended_keymaps/extended_keymap_lock.c deleted file mode 100644 index ec7bc776ac..0000000000 --- a/keyboard/preonic/extended_keymaps/extended_keymap_lock.c +++ /dev/null @@ -1,81 +0,0 @@ -#include "extended_keymap_common.h" -#include "backlight.h" -#include "action_layer.h" -#include "keymap_midi.h" -#include "beeps.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[0] = { /* Qwerty */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} - // Space is repeated to accommadate for both spacebar wiring positions -}, -[1] = { /* Colemak */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC}, - {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, - {KC_FN3, KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[2] = { /* RAISE */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, - {KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(1), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[3] = { /* LOWER */ - {KC_GRV, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC}, - {KC_TRNS, FUNC(3), FUNC(4), RESET, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), S(KC_RBRC), S(KC_BSLS)}, - {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS}, - {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, FUNC(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY} -}, -[4] = { /* TENKEY */ - {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC}, - {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_KP_7, KC_KP_8, KC_KP_9, KC_P, KC_BSPC}, - {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_KP_4, KC_KP_5, KC_KP_6, KC_SCLN, KC_QUOT}, - {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_KP_1, KC_KP_2, KC_KP_3, KC_SLSH, KC_ENT}, - {KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_SPC, KC_SPC, KC_KP_0, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} -}, -[5] = { - { MIDI12 }, - { MIDI12 }, - { MIDI12 }, - { MIDI12 }, - {M(0), KC_LCTL, KC_LALT, KC_LGUI, FUNC(2), KC_SPC, KC_SPC, FUNC(1), MIDI, MIDI, MIDI, MIDI} -} - -}; - -const uint16_t PROGMEM fn_actions[] = { - [1] = ACTION_LAYER_MOMENTARY(2), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(3), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(0), - [4] = ACTION_DEFAULT_LAYER_SET(1), - -}; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - switch(id) { - case 0: - if (record->event.pressed) { - // register_code(KC_RSFT); - backlight_set(BACKLIGHT_LEVELS); - default_layer_and(0); - default_layer_or((1<<5)); - } else { - // unregister_code(KC_RSFT); - backlight_set(0); - default_layer_and(0); - default_layer_or(0); - } - break; - } - return MACRO_NONE; -}; diff --git a/keyboard/preonic/keymap_midi.c b/keyboard/preonic/keymap_midi.c deleted file mode 100644 index a0fa59990c..0000000000 --- a/keyboard/preonic/keymap_midi.c +++ /dev/null @@ -1,110 +0,0 @@ -/* -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 . -*/ - -#include "extended_keymap_common.h" -#include "keymap_midi.h" -#include - -uint8_t starting_note = 0x0C; -int offset = 7; - -void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) -{ - if (id != 0) { - if (record->event.pressed) { - midi_send_noteon(&midi_device, opt, (id & 0xFF), 127); - } else { - midi_send_noteoff(&midi_device, opt, (id & 0xFF), 127); - } - } - - if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { - if (record->event.pressed) { - starting_note++; - play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC); - midi_send_cc(&midi_device, 0, 0x7B, 0); - midi_send_cc(&midi_device, 1, 0x7B, 0); - midi_send_cc(&midi_device, 2, 0x7B, 0); - midi_send_cc(&midi_device, 3, 0x7B, 0); - midi_send_cc(&midi_device, 4, 0x7B, 0); - return; - } else { - stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1))); - stop_all_notes(); - return; - } - } - if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { - if (record->event.pressed) { - starting_note--; - play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1)), 0xC); - midi_send_cc(&midi_device, 0, 0x7B, 0); - midi_send_cc(&midi_device, 1, 0x7B, 0); - midi_send_cc(&midi_device, 2, 0x7B, 0); - midi_send_cc(&midi_device, 3, 0x7B, 0); - midi_send_cc(&midi_device, 4, 0x7B, 0); - return; - } else { - stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[0 + offset])/12.0+(MATRIX_ROWS - 1))); - stop_all_notes(); - return; - } - } - - if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - offset++; - midi_send_cc(&midi_device, 0, 0x7B, 0); - midi_send_cc(&midi_device, 1, 0x7B, 0); - midi_send_cc(&midi_device, 2, 0x7B, 0); - midi_send_cc(&midi_device, 3, 0x7B, 0); - midi_send_cc(&midi_device, 4, 0x7B, 0); - stop_all_notes(); - for (int i = 0; i <= 7; i++) { - play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC); - _delay_us(80000); - stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1))); - _delay_us(8000); - } - return; - } - if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { - offset--; - midi_send_cc(&midi_device, 0, 0x7B, 0); - midi_send_cc(&midi_device, 1, 0x7B, 0); - midi_send_cc(&midi_device, 2, 0x7B, 0); - midi_send_cc(&midi_device, 3, 0x7B, 0); - midi_send_cc(&midi_device, 4, 0x7B, 0); - stop_all_notes(); - for (int i = 0; i <= 7; i++) { - play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1)), 0xC); - _delay_us(80000); - stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[i + offset])/12.0+(MATRIX_ROWS - 1))); - _delay_us(8000); - } - return; - } - - if (record->event.pressed) { - // midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); - midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127); - play_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); - } else { - // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); - midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127); - stop_note(((double)261.6)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); - } -} \ No newline at end of file diff --git a/keyboard/preonic/keymap_midi.h b/keyboard/preonic/keymap_midi.h deleted file mode 100644 index c5917f884e..0000000000 --- a/keyboard/preonic/keymap_midi.h +++ /dev/null @@ -1,220 +0,0 @@ -/* -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 . -*/ - -#ifndef KEYMAP_MIDI_H -#define KEYMAP_MIDI_H - -#define MIDI 0x6000 -#define MIDI12 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000, 0x6000 - -#define CHNL(note, channel) (note + (channel << 8)) - -#define SCALE (int []){ 0 + (12*0), 2 + (12*0), 4 + (12*0), 5 + (12*0), 7 + (12*0), 9 + (12*0), 11 + (12*0), \ - 0 + (12*1), 2 + (12*1), 4 + (12*1), 5 + (12*1), 7 + (12*1), 9 + (12*1), 11 + (12*1), \ - 0 + (12*2), 2 + (12*2), 4 + (12*2), 5 + (12*2), 7 + (12*2), 9 + (12*2), 11 + (12*2), \ - 0 + (12*3), 2 + (12*3), 4 + (12*3), 5 + (12*3), 7 + (12*3), 9 + (12*3), 11 + (12*3), \ - 0 + (12*4), 2 + (12*4), 4 + (12*4), 5 + (12*4), 7 + (12*4), 9 + (12*4), 11 + (12*4), } - -#define N_CN1 (0x600C + (12 * -1) + 0 ) -#define N_CN1S (0x600C + (12 * -1) + 1 ) -#define N_DN1F (0x600C + (12 * -1) + 1 ) -#define N_DN1 (0x600C + (12 * -1) + 2 ) -#define N_DN1S (0x600C + (12 * -1) + 3 ) -#define N_EN1F (0x600C + (12 * -1) + 3 ) -#define N_EN1 (0x600C + (12 * -1) + 4 ) -#define N_FN1 (0x600C + (12 * -1) + 5 ) -#define N_FN1S (0x600C + (12 * -1) + 6 ) -#define N_GN1F (0x600C + (12 * -1) + 6 ) -#define N_GN1 (0x600C + (12 * -1) + 7 ) -#define N_GN1S (0x600C + (12 * -1) + 8 ) -#define N_AN1F (0x600C + (12 * -1) + 8 ) -#define N_AN1 (0x600C + (12 * -1) + 9 ) -#define N_AN1S (0x600C + (12 * -1) + 10) -#define N_BN1F (0x600C + (12 * -1) + 10) -#define N_BN1 (0x600C + (12 * -1) + 11) -#define N_C0 (0x600C + (12 * 0) + 0 ) -#define N_C0S (0x600C + (12 * 0) + 1 ) -#define N_D0F (0x600C + (12 * 0) + 1 ) -#define N_D0 (0x600C + (12 * 0) + 2 ) -#define N_D0S (0x600C + (12 * 0) + 3 ) -#define N_E0F (0x600C + (12 * 0) + 3 ) -#define N_E0 (0x600C + (12 * 0) + 4 ) -#define N_F0 (0x600C + (12 * 0) + 5 ) -#define N_F0S (0x600C + (12 * 0) + 6 ) -#define N_G0F (0x600C + (12 * 0) + 6 ) -#define N_G0 (0x600C + (12 * 0) + 7 ) -#define N_G0S (0x600C + (12 * 0) + 8 ) -#define N_A0F (0x600C + (12 * 0) + 8 ) -#define N_A0 (0x600C + (12 * 0) + 9 ) -#define N_A0S (0x600C + (12 * 0) + 10) -#define N_B0F (0x600C + (12 * 0) + 10) -#define N_B0 (0x600C + (12 * 0) + 11) -#define N_C1 (0x600C + (12 * 1) + 0 ) -#define N_C1S (0x600C + (12 * 1) + 1 ) -#define N_D1F (0x600C + (12 * 1) + 1 ) -#define N_D1 (0x600C + (12 * 1) + 2 ) -#define N_D1S (0x600C + (12 * 1) + 3 ) -#define N_E1F (0x600C + (12 * 1) + 3 ) -#define N_E1 (0x600C + (12 * 1) + 4 ) -#define N_F1 (0x600C + (12 * 1) + 5 ) -#define N_F1S (0x600C + (12 * 1) + 6 ) -#define N_G1F (0x600C + (12 * 1) + 6 ) -#define N_G1 (0x600C + (12 * 1) + 7 ) -#define N_G1S (0x600C + (12 * 1) + 8 ) -#define N_A1F (0x600C + (12 * 1) + 8 ) -#define N_A1 (0x600C + (12 * 1) + 9 ) -#define N_A1S (0x600C + (12 * 1) + 10) -#define N_B1F (0x600C + (12 * 1) + 10) -#define N_B1 (0x600C + (12 * 1) + 11) -#define N_C2 (0x600C + (12 * 2) + 0 ) -#define N_C2S (0x600C + (12 * 2) + 1 ) -#define N_D2F (0x600C + (12 * 2) + 1 ) -#define N_D2 (0x600C + (12 * 2) + 2 ) -#define N_D2S (0x600C + (12 * 2) + 3 ) -#define N_E2F (0x600C + (12 * 2) + 3 ) -#define N_E2 (0x600C + (12 * 2) + 4 ) -#define N_F2 (0x600C + (12 * 2) + 5 ) -#define N_F2S (0x600C + (12 * 2) + 6 ) -#define N_G2F (0x600C + (12 * 2) + 6 ) -#define N_G2 (0x600C + (12 * 2) + 7 ) -#define N_G2S (0x600C + (12 * 2) + 8 ) -#define N_A2F (0x600C + (12 * 2) + 8 ) -#define N_A2 (0x600C + (12 * 2) + 9 ) -#define N_A2S (0x600C + (12 * 2) + 10) -#define N_B2F (0x600C + (12 * 2) + 10) -#define N_B2 (0x600C + (12 * 2) + 11) -#define N_C3 (0x600C + (12 * 3) + 0 ) -#define N_C3S (0x600C + (12 * 3) + 1 ) -#define N_D3F (0x600C + (12 * 3) + 1 ) -#define N_D3 (0x600C + (12 * 3) + 2 ) -#define N_D3S (0x600C + (12 * 3) + 3 ) -#define N_E3F (0x600C + (12 * 3) + 3 ) -#define N_E3 (0x600C + (12 * 3) + 4 ) -#define N_F3 (0x600C + (12 * 3) + 5 ) -#define N_F3S (0x600C + (12 * 3) + 6 ) -#define N_G3F (0x600C + (12 * 3) + 6 ) -#define N_G3 (0x600C + (12 * 3) + 7 ) -#define N_G3S (0x600C + (12 * 3) + 8 ) -#define N_A3F (0x600C + (12 * 3) + 8 ) -#define N_A3 (0x600C + (12 * 3) + 9 ) -#define N_A3S (0x600C + (12 * 3) + 10) -#define N_B3F (0x600C + (12 * 3) + 10) -#define N_B3 (0x600C + (12 * 3) + 11) -#define N_C4 (0x600C + (12 * 4) + 0 ) -#define N_C4S (0x600C + (12 * 4) + 1 ) -#define N_D4F (0x600C + (12 * 4) + 1 ) -#define N_D4 (0x600C + (12 * 4) + 2 ) -#define N_D4S (0x600C + (12 * 4) + 3 ) -#define N_E4F (0x600C + (12 * 4) + 3 ) -#define N_E4 (0x600C + (12 * 4) + 4 ) -#define N_F4 (0x600C + (12 * 4) + 5 ) -#define N_F4S (0x600C + (12 * 4) + 6 ) -#define N_G4F (0x600C + (12 * 4) + 6 ) -#define N_G4 (0x600C + (12 * 4) + 7 ) -#define N_G4S (0x600C + (12 * 4) + 8 ) -#define N_A4F (0x600C + (12 * 4) + 8 ) -#define N_A4 (0x600C + (12 * 4) + 9 ) -#define N_A4S (0x600C + (12 * 4) + 10) -#define N_B4F (0x600C + (12 * 4) + 10) -#define N_B4 (0x600C + (12 * 4) + 11) -#define N_C5 (0x600C + (12 * 5) + 0 ) -#define N_C5S (0x600C + (12 * 5) + 1 ) -#define N_D5F (0x600C + (12 * 5) + 1 ) -#define N_D5 (0x600C + (12 * 5) + 2 ) -#define N_D5S (0x600C + (12 * 5) + 3 ) -#define N_E5F (0x600C + (12 * 5) + 3 ) -#define N_E5 (0x600C + (12 * 5) + 4 ) -#define N_F5 (0x600C + (12 * 5) + 5 ) -#define N_F5S (0x600C + (12 * 5) + 6 ) -#define N_G5F (0x600C + (12 * 5) + 6 ) -#define N_G5 (0x600C + (12 * 5) + 7 ) -#define N_G5S (0x600C + (12 * 5) + 8 ) -#define N_A5F (0x600C + (12 * 5) + 8 ) -#define N_A5 (0x600C + (12 * 5) + 9 ) -#define N_A5S (0x600C + (12 * 5) + 10) -#define N_B5F (0x600C + (12 * 5) + 10) -#define N_B5 (0x600C + (12 * 5) + 11) -#define N_C6 (0x600C + (12 * 6) + 0 ) -#define N_C6S (0x600C + (12 * 6) + 1 ) -#define N_D6F (0x600C + (12 * 6) + 1 ) -#define N_D6 (0x600C + (12 * 6) + 2 ) -#define N_D6S (0x600C + (12 * 6) + 3 ) -#define N_E6F (0x600C + (12 * 6) + 3 ) -#define N_E6 (0x600C + (12 * 6) + 4 ) -#define N_F6 (0x600C + (12 * 6) + 5 ) -#define N_F6S (0x600C + (12 * 6) + 6 ) -#define N_G6F (0x600C + (12 * 6) + 6 ) -#define N_G6 (0x600C + (12 * 6) + 7 ) -#define N_G6S (0x600C + (12 * 6) + 8 ) -#define N_A6F (0x600C + (12 * 6) + 8 ) -#define N_A6 (0x600C + (12 * 6) + 9 ) -#define N_A6S (0x600C + (12 * 6) + 10) -#define N_B6F (0x600C + (12 * 6) + 10) -#define N_B6 (0x600C + (12 * 6) + 11) -#define N_C7 (0x600C + (12 * 7) + 0 ) -#define N_C7S (0x600C + (12 * 7) + 1 ) -#define N_D7F (0x600C + (12 * 7) + 1 ) -#define N_D7 (0x600C + (12 * 7) + 2 ) -#define N_D7S (0x600C + (12 * 7) + 3 ) -#define N_E7F (0x600C + (12 * 7) + 3 ) -#define N_E7 (0x600C + (12 * 7) + 4 ) -#define N_F7 (0x600C + (12 * 7) + 5 ) -#define N_F7S (0x600C + (12 * 7) + 6 ) -#define N_G7F (0x600C + (12 * 7) + 6 ) -#define N_G7 (0x600C + (12 * 7) + 7 ) -#define N_G7S (0x600C + (12 * 7) + 8 ) -#define N_A7F (0x600C + (12 * 7) + 8 ) -#define N_A7 (0x600C + (12 * 7) + 9 ) -#define N_A7S (0x600C + (12 * 7) + 10) -#define N_B7F (0x600C + (12 * 7) + 10) -#define N_B7 (0x600C + (12 * 7) + 11) -#define N_C8 (0x600C + (12 * 8) + 0 ) -#define N_C8S (0x600C + (12 * 8) + 1 ) -#define N_D8F (0x600C + (12 * 8) + 1 ) -#define N_D8 (0x600C + (12 * 8) + 2 ) -#define N_D8S (0x600C + (12 * 8) + 3 ) -#define N_E8F (0x600C + (12 * 8) + 3 ) -#define N_E8 (0x600C + (12 * 8) + 4 ) -#define N_F8 (0x600C + (12 * 8) + 5 ) -#define N_F8S (0x600C + (12 * 8) + 6 ) -#define N_G8F (0x600C + (12 * 8) + 6 ) -#define N_G8 (0x600C + (12 * 8) + 7 ) -#define N_G8S (0x600C + (12 * 8) + 8 ) -#define N_A8F (0x600C + (12 * 8) + 8 ) -#define N_A8 (0x600C + (12 * 8) + 9 ) -#define N_A8S (0x600C + (12 * 8) + 10) -#define N_B8F (0x600C + (12 * 8) + 10) -#define N_B8 (0x600C + (12 * 8) + 11) -#define N_C8 (0x600C + (12 * 8) + 0 ) -#define N_C8S (0x600C + (12 * 8) + 1 ) -#define N_D8F (0x600C + (12 * 8) + 1 ) -#define N_D8 (0x600C + (12 * 8) + 2 ) -#define N_D8S (0x600C + (12 * 8) + 3 ) -#define N_E8F (0x600C + (12 * 8) + 3 ) -#define N_E8 (0x600C + (12 * 8) + 4 ) -#define N_F8 (0x600C + (12 * 8) + 5 ) -#define N_F8S (0x600C + (12 * 8) + 6 ) -#define N_G8F (0x600C + (12 * 8) + 6 ) -#define N_G8 (0x600C + (12 * 8) + 7 ) -#define N_G8S (0x600C + (12 * 8) + 8 ) -#define N_A8F (0x600C + (12 * 8) + 8 ) -#define N_A8 (0x600C + (12 * 8) + 9 ) -#define N_A8S (0x600C + (12 * 8) + 10) -#define N_B8F (0x600C + (12 * 8) + 10) -#define N_B8 (0x600C + (12 * 8) + 11) - -#endif \ No newline at end of file diff --git a/keyboard/preonic/led.c b/keyboard/preonic/led.c deleted file mode 100644 index 2c05746607..0000000000 --- a/keyboard/preonic/led.c +++ /dev/null @@ -1,38 +0,0 @@ -/* -Copyright 2012 Jun Wako - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include -#include "stdint.h" -#include "led.h" - - -void led_set(uint8_t usb_led) -{ - // // Using PE6 Caps Lock LED - // if (usb_led & (1<. -*/ - -/* - * scan matrix - */ -#include -#include -#include -#include -#include "print.h" -#include "debug.h" -#include "util.h" -#include "matrix.h" - -#ifndef DEBOUNCE -# define DEBOUNCE 10 -#endif -static uint8_t debouncing = DEBOUNCE; - -/* matrix state(1:on, 0:off) */ -static matrix_row_t matrix[MATRIX_ROWS]; -static matrix_row_t matrix_debouncing[MATRIX_ROWS]; - -static matrix_row_t read_cols(void); -static void init_cols(void); -static void unselect_rows(void); -static void select_row(uint8_t row); - -inline -uint8_t matrix_rows(void) -{ - return MATRIX_ROWS; -} - -inline -uint8_t matrix_cols(void) -{ - return MATRIX_COLS; -} - -void matrix_init(void) -{ - // To use PORTF disable JTAG with writing JTD bit twice within four cycles. - MCUCR |= (1<event.pressed) { // midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); - midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127); + // midi_send_noteon(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127); play_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF); } else { // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); - midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127); + // midi_send_noteoff(&midi_device, 0, (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row), 127); stop_note(((double)261.626)*pow(2.0, -1.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row))); } } \ No newline at end of file From b8ac5095708b5023f5e3e375b22534f8b395741f Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 30 Mar 2016 00:45:37 -0400 Subject: [PATCH 05/16] .hex files --- keyboard/preonic/Makefile | 4 ++-- keyboard/preonic/preonic_pcb.hex | Bin 0 -> 76538 bytes keyboard/preonic/preonic_pcb_silent.hex | Bin 0 -> 53449 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 keyboard/preonic/preonic_pcb.hex create mode 100644 keyboard/preonic/preonic_pcb_silent.hex diff --git a/keyboard/preonic/Makefile b/keyboard/preonic/Makefile index 664aff7321..89c48e50a9 100644 --- a/keyboard/preonic/Makefile +++ b/keyboard/preonic/Makefile @@ -139,8 +139,8 @@ COMMAND_ENABLE = yes # Commands for debug and configuration # SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend # NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -MIDI_ENABLE = YES # MIDI controls -AUDIO_ENABLE = YES # Audio output on port C6 +# MIDI_ENABLE = YES # MIDI controls +# AUDIO_ENABLE = YES # Audio output on port C6 # UNICODE_ENABLE = YES # Unicode # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID # RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time. diff --git a/keyboard/preonic/preonic_pcb.hex b/keyboard/preonic/preonic_pcb.hex new file mode 100644 index 0000000000000000000000000000000000000000..5bdc190e1de86190b370691f51b8b3faa38a7321 GIT binary patch literal 76538 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 z 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�)cskPUS*{n@N<}LZ>iugt1$bk|#6dBRaAe{gY zl2hbT?H&e(q7gR)$1bl%HlA&FbR6&o+aT`eY;&MWgcZPT>?2$2!viFz`#c)ceULEo{Rz~G-9h&4g$R2IX%y>$xmNO+G}uS!{fq=1YU`-A1L z)g`o_IWIjJF5)rBGe_AM>(tN2BbKi{kI)UY`>B5NoSjN3uLJ+AuT}$ueQY{#D+Jr5 zf%zN5w9yRy8LXBEz2+bnZ|{By@T_1+DbFJ}b>xv28}C8-NQUrW8(exc5IuuL_q6>J ziKbKSidutzwr3up3*Y1|9*5z_iT_X;Ec;V!Gw0Y1xxuZH_EwNk>}X4S&$IFrgi~2tnLjqbo1ZiI>Or~@%OIz!9>c9W0rvBZ9u65o+d%&~Y(8EMkYx6z4L%3|Y#!G~ zCp~WLe88D>p94!vU}g@ps@?A7dLhFBvJ>BwI1xJ4X(bKMLIm)MrBa7va)LUIdH&t@ z?icB#?jAU zGI$oucO~P3xsu zca)RA=Lm?J!FX!-H%B9sHqxitYai*q4RHPur(8f*lc79AG(`&58;S*=J*MtPMu-zltOc_U#{e^`O@X8JTicsQ zZ!1s-sQM5_{y{S<V0h1zGe8E(9-nOU zsl&nWO6-_hYDduFJj4r!kUPQ-7j_p|Ibh2`~iN~!55sg zS=`W#5L~0*;$5hKm=)qFWdt})hVl&S9exI6c@odCw@o;fOt=ydg#^WBrKVxDM4{j?zxs(4eN&ovl F{||e2Y;gbp literal 0 HcmV?d00001 From 47b537c87fd1d2d7671eaf5c49f20bba40afad25 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Wed, 30 Mar 2016 00:46:45 -0400 Subject: [PATCH 06/16] preonic readme --- keyboard/preonic/README.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/keyboard/preonic/README.md b/keyboard/preonic/README.md index 3ba0cc1527..0c09466559 100644 --- a/keyboard/preonic/README.md +++ b/keyboard/preonic/README.md @@ -1,6 +1,6 @@ -Planck keyboard firmware +Preonic keyboard firmware ====================== -DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). +DIY/Assembled compact ortholinear 50% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). ## Quantum MK Firmware @@ -8,7 +8,7 @@ For the full Quantum feature list, see [the parent README.md](/README.md). ## Building -Download or clone the whole firmware and navigate to the keyboard/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. +Download or clone the whole firmware and navigate to the keyboard/preonic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button. Depending on which keymap you would like to use, you will have to compile slightly differently. @@ -23,9 +23,3 @@ To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` $ make KEYMAP=[default|jack|] ``` Keymaps follow the format **__.c__** and are stored in the `keymaps` folder. - -### Notable forks (which some of the keymap files are from) -- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck) -- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c) -- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck) -- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid) From 09d567045cb011b2fd7984cf3277b4875e677153 Mon Sep 17 00:00:00 2001 From: Noah Andrews Date: Wed, 30 Mar 2016 09:17:06 -0400 Subject: [PATCH 07/16] Fixed minor issues with Preonic readme --- keyboard/preonic/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/preonic/README.md b/keyboard/preonic/README.md index 0c09466559..4a33a3e4e0 100644 --- a/keyboard/preonic/README.md +++ b/keyboard/preonic/README.md @@ -16,10 +16,10 @@ Depending on which keymap you would like to use, you will have to compile slight To build with the default keymap, simply run `make`. ### Other Keymaps -Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `.c` and see keymap document (you can find in top README.md) and existent keymap files. +Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `.c` and see keymap document (you can find in top README.md) and existent keymap files. To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like: ``` $ make KEYMAP=[default|jack|] ``` -Keymaps follow the format **__.c__** and are stored in the `keymaps` folder. +Keymaps follow the format **__\.c__** and are stored in the `keymaps` folder. From 3b703eff33963a5756b3e3f16019d6ddae8a7874 Mon Sep 17 00:00:00 2001 From: Miha Rekar Date: Wed, 30 Mar 2016 17:03:03 +0200 Subject: [PATCH 08/16] Tiny fix of Planck diagrams --- keyboard/planck/keymaps/default/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboard/planck/keymaps/default/keymap.c b/keyboard/planck/keymaps/default/keymap.c index d995eb9e58..988deee99d 100644 --- a/keyboard/planck/keymaps/default/keymap.c +++ b/keyboard/planck/keymaps/default/keymap.c @@ -76,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| @@ -94,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,-----------------------------------------------------------------------------------. * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | * |------+------+------+------+------+-------------+------+------+------+------+------| - * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | + * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | * |------+------+------+------+------+------|------+------+------+------+------+------| * | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Dvorak| Reset|Enter | * |------+------+------+------+------+------+------+------+------+------+------+------| From ac3f3a85d571658fe2dcb98458cfd0c14e418150 Mon Sep 17 00:00:00 2001 From: Noah Andrews Date: Wed, 30 Mar 2016 11:36:35 -0400 Subject: [PATCH 09/16] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6a6bbed40b..9857330679 100644 --- a/README.md +++ b/README.md @@ -269,7 +269,7 @@ For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring RGBLIGHT_ENABLE = yes -Please note that the underglow is not compatible with MIDI functions. So you cannot enable both of them at the same time. +Please note that the underglow is not compatible with audio output. So you cannot enable both of them at the same time. Please add the following options into your config.h, and set them up according your hardware configuration. @@ -309,4 +309,4 @@ what things are (and likely aren't) too risky. - EEPROM has around a 100000 write cycle. You shouldn't rewrite the firmware repeatedly and continually; that'll burn the EEPROM eventually. - \ No newline at end of file + From fe6c3e4f0fe1abb38d64ce3f4d48db7aea63aad0 Mon Sep 17 00:00:00 2001 From: David Mohr Date: Tue, 29 Mar 2016 23:49:34 -0600 Subject: [PATCH 10/16] Squisher's international dvorak variant for ergodox ez See README.md --- .../keymaps/dvorak_intl_squisher/README.md | 29 +++ .../dvorak_intl_squisher/keyboard-layout0.png | Bin 0 -> 73585 bytes .../dvorak_intl_squisher/keyboard-layout1.png | Bin 0 -> 59122 bytes .../dvorak_intl_squisher/keyboard-layout2.png | Bin 0 -> 53319 bytes .../keymaps/dvorak_intl_squisher/keymap.c | 185 ++++++++++++++++++ 5 files changed, 214 insertions(+) create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/README.md create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png create mode 100644 keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c diff --git a/keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/README.md b/keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/README.md new file mode 100644 index 0000000000..984106ff46 --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/README.md @@ -0,0 +1,29 @@ +# ErgoDox EZ Dvorak International Squisher + +Dvorak layout adjusted with several (linux) applications in mind: + +* Easier Escape for VIM +* Windows/Super key for awesome WM +* Alt+Shift for international characters +* PrintScreen for sys-rq +* Insert for the X11 clip-board + +Major layer changes: + +* Common multimedia keys are integrated into layer 0, less common into layer 1 +* No mouse keys +* Layer 2 is qwerty (for easier gaming & less fortunate keyboard users) + +Known issues: + +* Alt+Shift does not work reliably (depends on the X11 kb layout? Not + entirely clear...) + +![layer0](keyboard-layout0.png) +![layer1](keyboard-layout1.png) +![layer2](keyboard-layout2.png) + +## Changelog + +* 2016-03-29 + * Initial release diff --git a/keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png b/keyboard/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png new file mode 100644 index 0000000000000000000000000000000000000000..6a36f9bfa1259aa74b6a8e956596dbd86c5a89c5 GIT binary patch literal 73585 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 UzKyAZLDhB+yk#Aswkn7~| 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