~ruther/qmk_firmware

6d6340a82b3ed61f5dd2a40dac78712d7bd736fd — Herpiko Dwi Aguno 5 years ago 67beec5
[Keyboard] Add UNK keyboard. (#9571)

* Add UNK keyboard.

* Update keyboards/handwired/unk/info.json

* Use KC_NO to block out nonexistent matrix positions.

* Update keyboards/handwired/unk/readme.md

* Update keyboards/handwired/unk/keymaps/default/keymap.c
A keyboards/handwired/unk/info.json => keyboards/handwired/unk/info.json +92 -0
@@ 0,0 1,92 @@
{
    "keyboard_name": "UNK",
    "url": "https://github.com/herpiko/unk",
    "maintainer": "herpiko",
    "width": 17,
    "height": 5,
    "layouts": {
        "LAYOUT": {
            "layout": [
                {"x": 0, "y": 0},
                {"x": 1, "y": 0},
                {"x": 2, "y": 0},
                {"x": 3, "y": 0},
                {"x": 4, "y": 0},
                {"x": 5, "y": 0},
                {"x": 6, "y": 0},
                {"x": 7, "y": 0},

                {"x": 9, "y": 0},
                {"x": 10, "y": 0},
                {"x": 11, "y": 0},
                {"x": 12, "y": 0},
                {"x": 13, "y": 0},
                {"x": 14, "y": 0},
                {"x": 15, "y": 0, "w": 2},

                {"x": 0, "y": 1},
                {"x": 1, "y": 1, "w": 1.5},
                {"x": 2.5, "y": 1},
                {"x": 3.5, "y": 1},
                {"x": 4.5, "y": 1},
                {"x": 5.5, "y": 1},
                {"x": 6.5, "y": 1},

                {"x": 8.5, "y": 1},
                {"x": 9.5, "y": 1},
                {"x": 10.5, "y": 1},
                {"x": 11.5, "y": 1},
                {"x": 12.5, "y": 1},
                {"x": 13.5, "y": 1},
                {"x": 14.5, "y": 1},
                {"x": 15.5, "y": 1, "w": 1.5},

                {"x": 0, "y": 2},
                {"x": 1, "y": 2, "w": 1.75},
                {"x": 2.75, "y": 2},
                {"x": 3.75, "y": 2},
                {"x": 4.75, "y": 2},
                {"x": 5.75, "y": 2},
                {"x": 6.75, "y": 2},

                {"x": 8.75, "y": 2},
                {"x": 9.75, "y": 2},
                {"x": 10.75, "y": 2},
                {"x": 11.75, "y": 2},
                {"x": 12.75, "y": 2},
                {"x": 13.75, "y": 2},
                {"x": 14.75, "y": 2, "w": 2.25},

                {"x": 0, "y": 3},
                {"x": 1, "y": 3, "w": 2.25},
                {"x": 3.25, "y": 3},
                {"x": 4.25, "y": 3},
                {"x": 5.25, "y": 3},
                {"x": 6.25, "y": 3},
                {"x": 7.25, "y": 3},

                {"x": 9.25, "y": 3},
                {"x": 10.25, "y": 3},
                {"x": 11.25, "y": 3},
                {"x": 12.25, "y": 3},
                {"x": 13.25, "y": 3},
                {"x": 14.25, "y": 3, "w": 1.75},

                {"x": 16, "y": 3},
                {"x": 0, "y": 4},
                {"x": 1, "y": 4, "w": 1.25},
                {"x": 2.25, "y": 4, "w": 1.25},
                {"x": 3.5, "y": 4, "w": 1.25},
                {"x": 4.75, "y": 4},
                {"x": 5.75, "y": 4, "w": 2.25},

                {"x": 9, "y": 4, "w": 2.25},
                {"x": 11.25, "y": 4, "w": 1.25},
                {"x": 12.5, "y": 4, "w": 1.25},
                {"x": 13.75, "y": 4, "w": 1.25},
                {"x": 15, "y": 4},
                {"x": 16, "y": 4}
            ]
        }
    }
}

A keyboards/handwired/unk/keymaps/default/config.h => keyboards/handwired/unk/keymaps/default/config.h +25 -0
@@ 0,0 1,25 @@
/*
Copyright 2020 Herpiko Dwi Aguno <herpiko@gmail.com>

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 USE_SERIAL

#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS

A keyboards/handwired/unk/keymaps/default/keymap.c => keyboards/handwired/unk/keymaps/default/keymap.c +83 -0
@@ 0,0 1,83 @@
#include QMK_KEYBOARD_H

enum layer_names {
  _QWERTY = 0,
  _COLEMAK,
  _LOWER,
  _RAISE,
  _ADJUST,
};

enum custom_keycodes {
  QWERTY = SAFE_RANGE,
  COLEMAK,
};

#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)

// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_QWERTY] = LAYOUT(
    KC_ESC,     KC_GRV,  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_BSPACE, 
    KC_HOME,    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_BSLASH,
    KC_END,     KC_CAPS, 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_PSCREEN, KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,      KC_B,                           KC_N,    KC_M,      KC_COMM, KC_DOT,  KC_SLSH,    KC_LSFT,    KC_PGUP,
    LOWER,      KC_LCTL, KC_LALT, KC_LGUI, RAISE,   KC_SPACE,                                         KC_SPACE,  RAISE,   KC_RALT, KC_RCTL,    KC_DELETE,  KC_PGDOWN
  ),
  [_COLEMAK] = LAYOUT(
    KC_ESC,     KC_GRV,    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_BSPACE, 
    KC_HOME,    KC_TAB,    KC_Q,    KC_W,    KC_F,    KC_P,     KC_G,                 KC_J,    KC_L,    KC_U,      KC_Y,    KC_SCLN, KC_LBRC,    KC_RBRC,    KC_BSLASH,
    KC_END,     KC_BSPACE, KC_A,    KC_R,    KC_S,    KC_T,     KC_D,                          KC_H,    KC_N,      KC_E,    KC_I,    KC_O,       KC_QUOT,    KC_ENT,
    KC_PSCREEN, KC_LSFT,   KC_Z,    KC_X,    KC_C,    KC_V,     KC_B,                          KC_K,    KC_M,      KC_COMM, KC_DOT,  KC_SLSH,    KC_LSFT,    KC_PGUP,
    LOWER,      KC_LCTL,   KC_LALT, KC_LGUI, RAISE,   KC_SPACE,                                         KC_SPACE,  RAISE,   KC_RALT, KC_RCTL,    KC_DELETE,  KC_PGDOWN
  ),

  [_LOWER] = LAYOUT(
    _______, _______, _______, _______, _______,  _______, _______, _______,                    _______, _______, _______, _______, _______, _______, _______,
    QWERTY,  _______, _______, _______, _______,  _______, _______,                    _______, _______, _______, _______, _______, _______, _______, _______,
    COLEMAK, _______, _______, _______, _______,  _______, _______,                             _______, _______, _______, _______, _______, _______, _______, 
    _______, _______, _______, _______, _______,  _______, _______,                             _______, _______, _______, _______, _______, _______, _______, 
    _______, _______, _______, _______, _______,  _______,                                               _______, _______, _______, _______, _______, _______
  ),

  [_RAISE] = LAYOUT(
    _______, _______, KC_F1,   KC_F2,   KC_F3,    KC_F4,   KC_F5,   KC_F6,                     KC_F7,   KC_F8,   KC_F9,    KC_F9,   KC_F10,  KC_F11,  KC_F12,
    _______, _______, _______, KC_UP,   _______,  _______, _______,                   _______, _______, KC_UP,   _______,  _______, _______, _______, _______,
    _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,                            _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______,
    _______, _______, _______, _______, _______,  _______, _______,                            _______, _______, _______, _______,  _______, _______, _______,
    _______, _______, _______, _______, _______,  _______,                                              _______, _______, _______,  _______, _______, _______
  ),

  [_ADJUST] = LAYOUT(
    _______, _______, _______, _______, _______,  _______, _______, _______,                    _______, _______, _______, _______, _______, _______, _______,
    _______, _______, _______, _______, _______,  _______, _______,                    _______, _______, _______, _______, _______, _______, _______, _______,
    _______, _______, _______, _______, _______,  _______, _______,                             _______, _______, _______, _______, _______, _______, _______, 
    _______, _______, _______, _______, _______,  _______, _______,                             _______, _______, _______, _______, _______, _______, _______, 
    _______, _______, _______, _______, _______,  _______,                                               _______, _______, _______, _______, _______, _______
  )
};

layer_state_t layer_state_set_user(layer_state_t state) {
  return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case QWERTY:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_QWERTY);
      }
      return false;
    case COLEMAK:
      if (record->event.pressed) {
        set_single_persistent_default_layer(_COLEMAK);
      }
      return false;
  }
  return true;
}

A keyboards/handwired/unk/readme.md => keyboards/handwired/unk/readme.md +15 -0
@@ 0,0 1,15 @@
# UNK

A split 65% handwired keyboard made by herpiko.

* Keyboard Maintainer: [herpiko](https://github.com/herpiko)
* Hardware Supported: Pro Micro
* Hardware Availability: https://github.com/herpiko/unk

Make example for this keyboard (after setting up your build environment):

    make handwired/unk/rev1: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).

Build logs and files are available here: [UNK](https://github.com/herpiko/unk)

A keyboards/handwired/unk/rev1/config.h => keyboards/handwired/unk/rev1/config.h +91 -0
@@ 0,0 1,91 @@
/*
Copyright 2020 Herpiko Dwi Aguno <herpiko@gmail.com>

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       0xFEED
#define PRODUCT_ID      0x3060
#define DEVICE_VER      0x0001
#define MANUFACTURER    herpiko
#define PRODUCT         UNK
#define DESCRIPTION     70% split keyboard

/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 10
#define MATRIX_COLS 8



#define MASTER_LEFT // Comment this line for the right half firmware

// wiring of each half
#define MATRIX_ROW_PINS { F5, B1, F6, B3, F7 }
#define MATRIX_COL_PINS { B2, B6, D4, C6, D7, E6, B4, B5 }
#define MATRIX_ROW_PINS_RIGHT { C6, D7, B4, E6, D4 }
#define MATRIX_COL_PINS_RIGHT { B1, B3, B2, B6, F7, B5, F6, F5 }


/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW

/*
 * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
 */

#define USE_SERIAL
#define SOFT_SERIAL_PIN D0

/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST

/* number of backlight levels */
// #define BACKLIGHT_LEVELS 3

/* 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

/* ws2812 RGB LED */
#define RGB_DI_PIN D3

#define RGBLED_NUM 12    // Number of LEDs

/*
 * 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

A keyboards/handwired/unk/rev1/rev1.c => keyboards/handwired/unk/rev1/rev1.c +1 -0
@@ 0,0 1,1 @@
#include "rev1.h"

A keyboards/handwired/unk/rev1/rev1.h => keyboards/handwired/unk/rev1/rev1.h +30 -0
@@ 0,0 1,30 @@
#pragma once

#include "unk.h"

#include "quantum.h"

#define LAYOUT( \
	K00,   K01,   K02,   K03,   K04,   K05,   K06,   K07,               K71,   K72,   K73,   K74,   K75,   K76,   K77, \
	K10,   K11,   K12,   K13,   K14,   K15,   K16,               K80,   K81,   K82,   K83,   K84,   K85,   K86,   K87, \
	K20,   K21,   K22,   K23,   K24,   K25,   K26,                      K91,   K92,   K93,   K94,   K95,   K96,   K97, \
	K30,   K31,   K32,   K33,   K34,   K35,   K36,                      K101,  K102,  K103,  K104,  K105,  K106,  K107, \
	K40,   K41,   K42,   K43,   K44,   K45,                                    K112,  K113,  K114,  K115,  K116,  K117 \
	) \
	{ \
		{ K00,   K01,   K02,   K03,   K04,   K05,   K06,   K07}, \
		{ K10,   K11,   K12,   K13,   K14,   K15,   K16,   KC_NO}, \
		{ K20,   K21,   K22,   K23,   K24,   K25,   K26,   KC_NO}, \
		{ K30,   K31,   K32,   K33,   K34,   K35,   K36,   KC_NO}, \
		{ K40,   K41,   K42,   K43,   K44,   K45,   KC_NO, KC_NO}, \
\
		{ KC_NO,  K71,   K72,   K73,   K74,   K75,   K76,   K77}, \
		{ K80,    K81,   K82,   K83,   K84,   K85,   K86,   K87}, \
		{ KC_NO,  K91,   K92,   K93,   K94,   K95,   K96,   K97}, \
		{ KC_NO,  K101,  K102,  K103,  K104,  K105,  K106,  K107}, \
		{ KC_NO,  KC_NO, K112,  K113,  K114,  K115,  K116,  K117} \
	}

/*
*/


A keyboards/handwired/unk/rev1/rules.mk => keyboards/handwired/unk/rev1/rules.mk +0 -0
A keyboards/handwired/unk/rules.mk => keyboards/handwired/unk/rules.mk +35 -0
@@ 0,0 1,35 @@
# 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
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = no       # 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
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no            # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
MIDI_ENABLE = no            # MIDI support
BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no           # Audio output
FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches

SPLIT_KEYBOARD = yes

DEFAULT_FOLDER = handwired/unk/rev1

A keyboards/handwired/unk/unk.c => keyboards/handwired/unk/unk.c +1 -0
@@ 0,0 1,1 @@
#include "unk.h"

A keyboards/handwired/unk/unk.h => keyboards/handwired/unk/unk.h +4 -0
@@ 0,0 1,4 @@
#pragma once

#include "quantum.h"
#include "rev1.h"