Add keyboard: ACR60 (#1999)
* base acr60 keyboard folder created * mitch acr60 keymap updates, documentation * latest keymap updates * slight modifications to layer switchingpjrc_hid
parent
eef94b0b40
commit
716ff76f5b
@ -0,0 +1,28 @@ |
||||
#include "acr60.h" |
||||
#include "led.h" |
||||
|
||||
void matrix_init_kb(void) { |
||||
// Keyboard start-up code goes here
|
||||
// Runs once when the firmware starts up
|
||||
matrix_init_user(); |
||||
led_init_ports(); |
||||
}; |
||||
|
||||
void matrix_scan_kb(void) { |
||||
// Looping keyboard code goes here
|
||||
// This runs every cycle (a lot)
|
||||
matrix_scan_user(); |
||||
}; |
||||
|
||||
void led_init_ports(void) { |
||||
// Set caps lock LED pin as output
|
||||
DDRB |= (1 << 2); |
||||
// Default to off
|
||||
PORTB |= (1 << 2); |
||||
} |
||||
|
||||
void led_set_kb(uint8_t usb_led) { |
||||
// Code for caps lock LED as reported by the OS
|
||||
// Set this per keymap, instead of globally
|
||||
led_set_user(usb_led); |
||||
} |
@ -0,0 +1,107 @@ |
||||
#ifndef ARC60_H |
||||
#define ARC60_H |
||||
|
||||
#include "quantum.h" |
||||
|
||||
#define KEYMAP( \ |
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||
K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
|
||||
{ K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
|
||||
} |
||||
|
||||
#define KEYMAP_HHKB( \ |
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||
K401, K403, K406, K411, K413 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
|
||||
{ KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO } \
|
||||
} |
||||
|
||||
#define KEYMAP_TRUE_HHKB( \ |
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||
K401, K403, K406, K410, K411 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
|
||||
{ KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, KC_NO, KC_NO } \
|
||||
} |
||||
|
||||
#define KEYMAP_2_SHIFTS( \ |
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
|
||||
K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
|
||||
{ K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
|
||||
} |
||||
|
||||
#define KEYMAP_DIRECTIONAL( \ |
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
|
||||
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
|
||||
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \
|
||||
K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
|
||||
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, KC_NO, K312, K313, K314 }, \
|
||||
{ K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
|
||||
} |
||||
|
||||
/* Mitch's keymap, "MitchSplit":
|
||||
* Standard 60% base, split right shift, 3-split space, standard modifier row. |
||||
* Split shift is 2.75u + 1.25u + 2.25u (total of 6.25u). Might not work with other orientations. |
||||
*/ |
||||
/*
|
||||
* ,-----------------------------------------------------------------------------------------. |
||||
* |K000 |K001 |K002 |K003 |K004 |K005 |K006 |K007 |K008 |K009 |K010 |K011 |K012 | K014 | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | K100 |K102 |K103 |K104 |K105 |K106 |K107 |K108 |K109 |K110 |K111 |K112 |K113 | K114 | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | K200 |K202 |K203 |K204 |K205 |K206 |K207 |K208 |K209 |K210 |K211 |K212 | K213 | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | K300 |K302 |K303 |K304 |K305 |K306 |K307 |K308 |K309 |K310 |K311 | K313 |K314 | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | K400 | K401 | K403 | K404 | K406 | K408 | K410 | K411 | K413 | K414 | |
||||
* `-----------------------------------------------------------------------------------------' |
||||
*/ |
||||
#define MITCHSPLIT( \ |
||||
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
|
||||
K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
|
||||
K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
|
||||
K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
|
||||
K400, K401, K403, K404, K406, K408, K410, K411, K413, K414 \
|
||||
) { \
|
||||
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
|
||||
{ K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
|
||||
{ K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
|
||||
{ K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
|
||||
{ K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \
|
||||
} |
||||
|
||||
#endif |
@ -0,0 +1,54 @@ |
||||
#ifndef CONFIG_H |
||||
#define CONFIG_H |
||||
|
||||
#include "config_common.h" |
||||
|
||||
/* USB Device descriptor parameter */ |
||||
#define VENDOR_ID 0xFEED |
||||
#define PRODUCT_ID 0x2260 |
||||
#define DEVICE_VER 0x0001 |
||||
#define MANUFACTURER MechKeysCa |
||||
#define PRODUCT ACR60 |
||||
#define DESCRIPTION ACR60 Keyboard |
||||
|
||||
/* key matrix size */ |
||||
#define MATRIX_ROWS 5 |
||||
#define MATRIX_COLS 15 |
||||
|
||||
/* key matrix pins */ |
||||
#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 } |
||||
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 } |
||||
#define UNUSED_PINS |
||||
|
||||
/* COL2ROW or ROW2COL */ |
||||
#define DIODE_DIRECTION COL2ROW |
||||
|
||||
/* number of backlight levels */ |
||||
#define BACKLIGHT_PIN B6 |
||||
#define BACKLIGHT_LEVELS 5 |
||||
|
||||
/* Set 0 if debouncing isn't needed */ |
||||
#define DEBOUNCING_DELAY 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 |
||||
|
||||
/* key combination for command */ |
||||
#define IS_COMMAND() ( \ |
||||
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
|
||||
) |
||||
|
||||
/* prevent stuck modifiers */ |
||||
#define PREVENT_STUCK_MODIFIERS |
||||
|
||||
#define RGB_DI_PIN E2 |
||||
#define RGBLIGHT_ANIMATIONS |
||||
#define RGBLED_NUM 20 |
||||
#define RGBLIGHT_HUE_STEP 8 |
||||
#define RGBLIGHT_SAT_STEP 8 |
||||
#define RGBLIGHT_VAL_STEP 8 |
||||
|
||||
#endif |
@ -0,0 +1,69 @@ |
||||
#include "acr60.h" |
||||
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
|
||||
/*
|
||||
* Default keymap with standard 60% layout. Split space possible but entirely optional with this layout, as this |
||||
* layout covers all three split space keys as space keycodes. This also has alt right next to the space bar |
||||
* on both sides (Windows keyboard layout), no right-side system/GUI key, and momentary layer switching on |
||||
* the right modifiers into the 3rd (macro) and 2nd (function/sfx) layers, respectively. This also has the grave |
||||
* accent key set up on the 2nd layer, although on the first layer it includes grave key (tilde) when shift is held down, |
||||
* via the function actions code at the bottom. |
||||
*/ |
||||
KEYMAP( |
||||
F(0), 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_NO, KC_BSPC, |
||||
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_BSLS, |
||||
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_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, |
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(2), KC_NO, MO(1), KC_RCTL), |
||||
|
||||
KEYMAP( |
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, |
||||
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), |
||||
|
||||
KEYMAP( |
||||
KC_TRNS, M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), M(12), KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), |
||||
}; |
||||
|
||||
enum function_id { |
||||
SHIFT_ESC, |
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
[0] = ACTION_FUNCTION(SHIFT_ESC), |
||||
}; |
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { |
||||
static uint8_t shift_esc_shift_mask; |
||||
switch (id) { |
||||
case SHIFT_ESC: |
||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; |
||||
if (record->event.pressed) { |
||||
if (shift_esc_shift_mask) { |
||||
add_key(KC_GRV); |
||||
send_keyboard_report(); |
||||
} else { |
||||
add_key(KC_ESC); |
||||
send_keyboard_report(); |
||||
} |
||||
} else { |
||||
if (shift_esc_shift_mask) { |
||||
del_key(KC_GRV); |
||||
send_keyboard_report(); |
||||
} else { |
||||
del_key(KC_ESC); |
||||
send_keyboard_report(); |
||||
} |
||||
} |
||||
break; |
||||
} |
||||
} |
@ -0,0 +1,204 @@ |
||||
#include "acr60.h" |
||||
|
||||
#define _DFT 0 |
||||
#define _NGUI 1 |
||||
#define _FN 2 |
||||
#define _SFX 3 |
||||
|
||||
// Fillers to make layering more clear
|
||||
#define ______ KC_TRNS |
||||
#define bbbbbb KC_NO |
||||
#define GUIOFF MAGIC_NO_GUI |
||||
#define GUION MAGIC_UNNO_GUI |
||||
|
||||
#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) |
||||
|
||||
/* TODO: create handy quick-ref list here for easy grokking of the actual shortcuts in place */ |
||||
|
||||
/*
|
||||
* This is Mitch's default ACR60 layout (also DZ60, on which the ACR60 is based). This is a |
||||
* Mac-oriented layout, as noted by the GUI keys immediately next to the space bar area of the |
||||
* lower modifier row. This uses the MITCHSPLIT keymap as defined in arc60.h, which uses a |
||||
* 3-split space bar and a split right shift. Otherwise it's a standard 60% layout (for now). |
||||
* |
||||
* For me, this is a great place to start getting used to a split key setup and still mostly |
||||
* sticking to a standard staggered 60% layout so my entire game isn't thrown off. |
||||
* |
||||
* Layers (0-based index because we're devs!): |
||||
* |
||||
* 0: Default QWERTY layer |
||||
* Note Fn and Alt keys on the right side of the spacebar, not sure if those are |
||||
* normal position but that's what I'm used to at this point. YMMV |
||||
* |
||||
* 1: Function Layer |
||||
* Function keys, Grave Key, Delete, Caps lock on the tab, media keys, and directional |
||||
* keys. Also you can hit the Alt key position to switch (and lock) into the 3rd layer |
||||
* if you really want to mess with your SFX for a bit. |
||||
* |
||||
* 2: Special Effects Layer |
||||
* RGB and backlight settings access. RGB cycle on "S" key position and if locked into |
||||
* the third layer you can hold shift to cycle backwards (see notes below). Bootloader |
||||
* access is on this layer. If layer locked, hit right Alt key to get back to layer 0. |
||||
* |
||||
* The keymap layer definitions below look pretty bad when soft-wrapped by your IDE / text editor. |
||||
* Be sure to disable wrapping to make things more readable with lines preserved. |
||||
*/ |
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
||||
/* Layer 0
|
||||
* ,-----------------------------------------------------------------------------------------. |
||||
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bksp | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | LCtrl | LAlt | LGUI | Space | Space| Space | RGUI | Fn | RAlt | RCtrl | |
||||
* `-----------------------------------------------------------------------------------------' |
||||
*/ |
||||
/* Qwerty gui/alt/space/alt/gui /
|
||||
* |
||||
* Hit MO(_FN) and Alt in that order to lock into the _FN layer. |
||||
*/ |
||||
[_DFT] = MITCHSPLIT( /* Basic QWERTY */ |
||||
F(0), 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_BSPC, \
|
||||
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_BSLS, \
|
||||
MO(_FN), 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(_FN), LT(_SFX, KC_RALT),KC_RCTL \
|
||||
), |
||||
|
||||
/* Gaming
|
||||
* ,-----------------------------------------------------------------------------------------. |
||||
* | | | | | | | | | | | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | | | | | | | | | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | | | | | | | | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | | | | | | | | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | |BLOCKED| | | |BLOCKED| | | | |
||||
* `-----------------------------------------------------------------------------------------' |
||||
*/ |
||||
/* I disable the GUI / System key for gaming, as usually that's windows and I hit that at the most
|
||||
* inopportune moments. And games don't use the windows key. I'd use the Bootmagic MAGIC_NO_GUI and |
||||
* MAGIC_UNNO_GUI keycodes, but that actually disables it and has it persist beyond disconnection |
||||
* of the board. That's less convenient (and more confusing) for me than this approach, which is |
||||
* basically just blocking the GUI keys when this layer is active and not letting them flow through |
||||
* to the default layer. |
||||
*/ |
||||
/* Layer 2: "special effects": RGB lighting, backlighting, bootloader */ |
||||
[_NGUI] = MITCHSPLIT( |
||||
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
|
||||
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
|
||||
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
|
||||
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
|
||||
______, ______, bbbbbb, ______, ______, ______, bbbbbb, ______, ______, ______ \
|
||||
), |
||||
|
||||
/* Fn Layer / Layer 1
|
||||
* ,-----------------------------------------------------------------------------------------. |
||||
* |KC_GRV| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | CAPS | | | | | |Home | Pgup| Up | PgDn| End | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | Vol-| Vol+| Mute| | | | Left| Down|Right| | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | |Prev |Play |Next | | | | | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | | | | | | | | LrSfx | | |
||||
* `-----------------------------------------------------------------------------------------' |
||||
*/ |
||||
/*
|
||||
* Pok3r-style layer switching on M and "," keys (_DFT and _NGUI layers, respectively). Note that |
||||
* these don't enable/disable those layers (i.e. latching keys), they actually switch to that layer. |
||||
* To go to the _NGUI layer, Fn+comma, to go to _DFT from _NGUI, hit Fn+M. |
||||
*/ |
||||
/* Layer 1: Functions, primary layer switching, media controls, directional */ |
||||
[_FN] = MITCHSPLIT( |
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
|
||||
KC_CAPS, bbbbbb, bbbbbb, bbbbbb, bbbbbb, bbbbbb, KC_HOME, KC_PGUP, KC_UP , KC_PGDOWN,KC_END, bbbbbb, bbbbbb, bbbbbb, \
|
||||
______, KC_VOLD, KC_VOLU, KC_MUTE, bbbbbb, bbbbbb, bbbbbb, KC_LEFT, KC_DOWN, KC_RIGHT, bbbbbb, bbbbbb, ______, \
|
||||
______, KC_MPRV, KC_MPLY, KC_MNXT, bbbbbb, bbbbbb, bbbbbb,TO(_DFT),TO(_NGUI), bbbbbb, bbbbbb, ______, ______, \
|
||||
______, ______, ______, ______, ______, ______, ______, ______,TG(_SFX),______ \
|
||||
), |
||||
|
||||
/* Special Effects Layer / Layer 2
|
||||
* ,-----------------------------------------------------------------------------------------. |
||||
* | |Plain|Brth |Rnbw |Swirl|Snake|Knght|Xmas |Grdnt| | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | BL |BLSTEP| BL- | BL+ | | | | | | | | |Bootldr | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | RGBT| RGBM| | | | | | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | | |
||||
* |-----------------------------------------------------------------------------------------+ |
||||
* | | | | | | | | |LrDflt | | |
||||
* `-----------------------------------------------------------------------------------------' |
||||
*/ |
||||
/* Tap RAlt to get back to default layer (0).
|
||||
* |
||||
* See https://docs.qmk.fm/feature_rgblight.html#rgblight-keycodes for details about
|
||||
* RGB codes. Quick summary, though: |
||||
* |
||||
* RGB_MODE_PLAIN RGB_M_P Switch to the static no animation mode |
||||
* RGB_MODE_BREATHE RGB_M_B Switch to the breathing mode |
||||
* RGB_MODE_RAINBOW RGB_M_R Switch to the rainbow mode (cycles through colors) |
||||
* RGB_MODE_SWIRL RGB_M_SW Switch to the swirl mode (like an animated gradient) |
||||
* RGB_MODE_SNAKE RGB_M_SN Switch to the snake mode |
||||
* RGB_MODE_KNIGHT RGB_M_K Switch to the knight animation |
||||
* RGB_MODE_XMAS RGB_M_X Switch to the Christmas animation |
||||
* RGB_MODE_GRADIENT RGB_M_G Switch to the static gradient mode |
||||
* |
||||
* Note that there are more animation variations, usually timer-based variations, by using the |
||||
* "S" key to cycle through modes. Use one of the deciated keys to get to |
||||
* the general mode where you want it, then cycle through variations of that mode to get |
||||
* something specific more quickly. |
||||
*/ |
||||
/* Layer 2: "special effects": RGB lighting, backlighting, bootloader */ |
||||
[_SFX] = MITCHSPLIT( |
||||
______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_M_X, RGB_M_G,______, ______, ______, ______, ______, \
|
||||
______, BL_TOGG, BL_STEP, BL_DEC, BL_INC, ______, ______, ______, ______, ______, ______, ______, ______, RESET, \
|
||||
______, RGB_TOG, RGB_MOD,______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
|
||||
______, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, ______, ______, ______, ______, ______, ______, \
|
||||
______, ______, ______, ______, ______, ______, ______, ______,TO(_DFT),______ \
|
||||
) |
||||
|
||||
}; |
||||
|
||||
enum function_id { |
||||
SHIFT_ESC, |
||||
}; |
||||
|
||||
const uint16_t PROGMEM fn_actions[] = { |
||||
[0] = ACTION_FUNCTION(SHIFT_ESC), |
||||
}; |
||||
|
||||
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { |
||||
static uint8_t shift_esc_shift_mask; |
||||
switch (id) { |
||||
case SHIFT_ESC: |
||||
shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK; |
||||
if (record->event.pressed) { |
||||
if (shift_esc_shift_mask) { |
||||
add_key(KC_GRV); |
||||
send_keyboard_report(); |
||||
} else { |
||||
add_key(KC_ESC); |
||||
send_keyboard_report(); |
||||
} |
||||
} else { |
||||
if (shift_esc_shift_mask) { |
||||
del_key(KC_GRV); |
||||
send_keyboard_report(); |
||||
} else { |
||||
del_key(KC_ESC); |
||||
send_keyboard_report(); |
||||
} |
||||
} |
||||
break; |
||||
} |
||||
} |
@ -0,0 +1,15 @@ |
||||
# ACR60 |
||||
|
||||
 |
||||
|
||||
A customizable 60% keyboard based on the DZ60. |
||||
|
||||
Keyboard Maintainer: QMK Community |
||||
Hardware Supported: ACR60 |
||||
Hardware Availability: [mechkeysca](https://mechkeys.ca/products/acr60) |
||||
|
||||
Make example for this keyboard (after setting up your build environment): |
||||
|
||||
make acr60:default |
||||
|
||||
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. |
@ -0,0 +1,56 @@ |
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
|
||||
# automatically to create a 32-bit value in your source code.
|
||||
#
|
||||
# This will be an integer division of F_USB below, as it is sourced by
|
||||
# F_USB after it has run through any CPU prescalers. Note that this value
|
||||
# does not *change* the processor frequency - it should merely be updated to
|
||||
# reflect the processor speed set externally so that the code can use accurate
|
||||
# software delays.
|
||||
F_CPU = 16000000
|
||||
|
||||
#
|
||||
# LUFA specific
|
||||
#
|
||||
# Target architecture (see library "Board Types" documentation).
|
||||
ARCH = AVR8
|
||||
|
||||
# Input clock frequency.
|
||||
# This will define a symbol, F_USB, in all source code files equal to the
|
||||
# input clock frequency (before any prescaling is performed) in Hz. This value may
|
||||
# differ from F_CPU if prescaling is used on the latter, and is required as the
|
||||
# raw input clock is fed directly to the PLL sections of the AVR for high speed
|
||||
# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
|
||||
# at the end, this will be done automatically to create a 32-bit value in your
|
||||
# source code.
|
||||
#
|
||||
# If no clock division is performed on the input clock inside the AVR (via the
|
||||
# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
|
||||
F_USB = $(F_CPU)
|
||||
|
||||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
|
||||
AUDIO_ENABLE = no
|
||||
RGBLIGHT_ENABLE = yes
|
Loading…
Reference in new issue