handwired/space_oddity: refactor, Configurator support and readme cleanup (#4977)

* handwired/space_oddity: refactor

- config.h: updated to use #pragma once include guard
- rules.mk: replace `?=` with `=`
- space_oddity.h:
  - updated to use #pragma once include guard
  - layout macro KEYMAP renamed to LAYOUT
- default keymap:
  - updated to use #include QMK_KEYBOARD_H
  - replace references to Planck keycodes
  - replace fn_actions-powered layer switch keycode
  - rebuild keymap block comments
  - keymap layers now use short-form keycodes
  - refactor action_get_macro keycodes into process_record_user

* handwired/space_oddity: Configurator support

* handwired/space_oddity: readme cleanup

- update readme to better conform with QMK template
- fixed the make command.
pull/4770/head
noroadsleft 6 years ago committed by Drashna Jaelre
parent 03d9e3fe79
commit 02180c87f2

@ -1,5 +1,4 @@
#ifndef CONFIG_H #pragma once
#define CONFIG_H
#include "config_common.h" #include "config_common.h"
@ -51,5 +50,3 @@
#define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8 #define RGBLIGHT_VAL_STEP 8
#endif #endif
#endif

@ -0,0 +1,78 @@
{
"keyboard_name": "Space Oddity",
"url": "",
"maintainer": "qmk",
"width": 14,
"height": 6,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"Macro 0", "x":0, "y":0, "w":2},
{"label":"Macro 1", "x":2, "y":0, "w":2},
{"label":"Macro 2", "x":4, "y":0, "w":2},
{"label":"Macro 3", "x":6, "y":0, "w":2},
{"label":"Macro 4", "x":8, "y":0, "w":2},
{"label":"Dynamic Macro 1", "x":10, "y":0, "w":2},
{"label":"Dynamic Macro 2", "x":12, "y":0, "w":2},
{"label":"~", "x":0, "y":1, "w":2},
{"label":"!", "x":2, "y":1},
{"label":"@", "x":3, "y":1},
{"label":"#", "x":4, "y":1},
{"label":"$", "x":5, "y":1},
{"label":"%", "x":6, "y":1},
{"label":"^", "x":7, "y":1},
{"label":"&", "x":8, "y":1},
{"label":"*", "x":9, "y":1},
{"label":"(", "x":10, "y":1},
{"label":")", "x":11, "y":1},
{"label":"Backspace", "x":12, "y":1, "w":2},
{"label":"Tab", "x":0, "y":2, "w":2},
{"label":"Q", "x":2, "y":2},
{"label":"W", "x":3, "y":2},
{"label":"E", "x":4, "y":2},
{"label":"R", "x":5, "y":2},
{"label":"T", "x":6, "y":2},
{"label":"Y", "x":7, "y":2},
{"label":"U", "x":8, "y":2},
{"label":"I", "x":9, "y":2},
{"label":"O", "x":10, "y":2},
{"label":"P", "x":11, "y":2},
{"label":"_", "x":12, "y":2, "w":2},
{"label":"Esc (Ctrl)", "x":0, "y":3, "w":2},
{"label":"A", "x":2, "y":3},
{"label":"S", "x":3, "y":3},
{"label":"D", "x":4, "y":3},
{"label":"F", "x":5, "y":3},
{"label":"G", "x":6, "y":3},
{"label":"H", "x":7, "y":3},
{"label":"J", "x":8, "y":3},
{"label":"K", "x":9, "y":3},
{"label":"L", "x":10, "y":3},
{"label":":", "x":11, "y":3},
{"label":"\"", "x":12, "y":3, "w":2},
{"label":"Caps Lock (Shift)", "x":0.25, "y":4, "w":1.75},
{"label":"Z", "x":2, "y":4},
{"label":"X", "x":3, "y":4},
{"label":"C", "x":4, "y":4},
{"label":"V", "x":5, "y":4},
{"label":"B", "x":6, "y":4},
{"label":"N", "x":7, "y":4},
{"label":"M", "x":8, "y":4},
{"label":"<", "x":9, "y":4},
{"label":">", "x":10, "y":4},
{"label":"?", "x":11, "y":4},
{"label":"Enter (Shift)", "x":12, "y":4, "w":1.75},
{"label":"MO(2)", "x":1, "y":5},
{"label":"MO(1)", "x":2, "y":5},
{"label":"GUI", "x":3, "y":5},
{"label":"Alt", "x":4, "y":5},
{"label":"Ctrl", "x":5, "y":5, "w":2},
{"label":"Space", "x":7, "y":5, "w":2},
{"label":"Left (Alt)", "x":9, "y":5},
{"label":"Right (Hyper)", "x":10, "y":5},
{"label":"Up (MO(1))", "x":11, "y":5},
{"label":"Down (MO(2))", "x":12, "y":5}
]
}
}
}

@ -15,12 +15,16 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
#include "space_oddity.h" #include QMK_KEYBOARD_H
// Planck keycodes needed for dynamic macros. // Custom keycodes needed for dynamic macros.
enum planck_keycodes { enum custom_keycodes {
QWERTY = SAFE_RANGE, QWERTY = SAFE_RANGE,
PAIR_PR,
PAIR_BR,
PAIR_CB,
LAMBDA,
DYNAMIC_MACRO_RANGE, DYNAMIC_MACRO_RANGE,
}; };
@ -36,13 +40,6 @@ enum {
#define MOUSE_LAYER 2 #define MOUSE_LAYER 2
// Toggle MOUSE_LAYER. Additional layers can be added for additional layouts or other special functions.
const uint16_t PROGMEM fn_actions[] = {
[2] = ACTION_LAYER_TOGGLE(MOUSE_LAYER),
};
// Tap dance actions - double tap for Caps Lock. // Tap dance actions - double tap for Caps Lock.
qk_tap_dance_action_t tap_dance_actions[] = { qk_tap_dance_action_t tap_dance_actions[] = {
@ -52,186 +49,185 @@ qk_tap_dance_action_t tap_dance_actions[] = {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Here is an ASCII version of the base layout. Note that Dynamic Macros 1 and 2 are considered Macro 5 and Macro 6. /* Here is an ASCII version of the base layout. Note that Dynamic Macros 1 and 2 are considered Macro 5 and Macro 6.
*
___________________________________________________________________________________ * ___________________________________________________________________________________
| | | | | | Dynamic | Dynamic | * | | | | | | Dynamic | Dynamic |
| Macro 0 | Macro 1 | Macro 2 | Macro 3 | Macro 4 | Macro 1 | Macro 2 | * | () | [] | {} | NO OP | NO OP | Macro 1 | Macro 2 |
|___________|___________|___________|___________|___________|___________|___________| * |___________|___________|___________|___________|___________|___________|___________|
| | | | | | | | | | | | | * | | | | | | | | | | | | |
| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BKSP | * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BKSP |
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________| * |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
| | | | | | | | | | | | | * | | | | | | | | | | | | |
| TAB | Q | W | E | R | T | Y | U | I | O | P | - | * | TAB | Q | W | E | R | T | Y | U | I | O | P | - |
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________| * |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
| | | | | | | | | | | | | * | | | | | | | | | | | | |
|ESC (CTL_T)| A | S | D | F | G | H | J | K | L | ; | ' | * |ESC (CTL_T)| A | S | D | F | G | H | J | K | L | ; | ' |
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________| * |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
| | | | | | | | | | | | | * | | | | | | | | | | | | |
| SHFT | Z | X | C | V | B | N | M | , | . | / |SHFT(ENT)| * | SHFT | Z | X | C | V | B | N | M | , | . | / |SHFT(ENT)|
|_________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_________| * |_________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_________|
| | | | | | | ALT | HYP | LT 1| LT 2| * | | | | | | | ALT | HYP | LT 1| LT 2|
| M2 | M1 | GUI | ALT | CTRL | SPC |(LFT)|(RGT)| (UP)|(DWN)| * |MO(2)|MO(1)| GUI | ALT | CTRL | SPC |(LFT)|(RGT)| (UP)|(DWN)|
|_____|_____|_____|_____|___________|___________|_____|_____|_____|_____| * |_____|_____|_____|_____|___________|___________|_____|_____|_____|_____|
*/
KEYMAP(
M(0), M(1), M(2), M(3), M(4), DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
TD(SFT_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT),
MO(2), MO(1), KC_LGUI, KC_RALT, KC_LCTRL, KC_SPC, ALT_T(KC_LEFT), ALL_T(KC_RGHT), LT(1, KC_UP), LT(2, KC_DOWN)),
/* Function layer.
Blank keys correspond to the KC_TRNS keycode.
___________________________________________________________________________________
| | | | | | DYN REC | DYN REC |
| Macro 7 | | | | | 1 | 2 |
|___________|___________|___________|___________|___________|___________|___________|
| DYN REC | | | | | | | | | | | |
| STOP | F1 | F2 | F3 | F4 | F5 | [ | 7 | 8 | 9 | * | DEL |
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
| | | | | | | | | | | | |
| | F6 | F7 | F8 | F9 | F10 | ] | 4 | 5 | 6 | + | = |
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
| | | | | | | | | | | | |
| \ | F11 | F12 | F13 | F14 | F15 | { | 1 | 2 | 3 | - | | |
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
| | | | | | | | | | | | |
| | F16 | F17 | F18 | F19 | F20 | } | 0 | , | . | / | |
|_________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_________|
| | | | | | | | | | |
| | | | | | | | | | |
|_____|_____|_____|_____|___________|___________|_____|_____|_____|_____|
*/ */
KEYMAP( [0] = LAYOUT( \
M(7), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DYN_REC_START1, DYN_REC_START2, PAIR_PR, PAIR_BR, PAIR_CB, XXXXXXX, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, \
DYN_REC_STOP, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_ASTR, KC_DEL, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_EQL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
KC_BSLS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LCBR, KC_P1, KC_P2, KC_P3, KC_MINS, KC_PIPE, CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
KC_TRNS, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_RCBR, KC_P0, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS, TD(SFT_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), MO(2), MO(1), KC_LGUI, KC_RALT, KC_LCTL, KC_SPC, ALT_T(KC_LEFT), ALL_T(KC_RGHT), LT(1, KC_UP), LT(2, KC_DOWN) \
),
/* Mouse layer.
/* Function layer.
___________________________________________________________________________________ * Blank keys correspond to the KC_TRNS keycode.
| | | | | | | | *
| | | | | | | | * ___________________________________________________________________________________
|___________|___________|___________|___________|___________|___________|___________| * | | | | | | DYN REC | DYN REC |
| | | | MS | | | | | | | | | * | LAMBDA | | | | | 1 | 2 |
| | | | UP | | | | | | | | | * |___________|___________|___________|___________|___________|___________|___________|
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________| * | DYN REC | | | | | | | | | | | |
| | | MS | MS | MS | | | | | | | | * | STOP | F1 | F2 | F3 | F4 | F5 | [ | 7 | 8 | 9 | * | DEL |
| | | LFT | DWN | RGT | | | MS1 | MS3 | MS2 | | | * |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________| * | | | | | | | | | | | | |
| | | | | | | | | | | | | * | | F6 | F7 | F8 | F9 | F10 | ] | 4 | 5 | 6 | + | = |
| | | | | | | | | | | | | * |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
|___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________| * | | | | | | | | | | | | |
| | | | | | | | | | | | | * | \ | F11 | F12 | F13 | F14 | F15 | { | 1 | 2 | 3 | - | | |
| |RESET| | | | | | | | | | | * |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
|_________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_________| * | | | | | | | | | | | | |
| | | | | | | | | | | * | | F16 | F17 | F18 | F19 | F20 | } | 0 | , | . | / | |
| | | | | | | | | | F(2)| * |_________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_________|
|_____|_____|_____|_____|___________|___________|_____|_____|_____|_____| * | | | | | | | | | | |
* | | | | | | | | | | |
* |_____|_____|_____|_____|___________|___________|_____|_____|_____|_____|
*
*/
[1] = LAYOUT( \
LAMBDA, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, \
DYN_REC_STOP, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_ASTR, KC_DEL, \
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_EQL, \
KC_BSLS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LCBR, KC_P1, KC_P2, KC_P3, KC_MINS, KC_PIPE, \
_______, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_RCBR, KC_P0, KC_COMM, KC_DOT, KC_SLSH, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
/* Mouse layer.
*
* ___________________________________________________________________________________
* | | | | | | | |
* | | | | | | | |
* |___________|___________|___________|___________|___________|___________|___________|
* | | | | MS | | | | | | | | |
* | | | | UP | | | | | | | | |
* |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
* | | | MS | MS | MS | | | | | | | |
* | | | LFT | DWN | RGT | | | MS1 | MS3 | MS2 | | |
* |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
* | | | | | | | | | | | | |
* | | | | | | | | | | | | |
* |___________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|___________|
* | | | | | | | | | | | | |
* | |RESET| | | | | | | | | | |
* |_________|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_________|
* | | | | | | | | | | |
* | | | | | | | | | | F(2)|
* |_____|_____|_____|_____|___________|___________|_____|_____|_____|_____|
*
*/ */
KEYMAP( [2] = LAYOUT( \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, _______, _______, _______, \
KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_TRNS, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2, KC_TRNS, KC_TRNS, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, _______, _______, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, F(2)) _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(2) \
)
}; };
void matrix_init_user(void) {
}
void matrix_scan_user(void) {
}
// Simple macro ideas follow. Each of them is designed to give you a quick way to create pairs of // Simple macro ideas follow. Each of them is designed to give you a quick way to create pairs of
// delimiters and then position the cursor between them, much like Emacs' ParEdit does. This way, // delimiters and then position the cursor between them, much like Emacs' ParEdit does. This way,
// you can have some convenient coding "helpers" even when not using Emacs. It is also nice for // you can have some convenient coding "helpers" even when not using Emacs. It is also nice for
// LaTeX editing. // LaTeX editing.
// //
// Customize to your heart's content! // Customize to your heart's content!
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (id) {
case 0:
if (record->event.pressed) {
SEND_STRING("()"SS_TAP(X_LEFT));
}
break;
case 1:
if (record->event.pressed) {
SEND_STRING("[]"SS_TAP(X_LEFT));
}
break;
case 2:
if (record->event.pressed) {
SEND_STRING("{}"SS_TAP(X_LEFT));
}
break;
// Probably something only Lisp users will appreciate... if (!process_record_dynamic_macro(keycode, record)) {
case 7: return false;
if (record->event.pressed) {
SEND_STRING("(lambda ())"SS_TAP(X_LEFT)SS_TAP(X_LEFT));
}
break;
} }
return MACRO_NONE; switch (keycode) {
} case PAIR_PR:
if (record->event.pressed) {
void matrix_init_user(void) { SEND_STRING("()"SS_TAP(X_LEFT));
} }
return false;
void matrix_scan_user(void) { case PAIR_BR:
} if (record->event.pressed) {
SEND_STRING("[]"SS_TAP(X_LEFT));
}
return false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) { case PAIR_CB:
if (record->event.pressed) {
SEND_STRING("{}"SS_TAP(X_LEFT));
}
return false;
if (!process_record_dynamic_macro(keycode, record)) { // Probably something only Lisp users will appreciate...
return false; case LAMBDA:
if (record->event.pressed) {
SEND_STRING("(lambda ())"SS_TAP(X_LEFT)SS_TAP(X_LEFT));
}
return false;
} }
return true; return true;
} }
void led_set_user(uint8_t usb_led) { void led_set_user(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_NUM_LOCK)) { if (usb_led & (1 << USB_LED_NUM_LOCK)) {
} else { } else {
} }
if (usb_led & (1 << USB_LED_CAPS_LOCK)) { if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
} else { } else {
} }
if (usb_led & (1 << USB_LED_SCROLL_LOCK)) { if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
} else { } else {
} }
if (usb_led & (1 << USB_LED_COMPOSE)) { if (usb_led & (1 << USB_LED_COMPOSE)) {
} else { } else {
} }
if (usb_led & (1 << USB_LED_KANA)) { if (usb_led & (1 << USB_LED_KANA)) {
} else { } else {
} }
} }

@ -1,5 +1,6 @@
Space Oddity Keyboard # Space Oddity Keyboard
=====================
![Space Oddity](https://i.imgur.com/dE9Y4XK.jpg)
This firmware is for an Emacs-focused handwired custom keyboard using an Arduino Pro Micro. This firmware is for an Emacs-focused handwired custom keyboard using an Arduino Pro Micro.
@ -7,7 +8,10 @@ As originally designed, the top row consists of 2u keys which are used for user-
Some simple example macros are included. To add your own, just add the number of the macro you want in the appropriate section. Some simple example macros are included. To add your own, just add the number of the macro you want in the appropriate section.
A picture of the finished product can be found here: https://imgur.com/dE9Y4XK This design was conceived by James Taylor. Any requests for further information, suggestions, and/or tips for building your own are welcome!
Keyboard Maintainer: [James Taylor](https://github.com/broken-username)
Hardware Supported: Arduino Pro Micro
## Pinout ## Pinout
@ -15,11 +19,16 @@ The following pins are used:
- Columns 1-12: B2, B6, B5, B4, E6, D7, C6, D4, D0, D1, D2, D3 - Columns 1-12: B2, B6, B5, B4, E6, D7, C6, D4, D0, D1, D2, D3
- Rows 1-6: F4, F5, F6, F7, B1, B3 - Rows 1-6: F4, F5, F6, F7, B1, B3
## Compiling and loading the firmware ## Flashing
To build the firmware, run `make handwired/space_oddity` from the toplevel directory. Make example for this keyboard (after setting up your build environment):
On GNU/Linux, you can flash the default layout onto the microcontroller by using `avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:handwired_space_oddity_default.hex`. Note that the device name under `/dev` may be different. make handwired/space_oddity:default
On GNU/Linux, you can flash the default layout onto the microcontroller by using
This design was conceived by James Taylor. Any requests for further information, suggestions, and/or tips for building your own are welcome! avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:handwired_space_oddity_default.hex
Note that the device name under `/dev` may be different.
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).

@ -45,14 +45,14 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Build Options # Build Options
# comment out to disable the options. # comment out to disable the options.
# #
BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000) BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700) MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450) EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE ?= no # Console for debug(+400) CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE ?= no # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE ?= no AUDIO_ENABLE = no
RGBLIGHT_ENABLE ?= no RGBLIGHT_ENABLE = no
TAP_DANCE_ENABLE = yes TAP_DANCE_ENABLE = yes

@ -1,9 +1,8 @@
#ifndef KB_H #pragma once
#define KB_H
#include "quantum.h" #include "quantum.h"
#define KEYMAP( \ #define LAYOUT( \
K000, K002, K004, K006, K008, K010, K011, \ K000, K002, K004, K006, K008, K010, K011, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
@ -18,5 +17,3 @@
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411 }, \ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411 }, \
{ K500, K501, K502, K503, KC_NO, K505, KC_NO, K507, K508, K509, K510, K511 } \ { K500, K501, K502, K503, KC_NO, K505, KC_NO, K507, K508, K509, K510, K511 } \
} }
#endif
Loading…
Cancel
Save