浏览代码

[Keymap] dumbpad updates, new keymap (#6481)

* removed some debug prints

* removed unnecessary files, tweaked some things

* rotary encoder button now connected into column 0, row 3

* tweaked keymap and moved encoder control into keymap

* tweaks

* added test keymap

* updated some things to make it easier to work with QMK configurator

* updates after merging latest master in

* fixed a few things

* removed test keymap and all related #ifdefs

* changed some dumbpad default keys, added KC_LOCK

* added image to readme

* added link to PCB github repo

* moved lock key to the rotary encoder pushbutton

* making suggested changes from @fauxpark in https://github.com/qmk/qmk_firmware/pull/6452

* adding bootmagic lite since i'm lazy and haven't soldered on the reset button...

* renamed  to

* using 7 underscores for KC_TRNS

* adding my layout (default is for wife)

* updated my own layout, tweaked default keymap to use cleaner switch for encoder control

* removed commented out import from imchipwood keymap, removed unnecessary comment from default layout

* added LED layer control

* flash the layer indicator LEDs at startup

* change layer_state_set_user to layer_state_set_kb

Co-Authored-By: Joel Challis <git@zvecr.com>

* in layer_state_set_kb, return layer_state_set_user

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* remove include of upper level config.h, add pragma once

Co-Authored-By: Drashna Jaelre <drashna@live.com>

* changing default keymap slightly, added config.h for default layout

* change _delay_ms to wait_ms

* replaced locking numlock with numlock

* Update keyboards/dumbpad/dumbpad.c

change `keyboard_pre_init_user` to `keyboard_pre_init_kb`

Co-Authored-By: Joel Challis <git@zvecr.com>

* Update keyboards/dumbpad/dumbpad.c

adding `keyboard_pre_init_user()` to `keyboard_pre_init_kb()`

Co-Authored-By: Joel Challis <git@zvecr.com>

* fixed some comments about the layer key (MO to TT) and the SUB layer rotary encoder control
imchipwood 5 年之前
父节点
当前提交
977c316eb1

+ 4 - 0
keyboards/dumbpad/config.h

@@ -51,6 +51,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define ENCODERS_PAD_A { D0 }
 #define ENCODERS_PAD_B { D4 }
 
+/* LED layer indicators */
+#define LAYER_INDICATOR_LED_0 B3
+#define LAYER_INDICATOR_LED_1 B1
+
 /* Bootmagic - hold down rotary encoder pushbutton while plugging in to enter bootloader */
 #define BOOTMAGIC_LITE_ROW 3
 #define BOOTMAGIC_LITE_COLUMN 0

+ 36 - 4
keyboards/dumbpad/dumbpad.c

@@ -15,15 +15,49 @@
  */
 #include "dumbpad.h"
 
+void keyboard_pre_init_kb(void) {
+  // Set the layer LED IO as outputs
+  setPinOutput(LAYER_INDICATOR_LED_0);
+  setPinOutput(LAYER_INDICATOR_LED_1);
+  
+  keyboard_pre_init_user();
+}
+
+void shutdown_user() {
+  // Shutdown the layer LEDs
+  writePinLow(LAYER_INDICATOR_LED_0);
+  writePinLow(LAYER_INDICATOR_LED_1);
+}
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+  // Layer LEDs act as binary indication of current layer
+  uint8_t layer = biton32(state);
+  writePin(LAYER_INDICATOR_LED_0, layer & 0b1);
+  writePin(LAYER_INDICATOR_LED_1, (layer >> 1) & 0b1);
+  return layer_state_set_user(state);
+}
+
 // Optional override functions below.
 // You can leave any or all of these undefined.
 // These are only required if you want to perform custom actions.
 
-/*
-
 void matrix_init_kb(void) {
   // put your keyboard start-up code here
   // runs once when the firmware starts up
+  for (int i = 0; i < 2; i++) {
+    writePin(LAYER_INDICATOR_LED_0, true);
+    writePin(LAYER_INDICATOR_LED_1, false);
+    wait_ms(100);
+    writePin(LAYER_INDICATOR_LED_0, true);
+    writePin(LAYER_INDICATOR_LED_1, true);
+    wait_ms(100);
+    writePin(LAYER_INDICATOR_LED_0, false);
+    writePin(LAYER_INDICATOR_LED_1, true);
+    wait_ms(100);
+    writePin(LAYER_INDICATOR_LED_0, false);
+    writePin(LAYER_INDICATOR_LED_1, false);
+    wait_ms(100);
+  }
 
   matrix_init_user();
 }
@@ -47,5 +81,3 @@ void led_set_kb(uint8_t usb_led) {
 
   led_set_user(usb_led);
 }
-
-*/

+ 2 - 0
keyboards/dumbpad/keymaps/default/config.h

@@ -0,0 +1,2 @@
+#pragma once
+#define TAPPING_TOGGLE 2

+ 30 - 15
keyboards/dumbpad/keymaps/default/keymap.c

@@ -28,14 +28,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    |             |---------|---------|---------|---------|
    |             |    1    |    2    |    3    |   Tab   |
    |-------------|---------|---------|---------|---------|
-   | Left mouse  | MO(SUB) |    0    |    .    |  Enter  |
+   | Left mouse  | TT(SUB) |    0    |    .    |  Enter  |
    \-----------------------------------------------------'
   */
-  [_BASE] = LAYOUT( /* Base */
+  [_BASE] = LAYOUT(
                    KC_7,      KC_8,    KC_9,     KC_BSPC, 
                    KC_4,      KC_5,    KC_6,     KC_ESC, 
                    KC_1,      KC_2,    KC_3,     KC_TAB, 
-    KC_BTN1,       MO(_SUB),  KC_0,    KC_DOT,   KC_ENTER
+    KC_BTN1,       TT(_SUB),  KC_0,    KC_DOT,   KC_ENTER
   ),
   /*
         SUB LAYER
@@ -88,19 +88,34 @@ void led_set_user(uint8_t usb_led) {
 }
 
 void encoder_update_user(uint8_t index, bool clockwise) {
+  /*  Custom encoder control - handles CW/CCW turning of encoder
+   *  Default behavior:
+   *    main layer:
+   *       CW: move mouse right
+   *      CCW: move mouse left
+   *    other layers:
+   *       CW: = (equals/plus - increase slider in Adobe products)
+   *      CCW: - (minus/underscore - decrease slider in adobe products)
+   */
   if (index == 0) {
-    if (layer_state && 0x1) {
-      if (clockwise) {
-        tap_code(KC_VOLU);
-      } else {
-        tap_code(KC_VOLD);
-      }
-    } else {
-      if (clockwise) {
-        tap_code(KC_MS_R);
-      } else {
-        tap_code(KC_MS_L);
-      }
+    switch (biton32(layer_state)) {
+      case _BASE:
+        // main layer - move mouse right (CW) and left (CCW)
+        if (clockwise) {
+          tap_code(KC_MS_R);
+        } else {
+          tap_code(KC_MS_L);
+        }
+        break;
+
+      default:
+        // other layers - =/+ (quals/plus) (CW) and -/_ (minus/underscore) (CCW)
+        if (clockwise) {
+          tap_code(KC_EQL);
+        } else {
+          tap_code(KC_MINS);
+        }
+        break;
     }
   }
 }

+ 2 - 0
keyboards/dumbpad/keymaps/imchipwood/config.h

@@ -0,0 +1,2 @@
+#pragma once
+#define TAPPING_TOGGLE 2

+ 163 - 0
keyboards/dumbpad/keymaps/imchipwood/keymap.c

@@ -0,0 +1,163 @@
+/* Copyright 2019 imchipwood
+ *
+ * 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
+
+#define _BASE     0
+#define _SUB      1
+#define _DBG      2
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  /*
+        BASE LAYER
+   /-----------------------------------------------------`
+   |             |    7    |    8    |    9    |  Bkspc  |
+   |             |---------|---------|---------|---------|
+   |             |    4    |    5    |    6    |    +    |
+   |             |---------|---------|---------|---------|
+   |             |    1    |    2    |    3    |    *    |
+   |-------------|---------|---------|---------|---------|
+   | Play/Pause  | TT(SUB) |    0    |    .    |  Enter  |
+   \-----------------------------------------------------'
+  */
+  [_BASE] = LAYOUT(
+                   KC_P7,     KC_P8,   KC_P9,    KC_BSPC, 
+                   KC_P4,     KC_P5,   KC_P6,    KC_KP_PLUS, 
+                   KC_P1,     KC_P2,   KC_P3,    KC_KP_ASTERISK, 
+    KC_MPLY,       TT(_SUB),  KC_P0,   KC_PDOT,  KC_KP_ENTER
+  ),
+  /*
+        SUB LAYER
+   /-----------------------------------------------------`
+   |             |         |         |         | Numlock |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |    -    |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |    /    |
+   |-------------|---------|---------|---------|---------|
+   |  MO(_DBG)   |         |         |         |    =    |
+   \-----------------------------------------------------'
+  */
+  [_SUB] = LAYOUT(
+                 _______,     _______,     _______,      KC_NLCK, 
+                 _______,     _______,     _______,      KC_KP_MINUS, 
+                 _______,     _______,     _______,      KC_KP_SLASH, 
+    MO(_DBG),    _______,     _______,     _______,      KC_KP_EQUAL
+  ),
+  /*
+        DEBUG LAYER
+   /-----------------------------------------------------`
+   |             |         |         |         |  Reset  |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |         |
+   |             |---------|---------|---------|---------|
+   |             |         |         |         |         |
+   |-------------|---------|---------|---------|---------|
+   |             |         |         |         |         |
+   \-----------------------------------------------------'
+  */
+  [_DBG] = LAYOUT(
+                 _______,     _______,     _______,      RESET, 
+                 _______,     _______,     _______,      _______, 
+                 _______,     _______,     _______,      _______, 
+    _______,     _______,     _______,     _______,      _______
+  ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  // If console is enabled, it will print the matrix position and status of each key pressed
+/*
+#ifdef CONSOLE_ENABLE
+    uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+#endif 
+*/
+  return true;
+}
+
+void keyboard_post_init_user(void) {
+  // Customise these values to desired behaviour
+  //debug_enable = true;
+  //debug_matrix = true;
+  //debug_keyboard = true;
+  //debug_mouse = true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+  /*  Custom encoder control - handles CW/CCW turning of encoder
+   *  Cusotom behavior:
+   *    main layer:
+   *       CW: volume up
+   *      CCW: volume down
+   *    sub layer:
+   *       CW: next media track
+   *      CCW: prev media track
+   *    debug layer:
+   *       CW: brightness up
+   *      CCW: brightness down
+   */
+  if (index == 0) {
+    switch (biton32(layer_state)) {
+      case _BASE:
+        // main layer - volume up (CW) and down (CCW)
+        if (clockwise) {
+          tap_code(KC_VOLU);
+        } else {
+          tap_code(KC_VOLD);
+        }
+        break;
+
+      case _SUB:
+        // sub layer - next track (CW) and previous track (CCW)
+        if (clockwise) {
+          tap_code(KC_MNXT);
+        } else {
+          tap_code(KC_MPRV);
+        }
+        break;
+
+      case _DBG:
+        // debug layer - brightness up (CW) and brightness down (CCW)
+        if (clockwise) {
+          tap_code(KC_BRIU);
+        } else {
+          tap_code(KC_BRID);
+        }
+        break;
+
+      default:
+        // any other layer (shouldn't exist..) - volume up (CW) and down (CCW)
+        if (clockwise) {
+          tap_code(KC_VOLU);
+        } else {
+          tap_code(KC_VOLD);
+        }
+        break;   
+    }
+  }
+}