X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=quantum%2Fkeymap_common.c;h=ae6cddb343c63f3752cbe4ef5bb20e1c713a6f6e;hb=63462bf8c12cea1c13ca1bd1f105fe53f556806e;hp=66cf2883c7cca9b247190038124b5f8047b796c7;hpb=46e7fb2d3ccd699c0a1b1fd9d02860b1f2a44141;p=qmk_firmware.git diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 66cf2883c..ae6cddb34 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -19,11 +19,27 @@ along with this program. If not, see . #include "report.h" #include "keycode.h" #include "action_layer.h" +#include #include "action.h" #include "action_macro.h" #include "debug.h" #include "backlight.h" #include "keymap_midi.h" +#include "bootloader.h" + +#include +#include +#ifdef AUDIO_ENABLE + #include "audio.h" + + float goodbye[][2] = { + {440.0*pow(2.0,(67)/12.0), 400}, + {0, 50}, + {440.0*pow(2.0,(60)/12.0), 400}, + {0, 50}, + {440.0*pow(2.0,(55)/12.0), 600}, + }; +#endif static action_t keycode_to_action(uint16_t keycode); @@ -37,16 +53,19 @@ action_t action_for_key(uint8_t layer, keypos_t key) // Has a modifier action_t action; // Split it up - action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); + action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key return action; } else if (keycode >= 0x2000 && keycode < 0x3000) { - // Is a shortcut for function layer, pull last 12bits + // Is a shortcut for function layer, pull last 12bits + // This means we have 4,096 FN macros at our disposal return keymap_func_to_action(keycode & 0xFFF); } else if (keycode >= 0x3000 && keycode < 0x4000) { + // When the code starts with 3, it's an action macro. action_t action; action.code = ACTION_MACRO(keycode & 0xFF); return action; - } else if (keycode >= BL_0 & keycode <= BL_15) { +#ifdef BACKLIGHT_ENABLE + } else if (keycode >= BL_0 && keycode <= BL_15) { action_t action; action.code = ACTION_BACKLIGHT_LEVEL(keycode & 0x000F); return action; @@ -66,28 +85,78 @@ action_t action_for_key(uint8_t layer, keypos_t key) action_t action; action.code = ACTION_BACKLIGHT_STEP(); return action; - } else if (keycode == RESET) { +#endif + } else if (keycode == RESET) { // RESET is 0x5000, which is why this is here + action_t action; + clear_keyboard(); + #ifdef AUDIO_ENABLE + play_notes(&goodbye, 5, false); + #endif + _delay_ms(250); + #ifdef ATREUS_ASTAR + *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific + #endif bootloader_jump(); - return; - } else if (keycode == DEBUG) { + return action; + } else if (keycode == DEBUG) { // DEBUG is 0x5001 + // TODO: Does this actually work? + action_t action; print("\nDEBUG: enabled.\n"); debug_enable = true; - return; - } else if (keycode >= 0x5000 && keycode < 0x6000) { - int when = (keycode >> 0x9) & 0x3; - int layer = keycode & 0xFF; - action_t action; - action.code = ACTION_LAYER_SET(layer, when); return action; + } else if (keycode >= 0x5000 && keycode < 0x6000) { + // Layer movement shortcuts + // See .h to see constraints/usage + int type = (keycode >> 0x8) & 0xF; + if (type == 0x1) { + // Layer set "GOTO" + int when = (keycode >> 0x4) & 0x3; + int layer = keycode & 0xF; + action_t action; + action.code = ACTION_LAYER_SET(layer, when); + return action; + } else if (type == 0x2) { + // Momentary layer + int layer = keycode & 0xFF; + action_t action; + action.code = ACTION_LAYER_MOMENTARY(layer); + return action; + } else if (type == 0x3) { + // Set default layer + int layer = keycode & 0xFF; + action_t action; + action.code = ACTION_DEFAULT_LAYER_SET(layer); + return action; + } else if (type == 0x4) { + // Set default layer + int layer = keycode & 0xFF; + action_t action; + action.code = ACTION_LAYER_TOGGLE(layer); + return action; + } +#ifdef MIDI_ENABLE } else if (keycode >= 0x6000 && keycode < 0x7000) { action_t action; action.code = ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8); return action; - } else if (keycode >= 0x8000) { +#endif + } else if (keycode >= 0x7000 && keycode < 0x8000) { + action_t action; + action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); + return action; + } else if (keycode >= 0x8000 && keycode < 0x9000) { + action_t action; + action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); + return action; +#ifdef UNICODE_ENABLE + } else if (keycode >= 0x8000000) { action_t action; uint16_t unicode = keycode & ~(0x8000); action.code = ACTION_FUNCTION_OPT(unicode & 0xFF, (unicode & 0xFF00) >> 8); return action; +#endif + } else { + } switch (keycode) {