[Keyboard] Jian keyboard (#8914)

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
This commit is contained in:
KgOfHedgehogs
2020-06-18 04:17:30 +02:00
committed by GitHub
parent 39ff121d73
commit 157319fbd0
28 changed files with 1802 additions and 0 deletions

21
keyboards/jian/config.h Normal file
View File

@@ -0,0 +1,21 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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"

View File

@@ -0,0 +1,41 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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 0xC0DE
#define PRODUCT_ID 0x1337
#define DEVICE_VER 0x0010
#define MANUFACTURER KgOfHedgehogs
#define PRODUCT Huma
#define DESCRIPTION An ergo handwired keyboard
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 4
#define MATRIX_COLS 14
#define DIODE_DIRECTION COL2ROW
// wiring of each half
#define MATRIX_ROW_PINS { D3, D2, B5, B6 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B4, E6, D7, C6, D4, D0, D1 }
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5

View File

@@ -0,0 +1,8 @@
#include "handwired.h"
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{13, 0}, {12, 0}, {11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
{{13, 1}, {12, 1}, {11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
{{13, 2}, {12, 2}, {11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
{{13, 3}, {12, 3}, {11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
};

View File

@@ -0,0 +1,30 @@
#pragma once
#include "jian.h"
#define XXX KC_NO
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, \
L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, \
L34, L35, L36, R36, R35, R34 \
) \
{ \
{L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00}, \
{XXX, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, XXX}, \
{XXX, L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, XXX}, \
{XXX, XXX, XXX, XXX, L34, L35, L36, R36, R35, R34, XXX, XXX, XXX, XXX} \
}
#define LAYOUT_symmetric( \
K00, K01, K02, K03, K04, K05, K06, \
K11, K12, K13, K14, K15, K16, \
K21, K22, K23, K24, K25, K26, \
K34, K35, K36 \
) \
{ \
{K00, K01, K02, K03, K04, K05, K06, K06, K05, K04, K03, K02, K01, K00}, \
{XXX, K11, K12, K13, K14, K15, K16, K16, K15, K14, K13, K12, K11, XXX}, \
{XXX, K21, K22, K23, K24, K25, K26, K26, K25, K24, K23, K22, K21, XXX}, \
{XXX, XXX, XXX, XXX, K34, K35, K36, K36, K35, K34, XXX, XXX, XXX, XXX} \
}

View File

@@ -0,0 +1,19 @@
# 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
#
SPLIT_KEYBOARD = no
BACKLIGHT_ENABLE = no
RGBLIGHT_ENABLE = no

67
keyboards/jian/info.json Normal file
View File

@@ -0,0 +1,67 @@
{
"keyboard_name": "jian",
"url": "t.me/s/kgofhedgehogs",
"maintainer": "KGOH",
"width": 17,
"height": 4,
"layouts": {
"LAYOUT": {
"layout": [
{ "label": "Super", "x": 0, "y": 1.5 },
{ "label": "~", "x": 1, "y": 0.75 },
{ "label": "Q", "x": 2, "y": 0.625 },
{ "label": "W", "x": 3, "y": 0.25 },
{ "label": "E", "x": 4, "y": 0 },
{ "label": "R", "x": 5, "y": 0.25 },
{ "label": "T", "x": 6, "y": 0.375 },
{ "label": "Y", "x": 10, "y": 0.375 },
{ "label": "U", "x": 11, "y": 0.25 },
{ "label": "I", "x": 12, "y": 0 },
{ "label": "O", "x": 13, "y": 0.25 },
{ "label": "P", "x": 14, "y": 0.625 },
{ "label": "{[", "x": 15, "y": 0.75 },
{ "label": "}]", "x": 16, "y": 1.5 },
{ "label": "Ctrl", "x": 1, "y": 1.75 },
{ "label": "A", "x": 2, "y": 1.625 },
{ "label": "S", "x": 3, "y": 1.25 },
{ "label": "D", "x": 4, "y": 1 },
{ "label": "F", "x": 5, "y": 1.25 },
{ "label": "G", "x": 6, "y": 1.375 },
{ "label": "H", "x": 10, "y": 1.375 },
{ "label": "J", "x": 11, "y": 1.25 },
{ "label": "K", "x": 12, "y": 1 },
{ "label": "L", "x": 13, "y": 1.25 },
{ "label": ":;", "x": 14, "y": 1.625 },
{ "label": "\"'", "x": 15, "y": 1.75 },
{ "label": "Alt", "x": 1, "y": 2.75 },
{ "label": "Z", "x": 2, "y": 2.625 },
{ "label": "X", "x": 3, "y": 2.25 },
{ "label": "C", "x": 4, "y": 2 },
{ "label": "V", "x": 5, "y": 2.25 },
{ "label": "B", "x": 6, "y": 2.375 },
{ "label": "N", "x": 10, "y": 2.375 },
{ "label": "M", "x": 11, "y": 2.25 },
{ "label": "<,", "x": 12, "y": 2 },
{ "label": ">.", "x": 13, "y": 2.25 },
{ "label": "?/", "x": 14, "y": 2.625 },
{ "label": "|\\", "x": 15, "y": 2.75 },
{ "label": "Tab", "x": 5, "y": 3.25 },
{ "label": "Spc", "x": 6, "y": 3.375 },
{ "label": "Enter", "x": 7, "y": 3.5 },
{ "label": "Esc", "x": 9, "y": 3.5 },
{ "label": "Bscp", "x": 10, "y": 3.375 },
{ "label": "Del", "x": 11, "y": 3.25 }
]
}
}
}

1
keyboards/jian/jian.c Normal file
View File

@@ -0,0 +1 @@
#include "jian.h"

19
keyboards/jian/jian.h Normal file
View File

@@ -0,0 +1,19 @@
#pragma once
#include "quantum.h"
#ifdef KEYBOARD_jian_handwired
#include "handwired.h"
#endif
#ifdef KEYBOARD_jian_rev1
#include "rev1.h"
#endif
#ifdef KEYBOARD_jian_rev2
#include "rev2.h"
#endif
#ifdef KEYBOARD_jian_nsrev2
#include "nsrev2.h"
#endif

View File

@@ -0,0 +1,27 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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 AUTO_SHIFT_TIMEOUT 150
//#define NO_AUTO_SHIFT_NUMERIC
//#define AUTO_SHIFT_MODIFIERS
#define IGNORE_MOD_TAP_INTERRUPT
#define ALT_LAYOUTS_ENABLE
//#define TRAINING_HALFES_LOCK

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
SWAP_HANDS_ENABLE = yes
STENO_ENABLE = no
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes # Audio control and System control

View File

@@ -0,0 +1,22 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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 IGNORE_MOD_TAP_INTERRUPT

View File

@@ -0,0 +1,120 @@
#include QMK_KEYBOARD_H
enum jian_layers {
_QWERTY,
_DVORAK,
_COLEMAK,
_WORKMAN,
_LOWER,
_RAISE,
_ADJUST,
_BCKLT_ADJ
};
enum jian_keycodes {
QWERTY = SAFE_RANGE,
DVORAK,
COLEMAK,
WORKMAN
};
#define RAISE_T(kc) LT(_RAISE, kc)
#define LOWER_T(kc) LT(_LOWER, kc)
#ifdef SWAP_HANDS_ENABLE
#define SW_TG SH_TG
#else
#define SW_TG _______
#endif
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_LGUI, KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, RGUI_T(KC_RBRC),
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RCTL_T(KC_QUOT),
KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RALT_T(KC_BSLS),
RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
),
[_DVORAK] = LAYOUT(
KC_LGUI, KC_GRV, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, RGUI_T(KC_RBRC),
KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, RCTL_T(KC_SLSH),
KC_LALT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, RALT_T(KC_BSLS),
RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
),
[_COLEMAK] = LAYOUT(
KC_LGUI, KC_GRV, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, RGUI_T(KC_RBRC),
KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, RCTL_T(KC_QUOT),
KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, RALT_T(KC_BSLS),
RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
),
[_WORKMAN] = LAYOUT(
KC_LGUI, KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, RGUI_T(KC_RBRC),
KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, RCTL_T(KC_QUOT),
KC_LALT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, RALT_T(KC_BSLS),
RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
),
[_LOWER] = LAYOUT(
_______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, RGUI_T(KC_F12),
LCTL_T(KC_EQL), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RCTL_T(KC_MINS),
LALT_T(KC_PPLS), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, _______, _______, _______, _______, _______
),
[_RAISE] = LAYOUT(
_______, KC_NLCK, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SLCK, KC_CAPS, _______,
LCTL_T(KC_EQL), KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, RCTL_T(KC_APP),
_______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______,
_______, _______, _______, _______, _______, _______
),
[_ADJUST] = LAYOUT_symmetric(
RESET, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, WORKMAN, COLEMAK, DVORAK, QWERTY, XXXXXXX,
TG(_BCKLT_ADJ), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, SW_TG, _______
),
#if defined(RGBLIGHT) || defined(BACKLIGHT_ENABLE)
[_BCKLT_ADJ] = LAYOUT_symmetric(
XXXXXXX, XXXXXXX, XXXXXXX, BL_INC, RGB_VAI, RGB_HUD, RGB_HUI,
XXXXXXX, XXXXXXX, BL_DEC, RGB_VAD, RGB_SAD, RGB_SAI,
TG(_BCKLT_ADJ), BL_BRTG, BL_TOGG, RGB_TOG, RGB_RMOD,RGB_MOD,
_______, _______, _______
)
#endif // defined(RGBLIGHT) || defined(BACKLIGHT_ENABLE)
};
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 DVORAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_DVORAK);
}
return false;
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
}
return false;
case WORKMAN:
if (record->event.pressed) {
set_single_persistent_default_layer(_WORKMAN);
}
return false;
}
return true;
}

View File

@@ -0,0 +1,2 @@
SWAP_HANDS_ENABLE = yes
EXTRAKEY_ENABLE = yes # Audio control and System control

View File

@@ -0,0 +1,129 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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 0xC0DE
#define PRODUCT_ID 0x1337
#define DEVICE_VER 0x0210
#define MANUFACTURER KgOfHedgehogs
#define PRODUCT Huma
#define DESCRIPTION An ergo keyboard
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 8
#define MATRIX_COLS 6
#define DIODE_DIRECTION COL2ROW
// wiring of each half
#define MATRIX_ROW_PINS { F4, F5, B1, B3, D1, D0, D7, E6 }
#define MATRIX_COL_PINS { D3, D2, B4, F6, F7, B2 }
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
#define PHYSICAL_LEDS_ENABLE
#ifdef BACKLIGHT_ENABLE
#define BACKLIGHT_PIN C6
#define BACKLIGHT_LEVELS 5
#define BACKLIGHT_BREATHING //not working with splits right now
#define BREATHING_PERIOD 6
#endif
/* ws2812 RGB LED */
#define RGB_DI_PIN D4
#define RGBLIGHT_TIMER
#define RGBLED_NUM 7 // Number of LEDs
#define RGBLIGHT_ANIMATIONS //not working with splits right now
#define RGBLIGHT_SLEEP
#define RGBLIGHT_SPLIT
#ifndef IOS_DEVICE_ENABLE
#if RGBLED_NUM <= 6
#define RGBLIGHT_LIMIT_VAL 255
#else
#define RGBLIGHT_LIMIT_VAL 130
#endif
#define RGBLIGHT_VAL_STEP 8
#else
#if RGBLED_NUM <= 6
#define RGBLIGHT_LIMIT_VAL 90
#else
#define RGBLIGHT_LIMIT_VAL 45
#endif
#define RGBLIGHT_VAL_STEP 4
#endif
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
#define USB_MAX_POWER_CONSUMPTION 400
#else
// iOS device need lessthan 100
#define USB_MAX_POWER_CONSUMPTION 100
#endif
#define NUM_LOCK_LED_PIN B6
#define CAPS_LOCK_LED_PIN B5
// #define SCROLL_LOCK_LED_PIN B6
// #define NUM_NMOSFET //uncomment this if you using n-mosfet
// #define CAPS_NMOSFET //uncomment this if you using n-mosfet
// #define SCROLL_NMOSFET //uncomment this if you using n-mosfet
// #define NUM_INVERT // uncomment this if you want to reverse logic of numlock
// This will make it light up only when lock is off
// (Doesn't work on mac. There is no num lock, so it will be always off and lit)
#ifdef NUM_NMOSFET
#define RESET_NUM_LOCK_LED() writePinLow(NUM_LOCK_LED_PIN)
#ifdef NUM_INVERT
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
#else
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
#endif // NUM_INVERT
#else
#define RESET_NUM_LOCK_LED() writePinHigh(NUM_LOCK_LED_PIN)
#ifdef NUM_INVERT
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
#else
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
#endif // NUM_INVERT
#endif // NUM_NMOSFET
#ifdef CAPS_NMOSFET
#define RESET_CAPS_LOCK_LED() writePinLow(CAPS_LOCK_LED_PIN)
#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, led_state.caps_lock)
#else
#define RESET_CAPS_LOCK_LED() writePinHigh(CAPS_LOCK_LED_PIN)
#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, !led_state.caps_lock)
#endif // CAPS_NMOSFET
#ifdef SCROLL_NMOSFET
#define RESET_SCROLL_LOCK_LED() writePinLow(SCROLL_LOCK_LED_PIN)
#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, led_state.scroll_lock)
#else
#define RESET_SCROLL_LOCK_LED() writePinHigh(SCROLL_LOCK_LED_PIN)
#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, !led_state.scroll_lock)
#endif // SCROLL_NMOSFET

View File

@@ -0,0 +1,74 @@
#include "nsrev2.h"
// TODO:
#ifdef SWAP_HANDS_ENABLE
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}},
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
};
#endif
static bool backlight_was_toggled = false;
void suspend_power_down_kb(void) {
if (is_backlight_enabled()) {
backlight_disable();
backlight_was_toggled = true;
}
}
void suspend_wakeup_init_kb(void) {
if (backlight_was_toggled) {
backlight_enable();
backlight_was_toggled = false;
}
}
#ifdef PHYSICAL_LEDS_ENABLE
void led_init_kb(void)
{
#ifdef NUM_LOCK_LED_PIN
setPinOutput(NUM_LOCK_LED_PIN);
RESET_NUM_LOCK_LED();
#endif // NUM_LOCK_LED_PIN
#ifdef CAPS_LOCK_LED_PIN
setPinOutput(CAPS_LOCK_LED_PIN);
RESET_CAPS_LOCK_LED();
#endif // CAPS_LOCK_LED_PIN
#ifdef SCROLL_LOCK_LED_PIN
setPinOutput(SCROLL_LOCK_LED_PIN);
RESET_SCROLL_LOCK_LED();
#endif // SCROLL_LOCK_LED_PIN
}
#endif // PHYSICAL_LEDS_ENABLE
void matrix_init_kb(void) {
#ifdef PHYSICAL_LEDS_ENABLE
led_init_kb();
#endif // PHYSICAL_LEDS_ENABLE
matrix_init_user();
};
#ifdef PHYSICAL_LEDS_ENABLE
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
#ifdef NUM_LOCK_LED_PIN
UPDATE_NUM_LOCK_LED();
#endif // NUM_LOCK_LED_PIN
#ifdef CAPS_LOCK_LED_PIN
UPDATE_CAPS_LOCK_LED();
#endif // CAPS_LOCK_LED_PIN
#ifdef SCROLL_LOCK_LED_PIN
UPDATE_SCROLL_LOCK_LED();
#endif // SCROLL_LOCK_LED_PIN
}
return res;
}
#endif // PHYSICAL_LEDS_ENABLE

View File

@@ -0,0 +1,39 @@
#pragma once
#include "jian.h"
#define XXX KC_NO
#define LAYOUT( \
L20, L00, L01, L12, L02, L03, L04, R04, R03, R02, R12, R01, R00, R20, \
L10, L11, L22, L13, L14, L05, R05, R14, R13, R22, R11, R10, \
L21, L32, L33, L23, L24, L15, R15, R24, R23, R33, R32, R21, \
L34, L25, L35, R35, R25, R34 \
) \
{ \
{L00, L01, L02, L03, L04, L05 }, \
{L10, L11, L12, L13, L14, L15 }, \
{L20, L21, L22, L23, L24, L25 }, \
{XXX, XXX, L32, L33, L34, L35 }, \
{R00, R01, R02, R03, R04, R05 }, \
{R10, R11, R12, R13, R14, R15 }, \
{R20, R21, R22, R23, R24, R25 }, \
{XXX, XXX, R32, R33, R34, R35 } \
}
#define LAYOUT_symmetric( \
K20, K00, K01, K12, K02, K03, K04, \
K10, K11, K22, K13, K14, K05, \
K21, K32, K33, K23, K24, K15, \
K34, K25, K35 \
) \
{ \
{K00, K01, K02, K03, K04, K05 }, \
{K10, K11, K12, K13, K14, K15 }, \
{K20, K21, K22, K23, K24, K25 }, \
{XXX, XXX, K32, K33, K34, K35 }, \
{K00, K01, K02, K03, K04, K05 }, \
{K10, K11, K12, K13, K14, K15 }, \
{K20, K21, K22, K23, K24, K25 }, \
{XXX, XXX, K32, K33, K34, K35 } \
}

View File

@@ -0,0 +1,20 @@
# 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 = qmk-dfu
# Build Options
# change yes to no to disable
#
CONSOLE_ENABLE = no
SPLIT_KEYBOARD = no
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no

16
keyboards/jian/readme.md Normal file
View File

@@ -0,0 +1,16 @@
# Jian
<img src="https://i.imgur.com/XUzcaWG.png" data-canonical-src="Jian" width="600"/>
A 40% ergonomic keyboard kit. Jian supports cherry mx, alps, kailh choc switches PCB and plate mounted. You can assembly keyboard without mounting plate. Jian also supports rgb led strip like ws2812b and 1 color in-switch backlight. Each half can work standalone.
* Keyboard Maintainer: [KGOH](https://github.com/KGOH)
* Hardware Supported: Jian PCB rev1, rev2, Pro Micro
* Layout: [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/4b6c2af67148f58ddd6c6b2976c4370f)
* Hardware Availability: [Telegram channel](https://t.me/KgOfHedgehogs)
Make example for this keyboard (after setting up your build environment):
make jian/rev2: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).

View File

@@ -0,0 +1,138 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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 0xC0DE
#define PRODUCT_ID 0x1337
#define DEVICE_VER 0x0100
#define MANUFACTURER KgOfHedgehogs
#define PRODUCT Jian
#define DESCRIPTION An ergo split keyboard
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 8
#define MATRIX_COLS 7
#define DIODE_DIRECTION COL2ROW
// wiring of each half
#define MATRIX_ROW_PINS { D3, D2, E6, B4 }
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
/* Use I2C or Serial, not both */
// #define USE_SERIAL
#define USE_I2C
/* Select hand configuration */
// #define MASTER_LEFT
// #define MASTER_RIGHT
#define EE_HANDS
// different Jian configs
#define DIPS_ENABLE
#define PHYSICAL_LEDS_ENABLE
#define NUM_LOCK_LED_PIN C6
#define CAPS_LOCK_LED_PIN D7
#define SCROLL_LOCK_LED_PIN B5
// #define NUM_NMOSFET //uncomment this if you using n-mosfet
// #define CAPS_NMOSFET //uncomment this if you using n-mosfet
// #define SCROLL_NMOSFET //uncomment this if you using n-mosfet
// #define NUM_INVERT // uncomment this if you want to reverse logic of numlock
// This will make it light up only when lock is off
// (Doesn't work on mac. There is no num lock, so it will be always off and lit)
#ifdef NUM_NMOSFET
#define RESET_NUM_LOCK_LED() writePinLow(NUM_LOCK_LED_PIN)
#ifdef NUM_INVERT
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
#else
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
#endif // NUM_INVERT
#else
#define RESET_NUM_LOCK_LED() writePinHigh(NUM_LOCK_LED_PIN)
#ifdef NUM_INVERT
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
#else
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
#endif // NUM_INVERT
#endif // NUM_NMOSFET
#ifdef CAPS_NMOSFET
#define RESET_CAPS_LOCK_LED() writePinLow(CAPS_LOCK_LED_PIN)
#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, led_state.caps_lock)
#else
#define RESET_CAPS_LOCK_LED() writePinHigh(CAPS_LOCK_LED_PIN)
#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, !led_state.caps_lock)
#endif // CAPS_NMOSFET
#ifdef SCROLL_NMOSFET
#define RESET_SCROLL_LOCK_LED() writePinLow(SCROLL_LOCK_LED_PIN)
#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, led_state.scroll_lock)
#else
#define RESET_SCROLL_LOCK_LED() writePinHigh(SCROLL_LOCK_LED_PIN)
#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, !led_state.scroll_lock)
#endif // SCROLL_NMOSFET
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
#ifdef BACKLIGHT_ENABLE
#define BACKLIGHT_PIN B6
#define BACKLIGHT_LEVELS 5
//#define BACKLIGHT_BREATHING //not working with splits right now
#define BREATHING_PERIOD 6
#endif
/* ws2812 RGB LED */
#define RGB_DI_PIN D4
#define RGBLIGHT_TIMER
#define RGBLED_NUM 7 // Number of LEDs
#define RGBLIGHT_ANIMATIONS //not working with splits right now
#define RGBLIGHT_SLEEP
#define RGBLIGHT_SPLIT
#ifndef IOS_DEVICE_ENABLE
#if RGBLED_NUM <= 6
#define RGBLIGHT_LIMIT_VAL 255
#else
#define RGBLIGHT_LIMIT_VAL 130
#endif
#define RGBLIGHT_VAL_STEP 8
#else
#if RGBLED_NUM <= 6
#define RGBLIGHT_LIMIT_VAL 90
#else
#define RGBLIGHT_LIMIT_VAL 45
#endif
#define RGBLIGHT_VAL_STEP 4
#endif
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
#define USB_MAX_POWER_CONSUMPTION 400
#else
// iOS device need lessthan 100
#define USB_MAX_POWER_CONSUMPTION 100
#endif

View File

@@ -0,0 +1,74 @@
#include "rev1.h"
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}},
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}},
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}},
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}},
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}},
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}},
};
#endif
static bool backlight_was_toggled = false;
void suspend_power_down_kb(void) {
if (is_backlight_enabled()) {
backlight_disable();
backlight_was_toggled = true;
}
}
void suspend_wakeup_init_kb(void) {
if (backlight_was_toggled) {
backlight_enable();
backlight_was_toggled = false;
}
}
#ifdef PHYSICAL_LEDS_ENABLE
void led_init_kb(void)
{
#ifdef NUM_LOCK_LED_PIN
setPinOutput(NUM_LOCK_LED_PIN);
RESET_NUM_LOCK_LED();
#endif // NUM_LOCK_LED_PIN
#ifdef CAPS_LOCK_LED_PIN
setPinOutput(CAPS_LOCK_LED_PIN);
RESET_CAPS_LOCK_LED();
#endif // CAPS_LOCK_LED_PIN
#ifdef SCROLL_LOCK_LED_PIN
setPinOutput(SCROLL_LOCK_LED_PIN);
RESET_SCROLL_LOCK_LED();
#endif // SCROLL_LOCK_LED_PIN
}
#endif // PHYSICAL_LEDS_ENABLE
void matrix_init_kb(void) {
#ifdef PHYSICAL_LEDS_ENABLE
led_init_kb();
#endif // PHYSICAL_LEDS_ENABLE
matrix_init_user();
};
#ifdef PHYSICAL_LEDS_ENABLE
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
#ifdef NUM_LOCK_LED_PIN
UPDATE_NUM_LOCK_LED();
#endif // NUM_LOCK_LED_PIN
#ifdef CAPS_LOCK_LED_PIN
UPDATE_CAPS_LOCK_LED();
#endif // CAPS_LOCK_LED_PIN
#ifdef SCROLL_LOCK_LED_PIN
UPDATE_SCROLL_LOCK_LED();
#endif // SCROLL_LOCK_LED_PIN
}
return res;
}
#endif // PHYSICAL_LEDS_ENABLE

View File

@@ -0,0 +1,56 @@
#pragma once
#include "jian.h"
#define XXX KC_NO
#define LAYOUT( \
L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, \
L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, \
L34, L35, L36, R36, R35, R34 \
) \
{ \
{L00, L01, L02, L03, L04, L05, L06}, \
{XXX, L11, L12, L13, L14, L15, L16}, \
{XXX, L21, L22, L23, L24, L25, L26}, \
{XXX, XXX, XXX, XXX, L34, L35, L36}, \
{R00, R01, R02, R03, R04, R05, R06}, \
{XXX, R11, R12, R13, R14, R15, R16}, \
{XXX, R21, R22, R23, R24, R25, R26}, \
{XXX, XXX, XXX, XXX, R34, R35, R36} \
}
#define LAYOUT_symmetric( \
K00, K01, K02, K03, K04, K05, K06, \
K11, K12, K13, K14, K15, K16, \
K21, K22, K23, K24, K25, K26, \
K34, K35, K36 \
) \
{ \
{K00, K01, K02, K03, K04, K05, K06}, \
{XXX, K11, K12, K13, K14, K15, K16}, \
{XXX, K21, K22, K23, K24, K25, K26}, \
{XXX, XXX, XXX, XXX, K34, K35, K36}, \
{K00, K01, K02, K03, K04, K05, K06}, \
{XXX, K11, K12, K13, K14, K15, K16}, \
{XXX, K21, K22, K23, K24, K25, K26}, \
{XXX, XXX, XXX, XXX, K34, K35, K36} \
}
#ifdef DIPS_ENABLE
#define LAYOUT_dips( \
DL0, DL1, DL2, DL3, DL4, DL5, \
DR5, DR4, DR3, DR2, DR1, DR0 \
) \
{ \
{XXX, XXX, XXX, XXX, XXX, XXX, XXX}, \
{DL0, XXX, XXX, XXX, XXX, XXX, XXX}, \
{DL1, XXX, XXX, XXX, XXX, XXX, XXX}, \
{DL2, DL3, DL4, DL5, XXX, XXX, XXX}, \
{XXX, XXX, XXX, XXX, XXX, XXX, XXX}, \
{DR0, XXX, XXX, XXX, XXX, XXX, XXX}, \
{DR1, XXX, XXX, XXX, XXX, XXX, XXX}, \
{DR2, DR3, DR4, DR5, XXX, XXX, XXX}, \
}
#endif // DIPS_ENABLE

View File

@@ -0,0 +1,20 @@
# 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
#
CONSOLE_ENABLE = no
SPLIT_KEYBOARD = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes

View File

@@ -0,0 +1,136 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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 0xC0DE
#define PRODUCT_ID 0x1337
#define DEVICE_VER 0x0200
#define MANUFACTURER KgOfHedgehogs
#define PRODUCT Jian
#define DESCRIPTION An ergo keyboard
/* key matrix size */
// Rows are doubled-up
#define MATRIX_ROWS 8
#define MATRIX_COLS 6
#define DIODE_DIRECTION COL2ROW
// wiring of each half
#define MATRIX_ROW_PINS { F4, F5, B1, B3 }
#define MATRIX_COL_PINS { D3, D2, B4, F6, F7, B2 }
//#define USE_I2C
#define USE_SERIAL
#define SOFT_SERIAL_PIN D1
//#define EE_HANDS
#define SPLIT_HAND_PIN E6
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
#define PHYSICAL_LEDS_ENABLE
#define IOS_DEVICE_ENABLE
#ifdef BACKLIGHT_ENABLE
#define BACKLIGHT_PIN C6
#define BACKLIGHT_LEVELS 5
#define BACKLIGHT_BREATHING //not working with splits right now
#define BREATHING_PERIOD 6
#endif
/* ws2812 RGB LED */
#define RGB_DI_PIN D4
#define RGBLIGHT_TIMER
#define RGBLED_NUM 7 // Number of LEDs
#define RGBLIGHT_ANIMATIONS //not working with splits right now
#define RGBLIGHT_SLEEP
#define RGBLIGHT_SPLIT
#ifndef IOS_DEVICE_ENABLE
#if RGBLED_NUM <= 6
#define RGBLIGHT_LIMIT_VAL 255
#else
#define RGBLIGHT_LIMIT_VAL 130
#endif
#define RGBLIGHT_VAL_STEP 8
#else
#if RGBLED_NUM <= 6
#define RGBLIGHT_LIMIT_VAL 90
#else
#define RGBLIGHT_LIMIT_VAL 45
#endif
#define RGBLIGHT_VAL_STEP 4
#endif
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
#define USB_MAX_POWER_CONSUMPTION 400
#else
// iOS device need lessthan 100
#define USB_MAX_POWER_CONSUMPTION 100
#endif
#define NUM_LOCK_LED_PIN D7
#define CAPS_LOCK_LED_PIN B5
#define SCROLL_LOCK_LED_PIN B6
// #define NUM_NMOSFET //uncomment this if you using n-mosfet
// #define CAPS_NMOSFET //uncomment this if you using n-mosfet
// #define SCROLL_NMOSFET //uncomment this if you using n-mosfet
// #define NUM_INVERT // uncomment this if you want to reverse logic of numlock
// This will make it light up only when lock is off
// (Doesn't work on mac. There is no num lock, so it will be always off and lit)
#ifdef NUM_NMOSFET
#define RESET_NUM_LOCK_LED() writePinLow(NUM_LOCK_LED_PIN)
#ifdef NUM_INVERT
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
#else
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
#endif // NUM_INVERT
#else
#define RESET_NUM_LOCK_LED() writePinHigh(NUM_LOCK_LED_PIN)
#ifdef NUM_INVERT
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
#else
#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
#endif // NUM_INVERT
#endif // NUM_NMOSFET
#ifdef CAPS_NMOSFET
#define RESET_CAPS_LOCK_LED() writePinLow(CAPS_LOCK_LED_PIN)
#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, led_state.caps_lock)
#else
#define RESET_CAPS_LOCK_LED() writePinHigh(CAPS_LOCK_LED_PIN)
#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, !led_state.caps_lock)
#endif // CAPS_NMOSFET
#ifdef SCROLL_NMOSFET
#define RESET_SCROLL_LOCK_LED() writePinLow(SCROLL_LOCK_LED_PIN)
#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, led_state.scroll_lock)
#else
#define RESET_SCROLL_LOCK_LED() writePinHigh(SCROLL_LOCK_LED_PIN)
#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, !led_state.scroll_lock)
#endif // SCROLL_NMOSFET

View File

@@ -0,0 +1,74 @@
#include "rev2.h"
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}},
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
};
#endif
static bool backlight_was_toggled = false;
void suspend_power_down_kb(void) {
if (is_backlight_enabled()) {
backlight_disable();
backlight_was_toggled = true;
}
}
void suspend_wakeup_init_kb(void) {
if (backlight_was_toggled) {
backlight_enable();
backlight_was_toggled = false;
}
}
#ifdef PHYSICAL_LEDS_ENABLE
void led_init_kb(void)
{
#ifdef NUM_LOCK_LED_PIN
setPinOutput(NUM_LOCK_LED_PIN);
RESET_NUM_LOCK_LED();
#endif // NUM_LOCK_LED_PIN
#ifdef CAPS_LOCK_LED_PIN
setPinOutput(CAPS_LOCK_LED_PIN);
RESET_CAPS_LOCK_LED();
#endif // CAPS_LOCK_LED_PIN
#ifdef SCROLL_LOCK_LED_PIN
setPinOutput(SCROLL_LOCK_LED_PIN);
RESET_SCROLL_LOCK_LED();
#endif // SCROLL_LOCK_LED_PIN
}
#endif // PHYSICAL_LEDS_ENABLE
void matrix_init_kb(void) {
#ifdef PHYSICAL_LEDS_ENABLE
led_init_kb();
#endif // PHYSICAL_LEDS_ENABLE
matrix_init_user();
};
#ifdef PHYSICAL_LEDS_ENABLE
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
#ifdef NUM_LOCK_LED_PIN
UPDATE_NUM_LOCK_LED();
#endif // NUM_LOCK_LED_PIN
#ifdef CAPS_LOCK_LED_PIN
UPDATE_CAPS_LOCK_LED();
#endif // CAPS_LOCK_LED_PIN
#ifdef SCROLL_LOCK_LED_PIN
UPDATE_SCROLL_LOCK_LED();
#endif // SCROLL_LOCK_LED_PIN
}
return res;
}
#endif // PHYSICAL_LEDS_ENABLE

View File

@@ -0,0 +1,39 @@
#pragma once
#include "jian.h"
#define XXX KC_NO
#define LAYOUT( \
L20, L00, L01, L12, L02, L03, L04, R04, R03, R02, R12, R01, R00, R20, \
L10, L11, L22, L13, L14, L05, R05, R14, R13, R22, R11, R10, \
L21, L32, L33, L23, L24, L15, R15, R24, R23, R33, R32, R21, \
L34, L25, L35, R35, R25, R34 \
) \
{ \
{L00, L01, L02, L03, L04, L05 }, \
{L10, L11, L12, L13, L14, L15 }, \
{L20, L21, L22, L23, L24, L25 }, \
{XXX, XXX, L32, L33, L34, L35 }, \
{R00, R01, R02, R03, R04, R05 }, \
{R10, R11, R12, R13, R14, R15 }, \
{R20, R21, R22, R23, R24, R25 }, \
{XXX, XXX, R32, R33, R34, R35 } \
}
#define LAYOUT_symmetric( \
K20, K00, K01, K12, K02, K03, K04, \
K10, K11, K22, K13, K14, K05, \
K21, K32, K33, K23, K24, K15, \
K34, K25, K35 \
) \
{ \
{K00, K01, K02, K03, K04, K05 }, \
{K10, K11, K12, K13, K14, K15 }, \
{K20, K21, K22, K23, K24, K25 }, \
{XXX, XXX, K32, K33, K34, K35 }, \
{K00, K01, K02, K03, K04, K05 }, \
{K10, K11, K12, K13, K14, K15 }, \
{K20, K21, K22, K23, K24, K25 }, \
{XXX, XXX, K32, K33, K34, K35 } \
}

View File

@@ -0,0 +1,20 @@
# 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 = qmk-dfu
# Build Options
# change yes to no to disable
#
CONSOLE_ENABLE = no
SPLIT_KEYBOARD = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes

1
keyboards/jian/rules.mk Normal file
View File

@@ -0,0 +1 @@
DEFAULT_FOLDER = jian/rev2