瀏覽代碼

[Keyboard] obuwunkunubi/spaget handwired (#8738)

* adding my keymap

* Update keyboards/handwired/obuwunkunubi/spaget/readme.md

* Update keyboards/handwired/obuwunkunubi/spaget/readme.md

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/rules.mk

* Update rules.mk

* Update keyboards/handwired/obuwunkunubi/spaget/spaget.h

* Update keyboards/handwired/obuwunkunubi/spaget/spaget.h

* Update keyboards/handwired/obuwunkunubi/spaget/info.json

* Update keyboards/handwired/obuwunkunubi/spaget/rules.mk

* Update rules.mk

* Update keyboards/handwired/obuwunkunubi/spaget/spaget.c

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

* Update keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

* Update keyboards/handwired/obuwunkunubi/spaget/info.json

* Update keymap.c

* Apply suggestions from code review

* Apply suggestions from code review

* Update spaget.h

* Update keymap.c

Updated comments
Marko Bakan 5 年之前
父節點
當前提交
6384a2abd8

+ 74 - 0
keyboards/handwired/obuwunkunubi/spaget/config.h

@@ -0,0 +1,74 @@
+/*
+Copyright 2020 obuwunkunubi
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0x1337
+#define PRODUCT_ID      0x6969
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    obuwunkunubi
+#define PRODUCT         spaget
+#define DESCRIPTION     numpad with 2 encoders and a screen
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { B1, B3, B2, B6 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+//#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Define encoder pins */
+#define ENCODERS_PAD_A { F5, F7 } // 1a, 2a
+#define ENCODERS_PAD_B { F4, F6 } // 1b, 2b
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION

+ 36 - 0
keyboards/handwired/obuwunkunubi/spaget/info.json

@@ -0,0 +1,36 @@
+{
+    "keyboard_name": "spaget",
+    "url": "",
+    "maintainer": "obuwunkunubi",
+    "width": 4,
+    "height": 7.5,
+    "layouts": {
+        "LAYOUT": {
+            "layout": [
+                {"x":0, "y":0},
+                {"x":3, "y":0},
+                {"x":0, "y":1.5},
+                {"x":1, "y":1.5},
+                {"x":2, "y":1.5},
+                {"x":3, "y":1.5},
+                {"x":0, "y":2.5},
+                {"x":1, "y":2.5},
+                {"x":2, "y":2.5},
+                {"x":3, "y":2.5},
+                {"x":0, "y":3.5},
+                {"x":1, "y":3.5},
+                {"x":2, "y":3.5},
+                {"x":0, "y":4.5},
+                {"x":1, "y":4.5},
+                {"x":2, "y":4.5},
+                {"x":3, "y":3.5, "h":2},
+                {"x":0, "y":5.5},
+                {"x":1, "y":5.5},
+                {"x":2, "y":5.5},
+                {"x":0, "y":6.5, "w":2},
+                {"x":2, "y":6.5},
+                {"x":3, "y":5.5, "h":2}
+			]
+        }
+    }
+}

+ 435 - 0
keyboards/handwired/obuwunkunubi/spaget/keymaps/default/keymap.c

@@ -0,0 +1,435 @@
+/* Copyright 2020 obuwunkunubi
+*
+* 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
+
+// Defines for shortcut macros
+#define KC_CAD LALT(LCTL(KC_DEL)) // CTRL + ALT + DEL
+#define KC_CPY LCTL(KC_C) // Copy
+#define KC_PST LCTL(KC_V) // Paste
+#define KC_AF4 LALT(KC_F4) // ALT + F4
+
+enum custom_keycodes {
+  SELWN = SAFE_RANGE,
+  SELWP,
+  EM1,
+  EM2,
+  EM3,
+  EM4,
+  EM5,
+  EM6,
+  EM7,
+  EM8,
+  EM9,
+  MAKE1,
+  MAKE2,
+  MAIL1,
+  MAIL2,
+  OBUWUN,
+  DIR
+};
+
+enum layer_names {
+  BASE,
+  ONE,
+  TWO
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+  /* Keymap BASE: Base Layer
+  *
+  *      ,---.       ,---.
+  *      |NUM|       |PLY|
+  *      `---'       `---'
+  *      ,---------------.
+  *      |CAL| UP|PRE|NXT|
+  *      |---------------|
+  *      | = | / | * | - |
+  *      |---------------|
+  *      | 7 | 8 | 9 |   |
+  *      |------------ + |
+  *      | 4 | 5 | 6 |   |
+  *      |---------------|
+  *      | 1 | 2 | 3 |   |
+  *      |------------ENT|
+  *      |   0   | . |   |
+  *      `---------------'
+  */
+  [BASE] = LAYOUT(                      \
+    KC_NLCK,                   KC_MPLY, \
+    KC_CALC, TO(ONE), KC_MPRV, KC_MNXT, \
+    KC_EQL,  KC_PSLS, KC_PAST, KC_MINS, \
+    KC_P7,   KC_P8,   KC_P9,            \
+    KC_P4,   KC_P5,   KC_P6,   KC_PPLS, \
+    KC_P1,   KC_P2,   KC_P3,            \
+             KC_P0,   KC_PDOT, KC_PENT  \
+  ),
+    
+  /* Keymap ONE: Util Layer
+  *
+  *      ,---.       ,---.
+  *      |RST|       |CAD|
+  *      `---'       `---'
+  *      ,---------------.
+  *      |BAS|TWO|MK1|MK2|
+  *      |---------------|
+  *      |DIR|@1 |@2 |OBU|
+  *      |---------------|
+  *      |SWP|AF4|SWN|   |
+  *      |------------PSC|
+  *      |CPY| U |PST|   |
+  *      |---------------|
+  *      | L | D | R |   |
+  *      |------------ NO|
+  *      |  NO   | NO|   |
+  *      `---------------'
+  */
+  [ONE] = LAYOUT(                        \
+    RESET,                      KC_CAD,  \
+    TO(BASE), TO(TWO), MAKE1,   MAKE2,   \
+    DIR,      MAIL1,   MAIL2,   OBUWUN,  \
+    SELWP,    KC_AF4,  SELWN,            \
+    KC_CPY,   KC_UP,   KC_PST,  KC_PSCR, \
+    KC_LEFT,  KC_DOWN, KC_RGHT,          \
+              KC_P0,   KC_PDOT, KC_PENT  \
+  ),
+
+  /* Keymap TWO: Emoji Layer
+  *
+  *      ,---.       ,---.
+  *      | NO|       | NO|
+  *      `---'       `---'
+  *      ,---------------.
+  *      |ONE|BAS| [ | ] |
+  *      |---------------|
+  *      |F13|F14|F15|F16|
+  *      |---------------|
+  *      |EM7|EM8|EM9|   |
+  *      |------------ NO|
+  *      |EM4|EM5|EM6|   |
+  *      |---------------|
+  *      |EM1|EM2|EM3|   |
+  *      |------------ NO|
+  *      |  NO   | NO|   |
+  *      `---------------'
+  */
+  [TWO] = LAYOUT(                        \
+    KC_NO,                      KC_NO,   \
+    TO(ONE), TO(BASE), KC_LBRC, KC_RBRC, \
+    KC_F13,  KC_F14,   KC_F15,  KC_F16,  \
+    EM7,     EM8,      EM9,              \
+    EM4,     EM5,      EM6,     KC_NO,   \
+    EM1,     EM2,      EM3,              \
+             KC_NO,    KC_NO,   KC_NO    \
+  ),
+
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+
+    case SELWN:  // select and copy next word
+    if (record->event.pressed) {
+      // when keycode SELWN is pressed
+
+      tap_code16(C(S(KC_RGHT)));
+      tap_code16(KC_CPY);
+      return false; break;
+
+    } else {
+      // when keycode SELWN is released
+    }
+    break;
+
+    case SELWP:   // select and copy previous word
+    if (record->event.pressed) {
+      // when keycode SELWP is pressed
+
+      tap_code16(C(S(KC_LEFT)));
+      tap_code16(KC_CPY);
+      return false; break;
+
+    } else {
+      // when keycode SELWP is released
+    }
+    break;
+
+    case MAKE1:
+    if (record->event.pressed) {
+      // when keycode MAKE1 is pressed
+
+      send_string("make handwired/obuwunkunubi/spaget:default:avrdude");
+
+    } else {
+      // when keycode MAKE1 is released
+    }
+    break;
+
+    case MAKE2:
+    if (record->event.pressed) {
+      // when keycode MAKE2 is pressed
+
+      send_string("make preonic/rev3:obuwunkunubi:dfu-util");
+
+    } else {
+      // when keycode MAKE2 is released
+    }
+    break;
+
+    case DIR:
+    if (record->event.pressed) {
+      // when keycode DIR is pressed
+
+      send_string("cd /d/Keyboards/qmk/qmk_firmware/");
+
+    } else {
+      // when keycode DIR is released
+    }
+    break;
+
+    case OBUWUN:
+    if (record->event.pressed) {
+      // when keycode OBUWUN is pressed
+
+      send_string("obuwunkunubi");
+
+    } else {
+      // when keycode OBUWUN is released
+    }
+    break;
+
+    case MAIL1:
+    if (record->event.pressed) {
+      // when keycode MAIL1 is pressed
+
+      send_string("marko.bakan7");
+
+    } else {
+      // when keycode MAIL1 is released
+    }
+    break;
+
+    case MAIL2:
+    if (record->event.pressed) {
+      // when keycode MAIL2 is pressed
+
+      send_string("bakan.marko7");
+
+    } else {
+      // when keycode MAIL2 is released
+    }
+    break;
+
+    case EM1:
+    if (record->event.pressed) {
+      // when keycode EM1 is pressed
+
+      send_unicode_string("ʕ•ᴥ•ʔ");
+
+    } else {
+      // when keycode EM1 is released
+    }
+    break;
+
+    case EM2:
+    if (record->event.pressed) {
+      // when keycode EM2 is pressed
+
+      send_unicode_string("༼ つ ◕_◕ ༽つ");
+
+    } else {
+      // when keycode EM2 is released
+    }
+    break;
+
+    case EM3:
+    if (record->event.pressed) {
+      // when keycode EM3 is pressed
+
+      send_unicode_string("( ⌐■_■)");
+
+    } else {
+      // when keycode EM3 is released
+    }
+    break;
+
+    case EM4:
+    if (record->event.pressed) {
+      // when keycode EM4 is pressed
+
+      send_unicode_string("(╯°□°)╯彡 ┻━┻");
+
+    } else {
+      // when keycode EM4 is released
+    }
+    break;
+
+    case EM5:
+    if (record->event.pressed) {
+      // when keycode EM5 is pressed
+
+      send_unicode_string("ಠ_ಠ");
+
+    } else {
+      // when keycode EM5 is released
+    }
+    break;
+
+    case EM6:
+    if (record->event.pressed) {
+      // when keycode EM6 is pressed
+
+      send_unicode_string("( ͡° ͜ʖ ͡°)");
+
+    } else {
+      // when keycode EM6 is released
+    }
+    break;
+
+    case EM7:
+    if (record->event.pressed) {
+      // when keycode EM7 is pressed
+
+      send_unicode_string("(☞゚ヮ゚)☞");
+
+    } else {
+      // when keycode EM7 is released
+    }
+    break;
+
+    case EM8:
+    if (record->event.pressed) {
+      // when keycode EM8 is pressed
+
+      send_unicode_string("(^‿^)");
+
+    } else {
+      // when keycode EM8 is released
+    }
+    break;
+
+    case EM9:
+    if (record->event.pressed) {
+      // when keycode EM9 is pressed
+
+      send_unicode_string("¯\\_(ツ)_/¯");
+
+    } else {
+      // when keycode EM9 is released
+    }
+    break;
+
+  }
+  return true;
+};
+
+// Unicode input mode set to Windows using WinCompose
+void matrix_init_user(void) {
+    set_unicode_input_mode(UC_WINC);
+};
+#ifdef OLED_DRIVER_ENABLE
+void oled_task_user(void) {
+  oled_write_P(PSTR("       spaget v1\n\n"), false);
+
+  // Host Keyboard Layer Status
+  oled_write_P(PSTR("Layer: "), false);
+
+  switch (get_highest_layer(layer_state)) {
+    case BASE:
+    oled_write_P(PSTR("Base\n"), false);
+    break;
+    case ONE:
+    oled_write_P(PSTR("Util\n"), false);
+    break;
+    case TWO:
+    oled_write_P(PSTR("Emoji\n"), false);
+    break;
+    default:
+    oled_write_ln_P(PSTR("Undefined"), false);
+  }
+
+  // Host Keyboard LED Status
+  led_t led_state = host_keyboard_led_state();
+  oled_write_P(PSTR("Lock: "), false);
+  oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR("    "), false);
+  oled_write_P(led_state.caps_lock ? PSTR("CAPS ") : PSTR("     "), false);
+  oled_write_P(led_state.scroll_lock ? PSTR("SCROLL ") : PSTR("       "), false);
+}
+#endif
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+  if(IS_LAYER_ON(BASE)) {
+    if (index == 0) { /* First encoder */
+      if (clockwise) {
+        tap_code(KC_PGDN);
+      } else {
+        tap_code(KC_PGUP);
+      }
+    } else if (index == 1) { /* Second encoder */
+      if (clockwise) {
+        tap_code(KC_VOLU);
+      } else {
+        tap_code(KC_VOLD);
+      }
+    }
+  }
+  else if(IS_LAYER_ON(ONE)) {
+    if (index == 0) { /* First encoder */
+      if (clockwise) {
+        tap_code(KC_WH_R);
+      } else {
+        tap_code(KC_WH_L);
+      }
+    } else if (index == 1) { /* Second encoder */
+      if (clockwise) {
+        tap_code(KC_WH_D);
+      } else {
+        tap_code(KC_WH_U);
+      }
+    }
+  }
+  else if(IS_LAYER_ON(TWO)) {
+    if (index == 0) { /* First encoder */
+      if (clockwise) {
+        tap_code(KC_DEL);
+      } else {
+        tap_code(KC_BSPC);
+      }
+    } else if (index == 1) { /* Second encoder */
+      if (clockwise) {
+        tap_code(KC_DOWN);
+      } else {
+        tap_code(KC_UP);
+      }
+    }
+  }
+  else {
+    if (index == 0) { /* First encoder */
+      if (clockwise) {
+        tap_code(KC_PGDN);
+      } else {
+        tap_code(KC_PGUP);
+      }
+    } else if (index == 1) { /* Second encoder */
+      if (clockwise) {
+        tap_code(KC_VOLU);
+      } else {
+        tap_code(KC_VOLD);
+      }
+    }
+  }
+}

+ 1 - 0
keyboards/handwired/obuwunkunubi/spaget/keymaps/default/readme.md

@@ -0,0 +1 @@
+# default spaget layout

+ 1 - 0
keyboards/handwired/obuwunkunubi/spaget/keymaps/default/rules.mk

@@ -0,0 +1 @@
+# Build Overrides

+ 14 - 0
keyboards/handwired/obuwunkunubi/spaget/readme.md

@@ -0,0 +1,14 @@
+# spaget
+
+![spaget](https://i.imgur.com/ktlhskZ.jpg)
+
+A hand wired numpad style QMK macropad, with a 128x32 OLED screen and two rotary encoders. Powered by an Arduino Pro Micro.
+
+* Keyboard Maintainer: [obuwunkunubi](https://github.com/obuwunkunubi)
+* Hardware Supported: spaget v1
+
+Make example for this keyboard (after setting up your build environment):
+
+    make handwired/obuwunkunubi/spaget:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 34 - 0
keyboards/handwired/obuwunkunubi/spaget/rules.mk

@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   ATmega32A    bootloadHID
+#   ATmega328P   USBasp
+BOOTLOADER = caterina
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = lite  # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes    # Mouse keys
+EXTRAKEY_ENABLE = yes    # Audio control and System control
+CONSOLE_ENABLE = no      # Console for debug
+COMMAND_ENABLE = yes     # Commands for debug and configuration
+NKRO_ENABLE = yes        # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = no     # Enable keyboard underlight functionality
+BACKLIGHT_ENABLE = no    # Enable keyboard backlight functionality
+MIDI_ENABLE = no         # MIDI controls
+AUDIO_ENABLE = no
+UNICODE_ENABLE = yes     # Unicode
+BLUETOOTH_ENABLE = no    # Enable Bluetooth with the Adafruit EZ-Key HID
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+AUDIO_ENABLE = no        # Audio output on port C6
+
+OLED_DRIVER_ENABLE = yes # Enable OLED display support
+ENCODER_ENABLE = yes     # Enable encoder support
+

+ 16 - 0
keyboards/handwired/obuwunkunubi/spaget/spaget.c

@@ -0,0 +1,16 @@
+/* Copyright 2020 obuwunkunubi
+ *
+ * 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 "spaget.h"

+ 47 - 0
keyboards/handwired/obuwunkunubi/spaget/spaget.h

@@ -0,0 +1,47 @@
+/* Copyright 2020 obuwunkunubi
+ *
+ * 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"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+// readability
+#define XXX KC_NO
+
+#define LAYOUT( \
+    K23,           K43, \
+	K00, K01, K02, K03, \
+	K10, K11, K12, K13, \
+	K20, K21, K22,      \
+	K30, K31, K32, K33, \
+	K40, K41, K42,      \
+	     K51, K52, K53  \
+) { \
+	{ K00, K01, K02, K03 }, \
+	{ K10, K11, K12, K13 }, \
+	{ K20, K21, K22, K23 }, \
+	{ K30, K31, K32, K33 }, \
+	{ K40, K41, K42, K43 }, \
+	{ XXX, K51, K52, K53 }  \
+}