summaryrefslogtreecommitdiff
path: root/keyboards/crkbd
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/crkbd')
-rw-r--r--keyboards/crkbd/keymaps/drashna/config.h16
-rw-r--r--keyboards/crkbd/keymaps/drashna/keymap.c66
-rw-r--r--keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c17
-rwxr-xr-xkeyboards/crkbd/keymaps/thumb_ctrl/config.h44
-rwxr-xr-xkeyboards/crkbd/keymaps/thumb_ctrl/keymap.c253
-rwxr-xr-xkeyboards/crkbd/keymaps/thumb_ctrl/rules.mk31
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_left/config.h21
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_left/keymap.c227
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_left/readme.md14
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_left/rules.mk11
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/config.h35
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/keymap.c199
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/readme.md14
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk10
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c78
-rw-r--r--keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.h32
-rw-r--r--keyboards/crkbd/keymaps/vxid/README.md3
-rw-r--r--keyboards/crkbd/keymaps/vxid/config.h44
-rw-r--r--keyboards/crkbd/keymaps/vxid/keymap.c85
-rw-r--r--keyboards/crkbd/keymaps/vxid/rules.mk31
-rw-r--r--keyboards/crkbd/rev1/config.h2
-rw-r--r--keyboards/crkbd/rev1/matrix.c50
-rw-r--r--keyboards/crkbd/rev1/rev1.c7
-rw-r--r--keyboards/crkbd/ssd1306.c2
24 files changed, 1270 insertions, 22 deletions
diff --git a/keyboards/crkbd/keymaps/drashna/config.h b/keyboards/crkbd/keymaps/drashna/config.h
index 0b035ba3c3..724d52c38c 100644
--- a/keyboards/crkbd/keymaps/drashna/config.h
+++ b/keyboards/crkbd/keymaps/drashna/config.h
@@ -48,17 +48,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGB_MATRIX_ENABLE
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// # define DISABLE_RGB_MATRIX_ALPHAS_MODS
# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define DISABLE_RGB_MATRIX_BREATHING
# define DISABLE_RGB_MATRIX_CYCLE_ALL
+# define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
+// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
+// # define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# define DISABLE_RGB_MATRIX_DUAL_BEACON
# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-// #define DISABLE_RGB_MATRIX_RAINDROPS
-// #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+// # define DISABLE_RGB_MATRIX_RAINDROPS
+// # define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+// # define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+// # define DISABLE_RGB_MATRIX_DIGITAL_RAIN
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
@@ -67,8 +74,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define DISABLE_RGB_MATRIX_SPLASH
+// # define DISABLE_RGB_MATRIX_MULTISPLASH
# define DISABLE_RGB_MATRIX_SOLID_SPLASH
# define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif
#ifdef AUDIO_ENABLE
# define B6_AUDIO
diff --git a/keyboards/crkbd/keymaps/drashna/keymap.c b/keyboards/crkbd/keymaps/drashna/keymap.c
index 3eea7af9f9..af0bc0d9a7 100644
--- a/keyboards/crkbd/keymaps/drashna/keymap.c
+++ b/keyboards/crkbd/keymaps/drashna/keymap.c
@@ -20,9 +20,9 @@ enum crkbd_keycodes {
) \
LAYOUT_wrapper( \
KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
- KC_TAB, ALT_T(K11), K12, K13, K14, K15, K16, K17, K18, K19, K1A, RGUI_T(KC_QUOT), \
+ KC_TAB, ALT_T(K11), K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \
OS_LSFT, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), OS_RSFT, \
- LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE \
+ KC_GRV, KC_SPC, BK_LWER, DL_RAIS, KC_ENT, OS_RGUI \
)
#define LAYOUT_crkbd_base_wrapper(...) LAYOUT_crkbd_base(__VA_ARGS__)
@@ -100,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
_______, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, KC_MPLY,
- _______, _______, _______, KC_NUKE, TG_MODS, _______
+ _______, KC_NUKE, _______, _______, TG_MODS, _______
)
};
@@ -156,6 +156,8 @@ void add_keylog(uint16_t keycode) {
if (keycode < 60) {
keylog_str[0] = code_to_name[keycode];
}
+ keylog_str[KEYLOG_LEN] = 0;
+
log_timer = timer_read();
}
@@ -267,3 +269,61 @@ uint16_t get_tapping_term(uint16_t keycode) {
return TAPPING_TERM;
}
}
+
+#ifdef RGB_MATRIX_ENABLE
+
+void suspend_power_down_keymap(void) {
+ rgb_matrix_set_suspend_state(true);
+}
+
+void suspend_wakeup_init_keymap(void) {
+ rgb_matrix_set_suspend_state(false);
+}
+
+void rgb_matrix_indicators_user(void) {
+ if ( userspace_config.rgb_layer_change &&
+#ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
+ !g_suspend_state &&
+#endif
+#if defined(RGBLIGHT_ENABLE)
+ (!rgblight_config.enable && rgb_matrix_config.enable)
+#else
+ rgb_matrix_config.enable
+#endif
+ ) {
+ switch (biton32(layer_state)) {
+ case _MODS:
+ rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
+ case _GAMEPAD:
+ rgb_matrix_layer_helper(0xFF, 0x80, 0x00, LED_FLAG_UNDERGLOW); break;
+ case _DIABLO:
+ rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
+ case _RAISE:
+ rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
+ case _LOWER:
+ rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
+ case _ADJUST:
+ rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
+ default:
+ switch (biton32(default_layer_state)) {
+ case _QWERTY:
+ rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, LED_FLAG_UNDERGLOW); break;
+ case _COLEMAK:
+ rgb_matrix_layer_helper(0xFF, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;
+ case _DVORAK:
+ rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
+ case _WORKMAN:
+ rgb_matrix_layer_helper(0xD9, 0xA5, 0x21, LED_FLAG_UNDERGLOW); break;
+ case _NORMAN:
+ rgb_matrix_layer_helper(0xFF, 0x7C, 0x4D, LED_FLAG_UNDERGLOW); break;
+ case _MALTRON:
+ rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
+ case _EUCALYN:
+ rgb_matrix_layer_helper(0xFF, 0x80, 0xBF, LED_FLAG_UNDERGLOW); break;
+ case _CARPLAX:
+ rgb_matrix_layer_helper(0x00, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;
+ }
+ }
+ }
+}
+#endif
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
new file mode 100644
index 0000000000..56d4de25ac
--- /dev/null
+++ b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
@@ -0,0 +1,17 @@
+
+// generated from users/manna-harbour_miryoku/miryoku.org
+
+#define LAYOUT_miryoku( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
+ N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
+) \
+LAYOUT( \
+KC_NO, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, KC_NO, \
+KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
+KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, \
+ K32, K33, K34, K35, K36, K37 \
+)
+
+#include "manna-harbour_miryoku.c"
diff --git a/keyboards/crkbd/keymaps/thumb_ctrl/config.h b/keyboards/crkbd/keymaps/thumb_ctrl/config.h
new file mode 100755
index 0000000000..5670d8c646
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thumb_ctrl/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 150
+
+#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/thumb_ctrl/keymap.c b/keyboards/crkbd/keymaps/thumb_ctrl/keymap.c
new file mode 100755
index 0000000000..c67958aa14
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thumb_ctrl/keymap.c
@@ -0,0 +1,253 @@
+#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.
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ BACKLIT,
+ RGBRST
+};
+
+#define KC_ KC_TRNS
+#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)
+#define KC_CTLEN CTL_T(KC_LANG2) // for Linux and Windows
+#define KC_GUIEN GUI_T(KC_LANG2) // for Mac
+#define KC_SFTJP SFT_T(KC_LANG1)
+#define KC_ALTSP ALT_T(KC_SPACE)
+#define KC_ALTDL ALT_T(KC_DEL)
+
+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, ENT,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ ALTSP, LOWER, GUIEN, SFTJP, RAISE, ALTDL
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ , 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, ,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ , HOME, END, PGDN, PGUP, F11, LEFT, DOWN, UP, RGHT, F12, PIPE,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ , F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, ,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ , , , , ,
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ , EXLM, AT, HASH, DLR, PERC, CIRC, AMPR, ASTR, LPRN, RPRN, ,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ , XXXXX, XXXXX, XXXXX, XXXXX, PSCR, GRV, MINS, PLUS, LCBR, RCBR, BSLS,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ , XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, TILD, UNDS, EQL, LBRC, RBRC, ,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ , , , , ,
+ //`--------------------' `--------------------'
+ ),
+
+ [_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;
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+// 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) {
+ persistent_default_layer_set(1UL<<_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/thumb_ctrl/rules.mk b/keyboards/crkbd/keymaps/thumb_ctrl/rules.mk
new file mode 100755
index 0000000000..16deaf45d1
--- /dev/null
+++ b/keyboards/crkbd/keymaps/thumb_ctrl/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 \
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_left/config.h b/keyboards/crkbd/keymaps/vlukash_trackpad_left/config.h
new file mode 100644
index 0000000000..bdd1a099ae
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_left/config.h
@@ -0,0 +1,21 @@
+#pragma once
+
+/* Select hand configuration */
+
+#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/vlukash_trackpad_left/keymap.c b/keyboards/crkbd/keymaps/vlukash_trackpad_left/keymap.c
new file mode 100644
index 0000000000..48f60419fb
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_left/keymap.c
@@ -0,0 +1,227 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ RGBRST,
+ MBTN1,
+ SCRL
+};
+
+#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_CTLA CTL_T(KC_A)
+#define KC_CTLSC CTL_T(KC_SCLN)
+#define KC_SFTZ SFT_T(KC_Z)
+#define KC_SFTSL SFT_T(KC_SLSH)
+#define KC_WINX LWIN_T(KC_X)
+#define KC_WINDO RWIN_T(KC_DOT)
+
+#define KC_MBTN1 MBTN1
+#define KC_SCRL SCRL
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ TAB, CTLA, S, D, F, G, H, J, K, L, CTLSC, QUOT,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ GRAVE, SFTZ, WINX, C, V, B, N, M, COMM, WINDO, SFTSL,BSLASH,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, RAISE
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, XXXXX, PGDN, PSCR, PGUP, LBRC, RBRC, 7, 8, 9, XXXXX, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LCTRL, PLUS, MINS, EQL, LPRN, RPRN, 4, 5, 6, RCTRL, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LSFT, HOME, XXXXX, END, LCBR, RCBR, 1, 2, 3, RSFT, XXXXX,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, 0
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, XXXXX, F7, F8, F9, F10, BTN2, BTN2, MNXT, MPRV, MPLY, MSTP,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LCTRL, F4, F5, F6, F11, LEFT, DOWN, UP, RIGHT, RCTRL, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LSFT, F1, F2, F3, F12, XXXXX, XXXXX, VOLU, VOLD, MUTE, RSFT,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, RAISE
+ //`--------------------' `--------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RST,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, RAISE
+ //`--------------------' `--------------------'
+ )
+};
+
+int RGB_current_mode;
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+// 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);
+
+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());
+ } 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
+ }
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ 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;
+ 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;
+ 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;
+ 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/vlukash_trackpad_left/readme.md b/keyboards/crkbd/keymaps/vlukash_trackpad_left/readme.md
new file mode 100644
index 0000000000..91b884749f
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_left/readme.md
@@ -0,0 +1,14 @@
+# CrKbd with the Trackpad support
+
+CrKbd version that supports BlackBerry 8520 trackpad via additional PCB.
+See this repository for more details:
+ - https://github.com/vlukash/corne-trackpad
+ - https://vlukash.com/2019/01/15/trackpad-in-keycap-corne-crkbd-keyboard
+
+This firmware is for the Left keyboard.
+
+# Build
+
+```
+make crkbd:vlukash_trackpad_left:dfu
+```
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_left/rules.mk b/keyboards/crkbd/keymaps/vlukash_trackpad_left/rules.mk
new file mode 100644
index 0000000000..46be73c475
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_left/rules.mk
@@ -0,0 +1,11 @@
+# Build Options
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+
+BOOTLOADER = atmel-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/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c \
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/config.h b/keyboards/crkbd/keymaps/vlukash_trackpad_right/config.h
new file mode 100644
index 0000000000..8cbd8e9078
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/config.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#define NO_DEBUG_LEDS
+
+// Connector PCB version
+// 1 - PCB that supports flex caple and the trackpad sensor is mounted on an 'H' keycap
+// - https://github.com/vlukash/corne-trackpad/tree/master/connector
+// 2 - PCB woth no flex option, track sensor mounted directly on the PCB
+// - https://github.com/vlukash/corne-trackpad/tree/master/connector-no-flex
+#define TRACKPAD_CONNECTOR_VER 1
+
+/* Select hand configuration */
+#define MASTER_RIGHT
+
+#define USE_SERIAL_PD2
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 300
+
+#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
+
+/* key matrix size */
+// Rows are doubled-up
+#undef MATRIX_COL_PINS
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B7, D5 }
+
+/* ws2812 RGB LED */
+#undef RGB_DI_PIN
+#define RGB_DI_PIN B5
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/keymap.c b/keyboards/crkbd/keymaps/vlukash_trackpad_right/keymap.c
new file mode 100644
index 0000000000..8749f7a686
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/keymap.c
@@ -0,0 +1,199 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#include "mousekey.h"
+#include "pointing_device.h"
+#include "report.h"
+
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+
+extern bool isScrollMode;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+enum layer_names {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ RGBRST,
+ MBTN1,
+ SCRL
+};
+
+#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_CTLA CTL_T(KC_A)
+#define KC_CTLSC CTL_T(KC_SCLN)
+#define KC_SFTZ SFT_T(KC_Z)
+#define KC_SFTSL SFT_T(KC_SLSH)
+#define KC_WINX LWIN_T(KC_X)
+#define KC_WINDO RWIN_T(KC_DOT)
+
+#define KC_MBTN1 MBTN1
+#define KC_SCRL SCRL
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ TAB, CTLA, S, D, F, G, H, J, K, L, CTLSC, QUOT,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ GRAVE, SFTZ, WINX, C, V, B, N, M, COMM, WINDO, SFTSL,BSLASH,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, RAISE
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, XXXXX, PGDN, PSCR, PGUP, LBRC, RBRC, 7, 8, 9, XXXXX, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LCTRL, PLUS, MINS, EQL, LPRN, RPRN, 4, 5, 6, RCTRL, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LSFT, HOME, XXXXX, END, LCBR, RCBR, 1, 2, 3, RSFT, XXXXX,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, 0
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ ESC, XXXXX, F7, F8, F9, F10, BTN2, BTN2, MNXT, MPRV, MPLY, MSTP,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LCTRL, F4, F5, F6, F11, LEFT, DOWN, UP, RIGHT, RCTRL, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ XXXXX, LSFT, F1, F2, F3, F12, XXXXX, XXXXX, VOLU, VOLD, MUTE, RSFT,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, RAISE
+ //`--------------------' `--------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_kc(
+ //,-----------------------------------------. ,-----------------------------------------.
+ RST, LRST, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, RST,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LOWER, SPC, SCRL, MBTN1, ENT, RAISE
+ //`--------------------' `--------------------'
+ )
+};
+
+int RGB_current_mode;
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+// 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
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ report_mouse_t currentReport = {};
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ 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;
+ 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;
+ 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;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ case MBTN1:
+ currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ currentReport.buttons |= MOUSE_BTN1;
+ }
+ else {
+ currentReport.buttons &= ~MOUSE_BTN1;
+ }
+ pointing_device_set_report(currentReport);
+ pointing_device_send();
+ return false;
+ case SCRL:
+ if (record->event.pressed) {
+ isScrollMode = true;
+ }
+ else {
+ isScrollMode = false;
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/readme.md b/keyboards/crkbd/keymaps/vlukash_trackpad_right/readme.md
new file mode 100644
index 0000000000..cd511018c1
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/readme.md
@@ -0,0 +1,14 @@
+# CrKbd with the Trackpad support
+
+CrKbd version that supports BlackBerry 8520 trackpad via additional PCB.
+See this repository for more details:
+ - https://github.com/vlukash/corne-trackpad
+ - https://vlukash.com/2019/01/15/trackpad-in-keycap-corne-crkbd-keyboard
+
+This firmware is for the Right keyboard.
+
+# Build
+
+```
+make crkbd:vlukash_trackpad_right:dfu
+```
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk b/keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk
new file mode 100644
index 0000000000..bd53c19211
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk
@@ -0,0 +1,10 @@
+# Build Options
+POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+
+BOOTLOADER = atmel-dfu
+
+# Add support for the BB 8520 trackpad
+SRC += trackpad.c
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c b/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c
new file mode 100644
index 0000000000..afccb8c7ed
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c
@@ -0,0 +1,78 @@
+#include "trackpad.h"
+
+// bool isScrollingMode = false;
+bool isScrollMode = false;
+
+void pointing_device_init(void){
+
+ SPI_Init(SPI_SPEED_FCPU_DIV_8 | SPI_MODE_MASTER);
+
+ // Set as output
+ TP_RESET_INIT;
+ TP_SHUTDOWN_INIT;
+ TP_CS_INIT;
+ LVL_SHIFT_EN_INIT;
+
+ // Reset level shifter
+ LVL_SHIFT_EN_LO;
+ wait_ms(100);
+ LVL_SHIFT_EN_HI;
+
+ // Force a BB-8520 reset
+ TP_RESET_HI;
+ wait_ms(100);
+ TP_RESET_LO;
+
+ // Turn on BB-8520 trackpad
+ TP_SHUTDOWN_LO;
+
+ TP_CS_HI;
+}
+
+uint8_t readRegister(uint8_t address) {
+ uint8_t data;
+
+ TP_CS_LO;
+
+ // Read the data
+ SPI_TransferByte(address);
+ data = SPI_TransferByte(0x00);
+
+ TP_CS_HI;
+
+ return data;
+}
+
+void pointing_device_task(void){
+ uint8_t motion = readRegister(0x02);
+
+ // Motion has occurred on the trackpad
+ if (motion > 127) {
+
+ int8_t dx, dy;
+
+ if(TRACKPAD_CONNECTOR_VER == 1) {
+ dx = readRegister(0x03);
+ dy = -readRegister(0x04);
+ }
+ else {
+ dy = -readRegister(0x03);
+ dx = -readRegister(0x04);
+ }
+
+ report_mouse_t currentReport = pointing_device_get_report();
+ if (isScrollMode)
+ {
+ currentReport.h = dx/SCROLL_SPEED_DIVIDER;
+ currentReport.v = dy/SCROLL_SPEED_DIVIDER;
+ }
+ else
+ {
+ currentReport.x = dx * POINTER_SPEED_MULTIPLIER;
+ currentReport.y = dy * POINTER_SPEED_MULTIPLIER;
+ }
+
+ pointing_device_set_report(currentReport);
+ pointing_device_send();
+ }
+}
diff --git a/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.h b/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.h
new file mode 100644
index 0000000000..755abc7de2
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "pointing_device.h"
+#include "quantum.h"
+#include "report.h"
+#include <util/delay.h>
+#include "../../lib/lufa/LUFA/Drivers/Peripheral/SPI.h"
+
+// Trackpad speed adjustments
+#define POINTER_SPEED_MULTIPLIER 2
+#define SCROLL_SPEED_DIVIDER 6
+
+// Pins on corresponding ports
+#define TP_RESET 1
+#define TP_SHUTDOWN 0
+#define TP_CS 0
+#define LVL_SHIFT_EN 7
+
+// Configure as output
+#define TP_RESET_INIT DDRF |= (1 << TP_RESET);
+#define TP_SHUTDOWN_INIT DDRF |= (1 << TP_SHUTDOWN);
+#define TP_CS_INIT DDRB |= (1 << TP_CS);
+#define LVL_SHIFT_EN_INIT DDRC |= (1 << LVL_SHIFT_EN);
+
+#define TP_RESET_HI PORTF |= (1 << TP_RESET);
+#define TP_RESET_LO PORTF &= ~ (1 << TP_RESET);
+#define TP_SHUTDOWN_HI PORTF |= (1 << TP_SHUTDOWN);
+#define TP_SHUTDOWN_LO PORTF &= ~ (1 << TP_SHUTDOWN);
+#define TP_CS_HI PORTB |= (1 << TP_CS);
+#define TP_CS_LO PORTB &= ~ (1 << TP_CS);
+#define LVL_SHIFT_EN_HI PORTC |= (1 << LVL_SHIFT_EN);
+#define LVL_SHIFT_EN_LO PORTC &= ~ (1 << LVL_SHIFT_EN);
diff --git a/keyboards/crkbd/keymaps/vxid/README.md b/keyboards/crkbd/keymaps/vxid/README.md
new file mode 100644
index 0000000000..7b0f9b8af5
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/README.md
@@ -0,0 +1,3 @@
+# Vxid crkbd layout
+
+Inspired by sdothum's wide planck layout.
diff --git a/keyboards/crkbd/keymaps/vxid/config.h b/keyboards/crkbd/keymaps/vxid/config.h
new file mode 100644
index 0000000000..bbf76d705f
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/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/vxid/keymap.c b/keyboards/crkbd/keymaps/vxid/keymap.c
new file mode 100644
index 0000000000..e1c73caeb7
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/keymap.c
@@ -0,0 +1,85 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+extern uint8_t is_master;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE
+};
+
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc( \
+ //,-----------------------------------------. ,-----------------------------------------.
+ Q, W, E, R, T, ESC, DEL, Y, U, I, O, P,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ A, S, D, F, G, SPC, BSPC, H, J, K, L, SCLN,\
+ //|------+------+------+------+------+------| |------+------+------+------+------+------|
+ Z, X, C, V, B, TAB, ENT, N, M, COMM, DOT, SLSH,\
+ //|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ LALT, LGUI, LCTL, LSFT, RAISE, LOWER \
+ //`--------------------' `--------------------'
+ ),
+
+ [_LOWER] = LAYOUT_kc( \
+ //,-----------------------------------------. ,------------------------------------------.
+ 1, 2, 3, 4, 5, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ 6, 7, 8, 9, 0, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ EQL, PLUS, MINS, SLSH, ASTR, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+-------+------+------+------+------+------|
+ LALT, LGUI, LCTL, LSFT, RAISE, LOWER \
+ //`--------------------' `--------------------'
+ ),
+
+ [_RAISE] = LAYOUT_kc( \
+ //,-----------------------------------------. ,------------------------------------------.
+ EXLM, AT, HASH, DLR, PERC, LPRN, RPRN, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ CIRC, AMPR, ASTR, QUOT, DQUO, LCBR, RCBR, LEFT, DOWN, UP, RIGHT, XXXXX,\
+ //|------+------+------+------+------+------| |-------+------+------+------+------+------|
+ BSLS, TILD, GRV, UNDS, PIPE, LBRC, RBRC, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+------+------+------+------+------+------| |------+-------+------+------+------+------+------|
+ LALT, LGUI, LCTL, LSFT, RAISE, LOWER \
+ //`--------------------' `--------------------'
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/crkbd/keymaps/vxid/rules.mk b/keyboards/crkbd/keymaps/vxid/rules.mk
new file mode 100644
index 0000000000..83e87ecf98
--- /dev/null
+++ b/keyboards/crkbd/keymaps/vxid/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 = no # 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 \
diff --git a/keyboards/crkbd/rev1/config.h b/keyboards/crkbd/rev1/config.h
index 6564c8503d..4ea8ff38cd 100644
--- a/keyboards/crkbd/rev1/config.h
+++ b/keyboards/crkbd/rev1/config.h
@@ -43,7 +43,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
+#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/crkbd/rev1/matrix.c b/keyboards/crkbd/rev1/matrix.c
index 718cc57448..dd93506db1 100644
--- a/keyboards/crkbd/rev1/matrix.c
+++ b/keyboards/crkbd/rev1/matrix.c
@@ -93,6 +93,44 @@ uint8_t matrix_cols(void)
return MATRIX_COLS;
}
+void tx_rx_leds_init(void)
+{
+#ifndef NO_DEBUG_LEDS
+ TX_RX_LED_INIT;
+ TXLED0;
+ RXLED0;
+#endif
+}
+
+void tx_led_on(void)
+{
+#ifndef NO_DEBUG_LEDS
+ TXLED1;
+#endif
+}
+
+void tx_led_off(void)
+{
+#ifndef NO_DEBUG_LEDS
+ TXLED0;
+#endif
+}
+
+void rx_led_on(void)
+{
+#ifndef NO_DEBUG_LEDS
+ RXLED1;
+#endif
+}
+
+void rx_led_off(void)
+{
+#ifndef NO_DEBUG_LEDS
+ RXLED0;
+#endif
+}
+
+
void matrix_init(void)
{
debug_enable = true;
@@ -102,9 +140,7 @@ void matrix_init(void)
unselect_rows();
init_cols();
- TX_RX_LED_INIT;
- TXLED0;
- RXLED0;
+ tx_rx_leds_init();
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
@@ -189,10 +225,10 @@ int serial_transaction(int master_changed) {
int ret=serial_update_buffers();
#endif
if (ret ) {
- if(ret==2) RXLED1;
+ if(ret==2) rx_led_on();
return 1;
}
- RXLED0;
+ rx_led_off();
memcpy(&matrix[slaveOffset],
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
return 0;
@@ -241,7 +277,7 @@ uint8_t matrix_master_scan(void) {
if( serial_transaction(mchanged) ) {
#endif
// turn on the indicator led when halves are disconnected
- TXLED1;
+ tx_led_on();
error_count++;
@@ -254,7 +290,7 @@ uint8_t matrix_master_scan(void) {
}
} else {
// turn off the indicator led on no error
- TXLED0;
+ tx_led_off();
error_count = 0;
}
matrix_scan_quantum();
diff --git a/keyboards/crkbd/rev1/rev1.c b/keyboards/crkbd/rev1/rev1.c
index 38ab927881..b969b5e286 100644
--- a/keyboards/crkbd/rev1/rev1.c
+++ b/keyboards/crkbd/rev1/rev1.c
@@ -6,13 +6,6 @@
float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
#endif
-#ifdef SSD1306OLED
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
- //led_set_user(usb_led);
-}
-#endif
-
#ifdef RGB_MATRIX_ENABLE
// Logical Layout
diff --git a/keyboards/crkbd/ssd1306.c b/keyboards/crkbd/ssd1306.c
index 4330c8497d..20c2738db7 100644
--- a/keyboards/crkbd/ssd1306.c
+++ b/keyboards/crkbd/ssd1306.c
@@ -13,7 +13,7 @@
#include "sendchar.h"
#include "timer.h"
-static const unsigned char font[] PROGMEM;
+extern const unsigned char font[] PROGMEM;
// Set this to 1 to help diagnose early startup problems
// when testing power-on with ble. Turn it off otherwise,