summaryrefslogtreecommitdiff
path: root/keyboards/crkbd
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/crkbd')
-rw-r--r--keyboards/crkbd/keymaps/drashna/keymap.c10
-rw-r--r--keyboards/crkbd/keymaps/drashna/rules.mk2
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/config.h7
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/keymap.c140
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/oled.c18
-rw-r--r--keyboards/crkbd/keymaps/jarred/config.h44
-rw-r--r--keyboards/crkbd/keymaps/jarred/keymap.c182
-rw-r--r--keyboards/crkbd/keymaps/jarred/readme.md9
-rw-r--r--keyboards/crkbd/keymaps/jarred/rules.mk31
-rw-r--r--keyboards/crkbd/keymaps/thefrey/README.md16
-rw-r--r--keyboards/crkbd/keymaps/thefrey/config.h45
-rw-r--r--keyboards/crkbd/keymaps/thefrey/keymap.c244
-rw-r--r--keyboards/crkbd/keymaps/thefrey/rules.mk31
13 files changed, 658 insertions, 121 deletions
diff --git a/keyboards/crkbd/keymaps/drashna/keymap.c b/keyboards/crkbd/keymaps/drashna/keymap.c
index 0a9ff24ff8..91f0ebfa27 100644
--- a/keyboards/crkbd/keymaps/drashna/keymap.c
+++ b/keyboards/crkbd/keymaps/drashna/keymap.c
@@ -187,10 +187,10 @@ const char* read_modifier_state(void) {
uint8_t one_shot = get_oneshot_mods();
snprintf(modifier_state_str, sizeof(modifier_state_str), "Mods:%s %s %s %s",
- (modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) ? "CTL" : " ",
- (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK) ? "GUI" : " ",
- (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) ? "ALT" : " ",
- (modifiers & MODS_SHIFT_MASK || one_shot & MODS_SHIFT_MASK) ? "SFT" : " "
+ (modifiers & MOD_MASK_CTRL || one_shot & MOD_MASK_CTRL) ? "CTL" : " ",
+ (modifiers & MOD_MASK_GUI || one_shot & MOD_MASK_GUI) ? "GUI" : " ",
+ (modifiers & MOD_MASK_ALT || one_shot & MOD_MASK_ALT) ? "ALT" : " ",
+ (modifiers & MOD_MASK_SHIFT || one_shot & MOD_MASK_SHIFT) ? "SFT" : " "
);
return modifier_state_str;
@@ -252,7 +252,7 @@ void matrix_render_user(struct CharacterMatrix *matrix) {
// matrix_write_ln(matrix, read_keylog());
matrix_write_ln(matrix, read_keylogs());
// matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
- matrix_write(matrix, read_host_led_state());
+ // matrix_write(matrix, read_host_led_state());
//matrix_write_ln(matrix, read_timelog());
} else {
matrix_write(matrix, read_logo());
diff --git a/keyboards/crkbd/keymaps/drashna/rules.mk b/keyboards/crkbd/keymaps/drashna/rules.mk
index 4b70f66f7b..540534978c 100644
--- a/keyboards/crkbd/keymaps/drashna/rules.mk
+++ b/keyboards/crkbd/keymaps/drashna/rules.mk
@@ -24,8 +24,8 @@ BOOTLOADER = qmk-dfu
# If you want to change the display of OLED, you need to change here
SRC += ./lib/glcdfont.c \
- ./lib/rgb_state_reader.c \
./lib/logo_reader.c \
+ # ./lib/rgb_state_reader.c \
# ./lib/keylogger.c \
# ./lib/host_led_state_reader.c \
# ./lib/mode_icon_reader.c \
diff --git a/keyboards/crkbd/keymaps/edvorakjp/config.h b/keyboards/crkbd/keymaps/edvorakjp/config.h
index 515591a429..b8662aca09 100644
--- a/keyboards/crkbd/keymaps/edvorakjp/config.h
+++ b/keyboards/crkbd/keymaps/edvorakjp/config.h
@@ -3,15 +3,16 @@
/* Select hand configuration */
-#define MASTER_LEFT
-// #define MASTER_RIGHT
+// #define MASTER_LEFT
+#define MASTER_RIGHT
// #define EE_HANDS
#define SSD1306OLED
#define SWAP_SCLN
// #define TAPPING_FORCE_HOLD
-#define TAPPING_TERM 120
+#define TAPPING_TERM 300
+#define IGNORE_MOD_TAP_INTERRUPT
#undef RGBLED_NUM
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
diff --git a/keyboards/crkbd/keymaps/edvorakjp/keymap.c b/keyboards/crkbd/keymaps/edvorakjp/keymap.c
index ae2f710a03..32001f22da 100644
--- a/keyboards/crkbd/keymaps/edvorakjp/keymap.c
+++ b/keyboards/crkbd/keymaps/edvorakjp/keymap.c
@@ -16,113 +16,61 @@
#define KC_ KC_TRNS
-#define KC_TMB1 LGUI_T(KC_TAB)
-#define KC_TMB2 LSFT_T(KC_SPC)
+#define KC_TMB1 KC_LA(TAB)
+#define KC_TMB2 KC_LS(SPC)
#define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
#define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
-#define KC_TMB5 RCTL_T(KC_BSPC)
-#define KC_TMB6 RALT_T(KC_ENT)
-#define KC_TMB7 KC_DEL
-#define KC_TMB8 RALT(KC_ENT)
-#define KC_TMB9 LGUI(KC_TAB)
-
-#define KC_RST RESET
-#define KC_DBUG DEBUG
-#define KC_RTOG RGB_TOG
-#define KC_EDJP EDVORAK
-#define KC_QWER QWERTY
+#define KC_TMB5 KC_RC(BSPC)
+#define KC_TMB6 KC_RG(ENT)
+#define KC_TMB7 KC_RC(DEL)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_EDVORAK] = LAYOUT_kc(
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- ESC ,QUOT,COMM,DOT , Y , P , F , G , R , W , Q ,BSLS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- EQL , A , O , E , I , U , D , T , N , S , M ,MINS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- GRV ,SCLN, X , C , V , Z , B , H , J , K , L ,SLSH,
- //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
- TMB1,TMB2,TMB3, TMB4,TMB5,TMB6
- // `----+----+----' `----+----+----'
- ),
-
- [_EDVORAKJ1] = LAYOUT_kc(
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , AI , OU , EI , , , , , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , , , , Y , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , ,
- //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
- , , , , ,
- // `----+----+----' `----+----+----'
- ),
-
- [_EDVORAKJ2] = LAYOUT_kc(
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , AI , OU , EI , , , , , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , , Y , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , ,
- //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
- , , , , ,
- // `----+----+----' `----+----+----'
- ),
-
- [_QWERTY] = LAYOUT_kc(
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- EQL , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- GRV , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,BSLS,
- //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
- , , , , ,
- // `----+----+----' `----+----+----'
+ //|----+----+-----+-----+-----+----| |----+-----+-----+-----+----+----|
+ GRV ,QUOT,COMM , DOT , Y , Q , F , G , R , W , P ,BSLS,
+ //|----+----+-----+-----+-----+----| |----+-----+-----+-----+----+----|
+ EQL , A ,LA(O),LG(E),LC(I), U , D ,RS(T),RG(N),RA(S), M ,MINS,
+ //|----+----+-----+-----+-----+----| |----+-----+-----+-----+----+----|
+ ESC ,SCLN, X , C , V , Z , H , J , K , L , B ,SLSH,
+ //`----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----'
+ TMB1 ,TMB2,TMB3, TMB4,TMB5,TMB6
+ // `-----+----+----' `----+----+-----'
),
[_LOWER] = LAYOUT_kc(
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , 1 ,EXLM, AT ,HASH,DLR , PERC,CIRC,AMPR,ASTR, 0 , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , LT ,LCBR,LPRN,LBRC, RBRC,RPRN,RCBR, GT , , ,
- //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
- , , , ,TMB7,TMB8
- // `----+----+----' `----+----+----'
+ //|----+----+------+------+------+----| |----+------+------+-------+----+----|
+ , , LCBR , LBRC , LPRN , , , RPRN , RBRC , RCBR , , ,
+ //|----+----+------+------+------+----| |----+------+------+-------+----+----|
+ F1 , F2 ,LA(F3),LG(F4),LC(F5), F6 , F7 ,RS(F8),RG(F9),RA(F10),F11 ,F12 ,
+ //|----+----+------+------+------+----| |----+------+------+-------+----+----|
+ PSCR, , HOME , PGDN , PGUP ,END , LEFT, DOWN , UP , RGHT , , ,
+ //`----+----+------+------+------+----+----| |----+----+------+------+-------+----+----'
+ , , NO , MAC ,TMB7,
+ // `-----+----+----' `----+----+-----'
),
[_RAISE] = LAYOUT_kc(
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- ,F11 ,F12 ,PSCR,SLCK,PAUS, ,HOME,PGDN,PGUP,END , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , ,LEFT,DOWN, UP ,RGHT, ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
- TMB9, , , , ,
- // `----+----+----' `----+----+----'
- ),
-
- [_ADJUST] = LAYOUT_kc(
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , ,EXTOFF, , ,EXTON, , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , ,QWER,WIN ,RST , RTOG,MAC ,EDJP, , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , , , , , , ,
- //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
- , , , , ,
- // `----+----+----' `----+----+----'
+ //|----+----+-----+-----+-----+----| |----+-----+-----+-----+----+----|
+ , ,EXLM , AT ,HASH ,DLR , PERC,CIRC ,AMPR ,ASTR , , ,
+ //|----+----+-----+-----+-----+----| |----+-----+-----+-----+----+----|
+ , 1 ,LA(2),LG(3),LC(4), 5 , 6 ,RS(7),RG(8),RA(9), 0 , ,
+ //|----+----+-----+-----+-----+----| |----+-----+-----+-----+----+----|
+ PSCR, ,HOME ,PGDN ,PGUP ,END , LEFT,DOWN , UP ,RGHT , , ,
+ //`----+----+-----+-----+-----+----+----| |----+----+-----+-----+-----+----+----'
+ , ,WIN , NO , ,
+ // `-----+----+----' `----+----+----'
)
};
#ifdef SSD1306OLED
void matrix_init_keymap(void) {
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
- iota_gfx_init(!has_usb()); // turns on the display
+#ifdef MASTER_RIGHT
+ iota_gfx_init(has_usb()); // turns on the display
+#else
+ iota_gfx_init(!has_usb());
+#endif // MASTER_RIGHT
}
void matrix_scan_user(void) {
@@ -134,23 +82,15 @@ void matrix_scan_user(void) {
uint32_t layer_state_set_keymap(uint32_t state) {
rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
switch (biton32(state)) {
- case _EDVORAKJ1:
- case _EDVORAKJ2:
- // _EDVORAKJ1 & J2 are same colored
- rgblight_sethsv_noeeprom_white();
- break;
case _LOWER:
rgblight_sethsv_noeeprom_red();
break;
case _RAISE:
- rgblight_sethsv_noeeprom_blue();
- break;
- case _ADJUST:
rgblight_sethsv_noeeprom_green();
break;
- default: // for any other layers, or the default layer
- rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
- rgblight_sethsv_noeeprom_red();
+ default: // for any other layers, or the default layer
+ rgblight_mode(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
+ rgblight_sethsv_red();
break;
}
return state;
diff --git a/keyboards/crkbd/keymaps/edvorakjp/oled.c b/keyboards/crkbd/keymaps/edvorakjp/oled.c
index e4cccf3e7f..cbb43d0615 100644
--- a/keyboards/crkbd/keymaps/edvorakjp/oled.c
+++ b/keyboards/crkbd/keymaps/edvorakjp/oled.c
@@ -21,11 +21,7 @@ const char *read_layer_state(void) {
switch (biton32(layer_state)) {
case L_BASE:
- strcpy(layer_name, default_layer_state == 1UL<<_EDVORAK ? "EDVORAK" : "QWERTY");
- break;
- case _EDVORAKJ1:
- case _EDVORAKJ2:
- strcpy(layer_name, "JP_EXT");
+ strcpy(layer_name, "Default");
break;
case _RAISE:
strcpy(layer_name, "Raise");
@@ -33,9 +29,6 @@ const char *read_layer_state(void) {
case _LOWER:
strcpy(layer_name, "Lower");
break;
- case _ADJUST:
- strcpy(layer_name, "Adjust");
- break;
default:
snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
}
@@ -49,10 +42,7 @@ const char *read_layer_state(void) {
const char *read_host_led_state(void) {
static char led_str[24];
- bool ext_status = get_enable_jp_extra_layer() && get_japanese_mode();
- strcpy(led_str, ext_status ? "EXT" : " ");
-
- strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? " NMLK" : " ");
+ strcpy(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : " ");
strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : " ");
strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : " ");
return led_str;
@@ -70,7 +60,11 @@ void iota_gfx_task_user(void) {
struct CharacterMatrix matrix;
matrix_clear(&matrix);
+#ifdef MASTER_RIGHT
+ if (!is_master) {
+#else
if (is_master) {
+#endif // MASTER_RIGHT
matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
matrix_write(&matrix, " ");
matrix_write(&matrix, read_layer_state());
diff --git a/keyboards/crkbd/keymaps/jarred/config.h b/keyboards/crkbd/keymaps/jarred/config.h
new file mode 100644
index 0000000000..ac4c1cc88f
--- /dev/null
+++ b/keyboards/crkbd/keymaps/jarred/config.h
@@ -0,0 +1,44 @@
+/*
+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 USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+//#define TAPPING_FORCE_HOLD
+//#define TAPPING_TERM 100
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/crkbd/keymaps/jarred/keymap.c b/keyboards/crkbd/keymaps/jarred/keymap.c
new file mode 100644
index 0000000000..f00a735bfc
--- /dev/null
+++ b/keyboards/crkbd/keymaps/jarred/keymap.c
@@ -0,0 +1,182 @@
+#include QMK_KEYBOARD_H
+#include "jarred.h"
+
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+extern uint8_t is_master;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+#define LAYOUT_crkbd_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K31, K32, K33, K34, K35, K36 \
+ )
+
+#define LAYOUT_crkbd_wrapper(...) LAYOUT(__VA_ARGS__)
+
+#define QWERTY_4_CRKBD KC_LCTL, MO(_LW), KC_SPC, KC_ENT, MO(_LW), KC_RALT
+
+#define BLANK_4_CRKBD KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT_crkbd_wrapper(
+ QWERTY_1_12,
+ QWERTY_2_12,
+ QWERTY_3_12,
+ QWERTY_4_DOX
+ ),
+
+ [_LW] = LAYOUT_crkbd_wrapper(
+ LOWER_1_12,
+ LOWER_2_12,
+ LOWER_3_12,
+ LOWER_4_DOX
+ ),
+
+ [_NV] = LAYOUT_crkbd_wrapper(
+ NAV_1_12,
+ NAV_2_12,
+ NAV_3_12,
+ NAV_4_DOX
+ ),
+
+ [_NP] = LAYOUT_crkbd_wrapper(
+ NUMPAD_1_12,
+ NUMPAD_2_12,
+ NUMPAD_3_12,
+ NUMPAD_4_DOX
+ ),
+
+ [_MS] = LAYOUT_crkbd_wrapper(
+ MOUSE_1_12,
+ MOUSE_2_12,
+ MOUSE_3_12,
+ MOUSE_4_DOX
+ )
+};
+
+void matrix_init_user(void) {
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+char matrix_line_str[24];
+
+const char *read_layer_state(void) {
+ uint8_t layer = biton32(layer_state);
+
+ strcpy(matrix_line_str, "Layer: ");
+
+ switch (layer)
+ {
+ case _QW:
+ strcat(matrix_line_str, "Default");
+ break;
+ case _LW:
+ strcat(matrix_line_str, "Lower");
+ break;
+ case _NV:
+ strcat(matrix_line_str, "Navigation");
+ break;
+ case _NP:
+ strcat(matrix_line_str, "Adjust");
+ break;
+ case _MS:
+ strcat(matrix_line_str, "Mouse");
+ break;
+ default:
+ sprintf(matrix_line_str + strlen(matrix_line_str), "Unknown (%d)", layer);
+ }
+
+ return matrix_line_str;
+}
+
+const char *read_usb_state(void) {
+
+ strcpy(matrix_line_str, "USB : ");
+
+ switch (USB_DeviceState) {
+ case DEVICE_STATE_Unattached:
+ strcat(matrix_line_str, "Unattached");
+ break;
+ case DEVICE_STATE_Suspended:
+ strcat(matrix_line_str, "Suspended");
+ break;
+ case DEVICE_STATE_Configured:
+ strcat(matrix_line_str, "Connected");
+ break;
+ case DEVICE_STATE_Powered:
+ strcat(matrix_line_str, "Powered");
+ break;
+ case DEVICE_STATE_Default:
+ strcat(matrix_line_str, "Default");
+ break;
+ case DEVICE_STATE_Addressed:
+ strcat(matrix_line_str, "Addressed");
+ break;
+ default:
+ strcat(matrix_line_str, "Invalid");
+ }
+
+ return matrix_line_str;
+}
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_usb_state());
+ matrix_write_ln(matrix, read_keylogs());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+#endif//SSD1306OLED
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ set_keylog(keycode, record);
+ }
+
+ return true;
+}
diff --git a/keyboards/crkbd/keymaps/jarred/readme.md b/keyboards/crkbd/keymaps/jarred/readme.md
new file mode 100644
index 0000000000..15e355bbca
--- /dev/null
+++ b/keyboards/crkbd/keymaps/jarred/readme.md
@@ -0,0 +1,9 @@
+# Jarred's CRKBD Layout
+
+Check out [user space readme](../../../../users/jarred/readme.md) for more info
+
+# Build
+
+```
+make crkbd:jarred:avrdude
+```
diff --git a/keyboards/crkbd/keymaps/jarred/rules.mk b/keyboards/crkbd/keymaps/jarred/rules.mk
new file mode 100644
index 0000000000..ab6329f0eb
--- /dev/null
+++ b/keyboards/crkbd/keymaps/jarred/rules.mk
@@ -0,0 +1,31 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# 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 you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ #./lib/layer_state_reader.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/crkbd/keymaps/thefrey/README.md b/keyboards/crkbd/keymaps/thefrey/README.md
new file mode 100644
index 0000000000..69b20cfcd6
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thefrey/README.md
@@ -0,0 +1,16 @@
+![the-frey-layout](https://raw.githubusercontent.com/the-frey/the-frey.github.com/master/assets/images/keyboard-layout.jpg)
+
+# Keyboard layout by the-frey
+
+This is a layout that allows access to all the paren keys easily, has a tab on the lower layer (for SUPER-TAB app switching) and some utility features like PGUP/PGDOWN and HOME/END.
+
+In addition, the arrows are on the lower layer and are bound to the vim keys (h,j,k,l). I've found this a productive layout for programming in emacs and hopefully you will too.
+
+The layout image above shows the keymap, with each key marked with all three layers:
+
+- The top indicates the raise layer
+- The middle indicates the default layer
+- The bottom indicates the lower layer
+
+All the keys respond as you'd expect to the 'shift' key - i.e. on a UK/GB keyboard, `/` becomes `?` and so on.
+
diff --git a/keyboards/crkbd/keymaps/thefrey/config.h b/keyboards/crkbd/keymaps/thefrey/config.h
new file mode 100644
index 0000000000..cee901fc81
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thefrey/config.h
@@ -0,0 +1,45 @@
+/*
+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 USE_MATRIX_I2C
+#define FORCE_NKRO
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/crkbd/keymaps/thefrey/keymap.c b/keyboards/crkbd/keymaps/thefrey/keymap.c
new file mode 100644
index 0000000000..5077bfc87c
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thefrey/keymap.c
@@ -0,0 +1,244 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// 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.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ BACKLIT,
+ RGBRST
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+#define KC_RST RESET
+#define KC_LRST RGBRST
+#define KC_LTOG RGB_TOG
+#define KC_LHUI RGB_HUI
+#define KC_LHUD RGB_HUD
+#define KC_LSAI RGB_SAI
+#define KC_LSAD RGB_SAD
+#define KC_LVAI RGB_VAI
+#define KC_LVAD RGB_VAD
+#define KC_LMOD RGB_MOD
+#define KC_CTLTB CTL_T(KC_TAB)
+#define KC_GUIEI GUI_T(KC_LANG2)
+#define KC_ALTKN ALT_T(KC_LANG1)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ CTLTB, A, S, D, F, G, H, J, K, L, SCLN, QUOT,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ TAB, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ CTLTB, MUTE, VOLD, VOLU, PGUP, PGDN, LEFT, DOWN, UP, RIGHT, HOME, END,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, BSPC,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ CTLTB, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, MINS, EQL, LCBR, RCBR, PIPE, GRV,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LSFT, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, UNDS, PLUS, LBRC, RBRC, BSLS, TILD,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
+ //`--------------------' `--------------------'
+ )
+};
+
+int RGB_current_mode;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ // If you want to change the display of OLED, you need to change here
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_keylog());
+ matrix_write_ln(matrix, read_keylogs());
+ //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+ //matrix_write_ln(matrix, read_host_led_state());
+ //matrix_write_ln(matrix, read_timelog());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+#endif//SSD1306OLED
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+#ifdef SSD1306OLED
+ set_keylog(keycode, record);
+#endif
+ // set_timelog();
+ }
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ return false;
+ break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
diff --git a/keyboards/crkbd/keymaps/thefrey/rules.mk b/keyboards/crkbd/keymaps/thefrey/rules.mk
new file mode 100644
index 0000000000..16deaf45d1
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thefrey/rules.mk
@@ -0,0 +1,31 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# 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 you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \