summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilip Paryż <paryz.1i12@op.pl>2020-10-25 01:54:38 +0200
committerGitHub <noreply@github.com>2020-10-24 16:54:38 -0700
commitaf455a8368dc564df51f9657b04932956ccf580b (patch)
treed2440dc240e7c5da18d1c3139abd836ae7136a02
parentac37a94e49a39a014b3df829442cca84bf3f2071 (diff)
downloadqmk_firmware-af455a8368dc564df51f9657b04932956ccf580b.tar.gz
qmk_firmware-af455a8368dc564df51f9657b04932956ccf580b.zip
[Keyboard] Freoduo - handwired split ortho keyboard. (#10724)
* Freoduo v1 - with fixes from @fauxpark and rebased to master branch of QMK. * One more suggested fix from @fauxpark * Fixes after @drashna review.
-rw-r--r--keyboards/handwired/freoduo/config.h52
-rw-r--r--keyboards/handwired/freoduo/freoduo.c1
-rw-r--r--keyboards/handwired/freoduo/freoduo.h23
-rw-r--r--keyboards/handwired/freoduo/info.json72
-rw-r--r--keyboards/handwired/freoduo/keymaps/default/config.h9
-rw-r--r--keyboards/handwired/freoduo/keymaps/default/keymap.c189
-rw-r--r--keyboards/handwired/freoduo/keymaps/default/rules.mk2
-rw-r--r--keyboards/handwired/freoduo/readme.md12
-rw-r--r--keyboards/handwired/freoduo/rules.mk24
9 files changed, 384 insertions, 0 deletions
diff --git a/keyboards/handwired/freoduo/config.h b/keyboards/handwired/freoduo/config.h
new file mode 100644
index 0000000000..c65da93aca
--- /dev/null
+++ b/keyboards/handwired/freoduo/config.h
@@ -0,0 +1,52 @@
+/*
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xB141
+#define PRODUCT_ID 0x0602 //F is 6th in alphabet, 02 as in DUO
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ParyzFilip
+#define PRODUCT Freoduo
+
+/* key matrix size */
+/* rows are doubled-up */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 6
+
+/* wiring of each half */
+#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { B2, B6, F6, B3, B1, F7 }
+#define EE_HANDS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 3
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+#define RGBLIGHT_HUE_STEP 16
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/handwired/freoduo/freoduo.c b/keyboards/handwired/freoduo/freoduo.c
new file mode 100644
index 0000000000..7415e62607
--- /dev/null
+++ b/keyboards/handwired/freoduo/freoduo.c
@@ -0,0 +1 @@
+#include "freoduo.h"
diff --git a/keyboards/handwired/freoduo/freoduo.h b/keyboards/handwired/freoduo/freoduo.h
new file mode 100644
index 0000000000..453d1d1cf9
--- /dev/null
+++ b/keyboards/handwired/freoduo/freoduo.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, R41, R42, R43, R44, R45 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { L40, L41, L42, L43, L44, KC_NO}, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { KC_NO, R41, R42, R43, R44, R45 } \
+ }
diff --git a/keyboards/handwired/freoduo/info.json b/keyboards/handwired/freoduo/info.json
new file mode 100644
index 0000000000..5c2d7e1739
--- /dev/null
+++ b/keyboards/handwired/freoduo/info.json
@@ -0,0 +1,72 @@
+{
+"keyboard_name": "Freoduo",
+"manufacturer": "Filip Paryz",
+"url": "https://github.com/FilipParyz",
+"maintainer": "https://github.com/FilipParyz",
+"width": 12,
+"height": 5,
+"layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 7, "y": 0},
+ {"x": 8, "y": 0},
+ {"x": 9, "y": 0},
+ {"x": 10, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+ {"x": 3, "y": 1},
+ {"x": 4, "y": 1},
+ {"x": 5, "y": 1},
+ {"x": 7, "y": 1},
+ {"x": 8, "y": 1},
+ {"x": 9, "y": 1},
+ {"x": 10, "y": 1},
+ {"x": 11, "y": 1},
+ {"x": 12, "y": 1},
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2},
+ {"x": 3, "y": 2},
+ {"x": 4, "y": 2},
+ {"x": 5, "y": 2},
+ {"x": 7, "y": 2},
+ {"x": 8, "y": 2},
+ {"x": 9, "y": 2},
+ {"x": 10, "y": 2},
+ {"x": 11, "y": 2},
+ {"x": 12, "y": 2},
+ {"x": 0, "y": 3},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+ {"x": 7, "y": 3},
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+ {"x": 0, "y": 4},
+ {"x": 1, "y": 4},
+ {"x": 2, "y": 4},
+ {"x": 3, "y": 4},
+ {"x": 4, "y": 4, "w": 2},
+ {"x": 7, "y": 4, "w": 2},
+ {"x": 9, "y": 4},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/handwired/freoduo/keymaps/default/config.h b/keyboards/handwired/freoduo/keymaps/default/config.h
new file mode 100644
index 0000000000..f28e4073e7
--- /dev/null
+++ b/keyboards/handwired/freoduo/keymaps/default/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#define GRAVE_ESC_CTRL_OVERRIDE
+#define RGBLED_NUM 18
+#define RGBLIGHT_SPLIT
+#define RGBLED_SPLIT { 9, 9 }
+// Switch RGB sides with LED MAP.
+#define RGBLIGHT_LED_MAP { 8, 7, 6, 5, 4, 3, 2, 1, 0, 17, 16, 15, 14, 13, 12, 11, 10, 9}
+#define RGBLIGHT_LAYERS
diff --git a/keyboards/handwired/freoduo/keymaps/default/keymap.c b/keyboards/handwired/freoduo/keymaps/default/keymap.c
new file mode 100644
index 0000000000..16eeed13fa
--- /dev/null
+++ b/keyboards/handwired/freoduo/keymaps/default/keymap.c
@@ -0,0 +1,189 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+};
+
+// Light all LEDs red when caps lock is active. Hard to ignore!
+const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0, RGBLED_NUM, HSV_RED} // Light all LEDs, starting with LED 0
+);
+// Light all LEDs in green when keyboard layer 1 is active
+const rgblight_segment_t PROGMEM layer_lower[] = RGBLIGHT_LAYER_SEGMENTS(
+ {6, 6, HSV_GREEN}
+);
+// Light all LEDs in blue when keyboard layer 2 is active
+const rgblight_segment_t PROGMEM layer_raise[] = RGBLIGHT_LAYER_SEGMENTS(
+ {6, 6, HSV_MAGENTA}
+);
+// Light all LEDs in yellow when keyboard layer 3 is active
+const rgblight_segment_t PROGMEM layer_adjust[] = RGBLIGHT_LAYER_SEGMENTS(
+ {6, 6, HSV_ORANGE}
+);
+
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ my_capslock_layer,
+ layer_lower,
+ layer_raise,
+ layer_adjust
+);
+
+void keyboard_post_init_user(void) {
+ // Enable the LED layers
+ rgblight_layers = my_rgb_layers;
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // Both layers will light up if both kb layers are active
+ rgblight_set_layer_state(1, layer_state_cmp(state, 1));
+ rgblight_set_layer_state(2, layer_state_cmp(state, 2));
+ rgblight_set_layer_state(3, layer_state_cmp(state, 3));
+ return state;
+}
+
+bool led_update_user(led_t led_state) {
+ rgblight_set_layer_state(0, led_state.caps_lock);
+ return true;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,-----------------------------------------------------------------------------------.
+ * |` ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Enter|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps | A | S | D | F | G | H | J | K | L | ; | " |
+ * | LOWER| | | | | | | | | | | RAISE|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | Up | ? |
+ * | | | | | | | | | | | | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl |ADJUST| Alt | GUI | Space | Backspace | Alt | Left |Down |Right |
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT,
+ LT(_LOWER,KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_RAISE, KC_QUOT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, RSFT_T(KC_SLSH),
+ KC_LCTL, ADJUST, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+/* LOWER
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | Up | | | | | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | Left | Down | Right| | | |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT(
+ 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_UP, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_NUHS, KC_NUBS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* RAISE
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | | | | | | | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT(
+ 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_DEL, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, S(KC_NUHS),S(KC_NUBS),_______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* ADJUST (LOWER + RAISE)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Reset|RGB Tg|RGB Md| | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |Hue Dn|Hue Up| | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Sat Dn|Sat Up| | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Val Dn|Val Up| | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ RESET , RGB_TOG, RGB_MOD, VLK_TOG, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/handwired/freoduo/keymaps/default/rules.mk b/keyboards/handwired/freoduo/keymaps/default/rules.mk
new file mode 100644
index 0000000000..f4abb12cd1
--- /dev/null
+++ b/keyboards/handwired/freoduo/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/handwired/freoduo/readme.md b/keyboards/handwired/freoduo/readme.md
new file mode 100644
index 0000000000..7fa8af68cd
--- /dev/null
+++ b/keyboards/handwired/freoduo/readme.md
@@ -0,0 +1,12 @@
+# Freoduo
+
+A split 60%, 5x12 ortholinear keyboard handwired by Filip Paryż.
+
+* Keyboard Maintainer: [Filip Paryz](https://github.com/FilipParyz)
+* Hardware Supported: Pro Micro, ATmega32u4
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/freoduo:default
+
+See 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). \ No newline at end of file
diff --git a/keyboards/handwired/freoduo/rules.mk b/keyboards/handwired/freoduo/rules.mk
new file mode 100644
index 0000000000..e3da3753e4
--- /dev/null
+++ b/keyboards/handwired/freoduo/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+VELOCIKEY_ENABLE = yes
+SPLIT_KEYBOARD = yes \ No newline at end of file