aboutsummaryrefslogtreecommitdiff
path: root/keyboards/for_science
diff options
context:
space:
mode:
authorJonathan Dayton <jdayton3@users.noreply.github.com>2020-08-26 11:55:18 -0500
committerGitHub <noreply@github.com>2020-08-26 09:55:18 -0700
commit2f9eb4cd22777e369cf220594d2269d6cfa8fcb6 (patch)
tree0aec0dd89814027e147cf5669edb2b50587d49db /keyboards/for_science
parentbad662b830bc5d93e244aec73d3115a65d7ccf17 (diff)
downloadqmk_firmware-2f9eb4cd22777e369cf220594d2269d6cfa8fcb6.tar.gz
qmk_firmware-2f9eb4cd22777e369cf220594d2269d6cfa8fcb6.zip
[Keyboard] For Science (#9607)
* Add a compiling layout based on minidox * Add the correct pins * Add old for science code * Update to 2020 standards * Get the keymap working * update config * Update pinout * Fix pins * Make requested changes * Add info.json for configurator * for science - PR comments * Apply suggestions from code review
Diffstat (limited to 'keyboards/for_science')
-rw-r--r--keyboards/for_science/config.h78
-rw-r--r--keyboards/for_science/for_science.c16
-rw-r--r--keyboards/for_science/for_science.h38
-rw-r--r--keyboards/for_science/info.json197
-rw-r--r--keyboards/for_science/keymaps/default/keymap.c113
-rw-r--r--keyboards/for_science/keymaps/default/readme.md1
-rw-r--r--keyboards/for_science/readme.md18
-rw-r--r--keyboards/for_science/rules.mk21
8 files changed, 482 insertions, 0 deletions
diff --git a/keyboards/for_science/config.h b/keyboards/for_science/config.h
new file mode 100644
index 000000000..8c9c49d16
--- /dev/null
+++ b/keyboards/for_science/config.h
@@ -0,0 +1,78 @@
1/*
2Copyright 2017 Paul James (paul@peej.co.uk)
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14
15#pragma once
16
17#include "config_common.h"
18
19/* USB Device descriptor parameter */
20#define VENDOR_ID 0xFEED
21#define PRODUCT_ID 0xF22C
22#define DEVICE_VER 0x0001
23#define MANUFACTURER Peej
24#define PRODUCT For Science
25
26/* key matrix size */
27// Rows are doubled-up
28#define MATRIX_ROWS 10
29#define MATRIX_COLS 5
30
31/*
32 * Keyboard Matrix Assignments
33 *
34 * Change this to how you wired your keyboard
35 * COLS: AVR pins used for columns, left to right
36 * ROWS: AVR pins used for rows, top to bottom
37 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
38 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
39 *
40*/
41//#define MATRIX_ROW_PINS { F6, B1, B3, B2, B6 }
42#define MATRIX_ROW_PINS { D4, D7, E6, B4, B5 }
43//#define MATRIX_COL_PINS { D4, C6, D7, E6, B4 }
44#define MATRIX_COL_PINS { F6, F7, B1, B3, B2 }
45#define UNUSED_PINS
46
47//#define USE_I2C
48#define SOFT_SERIAL_PIN D0
49
50/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
51#define DIODE_DIRECTION ROW2COL
52
53/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
54#define DEBOUNCE 5
55
56//#define MASTER_RIGHT
57
58/* key combination for magic key command */
59/* defined by default; to change, uncomment and set to the combination you want */
60// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
61
62/*
63 * Feature disable options
64 * These options are also useful to firmware size reduction.
65 */
66
67/* disable debug print */
68//#define NO_DEBUG
69
70/* disable print */
71//#define NO_PRINT
72
73/* disable action features */
74//#define NO_ACTION_LAYER
75//#define NO_ACTION_TAPPING
76//#define NO_ACTION_ONESHOT
77//#define NO_ACTION_MACRO
78//#define NO_ACTION_FUNCTION
diff --git a/keyboards/for_science/for_science.c b/keyboards/for_science/for_science.c
new file mode 100644
index 000000000..32956ca67
--- /dev/null
+++ b/keyboards/for_science/for_science.c
@@ -0,0 +1,16 @@
1/* Copyright 2017 Paul James (paul@peej.co.uk)
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 "for_science.h"
diff --git a/keyboards/for_science/for_science.h b/keyboards/for_science/for_science.h
new file mode 100644
index 000000000..09362a528
--- /dev/null
+++ b/keyboards/for_science/for_science.h
@@ -0,0 +1,38 @@
1/* Copyright 2017 Paul James (paul@peej.co.uk)
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 "quantum.h"
19
20#define LAYOUT_split_4x5_3( \
21 L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
22 L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
23 L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
24 L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \
25 LT1, LT2, LT3, RT1, RT2, RT3 \
26) \
27{ \
28 { L00, L01, L02, L03, L04 }, \
29 { L10, L11, L12, L13, L14 }, \
30 { L20, L21, L22, L23, L24 }, \
31 { L30, L31, L32, L33, L34 }, \
32 { KC_NO, KC_NO, LT1, LT2, LT3 }, \
33 { R04, R03, R02, R01, R00 }, \
34 { R14, R13, R12, R11, R10 }, \
35 { R24, R23, R22, R21, R20 }, \
36 { R34, R33, R32, R31, R30 }, \
37 { KC_NO, KC_NO, RT3, RT2, RT1 } \
38}
diff --git a/keyboards/for_science/info.json b/keyboards/for_science/info.json
new file mode 100644
index 000000000..de92f0eca
--- /dev/null
+++ b/keyboards/for_science/info.json
@@ -0,0 +1,197 @@
1{
2 "keyboard_name": "For Science",
3 "url": "https://github.com/peej/for-science-keyboard",
4 "maintainer": "qmk",
5 "width": 11.25,
6 "height": 5,
7 "layouts": {
8 "LAYOUT_split_4x5_3": {
9 "layout": [
10 {
11 "x": 0,
12 "y": 0
13 },
14 {
15 "x": 1,
16 "y": 0
17 },
18 {
19 "x": 2,
20 "y": 0
21 },
22 {
23 "x": 3,
24 "y": 0
25 },
26 {
27 "x": 4,
28 "y": 0
29 },
30 {
31 "x": 6.25,
32 "y": 0
33 },
34 {
35 "x": 7.25,
36 "y": 0
37 },
38 {
39 "x": 8.25,
40 "y": 0
41 },
42 {
43 "x": 9.25,
44 "y": 0
45 },
46 {
47 "x": 10.25,
48 "y": 0
49 },
50 {
51 "x": 0,
52 "y": 1
53 },
54 {
55 "x": 1,
56 "y": 1
57 },
58 {
59 "x": 2,
60 "y": 1
61 },
62 {
63 "x": 3,
64 "y": 1
65 },
66 {
67 "x": 4,
68 "y": 1
69 },
70 {
71 "x": 6.25,
72 "y": 1
73 },
74 {
75 "x": 7.25,
76 "y": 1
77 },
78 {
79 "x": 8.25,
80 "y": 1
81 },
82 {
83 "x": 9.25,
84 "y": 1
85 },
86 {
87 "x": 10.25,
88 "y": 1
89 },
90 {
91 "x": 0,
92 "y": 2
93 },
94 {
95 "x": 1,
96 "y": 2
97 },
98 {
99 "x": 2,
100 "y": 2
101 },
102 {
103 "x": 3,
104 "y": 2
105 },
106 {
107 "x": 4,
108 "y": 2
109 },
110 {
111 "x": 6.25,
112 "y": 2
113 },
114 {
115 "x": 7.25,
116 "y": 2
117 },
118 {
119 "x": 8.25,
120 "y": 2
121 },
122 {
123 "x": 9.25,
124 "y": 2
125 },
126 {
127 "x": 10.25,
128 "y": 2
129 },
130 {
131 "x": 0,
132 "y": 3
133 },
134 {
135 "x": 1,
136 "y": 3
137 },
138 {
139 "x": 2,
140 "y": 3
141 },
142 {
143 "x": 3,
144 "y": 3
145 },
146 {
147 "x": 4,
148 "y": 3
149 },
150 {
151 "x": 6.25,
152 "y": 3
153 },
154 {
155 "x": 7.25,
156 "y": 3
157 },
158 {
159 "x": 8.25,
160 "y": 3
161 },
162 {
163 "x": 9.25,
164 "y": 3
165 },
166 {
167 "x": 10.25,
168 "y": 3
169 },
170 {
171 "x": 2,
172 "y": 4
173 },
174 {
175 "x": 3,
176 "y": 4
177 },
178 {
179 "x": 4,
180 "y": 4
181 },
182 {
183 "x": 6.25,
184 "y": 4
185 },
186 {
187 "x": 7.25,
188 "y": 4
189 },
190 {
191 "x": 8.25,
192 "y": 4
193 }
194 ]
195 }
196 }
197}
diff --git a/keyboards/for_science/keymaps/default/keymap.c b/keyboards/for_science/keymaps/default/keymap.c
new file mode 100644
index 000000000..918f60f4b
--- /dev/null
+++ b/keyboards/for_science/keymaps/default/keymap.c
@@ -0,0 +1,113 @@
1/* Copyright 2017 Paul James (paul@peej.co.uk)
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 QMK_KEYBOARD_H
17
18// Defines names for use in layer keycodes and the keymap
19enum layer_names {
20 _BASE,
21 _LAYER,
22 _MOD_LAYER,
23 _FUNCT
24};
25
26#define SFT_A SFT_T(KC_A)
27#define SFT_F1 SFT_T(KC_F1)
28#define SFT_Z SFT_T(KC_Z)
29#define SFT_F6 SFT_T(KC_F6)
30#define LAY_X LT(_LAYER, KC_X)
31#define LAY_F7 LT(_LAYER, KC_F7)
32#define LAY_SLS LT(_LAYER, KC_SLSH)
33#define LAY_SPC LT(_LAYER, KC_SPACE)
34
35#define LOCK LGUI(KC_L)
36#define MAC_LCK LGUI(LCTL(KC_Q))
37
38#define LAYER MO(_LAYER)
39#define FUNCT MO(_FUNCT)
40
41const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42
43/*
44 * ,---------------------------------------- ----------------------------------------.
45 * | Tab | Esc | ( | { | [ | | ] | } | ) | ' | BkSp |
46 * | ~ | ` | < | _ | - | | + | = | > | \ | Del |
47 * |-------+-------+-------+-------+-------+ |-------+-------+-------+-------+-------|
48 * | Q | W | E | R | T | | Y | U | I | O | P |
49 * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
50 * |-------+-------+-------+-------+-------+ |-------+-------+-------+-------+-------|
51 * | A | S | D | F | G | | H | J | K | L | Enter |
52 * | F1 | F2 F3 | F4 | F5 | | PgUp | Home | Up | End | ; |
53 * |-Shift-+-------+-------+-------+-------+ |-------+-------+-------+-------+-------|
54 * | Z | X | C | V | B | | N | M | , | . | / |
55 * | F6 | F7 | F8 | F9 | F10 | | PgDn | Left | Down | Right | |
56 * `-Shift---Layer-+-------+-------+-------+ |-------+-------+-------+---------Layer-'
57 * | Ctrl | Gui | Alt | | Space | Layer | Shift |
58 * | | | | | Funct | | |
59 * `------------------------ `-Layer-----------------'
60 */
61
62[_BASE] = LAYOUT_split_4x5_3(
63 KC_TAB, KC_ESC, KC_LPRN, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, KC_RPRN, KC_QUOT, KC_BSPC,
64 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
65 SFT_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
66 SFT_Z, LAY_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LAY_SLS,
67 KC_LCTL, KC_LGUI, KC_LALT, LAY_SPC, LAYER, KC_RSFT
68),
69
70[_LAYER] = LAYOUT_split_4x5_3(
71 KC_TILD, KC_GRV, KC_LABK, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_RABK, KC_BSLS, KC_DEL,
72 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
73 SFT_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_SCLN,
74 SFT_F6, LAY_F7, KC_F8, KC_F9, KC_F10, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______,
75 _______, _______, _______, FUNCT, _______, _______
76),
77
78[_MOD_LAYER] = LAYOUT_split_4x5_3(
79 KC_TILD, _______, _______, _______, _______, KC_Q, _______, _______, _______, _______,
80 KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______,
81 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
82 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
83 _______, _______, _______, _______, _______, _______
84),
85
86[_FUNCT] = LAYOUT_split_4x5_3(
87 RESET, _______, _______, _______, LOCK, MAC_LCK, _______, _______, _______, MAGIC_SWAP_LALT_LGUI,
88 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
89 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
90 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
91 _______, _______, _______, _______, _______, _______
92),
93
94};
95
96bool process_record_user(uint16_t keycode, keyrecord_t *record) {
97 if (get_mods() & MOD_MASK_CAG) {
98 if (record->event.pressed) {
99 layer_on(_MOD_LAYER);
100 } else {
101 layer_off(_MOD_LAYER);
102 }
103 }
104
105 if (record->event.pressed) {
106 if (keycode == KC_BSPC && (get_mods() & MOD_MASK_ALT)) {
107 tap_code(KC_DEL);
108 return false;
109 }
110 }
111
112 return true;
113};
diff --git a/keyboards/for_science/keymaps/default/readme.md b/keyboards/for_science/keymaps/default/readme.md
new file mode 100644
index 000000000..a5cb3ac09
--- /dev/null
+++ b/keyboards/for_science/keymaps/default/readme.md
@@ -0,0 +1 @@
# Default layout for For Science
diff --git a/keyboards/for_science/readme.md b/keyboards/for_science/readme.md
new file mode 100644
index 000000000..8fa399a10
--- /dev/null
+++ b/keyboards/for_science/readme.md
@@ -0,0 +1,18 @@
1# For Science
2
3![for_science](https://raw.githubusercontent.com/peej/for-science-keyboard/master/pcb.png)
4
5A split ergo 4x5 keyboard with 3 thumb keys where each half is smaller than the 100x100mm cheap PCB production size.
6Designed to be easy to build, it only supports serial communication over a TRRS cable and no LED support.
7The PCB is reversible, meaning that you use the same PCB for both the left and right halves and thus need two PCBs to create a full keyboard.
8
9* Keyboard Maintainer: [Peej](https://github.com/peej)
10* Hardware Supported: Pro Micro
11* Hardware Availability: [Github](https://github.com/peej/for-science-keyboard)
12
13Make example for this keyboard (after setting up your build environment):
14
15 make for_science:default
16
17See 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.
18Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/for_science/rules.mk b/keyboards/for_science/rules.mk
new file mode 100644
index 000000000..b8e091ef6
--- /dev/null
+++ b/keyboards/for_science/rules.mk
@@ -0,0 +1,21 @@
1# MCU name
2MCU = atmega32u4
3
4# Bootloader selection
5BOOTLOADER = caterina
6
7# Build Options
8# change yes to no to disable
9BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
10MOUSEKEY_ENABLE = yes # Mouse keys
11EXTRAKEY_ENABLE = yes # Audio control and System control
12CONSOLE_ENABLE = yes # Console for debug
13COMMAND_ENABLE = yes # Commands for debug and configuration
14# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
15SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
16# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
17NKRO_ENABLE = no # USB Nkey Rollover
18BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
19RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
20BLUETOOTH_ENABLE = no # Enable Bluetooth
21AUDIO_ENABLE = no # Audio output