aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBranden Byers <branden@brandenbyers.com>2019-01-15 14:06:35 -0800
committerDrashna Jaelre <drashna@live.com>2019-01-15 14:06:35 -0800
commit57fbf072f145bcf560c812a7976ba0f4f702f946 (patch)
treeffd44617d8bc13971bc1db0199865a264ed74cac
parentc768ffeb33e8635f1ef6fa46928a5b992ee8aae9 (diff)
downloadqmk_firmware-57fbf072f145bcf560c812a7976ba0f4f702f946.tar.gz
qmk_firmware-57fbf072f145bcf560c812a7976ba0f4f702f946.zip
[Keyboard] Add cKeys Handwire 101 Keyboard (#4848)
* Update general README * Add handwire_101 * Update keyboards/ckeys/handwire_101/keymaps/default/keymap.c Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Use Pragma once Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/config.h Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/config.h Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/handwire_101.h Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/handwire_101.h Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/keymaps/default/keymap.c Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/keymaps/default/keymap.c Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/keymaps/default/keymap.c Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Update keyboards/ckeys/handwire_101/keymaps/default/keymap.c Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Change KEYMAP to LAYOUT and remove endif * Apply suggestions from code review Co-Authored-By: brandenbyers <branden@brandenbyers.com> * Move layers to enum and remove KC_TRNS
-rwxr-xr-xkeyboards/ckeys/handwire_101/config.h197
-rwxr-xr-xkeyboards/ckeys/handwire_101/handwire_101.c28
-rwxr-xr-xkeyboards/ckeys/handwire_101/handwire_101.h21
-rw-r--r--keyboards/ckeys/handwire_101/info.json13
-rwxr-xr-xkeyboards/ckeys/handwire_101/keymaps/default/config.h3
-rwxr-xr-xkeyboards/ckeys/handwire_101/keymaps/default/keymap.c178
-rwxr-xr-xkeyboards/ckeys/handwire_101/keymaps/default/readme.md1
-rwxr-xr-xkeyboards/ckeys/handwire_101/readme.md163
-rwxr-xr-xkeyboards/ckeys/handwire_101/rules.mk69
-rw-r--r--keyboards/ckeys/readme.md11
10 files changed, 679 insertions, 5 deletions
diff --git a/keyboards/ckeys/handwire_101/config.h b/keyboards/ckeys/handwire_101/config.h
new file mode 100755
index 000000000..7689c4703
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/config.h
@@ -0,0 +1,197 @@
1/*
2Copyright 2012 Jun Wako <wakojun@gmail.com>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0xFEED
24#define PRODUCT_ID 0x6060
25#define DEVICE_VER 0x0001
26#define MANUFACTURER ckeys_handwire
27#define PRODUCT ckeys_handwire
28#define DESCRIPTION 4x4 handwire workshop board
29
30/* key matrix size */
31#define MATRIX_ROWS 4
32#define MATRIX_COLS 4
33
34/*
35 * Keyboard Matrix Assignments
36 *
37 * Change this to how you wired your keyboard
38 * COLS: AVR pins used for columns, left to right
39 * ROWS: AVR pins used for rows, top to bottom
40 * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
41 * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
42 *
43*/
44#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
45#define MATRIX_COL_PINS { D4, C6, D7, E6 }
46
47/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
48#define DIODE_DIRECTION COL2ROW
49
50//#define BACKLIGHT_PIN B7
51// #define BACKLIGHT_BREATHING
52//#define BACKLIGHT_LEVELS 3
53
54
55/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
56#define DEBOUNCING_DELAY 5
57
58/* define if matrix has ghost (lacks anti-ghosting diodes) */
59//#define MATRIX_HAS_GHOST
60
61/* number of backlight levels */
62
63/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
64#define LOCKING_SUPPORT_ENABLE
65/* Locking resynchronize hack */
66#define LOCKING_RESYNC_ENABLE
67
68/*
69 * MIDI options
70 */
71
72/* Prevent use of disabled MIDI features in the keymap */
73//#define MIDI_ENABLE_STRICT 1
74
75/* enable basic MIDI features:
76 - MIDI notes can be sent when in Music mode is on
77*/
78//#define MIDI_BASIC
79
80/* enable advanced MIDI features:
81 - MIDI notes can be added to the keymap
82 - Octave shift and transpose
83 - Virtual sustain, portamento, and modulation wheel
84 - etc.
85*/
86#define MIDI_ADVANCED
87
88/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
89//#define MIDI_TONE_KEYCODE_OCTAVES 1
90
91/*
92 * Force NKRO
93 *
94 * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
95 * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
96 * makefile for this to work.)
97 *
98 * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
99 * until the next keyboard reset.
100 *
101 * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
102 * fully operational during normal computer usage.
103 *
104 * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
105 * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
106 * bootmagic, NKRO mode will always be enabled until it is toggled again during a
107 * power-up.
108 *
109 */
110//#define FORCE_NKRO
111
112/*
113 * Magic Key Options
114 *
115 * Magic keys are hotkey commands that allow control over firmware functions of
116 * the keyboard. They are best used in combination with the HID Listen program,
117 * found here: https://www.pjrc.com/teensy/hid_listen.html
118 *
119 * The options below allow the magic key functionality to be changed. This is
120 * useful if your keyboard/keypad is missing keys and you want magic key support.
121 *
122 */
123
124/* key combination for magic key command */
125#define IS_COMMAND() ( \
126 keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
127)
128
129/* control how magic key switches layers */
130//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
131//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
132//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
133
134/* override magic key keymap */
135//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
136//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
137//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
138//#define MAGIC_KEY_HELP1 H
139//#define MAGIC_KEY_HELP2 SLASH
140//#define MAGIC_KEY_DEBUG D
141//#define MAGIC_KEY_DEBUG_MATRIX X
142//#define MAGIC_KEY_DEBUG_KBD K
143//#define MAGIC_KEY_DEBUG_MOUSE M
144//#define MAGIC_KEY_VERSION V
145//#define MAGIC_KEY_STATUS S
146//#define MAGIC_KEY_CONSOLE C
147//#define MAGIC_KEY_LAYER0_ALT1 ESC
148//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
149//#define MAGIC_KEY_LAYER0 0
150//#define MAGIC_KEY_LAYER1 1
151//#define MAGIC_KEY_LAYER2 2
152//#define MAGIC_KEY_LAYER3 3
153//#define MAGIC_KEY_LAYER4 4
154//#define MAGIC_KEY_LAYER5 5
155//#define MAGIC_KEY_LAYER6 6
156//#define MAGIC_KEY_LAYER7 7
157//#define MAGIC_KEY_LAYER8 8
158//#define MAGIC_KEY_LAYER9 9
159//#define MAGIC_KEY_BOOTLOADER PAUSE
160//#define MAGIC_KEY_LOCK CAPS
161//#define MAGIC_KEY_EEPROM E
162//#define MAGIC_KEY_NKRO N
163//#define MAGIC_KEY_SLEEP_LED Z
164
165// Audio Click
166#define AUDIO_CLICKY
167
168// Music Mode Polyphony
169// NOTE: Must change polyphony_rate to a number higher than 0 in voices.c
170#define AUDIO_VOICES
171#define PITCH_STANDARD_A 880.0f
172
173// Mouse keys
174#define MOUSEKEY_DELAY 0
175#define MOUSEKEY_INTERVAL 20
176#define MOUSEKEY_MAX_SPEED 2
177#define MOUSEKEY_TIME_TO_MAX 5
178#define MOUSEKEY_WHEEL_DELAY 0
179
180/*
181 * Feature disable options
182 * These options are also useful to firmware size reduction.
183 */
184
185/* disable debug print */
186//#define NO_DEBUG
187
188/* disable print */
189//#define NO_PRINT
190
191/* disable action features */
192//#define NO_ACTION_LAYER
193//#define NO_ACTION_TAPPING
194//#define NO_ACTION_ONESHOT
195//#define NO_ACTION_MACRO
196//#define NO_ACTION_FUNCTION
197
diff --git a/keyboards/ckeys/handwire_101/handwire_101.c b/keyboards/ckeys/handwire_101/handwire_101.c
new file mode 100755
index 000000000..a6ff8f0e3
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/handwire_101.c
@@ -0,0 +1,28 @@
1#include "handwire_101.h"
2
3void matrix_init_kb(void) {
4 // put your keyboard start-up code here
5 // runs once when the firmware starts up
6 // Turn status LED on
7 //DDRD |= (1<<6);
8 //PORTD |= (1<<6);
9
10 matrix_init_user();
11}
12
13void matrix_scan_kb(void) {
14 // put your looping keyboard code here
15 // runs every cycle (a lot)
16 matrix_scan_user();
17}
18
19bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
20 // put your per-action keyboard code here
21 // runs for every action, just before processing by the firmware
22 return process_record_user(keycode, record);
23}
24
25void led_set_kb(uint8_t usb_led) {
26 // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
27 led_set_user(usb_led);
28}
diff --git a/keyboards/ckeys/handwire_101/handwire_101.h b/keyboards/ckeys/handwire_101/handwire_101.h
new file mode 100755
index 000000000..0f0309c32
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/handwire_101.h
@@ -0,0 +1,21 @@
1#pragma once
2
3#include "quantum.h"
4
5// This a shortcut to help you visually see your layout.
6// The following is an example using the Planck MIT layout
7// The first section contains all of the arguements
8// The second converts the arguments into a two-dimensional array
9#define LAYOUT( \
10 k00, k01, k02, k03, \
11 k10, k11, k12, k13, \
12 k20, k21, k22, k23, \
13 k30, k31, k32, k33 \
14) \
15{ \
16 { k00, k01, k02, k03 }, \
17 { k10, k11, k12, k13 }, \
18 { k20, k21, k22, k23 }, \
19 { k30, k31, k32, k33 } \
20}
21
diff --git a/keyboards/ckeys/handwire_101/info.json b/keyboards/ckeys/handwire_101/info.json
new file mode 100644
index 000000000..dfe6c4830
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/info.json
@@ -0,0 +1,13 @@
1{
2 "keyboard_name": "cKeys Handwire 101",
3 "url": "https://ckeys.org/slides/handwire/",
4 "maintainer": "brandenbyers",
5 "width": 4,
6 "height": 4,
7 "layouts": {
8 "LAYOUT_ortho_4x4": {
9 "key_count": 16,
10 "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}]
11 }
12 }
13}
diff --git a/keyboards/ckeys/handwire_101/keymaps/default/config.h b/keyboards/ckeys/handwire_101/keymaps/default/config.h
new file mode 100755
index 000000000..9935accb0
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/keymaps/default/config.h
@@ -0,0 +1,3 @@
1#pragma once
2
3// Add overrides here
diff --git a/keyboards/ckeys/handwire_101/keymaps/default/keymap.c b/keyboards/ckeys/handwire_101/keymaps/default/keymap.c
new file mode 100755
index 000000000..383b3355d
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/keymaps/default/keymap.c
@@ -0,0 +1,178 @@
1#include QMK_KEYBOARD_H
2
3enum layers {
4 _BASE, // base layer
5 _LAYERS, // layer of all layers
6 _MUSIC, // music mode
7 _MUSIC_4_LIFE, // music mode until unplugged
8 _MOUSE, // mousekeys
9 _TERMINAL, // terminal
10 _ADMIN // admin duties
11};
12
13enum custom_keycodes {
14 TERM_ABOUT = SAFE_RANGE,
15 TERM_PRINT,
16 TERM_FLUSH,
17 TERM_HELP,
18 CKEYS_ABOUT,
19};
20
21extern keymap_config_t keymap_config;
22
23const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
24 /* BASE (numpad)
25 * ,-----------------------.
26 * | 7 | 8 | 9 | / | <-- Hold for LAYERS
27 * |-----+-----+-----+-----|
28 * | 4 | 5 | 6 | * |
29 * |-----+-----+-----+-----|
30 * | 1 | 2 | 3 | - |
31 * |-----+-----+-----+-----|
32 * | 0 | . | = | + |
33 * `---------------------- '
34 */
35 [_BASE] = LAYOUT(
36 KC_KP_7, KC_KP_8, KC_KP_9, LT(MO(_LAYERS), KC_PSLS), \
37 KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST, \
38 KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, \
39 KC_KP_0, KC_KP_DOT, KC_KP_EQUAL, KC_PPLS \
40 ),
41 /* LAYERS
42 * ,---------------------------.
43 * | MUSIC | | | X |
44 * |---------+-----+-----+-----|
45 * | MOUSE | | | |
46 * |---------+-----+-----+-----|
47 * |TERMINAL | | | |
48 * |---------+-----+-----+-----|
49 * | ADMIN | | | |
50 * `---------------------------'
51 */
52 [_LAYERS] = LAYOUT(
53 TG(_MUSIC), _______, _______, _______, \
54 TG(_MOUSE), _______, _______, _______, \
55 TG(_TERMINAL), _______, _______, _______, \
56 TG(_ADMIN), _______, _______, _______\
57 ),
58 /* MUSIC
59 * ,-----------------------.
60 * | X | | | X |
61 * |-----+-----+-----+-----|
62 * | | | |4EVER|
63 * |-----+-----+-----+-----|
64 * | OFF | | | |
65 * |-----+-----+-----+-----|
66 * | ON | | |MODES|
67 * `---------------------- '
68 */
69 // TODO: Make this music layer the one to jump to other music layers (different octaves)
70 [_MUSIC] = LAYOUT(
71 _______, _______, _______, _______, \
72 _______, _______, _______, TG(_MUSIC_4_LIFE), \
73 MU_OFF, _______, _______, _______, \
74 MU_ON, _______, _______, MU_MOD \
75 ),
76 /* MUSIC_4_LIFE
77 * ,-----------------------.
78 * | ♫ | ♫ | ♫ | ♫ |
79 * |-----+-----+-----+-----|
80 * | ♫ | ♫ | ♫ | ♫ |
81 * |-----+-----+-----+-----|
82 * | ♫ | ♫ | ♫ | ♫ |
83 * |-----+-----+-----+-----|
84 * | ♫ | ♫ | ♫ | ♫ |
85 * `---------------------- '
86 */
87 [_MUSIC_4_LIFE] = LAYOUT(
88 KC_M, KC_M, KC_M, KC_M, \
89 KC_M, KC_M, KC_M, KC_M, \
90 KC_M, KC_M, KC_M, KC_M, \
91 KC_M, KC_M, KC_M, KC_M \
92 ),
93 /* MOUSE
94 * ,-------------------------------------------------.
95 * | BUTTON 5 | | SCROLL UP | X |
96 * |-----------+-----------+------------+------------|
97 * | X |LEFT CLICK | UP |RIGHT CLICK |
98 * |-----------+-----------+------------+------------|
99 * | BUTTON 4 | LEFT | DOWN | RIGHT |
100 * |-----------+-----------+------------+------=-----|
101 * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
102 * `-------------------------------------------------'
103 */
104 [_MOUSE] = LAYOUT(
105 KC_MS_BTN5, _______, KC_MS_WH_UP, _______, \
106 _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, \
107 KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, \
108 KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT \
109 ),
110 /* TERMINAL
111 * ,---------------------------------------.
112 * | |ABOUT| | X |
113 * |------------+-----+----------+---------|
114 * |TERMINAL OFF|PRINT| | |
115 * |------------+-----+----------+---------|
116 * | X |FLUSH| | |
117 * |------------+-----+----------+---------|
118 * |TERMINAL ON |HELP | | |
119 * `--------=======------------------------'
120 */
121 [_TERMINAL] = LAYOUT(
122 _______, TERM_ABOUT, _______, _______, \
123 TERM_OFF, TERM_PRINT, _______, _______, \
124 _______, TERM_FLUSH, _______, _______, \
125 TERM_ON, TERM_HELP , _______, _______\
126 ),
127 /* ADMIN
128 * ,-----------------------------------------.
129 * | RESET | | | X |
130 * |------------+-----+-----------+----------|
131 * |ABOUT CKEYS | | | |
132 * |------------+-----+-----------+----------|
133 * | | |CLICKY UP |CLICKY OFF|
134 * |------------+-----+-----------+----------|
135 * | X | |CLICKY DOWN|CLICKY ON |
136 * `-----------------------------------------'
137 */
138 [_ADMIN] = LAYOUT(
139 RESET, _______, _______, _______, \
140 CKEYS_ABOUT, _______, _______, _______, \
141 _______, _______, _______, CK_OFF, \
142 _______, _______, _______, CK_ON \
143 ),
144};
145
146bool process_record_user(uint16_t keycode, keyrecord_t *record) {
147 switch (keycode) {
148 case TERM_ABOUT:
149 if (record->event.pressed) {
150 // when keycode TERM_ABOUT is pressed
151 SEND_STRING("about"SS_TAP(X_ENTER));
152 } else {
153 // when keycode TERM_ABOUT is released
154 }
155 break;
156 case TERM_PRINT:
157 if (record->event.pressed) {
158 SEND_STRING("print"SS_TAP(X_ENTER));
159 } else { }
160 break;
161 case TERM_FLUSH:
162 if (record->event.pressed) {
163 SEND_STRING("flush"SS_TAP(X_ENTER));
164 } else { }
165 break;
166 case TERM_HELP:
167 if (record->event.pressed) {
168 SEND_STRING("help"SS_TAP(X_ENTER));
169 } else { }
170 break;
171 case CKEYS_ABOUT:
172 if (record->event.pressed) {
173 SEND_STRING("https://cKeys.org"SS_TAP(X_ENTER)"Making people smile one keyboard at a time."SS_TAP(X_ENTER)"cKeys is a volunteer-run 501(c)(3) nonprofit organization."SS_TAP(X_ENTER));
174 } else { }
175 break;
176 }
177 return true;
178};
diff --git a/keyboards/ckeys/handwire_101/keymaps/default/readme.md b/keyboards/ckeys/handwire_101/keymaps/default/readme.md
new file mode 100755
index 000000000..4594bdfe3
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/keymaps/default/readme.md
@@ -0,0 +1 @@
# The default keymap for the cKeys Handwire 101 4x4 keyboard. \ No newline at end of file
diff --git a/keyboards/ckeys/handwire_101/readme.md b/keyboards/ckeys/handwire_101/readme.md
new file mode 100755
index 000000000..cf20dab60
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/readme.md
@@ -0,0 +1,163 @@
1# cKeys Handwire 101 Workshop
2
3![](https://ckeys.org/images/proton-c-handwire-1.jpg)
4
5## Slides
6
7Slides can be found at: https://ckeys.org/slides/handwire/
8
9## Case Design
10
11The laser cutting file is ideal for Ponoko's P1 board size.
12
13## Firmware
14
15If you want to reflash the pre-installed firmware, use the `.bin` file for Proton C and the `.hex` file for Pro Micro builds. Flash with the QMK Toolbox or via the command line.
16
17Building for Proton C: `make ckeys/handwire_101:default CTPC=yes`
18Building for Pro Micro: `make ckeys/handwire_101:default`
19
20Pre-built firmware files (and laser cutting case files) can be found here: https://github.com/c-keys/handwire
21
22## Default Layout
23
24You can find the default layout in `qmk-handwire/keymaps/default/keymap.c`
25
26### Layers
27
28When you plug in your keyboard, it will function as a numpad. You will remain in the `Base` numpad layer unless you hold down the top right corner key and select one of the keys in the left most column. In QMK, this is called a momentary switch and looks like `MO(LAYERS)` in the default `keymap.c`. You can read more about layer switching in the [QMK Documentation](https://beta.docs.qmk.fm/features/feature_advanced_keycodes#switching-and-toggling-layers).
29
30#### Base
31```
32 /* BASE (numpad)
33 * ,-----------------------.
34 * | 7 | 8 | 9 | / | <-- Hold for LAYERS
35 * |-----+-----+-----+-----|
36 * | 4 | 5 | 6 | * |
37 * |-----+-----+-----+-----|
38 * | 1 | 2 | 3 | - |
39 * |-----+-----+-----+-----|
40 * | 0 | . | = | + |
41 * `---------------------- '
42 */
43```
44
45#### Layers
46
47```
48 /* LAYERS
49 * ,---------------------------.
50 * | MUSIC | | | X |
51 * |---------+-----+-----+-----|
52 * | MOUSE | | | |
53 * |---------+-----+-----+-----|
54 * |TERMINAL | | | |
55 * |---------+-----+-----+-----|
56 * | ADMIN | | | |
57 * `---------------------------'
58 */
59```
60
61This is the layers layer. This is how you toggle other layers on and off. If you toggle on a layer, it is important that you re-toggle that layer offbefore switching to a new layer.
62
63#### Music
64
65```
66 /* MUSIC
67 * ,-----------------------.
68 * | X | | | X |
69 * |-----+-----+-----+-----|
70 * | | | |4EVER|
71 * |-----+-----+-----+-----|
72 * | OFF | | | |
73 * |-----+-----+-----+-----|
74 * | ON | | |MODES|
75 * `---------------------- '
76 */
77```
78
79You can toggle the music mode on and off. You can also change the mode of music modes. Lastly, you can switch to the Music 4 Life mode but tapping the key marked `4EVER` above (see below). For more information on music mode, see the [QMK Documentation](https://beta.docs.qmk.fm/features/feature_audio).
80
81_NOTE: This layer will only make sounds if you install a speaker. At the time of this writing, you can get the Proton C specific piezo speaker for [$2.61 with free overnight shipping](https://www.arrow.com/en/products/ast1109mltrq/mallory-sonalert-products). You can solder it on by desoldering the row wires where they contact the cathode end of the diodes. Then flip over the Proton C and solder the piezo speaker in. Then re-solder the row wires and you should hear beeps and boops the next time you plug in your keyboard._
82
83#### Music 4 Life
84
85```
86 /* MUSIC_4_LIFE
87 * ,-----------------------.
88 * | ♫ | ♫ | ♫ | ♫ |
89 * |-----+-----+-----+-----|
90 * | ♫ | ♫ | ♫ | ♫ |
91 * |-----+-----+-----+-----|
92 * | ♫ | ♫ | ♫ | ♫ |
93 * |-----+-----+-----+-----|
94 * | ♫ | ♫ | ♫ | ♫ |
95 * `---------------------- '
96 */
97```
98
99Music mode on every single key. However, you will need to unplug your keyboard in order to get out of this mode. The benefit of this is that you can use every single key as opposed to the few left over in the Music Mode layer. Try changing the chromatic mode before switching to this mode.
100
101#### Mouse
102
103```
104 /* MOUSE
105 * ,-------------------------------------------------.
106 * | BUTTON 5 | | SCROLL UP | X |
107 * |-----------+-----------+------------+------------|
108 * | X |LEFT CLICK | UP |RIGHT CLICK |
109 * |-----------+-----------+------------+------------|
110 * | BUTTON 4 | LEFT | DOWN | RIGHT |
111 * |-----------+-----------+------------+------=-----|
112 * | BUTTON 3 |SCROLL LEFT|SCROLL DOWN |SCROLL RIGHT|
113 * `-------------------------------------------------'
114 */
115```
116
117Switch to this mode, force yourself through the steep transitionary period, and then you can ditch mice and trackpads forever!
118
119#### Terminal
120
121```
122 /* TERMINAL
123 * ,---------------------------------------.
124 * | |ABOUT| | X |
125 * |------------+-----+----------+---------|
126 * |TERMINAL OFF|PRINT| | |
127 * |------------+-----+----------+---------|
128 * | X |FLUSH| | |
129 * |------------+-----+----------+---------|
130 * |TERMINAL ON |HELP | | |
131 * `--------=======------------------------'
132 */
133```
134
135This layer is not currently working but has been left as an example of how to write macros.
136
137#### Admin
138
139```
140 /* ADMIN
141 * ,-----------------------------------------.
142 * | RESET | | | X |
143 * |------------+-----+-----------+----------|
144 * |ABOUT CKEYS | | | |
145 * |------------+-----+-----------+----------|
146 * | | |CLICKY UP |CLICKY OFF|
147 * |------------+-----+-----------+----------|
148 * | X | |CLICKY DOWN|CLICKY ON |
149 * `-----------------------------------------'
150 */
151```
152
153The most important key in this layer is the `RESET` switch. Use it to flash new firmware. It does the same thing as the hardware button on the Proton C. But since you soldered the Proton C with the reset button facing towards the keys, the only way to reach it is to de-solder wires. The reset switch solves this. Program a reset switch into all of your future keyboards.
154
155The `ABOUT CKEYS` is another example of using a macro. It will type out a few sentences about cKeys.
156
157The clicky buttons will only make a difference if you install a piezo speaker. If you install a speaker, then you can make your keyboard extra clicky sounding even if you did not install clicky switches.
158
159![](https://ckeys.org/images/proton-c-handwire-2.jpg)
160![](https://ckeys.org/images/proton-c-handwire-3.jpg)
161![](https://ckeys.org/images/handwire-1.jpg)
162![](https://ckeys.org/images/handwire-2.jpg)
163![](https://ckeys.org/images/handwire-3.jpg)
diff --git a/keyboards/ckeys/handwire_101/rules.mk b/keyboards/ckeys/handwire_101/rules.mk
new file mode 100755
index 000000000..957a6c8fb
--- /dev/null
+++ b/keyboards/ckeys/handwire_101/rules.mk
@@ -0,0 +1,69 @@
1# MCU name
2#MCU = at90usb1287
3MCU = atmega32u4
4
5# Processor frequency.
6# This will define a symbol, F_CPU, in all source code files equal to the
7# processor frequency in Hz. You can then use this symbol in your source code to
8# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
9# automatically to create a 32-bit value in your source code.
10#
11# This will be an integer division of F_USB below, as it is sourced by
12# F_USB after it has run through any CPU prescalers. Note that this value
13# does not *change* the processor frequency - it should merely be updated to
14# reflect the processor speed set externally so that the code can use accurate
15# software delays.
16F_CPU = 16000000
17
18
19#
20# LUFA specific
21#
22# Target architecture (see library "Board Types" documentation).
23ARCH = AVR8
24
25# Input clock frequency.
26# This will define a symbol, F_USB, in all source code files equal to the
27# input clock frequency (before any prescaling is performed) in Hz. This value may
28# differ from F_CPU if prescaling is used on the latter, and is required as the
29# raw input clock is fed directly to the PLL sections of the AVR for high speed
30# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
31# at the end, this will be done automatically to create a 32-bit value in your
32# source code.
33#
34# If no clock division is performed on the input clock inside the AVR (via the
35# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
36F_USB = $(F_CPU)
37
38# Interrupt driven control endpoint task(+60)
39OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
40
41
42# Boot Section Size in *bytes*
43# Teensy halfKay 512
44# Teensy++ halfKay 1024
45# Atmel DFU loader 4096
46# LUFA bootloader 4096
47# USBaspLoader 2048
48BOOTLOADER = caterina
49
50
51# Build Options
52# change yes to no to disable
53#
54BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
55MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
56EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
57CONSOLE_ENABLE = no # Console for debug(+400)
58COMMAND_ENABLE = no # Commands for debug and configuration
59TERMINAL_ENABLE = yes
60# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
61SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
62# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
63NKRO_ENABLE = yes # USB Nkey Rollover
64BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
65#MIDI_ENABLE = yes # MIDI controls
66UNICODE_ENABLE = no # Unicode
67BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
68AUDIO_ENABLE = yes # Audio output on port C6
69FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/ckeys/readme.md b/keyboards/ckeys/readme.md
index 01991d9e3..bdcf5b34d 100644
--- a/keyboards/ckeys/readme.md
+++ b/keyboards/ckeys/readme.md
@@ -1,9 +1,10 @@
1# Ckeys.org 1# cKeys.org
2 2
3[ckeys](https://ckeys.org/) is a mechanical keyboard based non profit, located in Seattle, Washington. 3[cKeys](https://ckeys.org/) is a mechanical keyboard-based nonprofit organization located in Seattle, Washington.
4 4
5In addition, to hosting the [Seattle Mechanical Keyboard Meetups](https://ckeys.org/events/), they have [soldering workshops](https://ckeys.org/workshops/) featuring hardware hosted in this repository. 5In addition, to hosting the [Seattle Mechanical Keyboard Meetups](https://ckeys.org/events/), they have [soldering workshops](https://ckeys.org/workshops/) featuring hardware hosted in this repository.
6 6
7* Supported Hardware 7* Supported Hardware
8 * The Obelus - 4x4 Macropad 8 * The Obelus - 4x4 Macropad
9 * naKey - Through hole numpad \ No newline at end of file 9 * naKey - Through hole numpad
10 * Handwire 101 - Handwired 4x4 (Proton C or Pro Micro)