summaryrefslogtreecommitdiffstats
path: root/users/drashna
diff options
context:
space:
mode:
authordrashna <drashna@live.com>2017-11-07 06:11:08 +0100
committerJack Humbert <jack.humb@gmail.com>2017-11-07 06:11:08 +0100
commit363aa8aa2eeedaded6fe9fd35ba5c02329d83959 (patch)
tree189433181f4ee93c3bfbb194c090b7530e0e83cd /users/drashna
parentef2961798cddb43dbcbac9d72ca9d84d71ad565e (diff)
downloadqmk_firmware-363aa8aa2eeedaded6fe9fd35ba5c02329d83959.tar.gz
qmk_firmware-363aa8aa2eeedaded6fe9fd35ba5c02329d83959.tar.xz
Migrated most code from keymaps to userspace (#1980)
* Add woodpad * Cleanup * Remove misc layouts for woodpad * Move woodpad to handwired * Updated RGB Underglow info * Cleanup macros * Tweaked RGB lighting stuff * Start to merge orthodox/ergodox keymaps (persistant layers) * Add woodpad * Add forced NKRO * Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow * Updated macros and added workman keymaps * Fixed RGB lighting for Workman layout * Add leader keys * Remove force NKRO * Add Viterbi one handed layout and minor tweaks to others * Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts * Made "make" keystroke universal * Clean up and updates of drashna keymaps * Add workman layer to planck * Update to keymaps * Fix makefile toggle code in ez keymap Finish adding RGB code to orthodox * Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function * Remove unnecessary planck layout * Fixed Workman song * update make command and added lit reset * Fixed formatting to fall in line with official standards * Minor tweaks * Removed Leader Keys from Ergodox EZ Keymap Added KC_RESET that resets board and sets underglow to red * Tweak reset code * Cleanup * Remove misc layouts for woodpad * Move woodpad to handwired * Updated RGB Underglow info * Cleanup macros * Tweaked RGB lighting stuff * Start to merge orthodox/ergodox keymaps (persistant layers) * Add forced NKRO * Added default layer (qwerty/colemak/dvorak) detection to RGB Underglow * Updated macros and added workman keymaps * Fixed RGB lighting for Workman layout * Add leader keys * Remove force NKRO * Add Viterbi one handed layout and minor tweaks to others * Finishing up Viterbi keyboard layout, and NKRO tweaks to other layouts * Made "make" keystroke universal * Clean up and updates of drashna keymaps * Add workman layer to planck * Update to keymaps * Fix makefile toggle code in ez keymap Finish adding RGB code to orthodox * Updated RGB Underglow layer indication code due to discovery of the layer_state_set_kb function * Remove unnecessary planck layout * Fixed Workman song * update make command and added lit reset * Fixed formatting to fall in line with official standards * Minor tweaks * Removed Leader Keys from Ergodox EZ Keymap Added KC_RESET that resets board and sets underglow to red * Tweak reset code * Fix rebasing issues * remove head files * Fix "macro" issue * Rename ez keymaps for userspace * Revert "Rename ez keymaps for userspace" This reverts commit c25425911852e41711a5f0273b5741adb16e5bd4. * Renamed Ergodox EZ layouts so that all of my personal layouts are on the same name, in prep for using userspaces * Fix ergodox code * Remove "drashna-ez" keymap as it's no longer needed * Migrate majority of code to Userspace
Diffstat (limited to 'users/drashna')
-rw-r--r--users/drashna/drashna.c379
-rw-r--r--users/drashna/drashna.h73
-rw-r--r--users/drashna/readme.md14
-rw-r--r--users/drashna/rules.mk2
4 files changed, 468 insertions, 0 deletions
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
new file mode 100644
index 000000000..47565ff9c
--- /dev/null
+++ b/users/drashna/drashna.c
@@ -0,0 +1,379 @@
+#include "drashna.h"
+#include "quantum.h"
+#include "action.h"
+#include "version.h"
+
+__attribute__ ((weak))
+void matrix_init_keymap(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_keymap(void) {}
+
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+
+void matrix_init_user(void) {
+#ifdef RGBLIGHT_ENABLE
+ uint8_t default_layer = eeconfig_read_default_layer();
+
+ rgblight_enable();
+
+ if (true) {
+ if (default_layer & (1UL << _COLEMAK)) {
+ rgblight_set_magenta;
+ }
+ else if (default_layer & (1UL << _DVORAK)) {
+ rgblight_set_green;
+ }
+ else if (default_layer & (1UL << _WORKMAN)) {
+ rgblight_set_purple;
+ }
+ else {
+ rgblight_set_teal;
+ }
+ }
+ else
+ {
+ rgblight_set_red;
+ rgblight_mode(5);
+ }
+#endif
+ matrix_init_keymap();
+}
+
+void matrix_scan_user(void) {
+ matrix_scan_keymap();
+}
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_workman[][2] = SONG(PLOVER_SOUND);
+#endif
+
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ uint16_t kc;
+ if (is_overwatch) {
+ kc = KC_BSPC;
+ }
+ else {
+ kc = KC_ENTER;
+ }
+#ifdef CONSOLE_ENABLE
+ xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record->event.key.row, record->event.pressed);
+#endif
+
+ switch (keycode) {
+ case KC_QWERTY:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+#endif
+ persistent_default_layer_set(1UL << _QWERTY);
+ }
+ return false;
+ break;
+ case KC_COLEMAK:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+#endif
+ persistent_default_layer_set(1UL << _COLEMAK);
+ }
+ return false;
+ break;
+ case KC_DVORAK:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+#endif
+ persistent_default_layer_set(1UL << _DVORAK);
+ }
+ return false;
+ break;
+ case KC_WORKMAN:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_workman);
+#endif
+ persistent_default_layer_set(1UL << _WORKMAN);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ }
+ else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case KC_OVERWATCH:
+ if (record->event.pressed) {
+ is_overwatch = !is_overwatch;
+ }
+#ifdef RGBLIGHT_ENABLE
+ is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
+#endif
+ return false;
+ break;
+ case KC_SALT:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Salt, salt, salt...");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_MORESALT:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Please sir, can I have some more salt?!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_SALTHARD:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Your salt only makes my penis that much harder, and even more aggressive!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_GOODGAME:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Good game, everyone!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_GLHF:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Good luck, have fun!!!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_SYMM:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Left click to win!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_DOOMFIST:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("Hey, look at me. I'm Doomfist, and I'm overpowered! All I do is spam punches all day! I'm DPS, tank and defense, rolled into one! All I need is team healing to be complete!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_JUSTGAME:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("It may be a game, but if you don't want to actually try, please go play AI, so that people that actually want to take the game seriously and \"get good\" have a place to do so without trolls like you throwing games.");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_TORB:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("That was positively riveting!");
+ register_code(KC_ENTER);
+ unregister_code(KC_ENTER);
+ }
+ return false;
+ break;
+ case KC_AIM:
+ if (!record->event.pressed) {
+ register_code(kc);
+ unregister_code(kc);
+ _delay_ms(50);
+ SEND_STRING("That aim is absolutely amazing. It's almost like you're a machine!" SS_TAP(X_ENTER));
+ _delay_ms(50);
+ SEND_STRING("Wait! That aim is TOO good! You're clearly using an aim hack! CHEATER!" SS_TAP(X_ENTER));
+ }
+ return false;
+ break;
+ case KC_MAKE:
+ if (!record->event.pressed) {
+#ifdef RGBLIGHT_ENABLE
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=yes" SS_TAP(X_ENTER));
+#else
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP " RGBLIGHT_ENABLE=no"SS_TAP(X_ENTER));
+#endif
+ }
+ return false;
+ break;
+ case KC_RESET:
+ if (!record->event.pressed) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0xff, 0x00, 0x00);
+#endif
+ reset_keyboard();
+ }
+ return false;
+ break;
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case KC_P00:
+ if (!record->event.pressed) {
+ register_code(KC_P0);
+ unregister_code(KC_P0);
+ register_code(KC_P0);
+ unregister_code(KC_P0);
+ }
+ return false;
+ break;
+ }
+ return process_record_keymap(keycode, record);
+}
+
+
+uint32_t layer_state_set_kb(uint32_t state) {
+#ifdef RGBLIGHT_ENABLE
+ uint8_t default_layer = eeconfig_read_default_layer();
+
+ switch (biton32(state)) {
+ case _NAV:
+ rgblight_set_blue;
+ rgblight_mode(1);
+ break;
+ case _SYMB:
+ rgblight_set_blue;
+ rgblight_mode(2);
+ break;
+ case _MOUS:
+ rgblight_set_yellow;
+ rgblight_mode(1);
+ break;
+ case _MACROS:
+ rgblight_set_orange;
+ is_overwatch ? rgblight_mode(17) : rgblight_mode(18);
+ rgblight_mode(18);
+ break;
+ case _MEDIA:
+ rgblight_set_green;
+ rgblight_mode(22);
+ break;
+ case _OVERWATCH:
+ rgblight_set_orange;
+ rgblight_mode(17);
+ break;
+ case _DIABLO:
+ rgblight_set_red;
+ rgblight_mode(5);
+ break;
+ case _RAISE:
+ rgblight_set_yellow;
+ rgblight_mode(5);
+ break;
+ case _LOWER:
+ rgblight_set_orange;
+ rgblight_mode(5);
+ break;
+ case _ADJUST:
+ rgblight_set_red;
+ rgblight_mode(23);
+ break;
+ case _COVECUBE:
+ rgblight_set_green;
+ rgblight_mode(2);
+ default:
+ if (default_layer & (1UL << _COLEMAK)) {
+ rgblight_set_magenta;
+ }
+ else if (default_layer & (1UL << _DVORAK)) {
+ rgblight_set_green;
+ }
+ else if (default_layer & (1UL << _WORKMAN)) {
+ rgblight_set_purple;
+ }
+ else {
+ rgblight_set_teal;
+ }
+ rgblight_mode(1);
+ break;
+ }
+#endif
+ return state;
+}
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
new file mode 100644
index 000000000..0e7b25d2d
--- /dev/null
+++ b/users/drashna/drashna.h
@@ -0,0 +1,73 @@
+#ifndef USERSPACE
+#define USERSPACE
+
+#include "quantum.h"
+
+// Define layer names
+#define _QWERTY 0
+#define _NUMLOCK 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _WORKMAN 3
+#define _NAV 5
+#define _COVECUBE 6
+#define _SYMB 8
+#define _OVERWATCH 9
+#define _DIABLO 10
+#define _MOUS 11
+#define _MACROS 12
+#define _MEDIA 13
+#define _LOWER 14
+#define _RAISE 15
+#define _ADJUST 16
+
+
+//define modifiers
+#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
+#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+
+#ifdef RGBLIGHT_ENABLE
+#define rgblight_set_blue rgblight_sethsv (0xFF, 0xFF, 0xFF);
+#define rgblight_set_red rgblight_sethsv (0x00, 0xFF, 0xFF);
+#define rgblight_set_green rgblight_sethsv (0x78, 0xFF, 0xFF);
+#define rgblight_set_orange rgblight_sethsv (0x1E, 0xFF, 0xFF);
+#define rgblight_set_teal rgblight_sethsv (0xC3, 0xFF, 0xFF);
+#define rgblight_set_magenta rgblight_sethsv (0x12C, 0xFF, 0xFF);
+#define rgblight_set_yellow rgblight_sethsv (0x3C, 0xFF, 0xFF);
+#define rgblight_set_purple rgblight_sethsv (0x10E, 0xFF, 0xFF);
+#endif
+
+__attribute__ ((weak))
+bool is_overwatch = false;
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ KC_QWERTY,
+ KC_COLEMAK,
+ KC_DVORAK,
+ KC_WORKMAN,
+ LOWER,
+ RAISE,
+ ADJUST,
+ KC_DIABLO_CLEAR,
+ KC_OVERWATCH,
+ KC_SALT,
+ KC_MORESALT,
+ KC_SALTHARD,
+ KC_GOODGAME,
+ KC_SYMM,
+ KC_DOOMFIST,
+ KC_JUSTGAME,
+ KC_GLHF,
+ KC_TORB,
+ KC_AIM,
+ KC_MAKE,
+ KC_RESET,
+ KC_P00,
+ NEWPLACEHOLDER
+};
+
+#endif
diff --git a/users/drashna/readme.md b/users/drashna/readme.md
new file mode 100644
index 000000000..0d553f08e
--- /dev/null
+++ b/users/drashna/readme.md
@@ -0,0 +1,14 @@
+Copyright 2017 Christopher Courtney <drashna@live.com> @drashna
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
new file mode 100644
index 000000000..0150bb608
--- /dev/null
+++ b/users/drashna/rules.mk
@@ -0,0 +1,2 @@
+
+SRC += drashna.c