mirror of
https://github.com/openstenoproject/qmk
synced 2024-11-08 17:29:09 +00:00
[Keymap] Add BB8520 trackpad support for CrKbd (#5925)
* Add vlukash CrKbd keymap to support trackpad adapter. The trackpad adapter uses Elite-C board that has five extra pins. Also SPI pins are taken for trackpad, keymap config updates column data pins for matrix scan. * Update vlukash keymap * Enable pointing devide, configure mouse BTN1 * Set TAPPING_TERM to 300 * Add support for the BlackBerry 8520 trackpad * Add vlukash keymap for master-right no-trackpad version * Remap backspace * Set EXTRAKEY_ENABLE = yes * Update thumb keys mappings * Set bootloader to atmel-dfu * Sync keymap * Add scrolling support * Make debug LEDS conditional * Add support for both flex and no-flex PCBs * Add readme and rename root folders * Update readme file with blog link * Fix readme file formatting * Remove ADJUST keycode, code cleanup. * Add Win key to the keymap.
This commit is contained in:
parent
2558466d78
commit
b92387b749
11 changed files with 684 additions and 7 deletions
21
keyboards/crkbd/keymaps/vlukash_trackpad_left/config.h
Normal file
21
keyboards/crkbd/keymaps/vlukash_trackpad_left/config.h
Normal file
|
@ -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
|
227
keyboards/crkbd/keymaps/vlukash_trackpad_left/keymap.c
Normal file
227
keyboards/crkbd/keymaps/vlukash_trackpad_left/keymap.c
Normal file
|
@ -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;
|
||||
}
|
||||
|
14
keyboards/crkbd/keymaps/vlukash_trackpad_left/readme.md
Normal file
14
keyboards/crkbd/keymaps/vlukash_trackpad_left/readme.md
Normal file
|
@ -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
|
||||
```
|
11
keyboards/crkbd/keymaps/vlukash_trackpad_left/rules.mk
Normal file
11
keyboards/crkbd/keymaps/vlukash_trackpad_left/rules.mk
Normal file
|
@ -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 \
|
35
keyboards/crkbd/keymaps/vlukash_trackpad_right/config.h
Normal file
35
keyboards/crkbd/keymaps/vlukash_trackpad_right/config.h
Normal file
|
@ -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
|
199
keyboards/crkbd/keymaps/vlukash_trackpad_right/keymap.c
Normal file
199
keyboards/crkbd/keymaps/vlukash_trackpad_right/keymap.c
Normal file
|
@ -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;
|
||||
}
|
14
keyboards/crkbd/keymaps/vlukash_trackpad_right/readme.md
Normal file
14
keyboards/crkbd/keymaps/vlukash_trackpad_right/readme.md
Normal file
|
@ -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
|
||||
```
|
10
keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk
Normal file
10
keyboards/crkbd/keymaps/vlukash_trackpad_right/rules.mk
Normal file
|
@ -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
|
78
keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c
Normal file
78
keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.c
Normal file
|
@ -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();
|
||||
}
|
||||
}
|
32
keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.h
Normal file
32
keyboards/crkbd/keymaps/vlukash_trackpad_right/trackpad.h
Normal file
|
@ -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);
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue