qmk

Unnamed repository; edit this file 'description' to name the repository.
git clone git://git.z3bra.org/qmk.git
Log | Files | Refs | Submodules | LICENSE

commit 088b476343bf97c4bca6855a4ff2152f1bf0785e
parent 4c9372a0819b3fa062105803668d3b277222dc1a
Author: Yann Hodique <yann.hodique@gmail.com>
Date:   Mon, 15 Oct 2018 10:49:51 -0700

Keymap: add sun_usb keymap for sigma (#4138)

Also add users/sigma, which contains useful code for keymaps.
Diffstat:
keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c | 31+++++++++++++++++++++++++++++++
keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md | 12++++++++++++
keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk | 1+
users/sigma/config.h | 21+++++++++++++++++++++
users/sigma/rules.mk | 3+++
users/sigma/sigma.c | 276+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
users/sigma/sigma.h | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 402 insertions(+), 0 deletions(-)

diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c b/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c @@ -0,0 +1,31 @@ +/* +Copyright 2018 Yann Hodique <yann.hodique@gmail.com> @sigma + +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/>. +*/ + +#include QMK_KEYBOARD_H +#include "sigma.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = + { + [_QWERTY] = LAYOUT_us_unix( + KC_LEAD, KC_SCRT, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_MUTE,KC_VOLD,KC_VOLU,KC_OS_LOCK, + KC_STOP, KC_OS_REDO, KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, + VRSN, KC_OS_UNDO, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_MAKE, KC_OS_COPY, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, + KC_EXECUTE,KC_OS_PASTE, KC_LSFT, KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, + KC_FIND, KC_OS_CUT, KC_CAPS,KC_LGUI,KC_LALT, KC_SPC, KC_RGUI,KC_APP,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT + ), + }; diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md b/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md @@ -0,0 +1,12 @@ +Overview +======== + +This is my personal Sun Type 5 configuration. + +How to build +------------ + + make converter/sun_usb/type5:sigma:teensy + +Layers +------ diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk b/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk @@ -0,0 +1 @@ +BOOTLOADER = halfkay diff --git a/users/sigma/config.h b/users/sigma/config.h @@ -0,0 +1,21 @@ +/* + Copyright 2018 Yann Hodique <yann.hodique@gmail.com> @sigma + + 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/>. +*/ +#pragma once + +#define LEADER_TIMEOUT 1000 + +#define MACRO_TIMER 5 diff --git a/users/sigma/rules.mk b/users/sigma/rules.mk @@ -0,0 +1,3 @@ +LEADER_ENABLE = yes + +SRC += sigma.c diff --git a/users/sigma/sigma.c b/users/sigma/sigma.c @@ -0,0 +1,276 @@ +/* + Copyright 2018 Yann Hodique <yann.hodique@gmail.com> @sigma + + 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/>. +*/ +#include "sigma.h" + +userspace_config_t runtime_userspace_config; +userspace_config_t stored_userspace_config; + +__attribute__ ((weak)) +void matrix_init_keymap(void) {} + +__attribute__ ((weak)) +void startup_keymap(void) {} + +__attribute__ ((weak)) +void shutdown_keymap(void) {} + +__attribute__ ((weak)) +void suspend_power_down_keymap(void) {} + +__attribute__ ((weak)) +void suspend_wakeup_init_keymap(void) {} + +__attribute__ ((weak)) +void matrix_scan_keymap(void) {} + +__attribute__ ((weak)) +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + return true; +} + +__attribute__ ((weak)) +bool process_record_secrets(uint16_t keycode, keyrecord_t *record) { + return true; +} + + +__attribute__ ((weak)) +uint32_t layer_state_set_keymap (uint32_t state) { + return state; +} + +__attribute__ ((weak)) +uint32_t default_layer_state_set_keymap (uint32_t state) { + return state; +} + +__attribute__ ((weak)) +void led_set_keymap(uint8_t usb_led) {} + +void set_os(uint8_t os) { + runtime_userspace_config.os_target = os; + + switch (os) { + case _OS_MACOS: + set_unicode_input_mode(UC_OSX); + break; + case _OS_LINUX: + set_unicode_input_mode(UC_LNX); + break; + case _OS_WINDOWS: + set_unicode_input_mode(UC_WIN); + break; + } +} + +void matrix_init_user(void) { + stored_userspace_config.raw = eeconfig_read_user(); + runtime_userspace_config.raw = stored_userspace_config.raw; + + set_os(runtime_userspace_config.os_target); +} + +void store_userspace_config(void) { + eeconfig_update_user(stored_userspace_config.raw); +} + +LEADER_EXTERNS(); + +void matrix_scan_user(void) { + LEADER_DICTIONARY() { + leading = false; + leader_end(); + + SEQ_TWO_KEYS(KC_F1, KC_L) { + set_os(_OS_LINUX); + } + SEQ_TWO_KEYS(KC_F1, KC_M) { + set_os(_OS_MACOS); + } + SEQ_TWO_KEYS(KC_F1, KC_W) { + set_os(_OS_WINDOWS); + } + SEQ_TWO_KEYS(KC_F1, KC_S) { + stored_userspace_config.raw = runtime_userspace_config.raw; + store_userspace_config(); + } + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + uint8_t os_target = runtime_userspace_config.os_target; + bool pressed = record->event.pressed; + + switch (keycode) { + case KC_QWERTY: + if (pressed) { + set_single_persistent_default_layer(_QWERTY); + } + return false; + break; + + case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader + if (!pressed) { + send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP +#if defined(__ARM__) + ":dfu-util" +#elif defined(BOOTLOADER_DFU) + ":dfu" +#elif defined(BOOTLOADER_HALFKAY) + ":teensy" +#elif defined(BOOTLOADER_CATERINA) + ":avrdude" +#endif // bootloader options + SS_TAP(X_ENTER)), 10); + } + return false; + break; + + case EPRM: // Resets EEPROM + if (pressed) { + eeconfig_init(); + default_layer_set(1UL<<eeconfig_read_default_layer()); + layer_state_set(layer_state); + set_os(_OS_MACOS); + store_userspace_config(); + } + return false; + break; + case VRSN: // Prints firmware version + if (pressed) { + send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), MACRO_TIMER); + } + return false; + break; + + case KC_OS_CUT: + switch (os_target) { + case _OS_MACOS: + if (pressed) + SEND_STRING(SS_LGUI("x")); + break; + case _OS_LINUX: + pressed ? + register_code(KC_CUT) + : unregister_code(KC_CUT); + break; + default: + if (pressed) + SEND_STRING(SS_LCTRL("x")); + break; + } + break; + + case KC_OS_COPY: + switch (os_target) { + case _OS_MACOS: + if (pressed) + SEND_STRING(SS_LGUI("c")); + break; + case _OS_LINUX: + pressed ? + register_code(KC_COPY) + : unregister_code(KC_COPY); + break; + default: + if (pressed) + SEND_STRING(SS_LCTRL("c")); + break; + } + break; + + case KC_OS_PASTE: + switch (os_target) { + case _OS_MACOS: + if (pressed) + SEND_STRING(SS_LGUI("v")); + break; + case _OS_LINUX: + pressed ? + register_code(KC_PASTE) + : unregister_code(KC_PASTE); + break; + default: + if (pressed) + SEND_STRING(SS_LCTRL("v")); + break; + } + break; + + case KC_OS_UNDO: + switch (os_target) { + case _OS_MACOS: + if (pressed) + SEND_STRING(SS_LGUI("z")); + break; + case _OS_LINUX: + pressed ? + register_code(KC_UNDO) + : unregister_code(KC_UNDO); + break; + default: + if (pressed) + SEND_STRING(SS_LCTRL("z")); + break; + } + break; + + case KC_OS_REDO: + switch (os_target) { + case _OS_MACOS: + if (pressed) + SEND_STRING(SS_LGUI(SS_LSFT("z"))); + break; + case _OS_LINUX: + pressed ? + register_code(KC_AGAIN) + : unregister_code(KC_AGAIN); + break; + default: + if (pressed) + SEND_STRING(SS_LCTRL(SS_LSFT("z"))); + break; + } + break; + + case KC_OS_LOCK: + switch (os_target) { + case _OS_MACOS: + if (pressed) + SEND_STRING(SS_LGUI(SS_LCTRL("q"))); + break; + case _OS_LINUX: + pressed ? + register_code(KC_PWR) + : unregister_code(KC_PWR); + break; + default: + if (pressed) + SEND_STRING(SS_LGUI("l")); + break; + } + break; + + case KC_SCRT: + if (pressed) { + SEND_STRING(SS_LGUI("`")); + } + break; + } + + return process_record_keymap(keycode, record); +} diff --git a/users/sigma/sigma.h b/users/sigma/sigma.h @@ -0,0 +1,58 @@ +/* + Copyright 2018 Yann Hodique <yann.hodique@gmail.com> @sigma + + 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/>. +*/ +#pragma once + +#include "quantum.h" +#include "version.h" +#include "eeprom.h" + +// Define os types +enum os_types + { + _OS_MACOS = 0, + _OS_LINUX, + _OS_WINDOWS, + }; + +// Define layer names +enum userspace_layers + { + _QWERTY = 0, + }; + +typedef union { + uint32_t raw; + struct { + uint8_t os_target :2; + }; +} userspace_config_t; + +enum userspace_custom_keycodes + { + EPRM = SAFE_RANGE, // Resets EEPROM + VRSN, // Prints QMK Firmware and board info + KC_QWERTY, // Sets default layer to QWERTY + KC_MAKE, // Rebuild the current firmware + KC_OS_CUT, + KC_OS_COPY, + KC_OS_PASTE, + KC_OS_UNDO, + KC_OS_REDO, + KC_OS_LOCK, + KC_SCRT, + NEW_SAFE_RANGE //use NEW_SAFE_RANGE for keymap specific codes + };