aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/sofle/config.h4
-rw-r--r--keyboards/sofle/keymaps/default/config.h6
-rw-r--r--keyboards/sofle/keymaps/default/keymap.c392
-rw-r--r--keyboards/sofle/keymaps/default/readme.md19
-rw-r--r--keyboards/sofle/keymaps/default/rules.mk5
-rw-r--r--keyboards/sofle/readme.md27
-rw-r--r--keyboards/sofle/rev1/config.h40
-rw-r--r--keyboards/sofle/rev1/info.json19
-rw-r--r--keyboards/sofle/rev1/rev1.c1
-rw-r--r--keyboards/sofle/rev1/rev1.h23
-rw-r--r--keyboards/sofle/rev1/rules.mk2
-rw-r--r--keyboards/sofle/rules.mk4
-rw-r--r--keyboards/sofle/sofle.c1
-rw-r--r--keyboards/sofle/sofle.h5
14 files changed, 548 insertions, 0 deletions
diff --git a/keyboards/sofle/config.h b/keyboards/sofle/config.h
new file mode 100644
index 000000000..0ff762c00
--- /dev/null
+++ b/keyboards/sofle/config.h
@@ -0,0 +1,4 @@
1#pragma once
2
3#include "config_common.h"
4
diff --git a/keyboards/sofle/keymaps/default/config.h b/keyboards/sofle/keymaps/default/config.h
new file mode 100644
index 000000000..c5494c20a
--- /dev/null
+++ b/keyboards/sofle/keymaps/default/config.h
@@ -0,0 +1,6 @@
1#pragma once
2
3/* The way how "handedness" is decided (which half is which),
4see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness
5for more options.
6*/
diff --git a/keyboards/sofle/keymaps/default/keymap.c b/keyboards/sofle/keymaps/default/keymap.c
new file mode 100644
index 000000000..38200bfb7
--- /dev/null
+++ b/keyboards/sofle/keymaps/default/keymap.c
@@ -0,0 +1,392 @@
1#include QMK_KEYBOARD_H
2
3enum sofle_layers {
4 /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
5 _QWERTY,
6 _COLEMAK,
7 _LOWER,
8 _RAISE,
9 _ADJUST,
10};
11
12enum custom_keycodes {
13 KC_QWERTY = SAFE_RANGE,
14 KC_COLEMAK,
15 KC_LOWER,
16 KC_RAISE,
17 KC_ADJUST,
18 KC_PRVWD,
19 KC_NXTWD,
20 KC_LSTRT,
21 KC_LEND,
22 KC_DLINE
23};
24
25
26const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27/*
28 * QWERTY
29 * ,-----------------------------------------. ,-----------------------------------------.
30 * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
31 * |------+------+------+------+------+------| |------+------+------+------+------+------|
32 * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc |
33 * |------+------+------+------+------+------| |------+------+------+------+------+------|
34 * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
35 * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
36 * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
37 * `-----------------------------------------/ / \ \-----------------------------------------'
38 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
39 * | | | | |/ / \ \ | | | | |
40 * `----------------------------------' '------''---------------------------'
41 */
42
43[_QWERTY] = LAYOUT( \
44 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \
45 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
46 KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
47 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
48 KC_LGUI,KC_LALT,KC_LCTRL, KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI \
49),
50/*
51 * COLEMAK
52 * ,-----------------------------------------. ,-----------------------------------------.
53 * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
54 * |------+------+------+------+------+------| |------+------+------+------+------+------|
55 * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc |
56 * |------+------+------+------+------+------| |------+------+------+------+------+------|
57 * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' |
58 * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
59 * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift|
60 * `-----------------------------------------/ / \ \-----------------------------------------'
61 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
62 * | | | | |/ / \ \ | | | | |
63 * `----------------------------------' '------''---------------------------'
64 */
65
66[_COLEMAK] = LAYOUT( \
67 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, \
68 KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
69 KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
70 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
71 KC_LGUI,KC_LALT,KC_LCTRL,KC_LOWER, KC_ENT, KC_SPC, KC_RAISE, KC_RCTRL, KC_RALT, KC_RGUI \
72),
73/* LOWER
74 * ,-----------------------------------------. ,-----------------------------------------.
75 * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
76 * |------+------+------+------+------+------| |------+------+------+------+------+------|
77 * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
78 * |------+------+------+------+------+------| |------+------+------+------+------+------|
79 * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | |
80 * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
81 * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift|
82 * `-----------------------------------------/ / \ \-----------------------------------------'
83 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
84 * | | | | |/ / \ \ | | | | |
85 * `----------------------------------' '------''---------------------------'
86 */
87[_LOWER] = LAYOUT( \
88 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,\
89 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, \
90 _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
91 _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, \
92 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
93),
94/* RAISE
95 * ,----------------------------------------. ,-----------------------------------------.
96 * | | | | | | | | | | | | | |
97 * |------+------+------+------+------+------| |------+------+------+------+------+------|
98 * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc |
99 * |------+------+------+------+------+------| |------+------+------+------+------+------|
100 * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc |
101 * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
102 * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift|
103 * `-----------------------------------------/ / \ \-----------------------------------------'
104 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
105 * | | | | |/ / \ \ | | | | |
106 * `----------------------------------' '------''---------------------------'
107 */
108[_RAISE] = LAYOUT( \
109 _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______, \
110 _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, KC_PRVWD, KC_UP, KC_NXTWD,KC_DLINE, KC_BSPC, \
111 _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, \
112 _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND, XXXXXXX, _______, \
113 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
114),
115/* ADJUST
116 * ,-----------------------------------------. ,-----------------------------------------.
117 * | | | | | | | | | | | | | |
118 * |------+------+------+------+------+------| |------+------+------+------+------+------|
119 * | RESET| |QWERTY|COLEMAK| | | | | | | | | |
120 * |------+------+------+------+------+------| |------+------+------+------+------+------|
121 * | | |MACWIN| | | |-------. ,-------| | VOLDO| MUTE | VOLUP| | |
122 * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------|
123 * | | | | | | |-------| |-------| | PREV | PLAY | NEXT | | |
124 * `-----------------------------------------/ / \ \-----------------------------------------'
125 * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI |
126 * | | | | |/ / \ \ | | | | |
127 * `----------------------------------' '------''---------------------------'
128 */
129 [_ADJUST] = LAYOUT( \
130 XXXXXXX , XXXXXXX, XXXXXXX , XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
131 RESET , XXXXXXX,KC_QWERTY,KC_COLEMAK,CG_TOGG,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
132 XXXXXXX , XXXXXXX,CG_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX, \
133 XXXXXXX , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, \
134 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
135 )
136};
137
138#ifdef OLED_DRIVER_ENABLE
139
140static void render_logo(void) {
141 static const char PROGMEM qmk_logo[] = {
142 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
143 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
144 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
145 };
146
147 oled_write_P(qmk_logo, false);
148}
149
150static void print_status_narrow(void) {
151 // Print current mode
152 oled_write_P(PSTR("\n\n"), false);
153 oled_write_ln_P(PSTR("MODE"), false);
154 oled_write_ln_P(PSTR(""), false);
155 if (keymap_config.swap_lctl_lgui) {
156 oled_write_ln_P(PSTR("MAC"), false);
157 } else {
158 oled_write_ln_P(PSTR("WIN"), false);
159 }
160
161 switch (get_highest_layer(default_layer_state)) {
162 case _QWERTY:
163 oled_write_ln_P(PSTR("Qwrt"), false);
164 break;
165 case _COLEMAK:
166 oled_write_ln_P(PSTR("Clmk"), false);
167 break;
168 default:
169 oled_write_P(PSTR("Undef"), false);
170 }
171 oled_write_P(PSTR("\n\n"), false);
172 // Print current layer
173 oled_write_ln_P(PSTR("LAYER"), false);
174 switch (get_highest_layer(layer_state)) {
175 case _COLEMAK:
176 case _QWERTY:
177 oled_write_P(PSTR("Base\n"), false);
178 break;
179 case _RAISE:
180 oled_write_P(PSTR("Raise"), false);
181 break;
182 case _LOWER:
183 oled_write_P(PSTR("Lower"), false);
184 break;
185 case _ADJUST:
186 oled_write_P(PSTR("Adj\n"), false);
187 break;
188 default:
189 oled_write_ln_P(PSTR("Undef"), false);
190 }
191 oled_write_P(PSTR("\n\n"), false);
192 led_t led_usb_state = host_keyboard_led_state();
193 oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
194}
195
196oled_rotation_t oled_init_user(oled_rotation_t rotation) {
197 if (is_keyboard_master()) {
198 return OLED_ROTATION_270;
199 }
200 return rotation;
201}
202
203void oled_task_user(void) {
204 if (is_keyboard_master()) {
205 print_status_narrow();
206 } else {
207 render_logo();
208 }
209}
210
211#endif
212
213bool process_record_user(uint16_t keycode, keyrecord_t *record) {
214 switch (keycode) {
215 case KC_QWERTY:
216 if (record->event.pressed) {
217 set_single_persistent_default_layer(_QWERTY);
218 }
219 return false;
220 case KC_COLEMAK:
221 if (record->event.pressed) {
222 set_single_persistent_default_layer(_COLEMAK);
223 }
224 return false;
225 case KC_LOWER:
226 if (record->event.pressed) {
227 layer_on(_LOWER);
228 update_tri_layer(_LOWER, _RAISE, _ADJUST);
229 } else {
230 layer_off(_LOWER);
231 update_tri_layer(_LOWER, _RAISE, _ADJUST);
232 }
233 return false;
234 case KC_RAISE:
235 if (record->event.pressed) {
236 layer_on(_RAISE);
237 update_tri_layer(_LOWER, _RAISE, _ADJUST);
238 } else {
239 layer_off(_RAISE);
240 update_tri_layer(_LOWER, _RAISE, _ADJUST);
241 }
242 return false;
243 case KC_ADJUST:
244 if (record->event.pressed) {
245 layer_on(_ADJUST);
246 } else {
247 layer_off(_ADJUST);
248 }
249 return false;
250 case KC_PRVWD:
251 if (record->event.pressed) {
252 if (keymap_config.swap_lctl_lgui) {
253 register_mods(mod_config(MOD_LALT));
254 register_code(KC_LEFT);
255 } else {
256 register_mods(mod_config(MOD_LCTL));
257 register_code(KC_LEFT);
258 }
259 } else {
260 if (keymap_config.swap_lctl_lgui) {
261 unregister_mods(mod_config(MOD_LALT));
262 unregister_code(KC_LEFT);
263 } else {
264 unregister_mods(mod_config(MOD_LCTL));
265 unregister_code(KC_LEFT);
266 }
267 }
268 break;
269 case KC_NXTWD:
270 if (record->event.pressed) {
271 if (keymap_config.swap_lctl_lgui) {
272 register_mods(mod_config(MOD_LALT));
273 register_code(KC_RIGHT);
274 } else {
275 register_mods(mod_config(MOD_LCTL));
276 register_code(KC_RIGHT);
277 }
278 } else {
279 if (keymap_config.swap_lctl_lgui) {
280 unregister_mods(mod_config(MOD_LALT));
281 unregister_code(KC_RIGHT);
282 } else {
283 unregister_mods(mod_config(MOD_LCTL));
284 unregister_code(KC_RIGHT);
285 }
286 }
287 break;
288 case KC_LSTRT:
289 if (record->event.pressed) {
290 if (keymap_config.swap_lctl_lgui) {
291 //CMD-arrow on Mac, but we have CTL and GUI swapped
292 register_mods(mod_config(MOD_LCTL));
293 register_code(KC_LEFT);
294 } else {
295 register_code(KC_HOME);
296 }
297 } else {
298 if (keymap_config.swap_lctl_lgui) {
299 unregister_mods(mod_config(MOD_LCTL));
300 unregister_code(KC_LEFT);
301 } else {
302 unregister_code(KC_HOME);
303 }
304 }
305 break;
306 case KC_LEND:
307 if (record->event.pressed) {
308 if (keymap_config.swap_lctl_lgui) {
309 //CMD-arrow on Mac, but we have CTL and GUI swapped
310 register_mods(mod_config(MOD_LCTL));
311 register_code(KC_RIGHT);
312 } else {
313 register_code(KC_END);
314 }
315 } else {
316 if (keymap_config.swap_lctl_lgui) {
317 unregister_mods(mod_config(MOD_LCTL));
318 unregister_code(KC_RIGHT);
319 } else {
320 unregister_code(KC_END);
321 }
322 }
323 break;
324 case KC_DLINE:
325 if (record->event.pressed) {
326 register_mods(mod_config(MOD_LCTL));
327 register_code(KC_BSPC);
328 } else {
329 unregister_mods(mod_config(MOD_LCTL));
330 unregister_code(KC_BSPC);
331 }
332 break;
333 case KC_COPY:
334 if (record->event.pressed) {
335 register_mods(mod_config(MOD_LCTL));
336 register_code(KC_C);
337 } else {
338 unregister_mods(mod_config(MOD_LCTL));
339 unregister_code(KC_C);
340 }
341 return false;
342 case KC_PASTE:
343 if (record->event.pressed) {
344 register_mods(mod_config(MOD_LCTL));
345 register_code(KC_V);
346 } else {
347 unregister_mods(mod_config(MOD_LCTL));
348 unregister_code(KC_V);
349 }
350 return false;
351 case KC_CUT:
352 if (record->event.pressed) {
353 register_mods(mod_config(MOD_LCTL));
354 register_code(KC_X);
355 } else {
356 unregister_mods(mod_config(MOD_LCTL));
357 unregister_code(KC_X);
358 }
359 return false;
360 break;
361 case KC_UNDO:
362 if (record->event.pressed) {
363 register_mods(mod_config(MOD_LCTL));
364 register_code(KC_Z);
365 } else {
366 unregister_mods(mod_config(MOD_LCTL));
367 unregister_code(KC_Z);
368 }
369 return false;
370 }
371 return true;
372}
373
374#ifdef ENCODER_ENABLE
375
376void encoder_update_user(uint8_t index, bool clockwise) {
377 if (index == 0) {
378 if (clockwise) {
379 tap_code(KC_VOLU);
380 } else {
381 tap_code(KC_VOLD);
382 }
383 } else if (index == 1) {
384 if (clockwise) {
385 tap_code(KC_PGDOWN);
386 } else {
387 tap_code(KC_PGUP);
388 }
389 }
390}
391
392#endif
diff --git a/keyboards/sofle/keymaps/default/readme.md b/keyboards/sofle/keymaps/default/readme.md
new file mode 100644
index 000000000..6d6dea228
--- /dev/null
+++ b/keyboards/sofle/keymaps/default/readme.md
@@ -0,0 +1,19 @@
1![SofleKeyboard default keymap](https://github.com/josefadamcik/SofleKeyboard/raw/master/Images/soflekeyboard.png)
2![SofleKeyboard adjust layer](https://github.com/josefadamcik/SofleKeyboard/raw/master/Images/soflekeyboard_layout_adjust.png)
3
4
5# Default keymap for Sofle Keyboard
6
7Layout in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/76efb423a46cbbea75465cb468eef7ff) and [adjust layer](http://www.keyboard-layout-editor.com/#/gists/4bcf66f922cfd54da20ba04905d56bd4)
8
9
10Features:
11
12- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift)
13- Various modes, can be switched (using Adjust layer and the selected one is stored in EEPROM.
14- Modes for Qwerty and Colemak support
15- Modes for Mac vs Linux/Win support -> different order of modifiers and different action shortcuts on the "UPPER" layer (the red one in the image). Designed to simplify transtions when switching between operating systems often.
16- The OLED on master half shows selected mode and caps lock state and is rotated.
17- Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN.
18
19
diff --git a/keyboards/sofle/keymaps/default/rules.mk b/keyboards/sofle/keymaps/default/rules.mk
new file mode 100644
index 000000000..6da1df16f
--- /dev/null
+++ b/keyboards/sofle/keymaps/default/rules.mk
@@ -0,0 +1,5 @@
1
2OLED_DRIVER_ENABLE = yes
3ENCODER_ENABLE = yes
4CONSOLE_ENABLE = yes
5EXTRAKEY_ENABLE = yes
diff --git a/keyboards/sofle/readme.md b/keyboards/sofle/readme.md
new file mode 100644
index 000000000..27071e6f3
--- /dev/null
+++ b/keyboards/sofle/readme.md
@@ -0,0 +1,27 @@
1# Sofle Keyboard
2
3![SofleKeyboard version 1](https://raw.githubusercontent.com/josefadamcik/SofleKeyboard/master/Images/IMG_20200126_114622.jpg)
4
5Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards.
6
7More details about the keyboard on my blog: [Let me introduce you SofleKeyboard - 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)
8
9The current (temporary) build guide and a build log is available here: [SofleKeyboard build log/guide](https://josef-adamcik.cz/electronics/soflekeyboard-build-log-and-build-guide.html)
10
11* Keyboard Maintainer: [Josef Adamcik](https://josef-adamcik.cz) [Twitter:@josefadamcik](https://twitter.com/josefadamcik)
12* Hardware Supported: SofleKeyboard PCB, ProMicro
13* Hardware Availability: [PCB & Case Data](https://github.com/josefadamcik/SofleKeyboard)
14
15Make example for this keyboard (after setting up your build environment):
16
17 make sofle:default
18
19Flash the default keymap:
20
21 make sofle:default:avrdude
22
23Press reset button on he keyboard when asked.
24
25Disconnect the first half, connect the second one and repeat the process.
26
27See 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/rev1/config.h b/keyboards/sofle/rev1/config.h
new file mode 100644
index 000000000..232306e0b
--- /dev/null
+++ b/keyboards/sofle/rev1/config.h
@@ -0,0 +1,40 @@
1#pragma once
2
3/* USB Device descriptor parameter */
4#define VENDOR_ID 0xFC32
5#define PRODUCT_ID 0x0287
6#define DEVICE_VER 0x0001
7#define MANUFACTURER JosefAdamcik
8#define PRODUCT Sofle
9#define DESCRIPTION Sofle is 6×4+5keys+encoder column-staggered split keyboard.
10
11/* key matrix size */
12// Rows are doubled-up
13#define MATRIX_ROWS 10
14#define MATRIX_COLS 6
15
16// wiring of each half
17#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
18#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
19#define DIODE_DIRECTION COL2ROW
20
21#define TAPPING_TERM 100
22#define DEBOUNCE 5
23
24/* encoder support */
25#define ENCODERS_PAD_A { F5 }
26#define ENCODERS_PAD_B { F4 }
27#define ENCODERS_PAD_A_RIGHT { F4 }
28#define ENCODERS_PAD_B_RIGHT { F5 }
29#define ENCODER_RESOLUTION 2
30
31#define TAP_CODE_DELAY 10
32
33/* communication between sides */
34#define USE_SERIAL
35#define SERIAL_USE_MULTI_TRANSACTION
36#define SOFT_SERIAL_PIN D2
37
38#define NO_ACTION_MACRO
39#define NO_ACTION_FUNCTION
40
diff --git a/keyboards/sofle/rev1/info.json b/keyboards/sofle/rev1/info.json
new file mode 100644
index 000000000..0a495dd3b
--- /dev/null
+++ b/keyboards/sofle/rev1/info.json
@@ -0,0 +1,19 @@
1{
2 "keyboard_name": "Sofle",
3 "url": "https://github.com/josefadamcik/SofleKeyboard",
4 "maintainer": "Josef Adamcik <josef.adamcik@gmail.com>",
5 "width": 16.5,
6 "height": 5.25,
7 "layouts": {
8 "LAYOUT": {
9 "key_count": 60,
10 "layout": [
11 {"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},
12 {"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},
13 {"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},
14 {"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},
15 {"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}
16 ]
17 }
18 }
19}
diff --git a/keyboards/sofle/rev1/rev1.c b/keyboards/sofle/rev1/rev1.c
new file mode 100644
index 000000000..bbb014c4d
--- /dev/null
+++ b/keyboards/sofle/rev1/rev1.c
@@ -0,0 +1 @@
#include "sofle.h"
diff --git a/keyboards/sofle/rev1/rev1.h b/keyboards/sofle/rev1/rev1.h
new file mode 100644
index 000000000..6c0c4a89d
--- /dev/null
+++ b/keyboards/sofle/rev1/rev1.h
@@ -0,0 +1,23 @@
1#pragma once
2#include "quantum.h"
3
4#define LAYOUT( \
5 L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
6 L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
7 L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
8 L30, L31, L32, L33, L34, L35, L45, R40, R30, R31, R32, R33, R34, R35, \
9 L40, L41, L42, L43, L44, R41, R42, R43, R44, R45 \
10 ) \
11 { \
12 { L00, L01, L02, L03, L04, L05 }, \
13 { L10, L11, L12, L13, L14, L15 }, \
14 { L20, L21, L22, L23, L24, L25 }, \
15 { L30, L31, L32, L33, L34, L35 }, \
16 { L40, L41, L42, L43, L44, L45 }, \
17 { R05, R04, R03, R02, R01, R00 }, \
18 { R15, R14, R13, R12, R11, R10 }, \
19 { R25, R24, R23, R22, R21, R20 }, \
20 { R35, R34, R33, R32, R31, R30 }, \
21 { R45, R44, R43, R42, R41, R40 } \
22 }
23
diff --git a/keyboards/sofle/rev1/rules.mk b/keyboards/sofle/rev1/rules.mk
new file mode 100644
index 000000000..2ba231d86
--- /dev/null
+++ b/keyboards/sofle/rev1/rules.mk
@@ -0,0 +1,2 @@
1ENCODER_ENABLE = yes
2OLED_DRIVER_ENABLE = yes
diff --git a/keyboards/sofle/rules.mk b/keyboards/sofle/rules.mk
new file mode 100644
index 000000000..820061832
--- /dev/null
+++ b/keyboards/sofle/rules.mk
@@ -0,0 +1,4 @@
1MCU = atmega32u4
2BOOTLOADER = caterina
3SPLIT_KEYBOARD = yes
4DEFAULT_FOLDER = sofle/rev1
diff --git a/keyboards/sofle/sofle.c b/keyboards/sofle/sofle.c
new file mode 100644
index 000000000..bbb014c4d
--- /dev/null
+++ b/keyboards/sofle/sofle.c
@@ -0,0 +1 @@
#include "sofle.h"
diff --git a/keyboards/sofle/sofle.h b/keyboards/sofle/sofle.h
new file mode 100644
index 000000000..67bd529a1
--- /dev/null
+++ b/keyboards/sofle/sofle.h
@@ -0,0 +1,5 @@
1#pragma once
2
3#ifdef KEYBOARD_sofle_rev1
4 #include "rev1.h"
5#endif