summaryrefslogtreecommitdiff
path: root/keyboards/knops/mini/keymaps/mverteuil/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/knops/mini/keymaps/mverteuil/keymap.c')
-rw-r--r--keyboards/knops/mini/keymaps/mverteuil/keymap.c306
1 files changed, 306 insertions, 0 deletions
diff --git a/keyboards/knops/mini/keymaps/mverteuil/keymap.c b/keyboards/knops/mini/keymaps/mverteuil/keymap.c
new file mode 100644
index 0000000000..5ecba0d5a1
--- /dev/null
+++ b/keyboards/knops/mini/keymaps/mverteuil/keymap.c
@@ -0,0 +1,306 @@
+#include QMK_KEYBOARD_H
+
+#define MAXIMIZ A(G(KC_F))
+#define NXTDSPL C(A(G(KC_RIGHT)))
+#define BTMHALF A(G(KC_DOWN))
+#define TOPHALF A(G(KC_UP))
+#define NXTTHRD SS_LCTL(SS_LALT(SS_TAP(X_RIGHT)))
+#define PRVTHRD C(A(KC_LEFT))
+
+#define LT_MSTP LT(_LAYER_SELECT, KC_MSTP)
+#define LT_ESC LT(_LAYER_SELECT, KC_ESC)
+#define LT_NXTH TD(TD_SPEC)
+
+#define writeLayerLedState(layer) writePin(layer)
+#define layer_led_0_off B6, false
+#define layer_led_1_off D5, true
+#define layer_led_2_off B0, false
+#define layer_led_0_on B6, true
+#define layer_led_1_on D5, false
+#define layer_led_2_on B0, true
+
+void led_init_animation(void);
+void led_set_layer(int layer);
+void td_spectacles_finish(qk_tap_dance_state_t *state, void *user_data);
+void td_spectacles_reset(qk_tap_dance_state_t *state, void *user_data);
+
+enum layer_led_mode {
+ ALL_LAYERS_OFF = -1,
+ LAYER_0,
+ LAYER_1,
+ LAYER_2,
+ LAYER_3,
+ LAYER_4,
+ LAYER_5,
+ ALL_LAYERS_ON,
+};
+
+enum mini_layers {
+ _MEDIA,
+ _COPYPASTA,
+ _SPECTACLES,
+ _LAYER_3,
+ _LAYER_4,
+ _LAYER_5,
+ _LAYER_SELECT,
+};
+
+enum { TD_SPEC = 0 };
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ /* Tap once for spectacles macro, hold for layer toggle */
+ [TD_SPEC] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_spectacles_finish, td_spectacles_reset),
+};
+
+/*
+ * Key Layout
+ * _____ _____ _____
+ * | | | | | |
+ * | 1 | | 2 | | 3 |
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * | | | | | |
+ * | 4 | | 5 | | 6 |
+ * |_____| |_____| |_____|
+ *
+ * Hold 1 and:
+ * - press 4, 5, or 6 to change layers
+ * - press 3 to reset, or press and hold 3 to enter DFU programming mode
+ *
+ * If something prevents you from using the above to reprogram, you can hold 3 while powering on as a fallback.
+ */
+
+/* clang-format off */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * Layer 0 (Media Keys)
+ * _____ _____ _____
+ * | | | | | |
+ * |Stop | |VolUp| |Play |
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * | | | | | |
+ * |Prev | |VolDn| |Next |
+ * |_____| |_____| |_____|
+ *
+ */
+ [_MEDIA] = LAYOUT(
+ LT_MSTP, KC_VOLU, KC_MPLY,
+ KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+
+ /*
+ * Layer 1 (Copy and Paste Macros)
+ * _____ _____ _____
+ * | | | | | |
+ * | ESC | |Ctl+Z| |CSf+Z|
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * | | | | | |
+ * |Ctl+X| |Ctl+C| |Ctl+V|
+ * |_____| |_____| |_____|
+ *
+ */
+
+ [_COPYPASTA] = LAYOUT(
+ LT_ESC, C(KC_Z), C(S(KC_Z)),
+ C(KC_X), C(KC_C), C(KC_V)
+ ),
+
+ /*
+ * Layer 2 (Spectacles Macros)
+ * _LT&_ _____ _____
+ * | Win | | Win | | Win |
+ * | Next| | Top | |Mximze
+ * |_1/3_| |_1/2_| |_____|
+ * _____ _____ _____
+ * | Win | | Win | | Win |
+ * | Prev| | Bot | | Next|
+ * |_1/3_| |_1/2_| |Displ|
+ *
+ */
+ [_SPECTACLES] = LAYOUT(
+ LT_NXTH,TOPHALF,MAXIMIZ,
+ PRVTHRD,BTMHALF,NXTDSPL
+ ),
+
+ /*
+ * Layer 6 (Layer Select/Reset)
+ * _____ _____ _____
+ * | | | | | |
+ * |None | |None | |Reset|
+ * |_____| |_____| |_____|
+ * _____ _____ _____
+ * |Layer| |Layer| |Layer|
+ * | 0 | | 1 | | 2 |
+ * |_____| |_____| |_____|
+ *
+ * Layers 0, 1, and 2 have the top left button held to activate this layer.
+ * Then press the specific layer to switch to it.
+ *
+ */
+ [_LAYER_SELECT] = LAYOUT(
+ _______, _______, RESET,
+ TO(_MEDIA),TO(_COPYPASTA),TO(_SPECTACLES)
+ )
+};
+/* clang-format on */
+
+/*
+ * Knops Mini LED Numbers:
+ * _____ _____ _____
+ * | | | | | |
+ * | 1 | | 2 | | 3 | <---
+ * |_____| |_____| |_____| | These LEDs are called 'Switch LEDs'
+ * _____ _____ _____ |----- To turn on/off these leds, use:
+ * | | | | | | | set_switch_led( [1-6], [true/false]);
+ * | 4 | | 5 | | 6 | <---
+ * |_____| |_____| |_____|
+ *
+ * < 0 > < 1 > < 2 > <--- These front-LEDs are called 'Layer LEDs'
+ * To turn on/off these leds, use:
+ * set_layer_led( [0-2], [true/false] );
+ */
+
+void set_switch_led(int ledId, bool state) {
+ switch (ledId) {
+ case 1:
+ writePin(D7, state);
+ break;
+ case 2:
+ writePin(readPin(B7) ? C6 : C7, state);
+ break;
+ case 3:
+ writePin(D4, state);
+ break;
+ case 4:
+ writePin(E6, state);
+ break;
+ case 5:
+ writePin(B4, state);
+ break;
+ case 6:
+ writePin(D6, state);
+ break;
+ }
+}
+
+void set_layer_led(int layerLedMode) {
+ writeLayerLedState(layer_led_0_off);
+ writeLayerLedState(layer_led_1_off);
+ writeLayerLedState(layer_led_2_off);
+
+ switch (layerLedMode) {
+ case ALL_LAYERS_OFF:
+ break;
+ case LAYER_0:
+ writeLayerLedState(layer_led_0_on);
+ break;
+ case LAYER_1:
+ writeLayerLedState(layer_led_1_on);
+ break;
+ case LAYER_2:
+ writeLayerLedState(layer_led_2_on);
+ break;
+ case LAYER_3:
+ writeLayerLedState(layer_led_0_on);
+ writeLayerLedState(layer_led_1_on);
+ break;
+ case LAYER_4:
+ writeLayerLedState(layer_led_1_on);
+ writeLayerLedState(layer_led_2_on);
+ break;
+ case LAYER_5:
+ writeLayerLedState(layer_led_0_on);
+ writeLayerLedState(layer_led_2_on);
+ break;
+ default:
+ writeLayerLedState(layer_led_0_on);
+ writeLayerLedState(layer_led_1_on);
+ writeLayerLedState(layer_led_2_on);
+ break;
+ }
+}
+
+void led_init_animation() {
+ for (int i = ALL_LAYERS_OFF; i <= ALL_LAYERS_ON; i++) {
+ led_set_layer(i);
+ }
+
+ led_set_layer(LAYER_0);
+}
+
+/*
+ * This function led_set_layer gets called when you switch between layers.
+ * It allows you to turn on and off leds for each different layer and do
+ * other cool stuff.
+ */
+void led_set_layer(int layer) {
+ switch (layer) {
+ case ALL_LAYERS_OFF:
+ set_switch_led(1, false);
+ set_switch_led(2, false);
+ set_switch_led(3, false);
+ set_switch_led(4, false);
+ set_switch_led(5, false);
+ set_switch_led(6, false);
+
+ case _LAYER_SELECT:
+ set_switch_led(1, false);
+ set_switch_led(2, false);
+ set_switch_led(3, false);
+ set_switch_led(4, true);
+ set_switch_led(5, true);
+ set_switch_led(6, true);
+ break;
+
+ default:
+ set_switch_led(1, true);
+ set_switch_led(2, true);
+ set_switch_led(3, true);
+ set_switch_led(4, true);
+ set_switch_led(5, true);
+ set_switch_led(6, true);
+ break;
+ }
+
+ set_layer_led(layer);
+}
+
+/*
+ * Prepare all LED ports for output
+ */
+void led_init_ports() {
+ setPinOutput(D7); // Switch 1 LED
+ setPinOutput(C6); // Switch 2 LED Pin1
+ setPinOutput(C7); // Switch 2 LED Pin2
+ setPinOutput(D4); // Switch 3 LED
+ setPinOutput(E6); // Switch 4 LED
+ setPinOutput(B4); // Switch 5 LED
+ setPinOutput(D6); // Switch 6 LED
+ setPinOutput(D5); // Layer 0 LED
+ setPinOutput(B6); // Layer 1 LED
+ setPinOutput(B0); // Layer 2 LED
+}
+
+// Runs on layer change, no matter where the change was initiated
+layer_state_t layer_state_set_user(layer_state_t state) {
+ set_layer_led(get_highest_layer(state));
+ led_set_layer(get_highest_layer(state));
+ return state;
+}
+
+void matrix_init_user(void) {
+ led_init_ports();
+ led_init_animation();
+}
+
+void td_spectacles_finish(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->pressed) {
+ layer_on(_LAYER_SELECT);
+ } else {
+ SEND_STRING(NXTTHRD);
+ }
+}
+
+void td_spectacles_reset(qk_tap_dance_state_t *state, void *user_data) { layer_off(_LAYER_SELECT); }