aboutsummaryrefslogtreecommitdiff
path: root/keyboards/nullbitsco/nibble/keymaps/via
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/nullbitsco/nibble/keymaps/via')
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/config.h21
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/keymap.c30
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.c133
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.h50
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/rules.mk5
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/via_extras.c129
-rw-r--r--keyboards/nullbitsco/nibble/keymaps/via/via_extras.h39
7 files changed, 21 insertions, 386 deletions
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/config.h b/keyboards/nullbitsco/nibble/keymaps/via/config.h
deleted file mode 100644
index 961e2aed1..000000000
--- a/keyboards/nullbitsco/nibble/keymaps/via/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
1/* Copyright 2020 Jay Greco
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16// Custom config starts after VIA's EEPROM usage,
17// dynamic keymaps start after this.
18// Custom config Usage:
19// 1 for enabled encoder modes (1 byte)
20// 6 for 3x custom encoder settings, left, right, and press (18 bytes)
21#define VIA_EEPROM_CUSTOM_CONFIG_SIZE 19 \ No newline at end of file
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/keymap.c b/keyboards/nullbitsco/nibble/keymaps/via/keymap.c
index f72ffc56e..5b2f3b4f2 100644
--- a/keyboards/nullbitsco/nibble/keymaps/via/keymap.c
+++ b/keyboards/nullbitsco/nibble/keymaps/via/keymap.c
@@ -14,12 +14,13 @@
14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */ 15 */
16#include QMK_KEYBOARD_H 16#include QMK_KEYBOARD_H
17#include "via_extras.h"
18 17
19#define _BASE 0 18enum layer_names {
20#define _VIA1 1 19 _BASE,
21#define _VIA2 2 20 _VIA1,
22#define _VIA3 3 21 _VIA2,
22 _VIA3
23};
23 24
24#define KC_DISC_MUTE KC_F23 25#define KC_DISC_MUTE KC_F23
25#define KC_DISC_DEAF KC_F24 26#define KC_DISC_DEAF KC_F24
@@ -50,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
50 ), 51 ),
51 52
52 [_VIA1] = LAYOUT_all( 53 [_VIA1] = LAYOUT_all(
53 RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_INS, 54 RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_END,
54 RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 55 RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
55 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 56 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
56 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 57 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -100,7 +101,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
100 if (record->event.pressed) { 101 if (record->event.pressed) {
101 tap_code(KC_DISC_MUTE); 102 tap_code(KC_DISC_MUTE);
102 if (!rgblight_is_enabled()) break; 103 if (!rgblight_is_enabled()) break;
103 104
104 if (muted) { 105 if (muted) {
105 rgblight_enable_noeeprom(); 106 rgblight_enable_noeeprom();
106 } else { 107 } else {
@@ -133,7 +134,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
133 if (!is_alt_tab_active) { 134 if (!is_alt_tab_active) {
134 is_alt_tab_active = true; 135 is_alt_tab_active = true;
135 register_code(KC_LALT); 136 register_code(KC_LALT);
136 } 137 }
137 alt_tab_timer = timer_read(); 138 alt_tab_timer = timer_read();
138 register_code(KC_TAB); 139 register_code(KC_TAB);
139 } else { 140 } else {
@@ -142,11 +143,20 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
142 break; 143 break;
143 144
144 default: 145 default:
145 break; 146 break;
146 } 147 }
147return true; 148return true;
148} 149}
149 150
151void encoder_update_user(uint8_t index, bool clockwise) {
152 // Encoder is mapped to volume functions by default
153 if (clockwise) {
154 tap_code(KC_VOLU);
155 } else {
156 tap_code(KC_VOLD);
157 }
158}
159
150void matrix_init_user(void) { 160void matrix_init_user(void) {
151 // Initialize remote keyboard, if connected (see readme) 161 // Initialize remote keyboard, if connected (see readme)
152 matrix_init_remote_kb(); 162 matrix_init_remote_kb();
@@ -161,4 +171,4 @@ void matrix_scan_user(void) {
161 is_alt_tab_active = false; 171 is_alt_tab_active = false;
162 } 172 }
163 } 173 }
164} \ No newline at end of file 174}
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.c b/keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.c
deleted file mode 100644
index bdea1869c..000000000
--- a/keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.c
+++ /dev/null
@@ -1,133 +0,0 @@
1/* Copyright 2020 Jay Greco
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "nibble_encoder.h"
17
18uint8_t encoder_value = 0x20,
19 encoder_mode = ENC_MODE_VOLUME,
20 enabled_encoder_modes = 0x1F;
21
22uint16_t retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior) {
23#ifdef DYNAMIC_KEYMAP_ENABLE
24 void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
25 uint16_t keycode = eeprom_read_byte(addr) << 8;
26 keycode |= eeprom_read_byte(addr + 1);
27 return keycode;
28#else
29 return 0;
30#endif
31}
32
33void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code) {
34#ifdef DYNAMIC_KEYMAP_ENABLE
35 void* addr = (void*)(EEPROM_CUSTOM_ENCODER + (encoder_idx * 6) + (behavior * 2));
36 eeprom_update_byte(addr, (uint8_t)(new_code >> 8));
37 eeprom_update_byte(addr + 1, (uint8_t)(new_code & 0xFF));
38#endif
39}
40
41void pre_encoder_mode_change(void) {
42 dprintf("Changing encoder mode: %u\n", encoder_mode);
43}
44
45void post_encoder_mode_change(void) {
46 dprintf("Encoder mode: %u\n", encoder_mode);
47}
48
49//???
50void change_encoder_mode(bool clockwise) {
51 pre_encoder_mode_change();
52 if(enabled_encoder_modes == 0){
53 enabled_encoder_modes = 0x1F;
54 }
55 do {
56 if(!clockwise){
57 if (encoder_mode == 0){
58 encoder_mode = _NUM_ENCODER_MODES - 1;
59 } else{
60 encoder_mode = encoder_mode - 1;
61 }
62 } else {
63 encoder_mode = (encoder_mode + 1) % _NUM_ENCODER_MODES;
64 }
65 } while(((1 << encoder_mode) & enabled_encoder_modes) == 0);
66 post_encoder_mode_change();
67}
68
69uint16_t handle_encoder_cw(void) {
70 dprintf("Encoder mode: %u\n", encoder_mode);
71 uint16_t mapped_code = 0;
72 switch(encoder_mode){
73 default:
74 break;
75 case ENC_MODE_VOLUME:
76 mapped_code = KC_VOLU;
77 break;
78 case ENC_MODE_MEDIA:
79 mapped_code = KC_MEDIA_NEXT_TRACK;
80 break;
81 case ENC_MODE_SCROLL:
82 mapped_code = KC_WH_D;
83 break;
84 case ENC_MODE_BACKLIGHT:
85 mapped_code = RGB_VAI;
86 break;
87#ifdef DYNAMIC_KEYMAP_ENABLE
88 case ENC_MODE_CUSTOM0:
89 mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_CW);
90 break;
91 case ENC_MODE_CUSTOM1:
92 mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_CW);
93 break;
94 case ENC_MODE_CUSTOM2:
95 mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_CW);
96 break;
97#endif
98 }
99 return mapped_code;
100}
101
102uint16_t handle_encoder_ccw(void) {
103 dprintf("Encoder mode: %u\n", encoder_mode);
104 uint16_t mapped_code = 0;
105 switch(encoder_mode){
106 default:
107 break;
108 case ENC_MODE_VOLUME:
109 mapped_code = KC_VOLD;
110 break;
111 case ENC_MODE_MEDIA:
112 mapped_code = KC_MEDIA_PREV_TRACK;
113 break;
114 case ENC_MODE_SCROLL:
115 mapped_code = KC_WH_U;
116 break;
117 case ENC_MODE_BACKLIGHT:
118 mapped_code = RGB_VAD;
119 break;
120#ifdef DYNAMIC_KEYMAP_ENABLE
121 case ENC_MODE_CUSTOM0:
122 mapped_code = retrieve_custom_encoder_config(0, ENC_CUSTOM_CCW);
123 break;
124 case ENC_MODE_CUSTOM1:
125 mapped_code = retrieve_custom_encoder_config(1, ENC_CUSTOM_CCW);
126 break;
127 case ENC_MODE_CUSTOM2:
128 mapped_code = retrieve_custom_encoder_config(2, ENC_CUSTOM_CCW);
129 break;
130#endif
131 }
132 return mapped_code;
133}
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.h b/keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.h
deleted file mode 100644
index fc1e61434..000000000
--- a/keyboards/nullbitsco/nibble/keymaps/via/nibble_encoder.h
+++ /dev/null
@@ -1,50 +0,0 @@
1/* Copyright 2020 Jay Greco
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include QMK_KEYBOARD_H
19#include "eeprom.h"
20
21#define EEPROM_ENABLED_ENCODER_MODES (VIA_EEPROM_CUSTOM_CONFIG_ADDR)
22#define EEPROM_CUSTOM_ENCODER (VIA_EEPROM_CUSTOM_CONFIG_ADDR+1)
23
24enum encoder_modes {
25 ENC_MODE_VOLUME,
26 ENC_MODE_MEDIA,
27 ENC_MODE_SCROLL,
28 ENC_MODE_BRIGHTNESS,
29 ENC_MODE_BACKLIGHT,
30 ENC_MODE_CUSTOM0,
31 ENC_MODE_CUSTOM1,
32 ENC_MODE_CUSTOM2,
33 _NUM_ENCODER_MODES,
34};
35
36enum custom_encoder_behavior {
37 ENC_CUSTOM_CW = 0,
38 ENC_CUSTOM_CCW,
39 ENC_CUSTOM_PRESS
40};
41
42uint16_t
43 retrieve_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior),
44 handle_encoder_cw(void),
45 handle_encoder_ccw(void);
46
47void set_custom_encoder_config(uint8_t encoder_idx, uint8_t behavior, uint16_t new_code),
48 pre_encoder_mode_change(void),
49 post_encoder_mode_change(void),
50 change_encoder_mode(bool clockwise); \ No newline at end of file
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/rules.mk b/keyboards/nullbitsco/nibble/keymaps/via/rules.mk
index ee197efc0..036bd6d1c 100644
--- a/keyboards/nullbitsco/nibble/keymaps/via/rules.mk
+++ b/keyboards/nullbitsco/nibble/keymaps/via/rules.mk
@@ -1,4 +1 @@
1VIA_ENABLE = yes VIA_ENABLE = yes \ No newline at end of file
2
3SRC += keymaps/via/nibble_encoder.c
4SRC += keymaps/via/via_extras.c \ No newline at end of file
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/via_extras.c b/keyboards/nullbitsco/nibble/keymaps/via/via_extras.c
deleted file mode 100644
index 067296b76..000000000
--- a/keyboards/nullbitsco/nibble/keymaps/via/via_extras.c
+++ /dev/null
@@ -1,129 +0,0 @@
1/* Copyright 2020 Jay Greco
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "via_extras.h"
18
19// Encoder Behavior
20extern uint8_t encoder_value;
21extern uint8_t encoder_mode;
22extern uint8_t enabled_encoder_modes;
23
24void raw_hid_receive_kb( uint8_t *data, uint8_t length )
25{
26 uint8_t *command_id = &(data[0]);
27 uint8_t *command_data = &(data[1]);
28 dprintf("raw hid recv! command_id: %u\n",*command_id);
29 switch ( *command_id )
30 {
31 case id_get_keyboard_value:
32 {
33 switch( command_data[0])
34 {
35 case id_encoder_modes:
36 {
37 command_data[1] = enabled_encoder_modes;
38 dprintf("[read] enabled_encoder_modes: %u\n", enabled_encoder_modes);
39 }
40 break;
41
42 case id_encoder_custom:
43 {
44 uint8_t custom_encoder_idx = command_data[1];
45 uint16_t keycode = retrieve_custom_encoder_config(custom_encoder_idx, ENC_CUSTOM_CW);
46 command_data[2] = keycode >> 8;
47 command_data[3] = keycode & 0xFF;
48 keycode = retrieve_custom_encoder_config(custom_encoder_idx, ENC_CUSTOM_CCW);
49 command_data[4] = keycode >> 8;
50 command_data[5] = keycode & 0xFF;
51 keycode = retrieve_custom_encoder_config(custom_encoder_idx, ENC_CUSTOM_PRESS);
52 command_data[6] = keycode >> 8;
53 command_data[7] = keycode & 0xFF;
54 }
55 break;
56
57 default:
58 {
59 *command_id = id_unhandled;
60 }
61 break;
62 }
63 }
64 break;
65 case id_set_keyboard_value:
66 {
67 switch(command_data[0]){
68 case id_encoder_modes:
69 {
70 enabled_encoder_modes = command_data[1];
71 dprintf("[write] enabled_encoder_modes: %u\n", enabled_encoder_modes);
72 eeprom_update_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES, enabled_encoder_modes);
73 }
74 break;
75
76 case id_encoder_custom:
77 {
78 uint8_t custom_encoder_idx = command_data[1];
79 uint8_t encoder_behavior = command_data[2];
80 uint16_t keycode = (command_data[3] << 8) | command_data[4];
81 set_custom_encoder_config(custom_encoder_idx, encoder_behavior, keycode);
82 }
83 break;
84
85 default:
86 {
87 *command_id = id_unhandled;
88 }
89 break;
90 }
91 }
92 break;
93
94 default:
95 {
96 // Unhandled message.
97 *command_id = id_unhandled;
98 }
99 break;
100 }
101}
102
103void encoder_update_kb(uint8_t index, bool clockwise) {
104 if (layer_state_is(1)) {
105 change_encoder_mode(clockwise);
106 return;
107 }
108 uint16_t mapped_code = 0;
109 if (clockwise) {
110 mapped_code = handle_encoder_cw();
111 } else {
112 mapped_code = handle_encoder_ccw();
113 }
114 if(mapped_code != 0){
115 tap_code16(mapped_code);
116 }
117}
118
119void custom_config_load(void){
120#ifdef DYNAMIC_KEYMAP_ENABLE
121 enabled_encoder_modes = eeprom_read_byte((uint8_t*)EEPROM_ENABLED_ENCODER_MODES);
122#endif
123}
124
125void via_init_kb(void)
126{
127 dprintf("VIA is enabled.\n");
128 custom_config_load();
129}
diff --git a/keyboards/nullbitsco/nibble/keymaps/via/via_extras.h b/keyboards/nullbitsco/nibble/keymaps/via/via_extras.h
deleted file mode 100644
index 83c3c1312..000000000
--- a/keyboards/nullbitsco/nibble/keymaps/via/via_extras.h
+++ /dev/null
@@ -1,39 +0,0 @@
1/* Copyright 2020 Jay Greco
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "nibble_encoder.h"
19#include "via.h"
20#include "raw_hid.h"
21#include "dynamic_keymap.h"
22#include "tmk_core/common/eeprom.h"
23
24enum nibble_keyboard_value_id {
25 id_encoder_modes = 0x80,
26 id_unused_mode_1,
27 id_encoder_custom,
28 id_unused_mode_2
29};
30
31// Encoder Behavior
32extern uint8_t encoder_value,
33 encoder_mode,
34 enabled_encoder_modes;
35
36void raw_hid_receive_kb(uint8_t *data, uint8_t length),
37 encoder_update_kb(uint8_t index, bool clockwise),
38 custom_config_load(void),
39 via_init_kb(void); \ No newline at end of file