aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Winder <wwinder.unh@gmail.com>2022-01-11 15:17:37 -0500
committerGitHub <noreply@github.com>2022-01-11 12:17:37 -0800
commit1f618c8302cc5053c382436a2d1fb11082c99057 (patch)
tree4ea16702e13498c2af2eb403f6e2acefb286cc8b
parent1fdc42155a19a415b2d574ccbf61aac45e6543aa (diff)
downloadqmk_firmware-1f618c8302cc5053c382436a2d1fb11082c99057.tar.gz
qmk_firmware-1f618c8302cc5053c382436a2d1fb11082c99057.zip
keyhive sofle rgb: fix configuration. (#15339)
* keyhive sofle rgb: fix configuration. * Add Colemak-DH and cycle layer keycode. * Fix indentation. * Add PLACEHOLDER for better readability. * Fix breaking changes. * Just one colemak. * PR Cleanup * Use NO_PIN definition instead of C7 * Define animations individually * Remove via json file and update documentation * Reduce LED brightness, one of the animations caused a crash * More PR feedback. * Better credit. * Disable NKRO. * Cleanup RGB configuration. * animations defined in keymap. * Update keyboards/sofle/keyhive/readme.md * PR Feedback. * Update phrasing from template. * Disable RGBLIGHT_ENABLE in keymap for better compatibility with default keymap. * Set a default animation. * Use default in keyboard readme. * Update keyboards/sofle/keyhive/info.json * Move via specific layout into via keymap.
-rwxr-xr-xkeyboards/sofle/keyhive/config.h101
-rw-r--r--keyboards/sofle/keyhive/info.json2
-rwxr-xr-xkeyboards/sofle/keyhive/keyhive.c71
-rwxr-xr-xkeyboards/sofle/keyhive/keyhive.h25
-rwxr-xr-xkeyboards/sofle/keyhive/readme.md62
-rwxr-xr-xkeyboards/sofle/keyhive/rules.mk2
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/config.h48
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/encoder.c49
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/keymap.c191
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/oled.c85
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/readme.md49
-rw-r--r--keyboards/sofle/keymaps/keyhive_via/rules.mk2
-rw-r--r--keyboards/sofle/keymaps/via/keymap.c6
13 files changed, 515 insertions, 178 deletions
diff --git a/keyboards/sofle/keyhive/config.h b/keyboards/sofle/keyhive/config.h
index 14303be41..c934754e6 100755
--- a/keyboards/sofle/keyhive/config.h
+++ b/keyboards/sofle/keyhive/config.h
@@ -20,43 +20,33 @@
20#include "config_common.h" 20#include "config_common.h"
21 21
22// USB Device descriptor parameter 22// USB Device descriptor parameter
23
24#define VENDOR_ID 0xFC32 23#define VENDOR_ID 0xFC32
25#define PRODUCT_ID 0x1287 24#define PRODUCT_ID 0x1287
26#define DEVICE_VER 0x0002 25#define DEVICE_VER 0x0002
27#define MANUFACTURER Keyhive 26#define MANUFACTURER Keyhive
28#define PRODUCT Sofle // VIA version for this PCB is incorrect for the bottom row 27#define PRODUCT Sofle
29 28
30// Key matrix size 29// Key matrix size
31// Rows are doubled-up. Added extra column for rotary encoder VIA mapping. 30// Rows are doubled-up. Added extra column for rotary encoder VIA mapping.
32#define MATRIX_ROWS 10 31#define MATRIX_ROWS 10
33#define MATRIX_COLS 6 32#define MATRIX_COLS 7
34 33
35// wiring of each half 34// wiring of each half
36#define MATRIX_ROW_PINS \ 35#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
37 { C6, D7, E6, B4, B5 } 36#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, NO_PIN } // A virtual pin is needed for the encoder key matrix in via.
38#define MATRIX_COL_PINS \ 37#define MATRIX_ROW_PINS_RIGHT { C6, D7, E6, B4, B5 }
39 { B6, B2, B3, B1, F7, F6 } 38#define MATRIX_COL_PINS_RIGHT { F6, F7, B1, B3, B2, B6, NO_PIN } // A virtual pin is needed for the encoder key matrix in via.
40#define MATRIX_ROW_PINS_RIGHT \
41 { C6, D7, E6, B4, B5 }
42#define MATRIX_COL_PINS_RIGHT \
43 { F6, F7, B1, B3, B2, B6 }
44 39
45#define DIODE_DIRECTION COL2ROW 40#define DIODE_DIRECTION COL2ROW
46 41
47#define DEBOUNCE 5 42#define DEBOUNCE 5
48 43
49// Encoder support 44// Encoder support
50#define ENCODERS_PAD_A \ 45#define ENCODERS_PAD_A { F5 }
51 { F5 } 46#define ENCODERS_PAD_B { F4 }
52#define ENCODERS_PAD_B \ 47#define ENCODERS_PAD_A_RIGHT { F4 }
53 { F4 } 48#define ENCODERS_PAD_B_RIGHT { F5 }
54#define ENCODERS_PAD_A_RIGHT \ 49#define ENCODER_RESOLUTIONS { 4, 2 } // Left encoder seems to have double-output issue but right does not.
55 { F4 }
56#define ENCODERS_PAD_B_RIGHT \
57 { F5 }
58#define ENCODER_RESOLUTIONS \
59 { 4, 2 } // Left encoder seems to have double-output issue but right does not.
60 50
61#define TAP_CODE_DELAY 10 51#define TAP_CODE_DELAY 10
62 52
@@ -72,34 +62,41 @@
72#define SPLIT_TRANSPORT_MIRROR 62#define SPLIT_TRANSPORT_MIRROR
73 63
74// Add RGB underglow 64// Add RGB underglow
75#define RGB_DI_PIN D3 65// by defining in the keyboard, incompatible keymaps will fail to compile.
76#define RGBLED_NUM 74 66#ifdef RGBLIGHT_ENABLE
77#define RGBLED_SPLIT \ 67# define RGB_DI_PIN D3
78 { 37, 37 } 68# define RGBLED_NUM 74
79 69# define RGBLED_SPLIT {37,37}
80#define RGBLIGHT_LIMIT_VAL 160 // Power draw may exceed 0.6A at max brightness with white colour. 70# define RGBLIGHT_LIMIT_VAL 100 // LED Brightness, high power draw may exceed the USB limitations of 0.6A and cause a crash.
81#define RGBLIGHT_LAYERS 71# define RGBLIGHT_HUE_STEP 10
82#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF 72# define RGBLIGHT_SAT_STEP 17
83#define RGBLIGHT_SLEEP 73# define RGBLIGHT_VAL_STEP 17
84 74//# define RGBLIGHT_LAYERS //Enable layer light indicators. Not required as updates are done in layer_state_set_user and led_update_user (+588).
85#define DRIVER_LED_TOTAL RGBLED_NUM 75# define RGBLIGHT_SLEEP //Turn off LEDs when computer sleeping (+72)
86#define RGB_MATRIX_SPLIT RGBLED_SPLIT 76
87 77//RGB LED Conversion macro from physical array to electric array (+146). This results in better looking animated effects.
88#define RGB_MATRIX_KEYPRESSES // reacts to keypresses 78//First section is the LED matrix, second section is the electrical wiring order, and the third section is the desired mapping
89#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended 79# define LED_LAYOUT( \
90#define RGB_MATRIX_FRAMEBUFFER_EFFECTS 80 L00, L01, L02, L03, L04, L05, L08, L09, L010, L011, L012, L013, \
91#define RGB_MATRIX_KEYPRESSES // reacts to keypresses 81 L10, L12, L14, L19, L111, L113, \
92// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) 82 L20, L21, L22, L23, L24, L25, L28, L29, L210, L211, L212, L213, \
93// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects 83 L30, L31, L32, L33, L34, L35, L38, L39, L310, L311, L312, L313, \
94#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended 84 L40, L42, L44, L49, L411, L413, \
95#define RGB_MATRIX_FRAMEBUFFER_EFFECTS 85 L50, L51, L52, L53, L54, L55, L58, L59, L510, L511, L512, L513, \
96// # define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) 86 L62, L63, L64, L65, L66, L67, L68, L69, L610, L611, \
97// # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) 87 L71, L76, L77, L712 )\
98#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. 88 { \
99 89 L14,L12,L10,L40,L42,L44,L71,L76,L66,L65,L55,L35,L25,L05,L04,L24,L34,L54,L64,L63,L53,L33,L23,L03,L02,L22,L32,L52,L62,L51,L31,L21,L01,L00,L20,L30,L50,L19,L111,L113,L413,L411,L49,L712,L77,L67,L68,L58,L38,L28,L08,L09,L29,L39,L59,L69,L610,L510,L310,L210,L010,L011,L211,L311,L511,L611,L512,L312,L212,L012,L013,L213,L313,L513, \
100#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_GRADIENT_LEFT_RIGHT 90 }
101 91//RGB LED logical order map
102#define RGB_MATRIX_HUE_STEP 8 92# define RGBLIGHT_LED_MAP LED_LAYOUT( \
103#define RGB_MATRIX_SAT_STEP 8 93 5, 6, 17, 18, 29, 30, 43, 44, 55, 56, 67, 68, \
104#define RGB_MATRIX_VAL_STEP 8 94 4, 16, 28, 45, 57, 69, \
105#define RGB_MATRIX_SPD_STEP 10 95 3, 7, 15, 19, 27, 31, 42, 46, 54, 58, 66, 70, \
96 2, 8, 14, 20, 26, 32, 41, 47, 53, 59, 65, 71, \
97 1, 13, 25, 48, 60, 72, \
98 0, 9, 12, 21, 24, 33, 40, 49, 52, 61, 64, 73, \
99 11, 22, 23, 34, 35, 38, 39, 50, 51, 62, \
100 10, 36, 37, 63 )
101
102#endif
diff --git a/keyboards/sofle/keyhive/info.json b/keyboards/sofle/keyhive/info.json
index e2cbf0c71..aafc6a8c8 100644
--- a/keyboards/sofle/keyhive/info.json
+++ b/keyboards/sofle/keyhive/info.json
@@ -6,7 +6,7 @@
6 {"x":0, "y":0.5}, {"x":1, "y":0.375}, {"x":2, "y":0.125}, {"x":3, "y":0}, {"x":4, "y":0.125}, {"x":5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.5}, 6 {"x":0, "y":0.5}, {"x":1, "y":0.375}, {"x":2, "y":0.125}, {"x":3, "y":0}, {"x":4, "y":0.125}, {"x":5, "y":0.25}, {"x":10.5, "y":0.25}, {"x":11.5, "y":0.125}, {"x":12.5, "y":0}, {"x":13.5, "y":0.125}, {"x":14.5, "y":0.375}, {"x":15.5, "y":0.5},
7 {"x":0, "y":1.5}, {"x":1, "y":1.375}, {"x":2, "y":1.125}, {"x":3, "y":1}, {"x":4, "y":1.125}, {"x":5, "y":1.25}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.5}, 7 {"x":0, "y":1.5}, {"x":1, "y":1.375}, {"x":2, "y":1.125}, {"x":3, "y":1}, {"x":4, "y":1.125}, {"x":5, "y":1.25}, {"x":10.5, "y":1.25}, {"x":11.5, "y":1.125}, {"x":12.5, "y":1}, {"x":13.5, "y":1.125}, {"x":14.5, "y":1.375}, {"x":15.5, "y":1.5},
8 {"x":0, "y":2.5}, {"x":1, "y":2.375}, {"x":2, "y":2.125}, {"x":3, "y":2}, {"x":4, "y":2.125}, {"x":5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.5}, 8 {"x":0, "y":2.5}, {"x":1, "y":2.375}, {"x":2, "y":2.125}, {"x":3, "y":2}, {"x":4, "y":2.125}, {"x":5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.125}, {"x":12.5, "y":2}, {"x":13.5, "y":2.125}, {"x":14.5, "y":2.375}, {"x":15.5, "y":2.5},
9 {"x":0, "y":3.5}, {"x":1, "y":3.375}, {"x":2, "y":3.125}, {"x":3, "y":3}, {"x":4, "y":3.125}, {"x":5, "y":3.25}, {"x":6, "y":2.75}, {"x":9.5, "y":2.75}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.5}, 9 {"x":0, "y":3.5}, {"x":1, "y":3.375}, {"x":2, "y":3.125}, {"x":3, "y":3}, {"x":4, "y":3.125}, {"x":5, "y":3.25}, {"x":6, "y":2.75}, {"x":9.5, "y":2.75}, {"x":10.5, "y":3.25}, {"x":11.5, "y":3.125}, {"x":12.5, "y":3}, {"x":13.5, "y":3.125}, {"x":14.5, "y":3.375}, {"x":15.5, "y":3.5},
10 {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4.15}, {"x":4.5, "y":4.25}, {"x":6, "y":4.25, "h":1.5}, {"x":9.5, "y":4.25, "h":1.5}, {"x":11, "y":4.25}, {"x":12, "y":4.15}, {"x":13, "y":4.125}, {"x":14, "y":4.375} 10 {"x":1.5, "y":4.375}, {"x":2.5, "y":4.125}, {"x":3.5, "y":4.15}, {"x":4.5, "y":4.25}, {"x":6, "y":4.25, "h":1.5}, {"x":9.5, "y":4.25, "h":1.5}, {"x":11, "y":4.25}, {"x":12, "y":4.15}, {"x":13, "y":4.125}, {"x":14, "y":4.375}
11 ] 11 ]
12 } 12 }
diff --git a/keyboards/sofle/keyhive/keyhive.c b/keyboards/sofle/keyhive/keyhive.c
index c7ad98876..72e2d583f 100755
--- a/keyboards/sofle/keyhive/keyhive.c
+++ b/keyboards/sofle/keyhive/keyhive.c
@@ -17,74 +17,3 @@
17 */ 17 */
18 18
19#include "keyhive.h" 19#include "keyhive.h"
20#ifdef RGB_MATRIX_ENABLE
21// Physical Layout
22// Columns
23// 0 1 2 3 4 5 6 7 8 9 10 11 12 13
24// ROWS
25// 12 13 22 23 32 33 33 32 23 22 13 12 0
26// 02 03 04 04 03 02
27// 11 14 21 24 31 34 34 31 24 21 14 11 1
28// 01 01
29// 10 15 20 25 30 35 35 30 25 20 15 10 2
30//
31// 09 16 19 26 29 36 36 29 26 19 16 09 3
32//
33// 08 17 18 27 28 28 27 18 17 08 4
34// 07 06 05 05 06 07
35
36// clang-format off
37
38led_config_t g_led_config = {
39 {
40 { 11, 12, 21, 22, 31, 32 },
41 { 10, 13, 20, 23, 30, 33 },
42 { 9, 14, 19, 24, 29, 34},
43 { 8, 15, 18, 25, 28, 35},
44 { 7, 16, 17, 26, 27, NO_LED },
45 { 47, 48, 57, 58, 67, 68},
46 { 46, 49, 56, 59, 66, 69},
47 { 45, 50, 55, 60, 65, 70},
48 { 44, 51, 54, 61, 64, 71},
49 { 43, 52, 53, 62, 63, NO_LED }
50 },
51 {
52 // Left side underglow
53 {96, 40}, {16, 20}, {48, 10}, {80, 18}, {88, 60}, {56, 57}, {24,60},
54 // Left side Matrix
55 {32, 57}, { 0, 48}, { 0, 36}, { 0, 24}, { 0, 12},
56 {16, 12}, {16, 24}, {16, 36}, {16, 48}, {48, 55},
57 {64, 57}, {32, 45}, {32, 33}, {32, 21}, {32, 9},
58 {48, 7}, {48, 19}, {48, 31}, {48, 43}, {80, 59},
59 {96, 64}, {64, 45}, {64, 33}, {64, 21}, {64, 9},
60 {80, 10}, {80, 22}, {80, 34}, {80, 47},
61
62
63 // Right side underglow
64 {128, 40}, {208, 20}, {176, 10}, {144, 18}, {136, 60}, {168, 57}, {200,60},
65 // Right side Matrix
66 {192, 57}, {224, 48}, {224, 36}, {224, 24}, {224, 12},
67 {208, 12}, {208, 24}, {208, 36}, {208, 48}, {176, 55},
68 {160, 57}, {192, 45}, {192, 33}, {192, 21}, {192, 9},
69 {176, 7}, {176, 19}, {176, 31}, {176, 43}, {144, 59},
70 {128, 64}, {160, 45}, {160, 33}, {160, 21}, {160, 9},
71 {144, 10}, {144, 22}, {144, 34}, {144, 47},
72 },
73 {
74 LED_FLAG_NONE, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW,
75 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
76 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
77 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
78 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
79 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
80 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
81 LED_FLAG_NONE, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW,
82 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
83 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
84 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
85 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
86 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
87 LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT
88 }
89};
90#endif
diff --git a/keyboards/sofle/keyhive/keyhive.h b/keyboards/sofle/keyhive/keyhive.h
index d8b21e16d..c4fdd8521 100755
--- a/keyboards/sofle/keyhive/keyhive.h
+++ b/keyboards/sofle/keyhive/keyhive.h
@@ -21,27 +21,26 @@
21#include "quantum.h" 21#include "quantum.h"
22 22
23// clang-format off 23// clang-format off
24// Extra keys are added for rotary encoder support in VIA 24
25#define LAYOUT( \ 25#define LAYOUT( \
26 LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \ 26 LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \
27 LB1, LB2, LB3, LB4, LB5, LB6, RB6, RB5, RB4, RB3, RB2, RB1, \ 27 LB1, LB2, LB3, LB4, LB5, LB6, RB6, RB5, RB4, RB3, RB2, RB1, \
28 LC1, LC2, LC3, LC4, LC5, LC6, RC6, RC5, RC4, RC3, RC2, RC1, \ 28 LC1, LC2, LC3, LC4, LC5, LC6, RC6, RC5, RC4, RC3, RC2, RC1, \
29 LD1, LD2, LD3, LD4, LD5, LD6, LE1, RE6, RD6, RD5, RD4, RD3, RD2, RD1, \ 29 LD1, LD2, LD3, LD4, LD5, LD6, LE1, RE6, RD6, RD5, RD4, RD3, RD2, RD1, \
30 LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \ 30 LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \
31 ) \ 31 ) \
32 { \ 32 { \
33 { LA1, LA2, LA3, LA4, LA5, LA6 }, \ 33 { LA1, LA2, LA3, LA4, LA5, LA6, KC_NO }, \
34 { LB1, LB2, LB3, LB4, LB5, LB6 }, \ 34 { LB1, LB2, LB3, LB4, LB5, LB6, KC_NO }, \
35 { LC1, LC2, LC3, LC4, LC5, LC6 }, \ 35 { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO }, \
36 { LD1, LD2, LD3, LD4, LD5, LD6 }, \ 36 { LD1, LD2, LD3, LD4, LD5, LD6, KC_NO }, \
37 { LE1, LE2, LE3, LE4, LE5, LE6 }, \ 37 { LE1, LE2, LE3, LE4, LE5, LE6, KC_NO }, \
38 { RA1, RA2, RA3, RA4, RA5, RA6 }, \ 38 { RA1, RA2, RA3, RA4, RA5, RA6, KC_NO }, \
39 { RB1, RB2, RB3, RB4, RB5, RB6 }, \ 39 { RB1, RB2, RB3, RB4, RB5, RB6, KC_NO }, \
40 { RC1, RC2, RC3, RC4, RC5, RC6 }, \ 40 { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO }, \
41 { RD1, RD2, RD3, RD4, RD5, RD6 }, \ 41 { RD1, RD2, RD3, RD4, RD5, RD6, KC_NO }, \
42 { RE1, RE2, RE3, RE4, RE5, RE6 } \ 42 { RE1, RE2, RE3, RE4, RE5, RE6, KC_NO } \
43 } 43 }
44 44
45
46//RGB LED Conversion macro from physical array to electric array (+146 to firmware size) 45//RGB LED Conversion macro from physical array to electric array (+146 to firmware size)
47// clang-format on 46// clang-format on
diff --git a/keyboards/sofle/keyhive/readme.md b/keyboards/sofle/keyhive/readme.md
index 43813b856..3847dfe6b 100755
--- a/keyboards/sofle/keyhive/readme.md
+++ b/keyboards/sofle/keyhive/readme.md
@@ -1,66 +1,54 @@
1# Sofle Keyboard 1# Keyhive Sofle Keyboard
2 2
3![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/WH9OoWuh.jpg) 3![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/WH9OoWuh.jpg)
4 4
5Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards. 5Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards.
6 6
7For detailed instructions on using VIA and flashing, please refer to the sections further down the page!
8
9For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html) 7For details about the keyboard design, refer to Josef's blog: [Sofle Keyboard - a split keyboard based on Lily58 and Crkbd](https://josef-adamcik.cz/electronics/let-me-introduce-you-sofle-keyboard-split-keyboard-based-on-lily58.html)
10 8
11Build guide: [Keyhive Sofle RGB build guide](https://github.com/keyhive/build_guides/blob/master/docs/keyboards/sofle-rgb.md) 9Build guide: [Keyhive Sofle RGB build guide](https://github.com/keyhive/build_guides/blob/master/docs/keyboards/sofle-rgb.md)
12 10
13* Keyboard Maintainer: [Solartempest] 11* Keyboard Maintainer: [Winder](https://github.com/winder)
14* Hardware Supported: SofleKeyboard V2.1 RGB PCB, ProMicro / Elite-C 12* Hardware Supported: Keyhive Sofle RGB, ProMicro / Elite-C
15* Hardware Availability: [Keyhive](https://keyhive.xyz/shop/sofle) 13* Hardware Availability: [Keyhive](https://keyhive.xyz/shop/sofle)
16 14
17# Custom Features: 15### Acknowledgements
18
19### OLED Features:
20- Includes Snakey keyboard pet! Slithers according to WPM, bites, and sticks its tongue out at you!
21- OLED displays current layer, lock key status, WPM, custom logo, and custom name.
22- OLED shuts off on idle and when computer is sleeping.
23- Includes working Luna keyboard pet.
24- Includes working Bongocat (disable RGB for sufficient space).
25- Includes stock OLED code as well.
26 16
27### RGB Features: 17* Solartempest - the image on this page and most of the code is either copied directly or inspired by their fork. [Solartempest's fork.](https://github.com/solartempest/qmk_firmware/tree/master/keyboards/solartempest/sofle).
28- Adds custom layer lighting with custom gradients for each layer. 18* [Keyhive fork](https://github.com/keyhive/qmk_firmware) defined all of the board settings.
29- RGB underglow support and remapped to physical locations (nicer gradients and effects).
30- Adds white caps lock, scroll lock, and num lock key indicators using the top row/underglow LEDs.
31 19
32### Rotary Encoder and VIA Features: 20# Supported Keymaps
33- Fully emappable left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN.
34- Allows for live remapping of per-layer rotary encoder functions in VIA.
35- VIA support included by default.
36- This fixes the Keyhive left bottom row offset issue in VIA. You will need to import sofle.json in VIA.
37- Custom macro key in VIA for Super Alt Tab, which is fully compatible with rotary encoders.
38- Custom macro key in VIA for moving windows to other monitors in Windows, which is fully compatible with rotary encoders.
39 21
40### Tap and Other Features: 22The keyhive schematic has been slightly modified compared to the open source sofle and not all keymaps are compatible.
41- Push left-shift + backspace to delete whole words. Right-shift + backspace to delete whole words in the opposite direction.
42- Double tap layers to stay on a layer instead of momentary push.
43- Adds key combo functionality.
44- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift).
45 23
46## Using with VIA 24* **default**: Basic functionality, no rgb, no VIA.
25* [keyhive_via](../keymaps/keyhive_via/readme.md) - Includes rgblighting and special support for remapping encoders with VIA.
26* **Other**: may work but backwards compatibility is not guaranteed or tested.
47 27
48- After flashing, in VIA make sure to Import Keymap, which is "sofle VIA keymap.json". This will alow VIA to recognize the updated layout and custom functions. VIA will not auto-recognize the keyboard with this firmware because of the necessary customization. 28# VIA Support
49- Go to Save+Load to Load Saved Layout. You can import my own layout "sofle VIA layout.json" or just use the Keymap tab to assign your own keys. Having another keyboard connected can be handy for doing this step. 29As of 1.3.1, the VIA tool does not support Keyhive/Sofle V2 out of the box.
50- It is a good idea to Save Current Layout after you decide on your mapping. 30See [keyhive_via](../keymaps/keyhive_via/readme.md) for details about configuring and using VIA.
51 31
32# Compiling
52 33
53Make example for this keyboard (after setting up your build environment): 34Make example for this keyboard (after setting up your build environment):
54 35
55 make sofle/keyhive:default 36 make sofle/keyhive:default
56 37
57Flashing example for this keyboard: 38## Flashing
58 39
59 make sofle/keyhive:default:flash 40Flash using the correct command below (or use QMK Toolbox). These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right.
60 41
61Press reset button on he keyboard when asked. 42Press reset button on the keyboard when asked.
62 43
63Disconnect the first half, connect the second one and repeat the process. 44Disconnect the first half, connect the second one and repeat the process.
64 45
46 # for Pro Micro-based builds
47 make sofle/keyhive:default:avrdude-split-left
48 make sofle/keyhive:default:avrdude-split-right
49
50 # for Elite C or DFU bootloader builds
51 make sofle/keyhive:default:dfu-split-left
52 make sofle/keyhive:default:dfu-split-right
65 53
66See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). 54See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/sofle/keyhive/rules.mk b/keyboards/sofle/keyhive/rules.mk
index bba84040b..193496381 100755
--- a/keyboards/sofle/keyhive/rules.mk
+++ b/keyboards/sofle/keyhive/rules.mk
@@ -14,7 +14,7 @@ CONSOLE_ENABLE = no # Console for debug
14COMMAND_ENABLE = no # Commands for debug and configuration 14COMMAND_ENABLE = no # Commands for debug and configuration
15NKRO_ENABLE = yes # Enable N-Key Rollover 15NKRO_ENABLE = yes # Enable N-Key Rollover
16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality 16BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
17RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow 17RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
18AUDIO_ENABLE = no # Audio output 18AUDIO_ENABLE = no # Audio output
19ENCODER_ENABLE = yes 19ENCODER_ENABLE = yes
20LTO_ENABLE = yes 20LTO_ENABLE = yes
diff --git a/keyboards/sofle/keymaps/keyhive_via/config.h b/keyboards/sofle/keymaps/keyhive_via/config.h
new file mode 100644
index 000000000..0e2cb6d2c
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/config.h
@@ -0,0 +1,48 @@
1 /* Copyright 2020 Josef Adamcik
2 * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#pragma once
19
20/* The way how "handedness" is decided (which half is which),
21see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness
22for more options.
23*/
24
25// More lighting options in quantum/rgblight/rgblight.h
26#ifdef RGBLIGHT_ENABLE
27# define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL+2
28
29// Disabling some of these is a good way to save flash space.
30# define RGBLIGHT_EFFECT_ALTERNATING // 108
31# define RGBLIGHT_EFFECT_RGB_TEST // 158
32# define RGBLIGHT_EFFECT_RAINBOW_MOOD // 160
33# define RGBLIGHT_EFFECT_STATIC_GRADIENT // 168
34# define RGBLIGHT_EFFECT_RAINBOW_SWIRL // 192
35# define RGBLIGHT_EFFECT_BREATHING // 348
36# define RGBLIGHT_EFFECT_KNIGHT // 336
37# define RGBLIGHT_EFFECT_SNAKE // 406
38# define RGBLIGHT_EFFECT_CHRISTMAS // 508
39/*
40#define RGBLIGHT_EFFECT_TWINKLE // 1156
41*/
42#endif
43
44// Disabled to save space
45#define NO_ACTION_ONESHOT // 332
46#define NO_ACTION_MACRO // 0
47#define NO_ACTION_FUNCTION // 0
48#define DISABLE_LEADER // 0
diff --git a/keyboards/sofle/keymaps/keyhive_via/encoder.c b/keyboards/sofle/keymaps/keyhive_via/encoder.c
new file mode 100644
index 000000000..0883c4a48
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/encoder.c
@@ -0,0 +1,49 @@
1 /* Copyright 2020 Josef Adamcik
2 * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18//Setting up what encoder rotation does. If your encoder can be pressed as a button, that function can be set in Via.
19
20#ifdef ENCODER_ENABLE
21 static uint8_t encoder_state[2] = {0};
22 //Use these keymap positions to specify the encoder functions on rotate.
23 static keypos_t encoder_ccw[2] = {{6, 3}, {6, 8}};
24 static keypos_t encoder_cw[2] = {{6, 1}, {6, 6}};
25
26 void encoder_action_unregister(void) {
27 for (int index = 0; index < 2; ++index) {
28 if (encoder_state[index]) {
29 keyevent_t encoder_event = (keyevent_t){.key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index], .pressed = false, .time = (timer_read() | 1)};
30 encoder_state[index] = 0;
31 action_exec(encoder_event);
32 }
33 }
34 }
35
36 void encoder_action_register(uint8_t index, bool clockwise) {
37 keyevent_t encoder_event = (keyevent_t){.key = clockwise ? encoder_cw[index] : encoder_ccw[index], .pressed = true, .time = (timer_read() | 1)};
38 encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
39 action_exec(encoder_event);
40 }
41
42 void matrix_scan_user(void) { encoder_action_unregister(); }
43
44 bool encoder_update_user(uint8_t index, bool clockwise) {
45 encoder_action_register(index, clockwise);
46 return false;
47 };
48#endif
49
diff --git a/keyboards/sofle/keymaps/keyhive_via/keymap.c b/keyboards/sofle/keymaps/keyhive_via/keymap.c
new file mode 100644
index 000000000..878638e1a
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/keymap.c
@@ -0,0 +1,191 @@
1 /* Copyright 2020 Josef Adamcik
2 * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include QMK_KEYBOARD_H
19
20#include "oled.c"
21#include "encoder.c"
22
23// Base layer is the number of layers CYCLE selects from.
24#define BASE_LAYERS 2
25
26enum custom_keycodes {
27 PLACEHOLDER = SAFE_RANGE, // can always be here (4 bytes)
28 CYCLE // cycle through first BASE_LAYERS (62 bytes)
29};
30
31enum custom_layers {
32 _QWERTY,
33 _COLEMAK,
34 _LOWER,
35 _RAISE
36};
37
38// Extra keys are added for rotary encoder support in VIA
39#define LAYOUT_via( \
40 LA1, LA2, LA3, LA4, LA5, LA6, RA6, RA5, RA4, RA3, RA2, RA1, \
41 LB1, LB2, LB3, LB4, LB5, LB6, LB7, RB7, RB6, RB5, RB4, RB3, RB2, RB1, \
42 LC1, LC2, LC3, LC4, LC5, LC6, LE1, RE6, RC6, RC5, RC4, RC3, RC2, RC1, \
43 LD1, LD2, LD3, LD4, LD5, LD6, LD7, RD7, RD6, RD5, RD4, RD3, RD2, RD1, \
44 LE2, LE3, LE4, LE5, LE6, RE5, RE4, RE3, RE2, RE1 \
45 ) \
46 { \
47 { LA1, LA2, LA3, LA4, LA5, LA6, KC_NO }, \
48 { LB1, LB2, LB3, LB4, LB5, LB6, LB7 }, \
49 { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO }, \
50 { LD1, LD2, LD3, LD4, LD5, LD6, LD7 }, \
51 { LE1, LE2, LE3, LE4, LE5, LE6, KC_NO }, \
52 { RA1, RA2, RA3, RA4, RA5, RA6, KC_NO }, \
53 { RB1, RB2, RB3, RB4, RB5, RB6, RB7 }, \
54 { RC1, RC2, RC3, RC4, RC5, RC6, KC_NO }, \
55 { RD1, RD2, RD3, RD4, RD5, RD6, RD7 }, \
56 { RE1, RE2, RE3, RE4, RE5, RE6, KC_NO } \
57 }
58
59//Default keymap. This can be changed in Via. Use oled.c to change beavior that Via cannot change.
60const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
61/*
62 * QWERTY
63 * ,-----------------------------------------. ,-----------------------------------------.
64 * | ` | 1 | 2 | 3 | 4 | 5 |-------. E ,-------| 6 | 7 | 8 | 9 | 0 | ` |
65 * |------+------+------+------+------+------| VolUp |< N >| Pg Up |------+------+------+------+------+------|
66 * | ESC | Q | W | E | R | T |-------. C ,-------| Y | U | I | O | P | Bspc |
67 * |------+------+------+------+------+------| Mute |< O >| |------+------+------+------+------+------|
68 * | Tab | A | S | D | F | G |-------. D ,-------| H | J | K | L | ; | ' |
69 * |------+------+------+------+------+------| VolDn |< E >| Pg Dn |------+------+------+------+------+------|
70 * |LShift| Z | X | C | V | B |-------| R |-------| N | M | , | . | / |RShift|
71 * `-----------------------------------------/ / \ \-----------------------------------------'
72 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
73 * | | | | |/ / \ \ | | | | |
74 * `-----------------------------------' '------''---------------------------'
75 */
76
77[_QWERTY] = LAYOUT_via(
78 KC_GRV, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
79 KC_ESC, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_VOLU, KC_PGUP, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
80 KC_TAB, KC_A , KC_S , KC_D , KC_F , KC_G , KC_MUTE, KC_NO , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
81 KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_VOLD, KC_PGDN, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
82 KC_LGUI,KC_LALT ,KC_LCTRL,MO(_LOWER), KC_ENT , KC_SPC ,MO(_RAISE),KC_RCTRL, KC_RALT, KC_RGUI
83),
84/*
85 * COLEMAK - Vanilla
86 * ,-----------------------------------------. ,-----------------------------------------.
87 * | ` | 1 | 2 | 3 | 4 | 5 |-------. E ,-------| 6 | 7 | 8 | 9 | 0 | ` |
88 * |------+------+------+------+------+------| VolUp |< N >| Pg Up |------+------+------+------+------+------|
89 * | ESC | Q | W | F | P | G |-------. C ,-------| J | L | U | Y | ; | Bspc |
90 * |------+------+------+------+------+------| Mute |< O >| |------+------+------+------+------+------|
91 * | TAB | A | R | S | T | D |-------. D ,-------| H | N | E | I | O | ' |
92 * |------+------+------+------+------+------| VolDn |< E >| Pg Dn |------+------+------+------+------+------|
93 * |LShift| Z | X | C | V | B |-------| R |-------| K | M | , | . | / |RShift|
94 * `-----------------------------------------/ / \ \-----------------------------------------'
95 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
96 * | | | | |/ / \ \ | | | | |
97 * `-----------------------------------' '------''---------------------------'
98 */
99/*
100[_COLEMAK] = LAYOUT_via(
101 KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
102 KC_ESC , KC_Q , KC_W , KC_F , KC_P , KC_G , KC_VOLU, KC_PGUP, KC_J , KC_L , KC_U , KC_Y , KC_SCLN, KC_BSPC,
103 KC_TAB , KC_A , KC_R , KC_S , KC_T , KC_D , KC_MUTE, KC_NO , KC_H , KC_N , KC_E , KC_I , KC_O , KC_QUOT,
104 KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_VOLD, KC_PGDN, KC_N , KC_M , KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
105 KC_LGUI, KC_LALT,KC_LCTRL,MO(_LOWER), KC_ENT , KC_SPC ,MO(_RAISE),KC_RCTRL, KC_RALT, KC_RGUI
106),
107*/
108
109/*
110 * COLEMAK-DH
111 * ,-----------------------------------------. ,-----------------------------------------.
112 * | ` | 1 | 2 | 3 | 4 | 5 |-------. E ,-------| 6 | 7 | 8 | 9 | 0 | ` |
113 * |------+------+------+------+------+------| VolUp |< N >| Pg Up |------+------+------+------+------+------|
114 * | ESC | Q | W | F | P | B |-------. C ,-------| J | L | U | Y | ; | Bspc |
115 * |------+------+------+------+------+------| Mute |< O >| |------+------+------+------+------+------|
116 * | TAB | A | R | S | T | G |-------. D ,-------| M | N | E | I | O | ' |
117 * |------+------+------+------+------+------| VolDn |< E >| Pg Dn |------+------+------+------+------+------|
118 * |LShift| Z | X | C | D | V |-------| R |-------| K | H | , | . | / |RShift|
119 * `-----------------------------------------/ / \ \-----------------------------------------'
120 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
121 * | | | | |/ / \ \ | | | | |
122 * `-----------------------------------' '------''---------------------------'
123 */
124[_COLEMAK] = LAYOUT_via(
125 KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_GRV ,
126 KC_ESC , KC_Q , KC_W , KC_F , KC_P , KC_B , KC_VOLU, KC_PGUP, KC_J , KC_L , KC_U , KC_Y , KC_SCLN, KC_BSPC,
127 KC_TAB , KC_A , KC_R , KC_S , KC_T , KC_G , KC_MUTE, KC_NO , KC_M , KC_N , KC_E , KC_I , KC_O , KC_QUOT,
128 KC_LSFT, KC_Z , KC_X , KC_C , KC_D , KC_V , KC_VOLD, KC_PGDN, KC_K , KC_H , KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
129 KC_LGUI, KC_LALT,KC_LCTRL,MO(_LOWER), KC_ENT , KC_SPC ,MO(_RAISE),KC_RCTRL, KC_RALT, KC_RGUI
130),
131
132/* LOWER
133 * ,-----------------------------------------. ,-----------------------------------------.
134 * | | F1 | F2 | F3 | F4 | F5 |-------. E ,-------| F6 | F7 | F8 | F9 | F10 | F11 |
135 * |------+------+------+------+------+------| |< N >| |------+------+------+------+------+------|
136 * | ` | 1 | 2 | 3 | 4 | 5 |-------. C ,-------| 6 | 7 | 8 | 9 | 0 | F12 |
137 * |------+------+------+------+------+------| |< O >| |------+------+------+------+------+------|
138 * | Tab | ! | @ | # | $ | % |-------. D ,-------| ^ | & | * | ( | ) | | |
139 * |------+------+------+------+------+------| |< E >| |------+------+------+------+------+------|
140 * | Shift| = | - | + | { | } |-------| R |-------| [ | ] | ; | : | \ | |
141 * `-----------------------------------------/ / \ \-----------------------------------------'
142 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
143 * | | | | |/ / \ \ | | | | |
144 * `-----------------------------------' '------''---------------------------'
145 */
146[_LOWER] = LAYOUT_via(
147 _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
148 KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , _______, _______, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_F12 ,
149 _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
150 _______, KC_EQL , KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
151 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
152),
153/* RAISE
154 * ,----------------------------------------. ,-----------------------------------------.
155 * |Cycle | | | | | |-------. E ,-------| | | | | | |
156 * |------+------+------+------+------+------| |< N >| |------+------+------+------+------+------|
157 * | Esc | Ins | Pscr | Menu | | |-------. C ,-------| | | Up | | DLine| Bspc |
158 * |------+------+------+------+------+------| |< O >| |------+------+------+------+------+------|
159 * | Tab | LAt | LCtl |LShift| | Caps |-------. D ,-------| | Left | Down | Rigth| Del | Bspc |
160 * |------+------+------+------+------+------| |< E >| |------+------+------+------+------+------|
161 * |Shift | Undo | Cut | Copy | Paste| |-------| R |-------| | LStr | | LEnd | | Shift|
162 * `-----------------------------------------/ / \ \-----------------------------------------'
163 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
164 * | | | | |/ / \ \ | | | | |
165 * `----------------------------------' '------''---------------------------'
166 */
167[_RAISE] = LAYOUT_via(
168 CYCLE, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______,
169 _______, KC_INS , KC_PSCR, KC_APP , XXXXXXX , XXXXXXX, _______, _______, KC_PGUP, _______, KC_UP , _______, _______, KC_BSPC,
170 _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX , KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , KC_BSPC,
171 _______, KC_UNDO, KC_CUT , KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______,
172 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
173)
174};
175
176// Custom keycode handling.
177bool process_record_user(uint16_t keycode, keyrecord_t *record) {
178 // handling this once instead of in each keycode uses less program memory.
179 if ((keycode >= SAFE_RANGE) && !(record->event.pressed)) {
180 return false;
181 }
182
183 switch (keycode) {
184 case CYCLE:
185 set_single_persistent_default_layer((1+get_highest_layer(default_layer_state)) % BASE_LAYERS);
186 break;
187 }
188
189 // this uses less memory than returning in each case.
190 return keycode < SAFE_RANGE;
191};
diff --git a/keyboards/sofle/keymaps/keyhive_via/oled.c b/keyboards/sofle/keymaps/keyhive_via/oled.c
new file mode 100644
index 000000000..ef3a189f9
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/oled.c
@@ -0,0 +1,85 @@
1 /* Copyright 2020 Josef Adamcik
2 * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18//Sets up what the OLED screens display.
19
20#ifdef OLED_ENABLE
21
22static void render_logo(void) {
23 static const char PROGMEM qmk_logo[] = {
24 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
25 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
26 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
27 };
28
29 oled_write_P(qmk_logo, false);
30}
31
32static void print_status_narrow(void) {
33 // Print current mode
34 oled_write_P(PSTR("\n\n"), false);
35
36 switch (get_highest_layer(default_layer_state)) {
37 case 0: // _QWERTY
38 oled_write_ln_P(PSTR("Qwrt\n"), false);
39 break;
40 case 1: // _COLEMAK
41 oled_write_ln_P(PSTR("Clmk\n"), false);
42 break;
43 default:
44 oled_write_P(PSTR("Mod"), false);
45 break;
46 }
47 oled_write_P(PSTR("\n\n"), false);
48 // Print current layer
49 oled_write_ln_P(PSTR("LAYER"), false);
50 switch (get_highest_layer(layer_state)) {
51 case 0: // _QWERTY
52 case 1: // _COLEMAK
53 oled_write_P(PSTR("Base\n"), false);
54 break;
55 case 2:
56 oled_write_P(PSTR("Lower"), false);
57 break;
58 case 3:
59 oled_write_P(PSTR("Raise"), false);
60 break;
61 default:
62 oled_write_ln_P(PSTR("Undef"), false);
63 }
64 oled_write_P(PSTR("\n\n"), false);
65 led_t led_usb_state = host_keyboard_led_state();
66 oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
67}
68
69oled_rotation_t oled_init_user(oled_rotation_t rotation) {
70 if (is_keyboard_master()) {
71 return OLED_ROTATION_270;
72 }
73 return rotation;
74}
75
76bool oled_task_user(void) {
77 if (is_keyboard_master()) {
78 print_status_narrow();
79 } else {
80 render_logo();
81 }
82 return false;
83}
84
85#endif
diff --git a/keyboards/sofle/keymaps/keyhive_via/readme.md b/keyboards/sofle/keymaps/keyhive_via/readme.md
new file mode 100644
index 000000000..e7a2beebc
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/readme.md
@@ -0,0 +1,49 @@
1# Only compatible with sofle/keyhive firmware which adds an extra column of keys for encoder mapping.
2
3![SofleKeyboard version 2.1 RGB Keyhive](https://i.imgur.com/Oa6spvZ.png)
4
5# Configuring VIA / Vial App
6
7This firmware will not auto-recognize until [PR #1060](https://github.com/the-via/keyboards/pull/1060) is accepted to the VIA keyboard database. For now you must install the new layout:
8
91. Download [keyhive_sofle_rgb.json](https://raw.githubusercontent.com/the-via/keyboards/48372baae5ab451d752988121fa4f1dd47b2c1ce/src/sofle/keyhive_sofle_rgb.json).
102. In the VIA app, select `File > Import Keymap` from the menu.
113. Open the file you just downloaded.
12
13**You'll have to do this every time you use VIA or Vial until the PR is accepted.**
14
15# Using with VIA
16* The default layouts should be loaded automatically.
17* Layouts can be backed up in VIA in the SAVE+LOAD section.
18* It is a good idea to Save Current Layout after you decide on your mapping.
19
20# Custom Features:
21
22### Rotary Encoder and VIA Features:
23* Fully remappable. Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN.
24* Allows for live remapping of per-layer rotary encoder functions in VIA.
25* VIA support with **keyhive_via** keymap.
26
27# Compiling
28
29Make example for this keyboard (after setting up your build environment):
30
31 make sofle/keyhive:keyhive_via
32
33## Flashing
34
35Flash using the correct command below (or use QMK Toolbox). These commands can be mixed if, for example, you have an Elite C on the left and a pro micro on the right.
36
37Press reset button on the keyboard when asked.
38
39Disconnect the first half, connect the second one and repeat the process.
40
41 # for Pro Micro-based builds
42 make sofle/keyhive:keyhive_via:avrdude-split-left
43 make sofle/keyhive:keyhive_via:avrdude-split-right
44
45 # for Elite C or DFU bootloader builds
46 make sofle/keyhive:keyhive_via:dfu-split-left
47 make sofle/keyhive:keyhive_via:dfu-split-right
48
49See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/sofle/keymaps/keyhive_via/rules.mk b/keyboards/sofle/keymaps/keyhive_via/rules.mk
new file mode 100644
index 000000000..287525409
--- /dev/null
+++ b/keyboards/sofle/keymaps/keyhive_via/rules.mk
@@ -0,0 +1,2 @@
1VIA_ENABLE = yes
2RGBLIGHT_ENABLE = yes
diff --git a/keyboards/sofle/keymaps/via/keymap.c b/keyboards/sofle/keymaps/via/keymap.c
index 2f917f42d..b8bbe195f 100644
--- a/keyboards/sofle/keymaps/via/keymap.c
+++ b/keyboards/sofle/keymaps/via/keymap.c
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
58 * `-----------------------------------------/ / \ \-----------------------------------------' 58 * `-----------------------------------------/ / \ \-----------------------------------------'
59 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | 59 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
60 * | | | | |/ / \ \ | | | | | 60 * | | | | |/ / \ \ | | | | |
61 * `----------------------------------' '------''---------------------------' 61 * `-----------------------------------' '------''---------------------------'
62 */ 62 */
63 63
64[1] = LAYOUT( 64[1] = LAYOUT(
@@ -96,8 +96,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
96 * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc | 96 * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
97 * |------+------+------+------+------+------| |------+------+------+------+------+------| 97 * |------+------+------+------+------+------| |------+------+------+------+------+------|
98 * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc | 98 * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
99 * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| 99 * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
100 * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift| 100 * |Shift | Undo | Cut | Copy | Paste| |--------| |-------| | LStr | | LEnd | | Shift|
101 * `-----------------------------------------/ / \ \-----------------------------------------' 101 * `-----------------------------------------/ / \ \-----------------------------------------'
102 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | 102 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
103 * | | | | |/ / \ \ | | | | | 103 * | | | | |/ / \ \ | | | | |