]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - quantum/keymap_common.c
changing up the makefile a bit
[qmk_firmware.git] / quantum / keymap_common.c
index 66cf2883c7cca9b247190038124b5f8047b796c7..ae6cddb343c63f3752cbe4ef5bb20e1c713a6f6e 100644 (file)
@@ -19,11 +19,27 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include "report.h"
 #include "keycode.h"
 #include "action_layer.h"
+#include <util/delay.h>
 #include "action.h"
 #include "action_macro.h"
 #include "debug.h"
 #include "backlight.h"
 #include "keymap_midi.h"
+#include "bootloader.h"
+
+#include <stdio.h>
+#include <inttypes.h>
+#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) {