qmk-firmware/keyboards/crkbd/keymaps/vlukash_trackpad_right/keymap.c
Volodymyr Lukashevych b92387b749 [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.
2019-06-11 15:18:14 -07:00

200 lines
7.0 KiB
C

#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;
}