From dfe7004bc545ff7247a0dbef4788b9e1952f9c5d Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Sat, 16 Jan 2016 00:51:24 -0500 Subject: [PATCH] new keymap folder structure and makefile magic --- keyboard/planck/Makefile | 13 +- keyboard/planck/README.md | 126 ++++++++++++------ .../keymaps/{keymap_alexey.c => alexey.c} | 0 ...ymap_angerthosenear.c => angerthosenear.c} | 0 .../keymaps/{keymap_austin.c => austin.c} | 0 .../keymaps/{keymap_charlie.c => charlie.c} | 0 .../keymaps/{keymap_daniel.c => daniel.c} | 0 .../keymaps/{keymap_david.c => david.c} | 0 .../keymaps/{keymap_default.c => default.c} | 0 .../keymaps/{keymap_dzobert.c => dzobert.c} | 0 .../keymaps/{keymap_gabriel.c => gabriel.c} | 0 .../planck/keymaps/{keymap_jack.c => jack.c} | 0 .../planck/keymaps/{keymap_joe.c => joe.c} | 0 .../planck/keymaps/{keymap_kyle.c => kyle.c} | 0 .../planck/keymaps/{keymap_leo.c => leo.c} | 0 .../planck/keymaps/{keymap_lock.c => lock.c} | 0 .../planck/keymaps/{keymap_max.c => max.c} | 0 .../keymaps/{keymap_monkey.c => monkey.c} | 0 .../keymaps/{keymap_numpad.c => numpad.c} | 0 keyboard/planck/keymaps/test/default.c | 123 +++++++++++++++++ quantum/quantum.mk | 14 +- 21 files changed, 228 insertions(+), 48 deletions(-) rename keyboard/planck/keymaps/{keymap_alexey.c => alexey.c} (100%) rename keyboard/planck/keymaps/{keymap_angerthosenear.c => angerthosenear.c} (100%) rename keyboard/planck/keymaps/{keymap_austin.c => austin.c} (100%) rename keyboard/planck/keymaps/{keymap_charlie.c => charlie.c} (100%) rename keyboard/planck/keymaps/{keymap_daniel.c => daniel.c} (100%) rename keyboard/planck/keymaps/{keymap_david.c => david.c} (100%) rename keyboard/planck/keymaps/{keymap_default.c => default.c} (100%) rename keyboard/planck/keymaps/{keymap_dzobert.c => dzobert.c} (100%) rename keyboard/planck/keymaps/{keymap_gabriel.c => gabriel.c} (100%) rename keyboard/planck/keymaps/{keymap_jack.c => jack.c} (100%) rename keyboard/planck/keymaps/{keymap_joe.c => joe.c} (100%) rename keyboard/planck/keymaps/{keymap_kyle.c => kyle.c} (100%) rename keyboard/planck/keymaps/{keymap_leo.c => leo.c} (100%) rename keyboard/planck/keymaps/{keymap_lock.c => lock.c} (100%) rename keyboard/planck/keymaps/{keymap_max.c => max.c} (100%) rename keyboard/planck/keymaps/{keymap_monkey.c => monkey.c} (100%) rename keyboard/planck/keymaps/{keymap_numpad.c => numpad.c} (100%) create mode 100644 keyboard/planck/keymaps/test/default.c diff --git a/keyboard/planck/Makefile b/keyboard/planck/Makefile index 485c5f77f..f3537b2c7 100644 --- a/keyboard/planck/Makefile +++ b/keyboard/planck/Makefile @@ -54,10 +54,19 @@ SRC = planck.c \ backlight.c ifdef KEYMAP - SRC := keymaps/keymap_$(KEYMAP).c $(SRC) +ifneq ("$(wildcard keymaps/$(KEYMAP).c)","") + KEYMAP_FILE = keymaps/$(KEYMAP).c else - SRC := keymaps/keymap_default.c $(SRC) + KEYMAP_FILE = keymaps/$(KEYMAP)/default.c endif +else +ifneq ("$(wildcard keymaps/default.c)","") + KEYMAP_FILE = keymaps/default.c +else + KEYMAP_FILE = keymaps/default/default.c +endif +endif +SRC := $(KEYMAP_FILE) $(SRC) CONFIG_H = config.h diff --git a/keyboard/planck/README.md b/keyboard/planck/README.md index 0003e765d..5c3a52498 100644 --- a/keyboard/planck/README.md +++ b/keyboard/planck/README.md @@ -3,29 +3,42 @@ Planck keyboard firmware DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com). ## Quantum MK Firmware + You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you. BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality MIDI_ENABLE = yes # MIDI controls - # UNICODE_ENABLE = yes # Unicode support + # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not // BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID -### Mod shortcuts +## Quick aliases to common actions -* `LSFT(kc)` - applies left shift to *kc* - `S(kc)` is an alias -* `RSFT(kc)` - applies right shift to *kc* -* `LCTL(kc)` - applies left control to *kc* -* `RCTL(kc)` - applies right control to *kc* -* `LALT(kc)` - applies left alt to *kc* -* `RALT(kc)` - applies right alt to *kc* -* `LGUI(kc)` - applies left gui (command/win) to *kc* -* `RGUI(kc)` - applies right gui (command/win) to *kc* +Your keymap can include shortcuts to common operations (called "function actions" in tmk). -You can also use more than one, like this: +### Switching and toggling layers - LALT(LGUI(KC_ESC)) +`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack. -The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names (see `quantum/keymap_common.h`) are also availble. +`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer). + +`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack. + +### Fun with modifier keys + +* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias +* `RSFT(kc)` - applies right Shift to *kc* +* `LCTL(kc)` - applies left Control to *kc* +* `RCTL(kc)` - applies right Control to *kc* +* `LALT(kc)` - applies left Alt to *kc* +* `RALT(kc)` - applies right Alt to *kc* +* `LGUI(kc)` - applies left GUI (command/win) to *kc* +* `RGUI(kc)` - applies right GUI (command/win) to *kc* + +You can also chain these, like this: + + LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress. + +The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`. KC_TILD ~ KC_EXLM ! @@ -45,31 +58,71 @@ The following shortcuts automatically add `LSFT()` to keycodes to get commonly u KC_PIPE | KC_COLN : -### Function shortcuts +`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down. -Instead of using `FNx`, you can use `F(x)` - the benefit here is being able to use more than 32 function layers (up to 4096), if you happen to need them. +These are the values you can use for the `mod` in `MT()` (right-hand modifiers are not available): -There are also keycode shortcuts for common actions: + * MOD_LCTL + * MOD_LSFT + * MOD_LALT + * MOD_LGUI + +These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped. + +We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact: -* `MO(layer)` - momentary switch to *layer* -* `DF(layer)` - sets default layer to *layer* -* `TG(layer)` - toggle between the current layer and *layer* -* `MT(mod, kc)` - is *mod* when held, and *kc* when tapped * `CTL_T(kc)` - is LCTL when held and *kc* when tapped * `SFT_T(kc)` - is LSFT when held and *kc* when tapped * `ALT_T(kc)` - is LALT when held and *kc* when tapped * `GUI_T(kc)` - is LGUI when held and *kc* when tapped - * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped -* `LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped + * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/) -These functions work the same way that their `ACTION_*` functions do, and will require KC_TRNS on the layer being switched to - check out the default keymap for an example. +### Temporarily setting the default layer -### Additional keycodes for software-implemented layouts (Colemak, Dvorak, etc) +`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does. + +### Remember: These are just aliases + +These functions work the same way that their `ACTION_*` functions do - they're just quick aliases. To dig into all of the tmk ACTION_* functions, please see the [TMK documentation](https://github.com/jackhumbert/qmk_firmware/blob/master/tmk_core/doc/keymap.md#2-action). + +Instead of using `FNx` when defining `ACTION_*` functions, you can use `F(x)` - the benefit here is being able to use more than 32 function actions (up to 4096), if you happen to need them. + +## Macro shortcuts: Send a whole string when pressing just one key + +Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymaps/default.c). + +```c +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. +{ + switch(id) { + case 0: // this would trigger when you hit a key mapped as M(0) + if (record->event.pressed) { + return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes + } + break; + } + return MACRO_NONE; +}; +``` +A macro can include the following commands: + +* I() change interval of stroke in milliseconds. +* D() press key. +* U() release key. +* T() type key(press and release). +* W() wait (milliseconds). +* END end mark. + +So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends. + +Note: Using macros to have your keyboard send passwords for you is a bad idea. + +### Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc) Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap: - #include "keymap_.h" - + #include "keymap_.h" + Where is "colemak" or "dvorak". After including this line, you will get access to: * `CM_*` for all of the Colemak-equivalent characters @@ -79,19 +132,15 @@ These implementations assume you're using Colemak or Dvorak on your OS, not on y To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`. -### Additional language support +## Additional language support -In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbrivation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support). +In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support). -### Unicode support +## Unicode support You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile. -### Macro shortcuts - -Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to filter them. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c). - -### Other keyboard shortcut keycodes +## Other firmware shortcut keycodes * `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`) * `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things @@ -105,12 +154,11 @@ Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to acces Enable the backlight from the Makefile. - -### MIDI functionalty +## MIDI functionalty This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile. -### Bluetooth functionality +## Bluetooth functionality This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will. @@ -124,13 +172,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 `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. ### 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/keymaps/keymap_alexey.c b/keyboard/planck/keymaps/alexey.c similarity index 100% rename from keyboard/planck/keymaps/keymap_alexey.c rename to keyboard/planck/keymaps/alexey.c diff --git a/keyboard/planck/keymaps/keymap_angerthosenear.c b/keyboard/planck/keymaps/angerthosenear.c similarity index 100% rename from keyboard/planck/keymaps/keymap_angerthosenear.c rename to keyboard/planck/keymaps/angerthosenear.c diff --git a/keyboard/planck/keymaps/keymap_austin.c b/keyboard/planck/keymaps/austin.c similarity index 100% rename from keyboard/planck/keymaps/keymap_austin.c rename to keyboard/planck/keymaps/austin.c diff --git a/keyboard/planck/keymaps/keymap_charlie.c b/keyboard/planck/keymaps/charlie.c similarity index 100% rename from keyboard/planck/keymaps/keymap_charlie.c rename to keyboard/planck/keymaps/charlie.c diff --git a/keyboard/planck/keymaps/keymap_daniel.c b/keyboard/planck/keymaps/daniel.c similarity index 100% rename from keyboard/planck/keymaps/keymap_daniel.c rename to keyboard/planck/keymaps/daniel.c diff --git a/keyboard/planck/keymaps/keymap_david.c b/keyboard/planck/keymaps/david.c similarity index 100% rename from keyboard/planck/keymaps/keymap_david.c rename to keyboard/planck/keymaps/david.c diff --git a/keyboard/planck/keymaps/keymap_default.c b/keyboard/planck/keymaps/default.c similarity index 100% rename from keyboard/planck/keymaps/keymap_default.c rename to keyboard/planck/keymaps/default.c diff --git a/keyboard/planck/keymaps/keymap_dzobert.c b/keyboard/planck/keymaps/dzobert.c similarity index 100% rename from keyboard/planck/keymaps/keymap_dzobert.c rename to keyboard/planck/keymaps/dzobert.c diff --git a/keyboard/planck/keymaps/keymap_gabriel.c b/keyboard/planck/keymaps/gabriel.c similarity index 100% rename from keyboard/planck/keymaps/keymap_gabriel.c rename to keyboard/planck/keymaps/gabriel.c diff --git a/keyboard/planck/keymaps/keymap_jack.c b/keyboard/planck/keymaps/jack.c similarity index 100% rename from keyboard/planck/keymaps/keymap_jack.c rename to keyboard/planck/keymaps/jack.c diff --git a/keyboard/planck/keymaps/keymap_joe.c b/keyboard/planck/keymaps/joe.c similarity index 100% rename from keyboard/planck/keymaps/keymap_joe.c rename to keyboard/planck/keymaps/joe.c diff --git a/keyboard/planck/keymaps/keymap_kyle.c b/keyboard/planck/keymaps/kyle.c similarity index 100% rename from keyboard/planck/keymaps/keymap_kyle.c rename to keyboard/planck/keymaps/kyle.c diff --git a/keyboard/planck/keymaps/keymap_leo.c b/keyboard/planck/keymaps/leo.c similarity index 100% rename from keyboard/planck/keymaps/keymap_leo.c rename to keyboard/planck/keymaps/leo.c diff --git a/keyboard/planck/keymaps/keymap_lock.c b/keyboard/planck/keymaps/lock.c similarity index 100% rename from keyboard/planck/keymaps/keymap_lock.c rename to keyboard/planck/keymaps/lock.c diff --git a/keyboard/planck/keymaps/keymap_max.c b/keyboard/planck/keymaps/max.c similarity index 100% rename from keyboard/planck/keymaps/keymap_max.c rename to keyboard/planck/keymaps/max.c diff --git a/keyboard/planck/keymaps/keymap_monkey.c b/keyboard/planck/keymaps/monkey.c similarity index 100% rename from keyboard/planck/keymaps/keymap_monkey.c rename to keyboard/planck/keymaps/monkey.c diff --git a/keyboard/planck/keymaps/keymap_numpad.c b/keyboard/planck/keymaps/numpad.c similarity index 100% rename from keyboard/planck/keymaps/keymap_numpad.c rename to keyboard/planck/keymaps/numpad.c diff --git a/keyboard/planck/keymaps/test/default.c b/keyboard/planck/keymaps/test/default.c new file mode 100644 index 000000000..bc81adcf9 --- /dev/null +++ b/keyboard/planck/keymaps/test/default.c @@ -0,0 +1,123 @@ +// USING_MIDI +// USING_BACKLIGHT +#include "keymap_common.h" +#include "backlight.h" +#include "action_layer.h" +#include "keymap_midi.h" +#include + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[0] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT}, + {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_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_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 */ + {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_TAB, N_C5, N_D5, N_E5, N_F5, N_G5, N_A5, 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 }, + {M(0), KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, 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), + +}; + +uint16_t hextokeycode(int hex) { + if (hex == 0x0) { + return KC_0; + } else if (hex < 0xA) { + return KC_1 + (hex - 0x1); + } else { + return KC_A + (hex - 0xA); + } +} + +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) { + // play_note(440, 20); + // register_code(KC_RSFT); + backlight_set(BACKLIGHT_LEVELS); + default_layer_and(0); + default_layer_or((1<<5)); + + // uint8_t low = boot_lock_fuse_bits_get(0x0000); + // uint8_t high = boot_lock_fuse_bits_get(0x0003); + // uint8_t ext = boot_lock_fuse_bits_get(0x0002); + // uint8_t lock = boot_lock_fuse_bits_get(0x0001); + + // register_code(hextokeycode((low & 0xF0) >> 4)); + // unregister_code(hextokeycode((low & 0xF0) >> 4)); + // register_code(hextokeycode((low & 0x0F))); + // unregister_code(hextokeycode((low & 0x0F))); + + + // register_code(hextokeycode((high & 0xF0) >> 4)); + // unregister_code(hextokeycode((high & 0xF0) >> 4)); + // register_code(hextokeycode((high & 0x0F))); + // unregister_code(hextokeycode((high & 0x0F))); + + + // register_code(hextokeycode((ext & 0xF0) >> 4)); + // unregister_code(hextokeycode((ext & 0xF0) >> 4)); + // register_code(hextokeycode((ext & 0x0F))); + // unregister_code(hextokeycode((ext & 0x0F))); + + + // register_code(hextokeycode((lock & 0xF0) >> 4)); + // unregister_code(hextokeycode((lock & 0xF0) >> 4)); + // register_code(hextokeycode((lock & 0x0F))); + // unregister_code(hextokeycode((lock & 0x0F))); + + // note(0+12, 20); + // note(0+24, 20); + } else { + // unregister_code(KC_RSFT); + // stop_note(); + backlight_set(0); + default_layer_and(0); + default_layer_or(0); + // note(0+24, 20); + // note(0, 20); + // play_note(4, 20); + } + break; + } + return MACRO_NONE; +}; diff --git a/quantum/quantum.mk b/quantum/quantum.mk index 62d67be9f..3a968a145 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -4,18 +4,18 @@ QUANTUM_DIR = quantum SRC += $(QUANTUM_DIR)/keymap_common.c \ $(QUANTUM_DIR)/led.c -ifdef KEYMAP -ifneq (,$(shell grep USING_MIDI 'keymaps/keymap_$(KEYMAP).c')) +ifdef KEYMAP_FILE +ifneq (,$(shell grep USING_MIDI '$(KEYMAP_FILE)')) MIDI_ENABLE=yes -$(info * Overriding MIDI_ENABLE setting - keymap_$(KEYMAP).c requires it) +$(info * Overriding MIDI_ENABLE setting - $(KEYMAP_FILE) requires it) endif -ifneq (,$(shell grep USING_UNICODE 'keymaps/keymap_$(KEYMAP).c')) +ifneq (,$(shell grep USING_UNICODE '$(KEYMAP_FILE)')) UNICODE_ENABLE=yes -$(info * Overriding UNICODE_ENABLE setting - keymap_$(KEYMAP).c requires it) +$(info * Overriding UNICODE_ENABLE setting - $(KEYMAP_FILE) requires it) endif -ifneq (,$(shell grep USING_BACKLIGHT 'keymaps/keymap_$(KEYMAP).c')) +ifneq (,$(shell grep USING_BACKLIGHT '$(KEYMAP_FILE)')) BACKLIGHT_ENABLE=yes -$(info * Overriding BACKLIGHT_ENABLE setting - keymap_$(KEYMAP).c requires it) +$(info * Overriding BACKLIGHT_ENABLE setting - $(KEYMAP_FILE) requires it) endif endif