diff options
Diffstat (limited to 'keyboards/pica40')
-rw-r--r-- | keyboards/pica40/keymaps/zzeneg/config.h | 11 | ||||
-rw-r--r-- | keyboards/pica40/keymaps/zzeneg/keymap.c | 196 | ||||
-rw-r--r-- | keyboards/pica40/keymaps/zzeneg/rules.mk | 2 | ||||
-rw-r--r-- | keyboards/pica40/rev2/post_rules.mk | 8 | ||||
-rw-r--r-- | keyboards/pica40/rev2/rev2.c | 98 |
5 files changed, 17 insertions, 298 deletions
diff --git a/keyboards/pica40/keymaps/zzeneg/config.h b/keyboards/pica40/keymaps/zzeneg/config.h deleted file mode 100644 index f29f5ba1a7..0000000000 --- a/keyboards/pica40/keymaps/zzeneg/config.h +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2022 zzeneg (@zzeneg) -// SPDX-License-Identifier: GPL-2.0-or-later - -#pragma once - -#define TAPPING_FORCE_HOLD -#define TAPPING_FORCE_HOLD_PER_KEY -#define TAPPING_TERM 150 -#define TAPPING_TERM_PER_KEY - -#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD diff --git a/keyboards/pica40/keymaps/zzeneg/keymap.c b/keyboards/pica40/keymaps/zzeneg/keymap.c deleted file mode 100644 index ea73ef0e21..0000000000 --- a/keyboards/pica40/keymaps/zzeneg/keymap.c +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2022 zzeneg (@zzeneg) -// SPDX-License-Identifier: GPL-2.0-or-later - -#include QMK_KEYBOARD_H - -enum layer_number { - _QWERTY = 0, - _GAME, - _NAV, - _NUMBER, - _SYMBOL, - _FUNC -}; - -// Left-hand home row mods -#define HOME_A LGUI_T(KC_A) -#define HOME_S LALT_T(KC_S) -#define HOME_D LCTL_T(KC_D) -#define HOME_F LSFT_T(KC_F) - -// Right-hand home row mods -#define HOME_J RSFT_T(KC_J) -#define HOME_K RCTL_T(KC_K) -#define HOME_L LALT_T(KC_L) -#define HOME_SCLN RGUI_T(KC_SCLN) - -// bottom mods -#define SYM_SPC LT(_SYMBOL, KC_SPC) -#define NUM_TAB LT(_NUMBER, KC_TAB) -#define FUNC_ESC LT(_FUNC, KC_ESC) -#define FUNC_ENT LT(_FUNC, KC_ENT) -#define NAV_BSPC LT(_NAV, KC_BSPC) -#define RALT_DEL RALT_T(KC_DEL) - -// game layer mods -#define LALT_EQL LALT_T(KC_EQL) -#define LSFT_MINS LSFT_T(KC_MINS) -#define LCTL_ESC LCTL_T(KC_ESC) -#define LGUI_QUOT LGUI_T(KC_QUOT) - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - /* QWERTY - * .----------------------------------. ,----------------------------------. - * | Q | W | E | R | T | | Y | U | I | O | P | - * .------+------+------+------+------+------| |------+------+------+------+------+------. - * | = | A | S | D | F | G | | H | J | K | L | ; | ' | - * |------+------+------+------+------+------| |------+------+------+------+------+------| - * | - | Z | X | C | V | B |-------. .-------| N | M | , | . | / | ` | - * `-----------------------------------------/ / \ \-----------------------------------------' - * | Esc | Tab | / Space / \ Enter \ | Bsps | Del | - * |_FUNC | _NUM | /_SYMBOL/ \ _FUNC \ | _NAV | RAlt | - * `-------------''-------' '-------''-------------' - */ - [_QWERTY] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_EQL, HOME_A, HOME_S, HOME_D, HOME_F, KC_G, KC_H, HOME_J, HOME_K, HOME_L, HOME_SCLN, KC_QUOT, - KC_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_GRV, - FUNC_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL - ), - - [_GAME] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, - LALT_EQL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LGUI_QUOT, - LSFT_MINS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TG(_GAME), - LCTL_ESC, NUM_TAB, SYM_SPC, FUNC_ENT, NAV_BSPC, RALT_DEL - ), - - [_NAV] = LAYOUT( - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, - XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, LALT(KC_UP), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_INS, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LALT(KC_DOWN), KC_HOME, KC_END, KC_APP, XXXXXXX, XXXXXXX, - XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX - ), - - [_NUMBER] = LAYOUT( - KC_BSLS, KC_7, KC_8, KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_LCTL, KC_COMM, KC_4, KC_5, KC_6, KC_LBRC, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX, - KC_ENT, KC_DOT, KC_1, KC_2, KC_3, KC_RBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_BSPC, _______, TG(_GAME), XXXXXXX, XXXXXXX, XXXXXXX - ), - - [_SYMBOL] = LAYOUT( - LSFT(KC_BSLS), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_LCTL, LSFT(KC_COMM), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_LBRC), XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX, - KC_ENT, LSFT(KC_DOT), LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - XXXXXXX, KC_BSPC, _______, XXXXXXX, XXXXXXX, XXXXXXX - ), - - [_FUNC] = LAYOUT( - KC_F12, KC_F7, KC_F8, KC_F9, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - KC_LCTL, KC_F11, KC_F4, KC_F5, KC_F6, KC_PAUS, XXXXXXX, KC_RSFT, KC_RCTL, KC_LALT, KC_RGUI, XXXXXXX, - KC_DEL, KC_F10, KC_F1, KC_F2, KC_F3, KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, - _______, KC_MNXT, KC_MPLY, _______, XXXXXXX, XXXXXXX - ) -}; - -bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - // allow multiple space, backspace, delete - case SYM_SPC: - case NAV_BSPC: - case RALT_DEL: - return false; - default: - return true; - } -} - -uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { - // different tapping term for different fingers - switch (keycode) { - // pinkies - case HOME_A: - case HOME_SCLN: - return TAPPING_TERM + 70; - // ring - case HOME_S: - case HOME_L: - return TAPPING_TERM + 40; - // middle - case HOME_D: - case HOME_K: - return TAPPING_TERM + 20; - // index and thumb - default: - return TAPPING_TERM; - } -} - -#ifdef ENCODER_MAP_ENABLE -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [_GAME] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, - [_NAV] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, - [_NUMBER] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, - [_SYMBOL] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) }, - [_FUNC] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT) } -}; -#endif // ENCODER_MAP_ENABLE - -#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) - -const rgblight_segment_t PROGMEM game_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 1, HSV_ORANGE}); -const rgblight_segment_t PROGMEM capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 1, HSV_PURPLE}); -const rgblight_segment_t PROGMEM capslockword_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, 1, HSV_MAGENTA}); -const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(game_layer, capslock_layer, capslockword_layer); - -bool led_update_user(led_t led_state) { - rgblight_set_layer_state(1, led_state.caps_lock); - return true; -} - -layer_state_t layer_state_set_user(layer_state_t state) { - rgblight_set_layer_state(0, layer_state_cmp(state, _GAME)); - return state; -} - -void caps_word_set_user(bool active) { - rgblight_set_layer_state(2, active); -} - -void keyboard_post_init_user(void) { - rgblight_layers = rgb_layers; -} - -#endif // defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS) - -#ifdef OLED_ENABLE - -void render_layer(void) { - switch (get_highest_layer(layer_state)) { - case _NUMBER: - oled_write_ln_P(PSTR("NMBR"), false); - break; - case _SYMBOL: - oled_write_ln_P(PSTR("SMBL"), false); - break; - case _NAV: - oled_write_ln_P(PSTR("NAV"), false); - break; - case _FUNC: - oled_write_ln_P(PSTR("FUNC"), false); - break; - default: - oled_write_ln_P(PSTR(" "), false); - break; - } -} - -bool oled_task_user(void) { - render_layer(); - return true; -} - -#endif // OLED_ENABLE - diff --git a/keyboards/pica40/keymaps/zzeneg/rules.mk b/keyboards/pica40/keymaps/zzeneg/rules.mk deleted file mode 100644 index afd8d2c6bf..0000000000 --- a/keyboards/pica40/keymaps/zzeneg/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -CAPS_WORD_ENABLE = yes -ENCODER_MAP_ENABLE = yes diff --git a/keyboards/pica40/rev2/post_rules.mk b/keyboards/pica40/rev2/post_rules.mk deleted file mode 100644 index e4dda1925b..0000000000 --- a/keyboards/pica40/rev2/post_rules.mk +++ /dev/null @@ -1,8 +0,0 @@ -# if ENCODER_ENABLE is set, add defines but avoid adding encoder.c as it's replaced by custom code in rev2.c -ifeq ($(strip $(ENCODER_ENABLE)), yes) - ENCODER_ENABLE := no - OPT_DEFS += -DENCODER_ENABLE - ifeq ($(strip $(ENCODER_MAP_ENABLE)), yes) - OPT_DEFS += -DENCODER_MAP_ENABLE - endif -endif diff --git a/keyboards/pica40/rev2/rev2.c b/keyboards/pica40/rev2/rev2.c index c585ec56d6..2ee73dcc6b 100644 --- a/keyboards/pica40/rev2/rev2.c +++ b/keyboards/pica40/rev2/rev2.c @@ -2,99 +2,29 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "rev2.h" +#include "gpio.h" #ifdef ENCODER_ENABLE // code based on encoder.c -static const pin_t encoders_pad_a[] = ENCODERS_PAD_A; -static const pin_t encoders_pad_b[] = ENCODERS_PAD_B; - -static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; -static uint8_t encoder_state = 3; -static int8_t encoder_pulses = 0; -static uint8_t encoder_value = 0; - -typedef struct encoder_sync_data { - int value; -} encoder_sync_data; +#define ENCODER_PIN_A (((pin_t[])ENCODERS_PAD_A)[0]) +#define ENCODER_PIN_B (((pin_t[])ENCODERS_PAD_B)[0]) // custom handler that returns encoder B pin status from slave side void encoder_sync_slave_handler(uint8_t in_buflen, const void *in_data, uint8_t out_buflen, void *out_data) { - encoder_sync_data *data = (encoder_sync_data *)out_data; - data->value = readPin(encoders_pad_b[0]); -} - -__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { - return true; + *(uint8_t *)out_data = readPin(ENCODER_PIN_B) ? 1 : 0; } -bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!encoder_update_user(index, clockwise)) return false; - - tap_code(clockwise ? KC_VOLU : KC_VOLD); +void encoder_quadrature_init_pin(uint8_t index, bool pad_b) {} - return false; -} - -#ifdef ENCODER_MAP_ENABLE -static void encoder_exec_mapping(uint8_t index, bool clockwise) { - action_exec(clockwise ? ENCODER_CW_EVENT(index, true) : ENCODER_CCW_EVENT(index, true)); - wait_ms(ENCODER_MAP_KEY_DELAY); - action_exec(clockwise ? ENCODER_CW_EVENT(index, false) : ENCODER_CCW_EVENT(index, false)); - wait_ms(ENCODER_MAP_KEY_DELAY); -} -#endif // ENCODER_MAP_ENABLE - -void encoder_init(void) { - setPinInputHigh(encoders_pad_a[0]); - setPinInputHigh(encoders_pad_b[0]); - wait_us(100); - transaction_register_rpc(ENCODER_SYNC, encoder_sync_slave_handler); -} - -bool encoder_read(void) { - // ignore if running on slave side - if (!is_keyboard_master()) return false; - - bool changed = false; - encoder_sync_data data = {0}; - // request pin B status from slave side - if (transaction_rpc_recv(ENCODER_SYNC, sizeof(data), &data)) { - uint8_t new_status = (readPin(encoders_pad_a[0]) << 0) | (data.value << 1); - if ((encoder_state & 0x3) != new_status) { - encoder_state <<= 2; - encoder_state |= new_status; - encoder_pulses += encoder_LUT[encoder_state & 0xF]; - - if (encoder_pulses >= ENCODER_RESOLUTION) { - encoder_value++; - changed = true; -#ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(0, false); -#else // ENCODER_MAP_ENABLE - encoder_update_kb(0, false); -#endif // ENCODER_MAP_ENABLE - } - - if (encoder_pulses <= -ENCODER_RESOLUTION) { - encoder_value--; - changed = true; -#ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(0, true); -#else // ENCODER_MAP_ENABLE - encoder_update_kb(0, true); -#endif // ENCODER_MAP_ENABLE - } - - encoder_pulses %= ENCODER_RESOLUTION; - } +uint8_t encoder_quadrature_read_pin(uint8_t index, bool pad_b) { + if(pad_b) { + uint8_t data = 0; + transaction_rpc_recv(ENCODER_SYNC, sizeof(data), &data); + return data; } - return changed; + return readPin(ENCODER_PIN_A) ? 1 : 0; } -// do not use standard split encoder transactions -void encoder_state_raw(uint8_t *slave_state) {} -void encoder_update_raw(uint8_t *slave_state) {} - #endif // ENCODER_ENABLE #ifdef PICA40_RGBLIGHT_TIMEOUT @@ -125,6 +55,12 @@ bool should_set_rgblight = false; void keyboard_post_init_kb(void) { setPinOutput(PICA40_RGB_POWER_PIN); +#ifdef ENCODER_ENABLE + setPinInputHigh(ENCODER_PIN_A); + setPinInputHigh(ENCODER_PIN_B); + transaction_register_rpc(ENCODER_SYNC, encoder_sync_slave_handler); +#endif // ENCODER_ENABLE + #ifdef PICA40_RGBLIGHT_TIMEOUT idle_timer = timer_read(); check_rgblight_timer = timer_read(); |