]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Keymaps for several of my boards (#1641)
authorMichael Terhar <michael.terhar@pararray.com>
Sun, 27 Aug 2017 03:33:33 +0000 (23:33 -0400)
committerJack Humbert <jack.humb@gmail.com>
Sun, 27 Aug 2017 03:33:33 +0000 (23:33 -0400)
* copied mjt keymaps from archive

* All mjt boards now compile

* fixed jd45-mjt breathing

* Updates to fix SpaceFN but not tested yet.

* Still missing either spacebar or an adjacent keypress.

* Debugging rigged up for use with hid_listen.

* Reverted the default keymap to use tap_layer_key rather than custom.  Moved custom approach to keymap_debug.c

* Fixed the lower-left side of the keymap, which needed more spacers due to the matrix being directly put into the array rather than using the keymap function.

* Cleaned up JD45 keymap that uses tapkey.

* Redid minivan keymap with numsym rather than raise/lower.
Untested.

* Created my MJT keymap for HHKB
Enabled dynamic macros and moved
somoe of the shortcuts around.

* Minor keymap fixes to make them compile without errors.

* Added home/end to right arrow cluster on DYN layer.

* Added more keys to fn and dyn layers.

* It wasn't using my custom layer last time somehow...?  Now it will.

* Compiled and installed at end of day on 8/23

* Moved macros to FKEY layer because Adjust was too hard to get into and out of without some sort of feedback.

* Fixed volume controls... were reversed and disabled.

* Added F13-F15 back to fkeys layer in Minivan

* Created new Planck Keymap that uses the NumSym and FKeys layer approach like the Minivan.

* Removed DYN layer.

* Fixed diagram in planck numsym.

* Cleanup for pull request.

* Roadkit flip phone warning.

* Replaced PLAY_NOTES_ARRAY to PLAY_SONG

* reset the submodules

* checked out specific commits for submodules

* Removed debugging from JD45 shared config.h

* Moved custom rules.mk to apropriate keymap

Reset the shared rules.mk file.

* Trailing return issue in rules.mk

Gotta make for a smooth pull request :-)

40 files changed:
keyboards/gherkin/keymaps/mjt/Makefile [new file with mode: 0644]
keyboards/gherkin/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/gherkin/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/hhkb/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/hhkb/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/hhkb/keymaps/mjt/readme.md [new file with mode: 0644]
keyboards/jd45/keymaps/mjt/Makefile [new file with mode: 0644]
keyboards/jd45/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/jd45/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/jd45/keymaps/mjt/readme.md [new file with mode: 0644]
keyboards/jd45/keymaps/mjt/rules.mk [new file with mode: 0644]
keyboards/jd45/keymaps/mjt6u/Makefile [new file with mode: 0644]
keyboards/jd45/keymaps/mjt6u/config.h [new file with mode: 0644]
keyboards/jd45/keymaps/mjt6u/keymap.c [new file with mode: 0644]
keyboards/jd45/keymaps/mjt6u/readme.md [new file with mode: 0644]
keyboards/lets_split/keymaps/mjt/Makefile [new file with mode: 0644]
keyboards/lets_split/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/lets_split/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/mitosis/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/mitosis/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/mjt/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/planck/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/mjt/readme.md [new file with mode: 0644]
keyboards/planck/keymaps/mjtnumsym/Makefile [new file with mode: 0644]
keyboards/planck/keymaps/mjtnumsym/config.h [new file with mode: 0644]
keyboards/planck/keymaps/mjtnumsym/keymap.c [new file with mode: 0644]
keyboards/planck/keymaps/mjtnumsym/readme.md [new file with mode: 0644]
keyboards/roadkit/keymaps/flipphone/Makefile [new file with mode: 0644]
keyboards/roadkit/keymaps/flipphone/config.h [new file with mode: 0644]
keyboards/roadkit/keymaps/flipphone/keymap.c [new file with mode: 0644]
keyboards/roadkit/keymaps/flipphone/readme.md [new file with mode: 0644]
keyboards/roadkit/keymaps/mjt/Makefile [new file with mode: 0644]
keyboards/roadkit/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/roadkit/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/roadkit/keymaps/mjt/readme.md [new file with mode: 0644]
keyboards/tv44/keymaps/mjt/Makefile [new file with mode: 0644]
keyboards/tv44/keymaps/mjt/config.h [new file with mode: 0644]
keyboards/tv44/keymaps/mjt/keymap.c [new file with mode: 0644]
keyboards/tv44/keymaps/mjt/readme.md [new file with mode: 0644]

diff --git a/keyboards/gherkin/keymaps/mjt/Makefile b/keyboards/gherkin/keymaps/mjt/Makefile
new file mode 100644 (file)
index 0000000..b397f86
--- /dev/null
@@ -0,0 +1,29 @@
+## not sure where this stuff goes ##
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = yes           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE=yes
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/gherkin/keymaps/mjt/config.h b/keyboards/gherkin/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..9c9f038
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID    0xFEED
+#define PRODUCT_ID   0x6060
+#define DEVICE_VER   0x0001
+#define MANUFACTURER    Some Guy
+#define PRODUCT         Gherkin
+#define DESCRIPTION     30 percent disaster
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ *         ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+
+// These are with USB on the left.
+// #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+// original from TMK:  #define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 }
+// #define MATRIX_COL_PINS { D0, D4, F6, D7, E6, B4 }
+
+// these are with USB on the right.
+#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { B4, E6, D7, F6, D4, D0 }
+
+#define CATERINA_BOOTLOADER
+
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_PIN B5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define AUDIO_VOICES
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+  keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1     H
+//#define MAGIC_KEY_HELP2     SLASH
+//#define MAGIC_KEY_DEBUG     D
+//#define MAGIC_KEY_DEBUG_MATRIX  X
+//#define MAGIC_KEY_DEBUG_KBD   K
+//#define MAGIC_KEY_DEBUG_MOUSE  M
+//#define MAGIC_KEY_VERSION    V
+//#define MAGIC_KEY_STATUS     S
+//#define MAGIC_KEY_CONSOLE    C
+//#define MAGIC_KEY_LAYER0_ALT1  ESC
+//#define MAGIC_KEY_LAYER0_ALT2  GRAVE
+//#define MAGIC_KEY_LAYER0     0
+//#define MAGIC_KEY_LAYER1     1
+//#define MAGIC_KEY_LAYER2     2
+//#define MAGIC_KEY_LAYER3     3
+//#define MAGIC_KEY_LAYER4     4
+//#define MAGIC_KEY_LAYER5     5
+//#define MAGIC_KEY_LAYER6     6
+//#define MAGIC_KEY_LAYER7     7
+//#define MAGIC_KEY_LAYER8     8
+//#define MAGIC_KEY_LAYER9     9
+//#define MAGIC_KEY_BOOTLOADER   PAUSE
+//#define MAGIC_KEY_LOCK      CAPS
+//#define MAGIC_KEY_EEPROM     E
+//#define MAGIC_KEY_NKRO      N
+//#define MAGIC_KEY_SLEEP_LED   Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/gherkin/keymaps/mjt/keymap.c b/keyboards/gherkin/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..3dcc3ca
--- /dev/null
@@ -0,0 +1,280 @@
+#include "gherkin.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+//Tap Dance Declarations
+enum {
+  TD_Z_LCTL = 0,
+  TD_X_LGUI = 1,
+  TD_C_LALT = 2,
+  TD_A_TAB = 3,
+  TD_Q_ESC = 4,
+//   M(0)
+};
+
+//Friendly Layer Names
+enum gherkin_layers {
+  _QWERTY,
+  _SONGS,
+  _NUMBERS,
+  _SYMBOLS,
+  _PLOVER,
+  _ADJUST
+};
+
+// custom keycodes
+enum gherkin_keycodes {
+  QWERTY = SAFE_RANGE,
+  NUMBERS,
+  SYMBOLS,
+  SONGS,
+  PLOVER,
+  BACKLIT,
+  MACSLEEP,
+  EXT_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = KEYMAP(
+               TD(TD_Q_ESC),   KC_W,              KC_E,           KC_R,  KC_T,               KC_Y,  KC_U,  KC_I,     KC_O,    KC_P,
+               TD(TD_A_TAB),   LT(_SYMBOLS,KC_S), KC_D,           KC_F,  KC_G,               KC_H,  KC_J,  KC_K,     KC_L,    LT(_ADJUST,KC_SPC),
+               TD(TD_Z_LCTL),  TD(TD_X_LGUI),    TD(TD_C_LALT),  KC_V,  KC_B,  LT(_NUMBERS, KC_N),  KC_M,  KC_COMM,  KC_DOT,  SFT_T(KC_ENT))
+  ,
+  [_NUMBERS] = KEYMAP(
+    KC_1,   KC_2,   KC_3,   KC_4,   KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,
+    KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,   KC_F6,   KC_HOME, KC_PGDN, KC_PGUP,  KC_END ,
+    KC_F7,  KC_F8,  KC_F9,  KC_F10, LT(_ADJUST,KC_F11),  _______, KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT)
+  ,
+  [_SYMBOLS] = KEYMAP(
+    KC_EXLM,   KC_AT,   KC_HASH,   KC_DLR,   KC_PERC,  KC_CIRC,  KC_AMPR,  KC_ASTR, KC_LPRN,       KC_RPRN,
+    KC_GRV,  _______,  XXXXXXX,  KC_LBRC,   KC_RBRC,  KC_BSLS,  KC_MINS,  KC_EQL ,  KC_SCLN,      KC_QUOT,
+    KC_TILD,  MO(_ADJUST),  XXXXXXX,  KC_LCBR,   KC_RCBR,  KC_PIPE,  KC_UNDS,  KC_PLUS,  S(KC_SCLN), S(KC_QUOT))
+  ,
+  [_PLOVER] = KEYMAP(
+    KC_Q,    KC_W,    KC_E,    KC_R,    KC_1,       KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC,
+    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,       KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
+    EXT_PLV, XXXXXXX, KC_C,    KC_V,    XXXXXXX,    KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX)
+  ,
+  [_ADJUST] = KEYMAP(
+    RESET,    _______,  _______,  _______,    _______,  QWERTY,  NUMBERS,  SYMBOLS,     PLOVER,  SONGS,
+    MUV_DE,   MUV_IN,   MU_ON,    MU_OFF,     _______,  _______,  _______,  _______,     MACSLEEP,  _______,
+    BACKLIT,  _______,  _______,  _______,    _______,  _______,  _______,  _______,     _______,  _______)
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_qwerty);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case NUMBERS:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_dvorak);
+        #endif
+        persistant_default_layer_set(1UL<<_NUMBERS);
+      }
+      return false;
+      break;
+    case SYMBOLS:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_colemak);
+        #endif
+        persistant_default_layer_set(1UL<<_SYMBOLS);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_SONG(tone_plover);
+        #endif
+        layer_off(_NUMBERS);
+        layer_off(_SYMBOLS);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_plover_gb);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+    case MACSLEEP:
+      if (record->event.pressed) {
+          // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+          register_code(KC_RSFT);
+          register_code(KC_RCTL);
+          register_code(KC_POWER);
+          unregister_code(KC_POWER);
+          unregister_code(KC_RCTL);
+          unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    }
+    return true;
+}
+
+
+/*
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+       keyevent_t event = record->event;
+
+       switch (id) {
+        case 0: {
+            if (record->event.pressed) {
+                key_timer = timer_read(); // if the key is being pressed, we start the timer.
+            }
+            else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
+                if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
+                    return MACRO( D(LSFT), END  );
+                }
+                else {
+                    return MACRO( T(N), END  );
+                }
+            }
+            break;
+        }
+      }
+       return MACRO_NONE;
+}*/
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+    PLAY_SONG(tone_goodbye);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_SONG(music_scale);
+}
+
+#endif
+
+void matrix_scan_user(void) {
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+  //Tap once for Esc, twice for Caps Lock
+  [TD_Z_LCTL]  = ACTION_TAP_DANCE_DOUBLE(KC_Z, KC_LCTL),
+  [TD_X_LGUI]  = ACTION_TAP_DANCE_DOUBLE(KC_X, KC_LGUI),
+  [TD_C_LALT]  = ACTION_TAP_DANCE_DOUBLE(KC_C, KC_LALT),
+  [TD_A_TAB]  = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB),
+  [TD_Q_ESC]  = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
+};
+
+// don't know what this is doing...
+/*
+void led_set_user(uint8_t usb_led) {
+
+       if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+               DDRD |= (1 << 5); PORTD &= ~(1 << 5);
+       } else {
+               DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
+       }
+
+       if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+               DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+       } else {
+               DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+       }
+
+       if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+       } else {
+
+       }
+
+       if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+       } else {
+
+       }
+
+       if (usb_led & (1 << USB_LED_KANA)) {
+
+       } else {
+
+       }
+
+}
+*/
diff --git a/keyboards/hhkb/keymaps/mjt/config.h b/keyboards/hhkb/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..d386115
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0xCAFE
+#define DEVICE_VER      0x0104
+#define MANUFACTURER    q.m.k
+#define PRODUCT         HHKB mod
+#define DESCRIPTION     q.m.k keyboard firmware for HHKB
+
+/* key matrix size */
+#ifdef HHKB_JP
+#   define MATRIX_ROWS 16
+#else
+#   define MATRIX_ROWS 8
+#endif
+#define MATRIX_COLS 8
+
+#define TAPPING_TERM    200
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE    5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+*/
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/hhkb/keymaps/mjt/keymap.c b/keyboards/hhkb/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..b5cd997
--- /dev/null
@@ -0,0 +1,114 @@
+/*  -*-  eval: (turn-on-orgtbl); -*-
+ * default HHKB Layout
+ */
+#include "hhkb.h"
+
+#define BASE 0
+#define HHKB 1
+#define FUNK 2
+#define DYN 3
+#define CTL_ESC CTL_T(KC_ESC)
+#define MACSLEEP LCTL(LSFT(KC_POWER))
+
+enum hhkb_keycodes {
+  QWERTY = SAFE_RANGE,
+  DYNKEY,
+  DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+    /* BASE Level: Default Layer
+     |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+     | Esc   | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | -     | =   | \     | ` |
+     |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+     | Tab   | Q | W | E | R | T | Y | U | I | O | P | [     | ]   | Backs |   |
+     |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+     | Cont  | A | S | D | F | G | H | J | K | L | ; | '     | Ent |       |   |
+     |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+     | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 |       |   |
+     |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+
+            |------+------+-----------------------+------+------|
+            | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
+            |------+------+-----------------------+------+------|
+    */
+
+  [BASE] = KEYMAP(  //  default layer
+  KC_GRV,   KC_1,  KC_2,  KC_3,  KC_4,  KC_5,  KC_6,  KC_7,  KC_8,     KC_9,    KC_0,     KC_MINS,  KC_EQL,    KC_BSLS,  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_LBRC,  KC_RBRC,   KC_BSPC,          \
+  CTL_ESC,  KC_A,  KC_S,  KC_D,  KC_F,  KC_G,  KC_H,  KC_J,  KC_K,     KC_L,    KC_SCLN,  KC_QUOT,  KC_ENT,                      \
+  KC_LSFT,  KC_Z,  KC_X,  KC_C,  KC_V,  KC_B,  KC_N,  KC_M,  KC_COMM,  KC_DOT,  KC_SLSH,  SFT_T(KC_ENT),  TT(FUNK),                    \
+                    KC_LALT,  KC_LGUI,  /*        */ KC_SPC,      MO(DYN),  KC_RALT),
+
+
+
+    /* Layer HHKB: HHKB mode (HHKB Fn)
+      |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+      | Pwr  | F1  | F2  | F3  | F4 | F5 | F6 | F7 | F8  | F9  | F10 | F11 | F12   | Ins   | Del |
+      |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+      | Caps |     |     |     |    |    |    |    | Psc | Slk | Pus | Up  |       | Backs |     |
+      |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+      |      | VoD | VoU | Mut |    |    | *  | /  | Hom | PgU | Lef | Rig | Enter |       |     |
+      |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+      |      |     |     |     |    |    | +  | -  | End | PgD | Dow |     |       |       |     |
+      |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+
+                 |------+------+----------------------+------+------+
+                 | **** | **** | ******************** | **** | **** |
+                 |------+------+----------------------+------+------+
+
+
+
+  [HHKB] = KEYMAP(
+  KC_PWR,   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_INS,   KC_DEL, \
+  KC_CAPS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  KC_UP,    KC_TRNS,  KC_BSPC,          \
+  KC_TRNS,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_PAST,  KC_PSLS,  KC_HOME,  KC_PGUP,  KC_LEFT,  KC_RGHT,  KC_PENT,                    \
+  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PPLS,  KC_PMNS,  KC_END,   KC_PGDN,  KC_DOWN,  KC_TRNS,  KC_TRNS,                    \
+                     KC_TRNS, KC_TRNS,           KC_TRNS,                KC_TRNS, KC_TRNS),
+
+  */
+ [FUNK] = KEYMAP(
+ KC_PWR,   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_INS,   KC_DEL, \
+ KC_CAPS,  KC_TRNS,  KC_UP,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PSCR,  KC_SLCK,  KC_PAUS,  KC_UP,    KC_TRNS,  KC_BSPC,          \
+ KC_TRNS,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_TRNS,  KC_TRNS,  KC_PAST,  KC_PSLS,  KC_HOME,  KC_PGUP,  KC_LEFT,  KC_RGHT,  KC_PENT,                    \
+ KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PPLS,  KC_PMNS,  KC_END,   KC_PGDN,  KC_DOWN,  KC_TRNS,  KC_TRNS,                    \
+                    KC_TRNS, KC_TRNS,           KC_TRNS,                KC_TRNS, KC_TRNS),
+[DYN] = KEYMAP(
+KC_TRNS,  DYN_REC_START1,  DYN_REC_START2,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  DYN_MACRO_PLAY1,   DYN_MACRO_PLAY2, \
+KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PGUP,  KC_TRNS,  KC_TRNS,          \
+KC_TRNS,  KC_VOLD,  KC_VOLU,  KC_MUTE,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  MACSLEEP,  KC_HOME,  KC_END ,  KC_TRNS,                    \
+KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_PGDN,  KC_TRNS,  KC_TRNS,                    \
+                   KC_TRNS, KC_TRNS,           DYN_REC_STOP,                KC_TRNS, KC_TRNS)
+  };
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case 0:
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+      }
+    return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  uint16_t macro_kc = (keycode == MO(DYN) ? DYN_REC_STOP : keycode);
+  if (!process_record_dynamic_macro(macro_kc, record)) {
+    return false;
+  }
+
+  return true;
+}
diff --git a/keyboards/hhkb/keymaps/mjt/readme.md b/keyboards/hhkb/keymaps/mjt/readme.md
new file mode 100644 (file)
index 0000000..ff575ce
--- /dev/null
@@ -0,0 +1,16 @@
+# Mike's HHKB
+
+- Surprisingly stock for the most part
+- Dynamic macros
+- ctrl key has tapkey for escape
+- right shift has tapkey for enter 
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Base for letters and mods.
+
+Funk layer is my tweaked function layer
+
+Dyn layer has dynamic macros.  Record with 1 and 2, playback with \ and
+upper-right-most key.  Also turns the arrow clusters into nav keys.
diff --git a/keyboards/jd45/keymaps/mjt/Makefile b/keyboards/jd45/keymaps/mjt/Makefile
new file mode 100644 (file)
index 0000000..c920006
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes      # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/jd45/keymaps/mjt/config.h b/keyboards/jd45/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..2766395
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    geekhack
+#define PRODUCT         JD45
+#define DESCRIPTION     q.m.k. keyboard firmware for JD45
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { F0, F1, F5, B4 }
+#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+#define USB_MAX_POWER_CONSUMPTION 50
+#define BACKLIGHT_BREATHING
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/jd45/keymaps/mjt/keymap.c b/keyboards/jd45/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..1a73022
--- /dev/null
@@ -0,0 +1,80 @@
+#include "jd45.h"
+
+/* Mike's Layout for JD45 with backlight LEDs acting as layer indicator
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP(
+  TAB,    Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P, MINS, BSLS,
+  FN1,    A,    S,    D,    F,    G,    H,    J,    K,    L, QUOT,  ENT,
+  FN0,    Z,    X,    C,    V,    B,    N,    M, COMM,  DOT, SLSH, RSFT,
+   NO, LCTL, LALT, LGUI,  SPC,  BSPC, APP,  FN2,  ESC,   NO ),
+[1] = KEYMAP(
+GRV,  TRNS,   UP, TRNS,   7,    8,    9,    0, MINS,  EQL, PSCR, LBRC, RBRC,
+TRNS, LEFT, DOWN, RGHT,   4,    5,    6,  INS, HOME, PGUP, SCLN, TRNS,
+TRNS, TRNS, TRNS, TRNS,   1,    2,    3,  DEL,  END, PGDN, TRNS, TRNS,
+TRNS, TRNS, TRNS, SPC, TRNS,  DEL, TRNS, FN3, TRNS, TRNS ),
+[2] = KEYMAP(
+TRNS, TRNS, VOLU, TRNS,   F7,   F8,   F9,  F10,  F11,  F12, PSCR, FN3, FN4,
+TRNS, MPRV, VOLD, MNXT,   F4,   F5,   F6,    J,    K,    L, SCLN, TRNS,
+TRNS, TRNS, TRNS, TRNS,   F1,   F2,   F3, MUTE, MPRV, MNXT, MSTP, TRNS,
+TRNS, TRNS, TRNS, LGUI, TRNS, TRNS, TRNS, TRNS, PAUS, TRNS )
+/*  ,
+[3] = KEYMAP(
+TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+TRNS, TRNS, TRNS, TRNS, TRNS, BTLD, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS )*/
+};
+
+enum macro_id {
+    M_LAYER1,
+    M_LAYER2
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_MODS_TAP_TOGGLE(MOD_LSFT),
+    // [1] = ACTION_LAYER_TAP_TOGGLE(1),
+    [1] = ACTION_MACRO(M_LAYER1),
+    [2] = ACTION_LAYER_TAP_TOGGLE(2),
+    [3] = ACTION_BACKLIGHT_STEP(),
+    [4] = ACTION_BACKLIGHT_TOGGLE()
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+      switch(id) {
+        case M_LAYER1:
+            // need to add a timer for doubletap: https://github.com/jackhumbert/qmk_firmware/wiki#timer-functionality
+            // action_function_tap may also handle this...
+            if (record->event.pressed)
+            {
+                breathing_speed_set(3);
+                breathing_enable();
+                layer_on(1);
+            }
+            else
+            {
+                breathing_speed_set(1);
+                breathing_self_disable();
+                layer_off(1);
+            }
+        break;
+        case M_LAYER2:
+            if (record->event.pressed)
+            {
+                breathing_speed_set(2);
+                breathing_pulse();
+                layer_on(2);
+            }
+            else
+            {
+                breathing_speed_set(1);
+                breathing_self_disable();
+                layer_off(2);
+            }
+        break;
+      }
+    return MACRO_NONE;
+};
diff --git a/keyboards/jd45/keymaps/mjt/readme.md b/keyboards/jd45/keymaps/mjt/readme.md
new file mode 100644 (file)
index 0000000..54bdb83
--- /dev/null
@@ -0,0 +1,12 @@
+# Mike's JD45 standard layout
+
+- Backlight that matches active layer
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Base for letters and mods.
+
+Function 1 layer adds a centered numpad to the board
+
+Function 2 layer replaces the numpad numbers with Fkeys.
diff --git a/keyboards/jd45/keymaps/mjt/rules.mk b/keyboards/jd45/keymaps/mjt/rules.mk
new file mode 100644 (file)
index 0000000..6eec211
--- /dev/null
@@ -0,0 +1,67 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the
+#     processor frequency in Hz. You can then use this symbol in your source code to
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+#
+#     This will be an integer division of F_USB below, as it is sourced by
+#     F_USB after it has run through any CPU prescalers. Note that this value
+#     does not *change* the processor frequency - it should merely be updated to
+#     reflect the processor speed set externally so that the code can use accurate
+#     software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+#     This will define a symbol, F_USB, in all source code files equal to the
+#     input clock frequency (before any prescaling is performed) in Hz. This value may
+#     differ from F_CPU if prescaling is used on the latter, and is required as the
+#     raw input clock is fed directly to the PLL sections of the AVR for high speed
+#     clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+#     at the end, this will be done automatically to create a 32-bit value in your
+#     source code.
+#
+#     If no clock division is performed on the input clock inside the AVR (via the
+#     CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+#   Teensy halfKay   512
+#   Teensy++ halfKay 1024
+#   Atmel DFU loader 4096
+#   LUFA bootloader  4096
+#   USBaspLoader     2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+#   comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes  # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes  # Audio control and System control(+450)
+CONSOLE_ENABLE = yes   # Console for debug(+400)
+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
+NKRO_ENABLE = yes              # USB Nkey Rollover - not yet supported in LUFA
+BACKLIGHT_ENABLE = yes  # Enable keyboard backlight functionality
+MIDI_ENABLE = no               # MIDI controls
+# UNICODE_ENABLE = YES                 # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/jd45/keymaps/mjt6u/Makefile b/keyboards/jd45/keymaps/mjt6u/Makefile
new file mode 100644 (file)
index 0000000..f9cec3b
--- /dev/null
@@ -0,0 +1,23 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no        # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes        # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # 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
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+DEBUG_ENABLE = yes
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/jd45/keymaps/mjt6u/config.h b/keyboards/jd45/keymaps/mjt6u/config.h
new file mode 100644 (file)
index 0000000..bf9dc6d
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID       0xFEED
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    geekhack
+#define PRODUCT         JD45
+#define DESCRIPTION     q.m.k. keyboard firmware for JD45
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { F0, F1, F5, B4 }
+#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/jd45/keymaps/mjt6u/keymap.c b/keyboards/jd45/keymaps/mjt6u/keymap.c
new file mode 100644 (file)
index 0000000..44f0c31
--- /dev/null
@@ -0,0 +1,149 @@
+#include "jd45.h"
+
+enum jd45_layers
+{
+  _QWERTY,
+  _QWERTYNUMMODS,
+  _NUMSYM,
+  _FUNCTION,
+  _NUMPAD,
+  _FKEYNUMPAD,
+  _ADJUST
+};
+
+enum jd45_keycodes
+{
+  NUMSYM = SAFE_RANGE,
+  MACSLEEP,
+  USEFNMODS,
+  USENUMMODS,
+  DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+#define LONGPRESS_DELAY 150
+#define LAYER_TOGGLE_DELAY 900
+
+#define _______ KC_TRNS
+#define __MOD__ KC_TRNS
+#define XXXXXXX KC_NO
+#define F_FNSPC F(0)
+#define F_NUMSPC F(1)
+#define F_FNTAB F(2)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = {
+  {F_FNTAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_MINS, KC_BSPC},
+   {CTL_T(KC_ESC),    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,  LT(_ADJUST, KC_QUOT)},
+     {KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
+  { XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX,  XXXXXXX,  XXXXXXX, F_FNSPC,  XXXXXXX, XXXXXXX, MO(_FUNCTION),  MO(_ADJUST) }
+},
+[_QWERTYNUMMODS] = {
+  {F_FNTAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_MINS, KC_BSPC},
+   {CTL_T(KC_ESC),    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,  LT(_ADJUST, KC_QUOT)},
+     {KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
+  {XXXXXXX,  KC_LALT, KC_LGUI, XXXXXXX,  XXXXXXX,  XXXXXXX, F_NUMSPC,  XXXXXXX, XXXXXXX,  MO(_FKEYNUMPAD), MO(_ADJUST) }
+},
+[_NUMSYM] = {
+{KC_GRV,     KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,   KC_0, _______, KC_DEL},
+ {__MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______},
+  {_______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______},
+{XXXXXXX, __MOD__, __MOD__, XXXXXXX,  XXXXXXX,  XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}
+},
+[_FUNCTION] = {
+{__MOD__,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11, KC_F12},
+{__MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______},
+{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+{XXXXXXX, __MOD__, __MOD__, XXXXXXX,  XXXXXXX,  XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__ , __MOD__}
+},
+[_NUMPAD] = {
+{KC_GRV,  _______,   KC_UP, _______,   KC_7,    KC_8,    KC_9,    KC_0, KC_MINS,  KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC},
+{_______, KC_LEFT, KC_DOWN, KC_RGHT,   KC_4,    KC_5,    KC_6,  KC_INS, KC_HOME, KC_PGUP, _______, _______},
+{_______, _______, _______, _______,   KC_1,    KC_2,    KC_3,  KC_DEL,  KC_END, KC_PGDN, _______, _______},
+{XXXXXXX, _______, _______, XXXXXXX,  XXXXXXX,  XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}
+},
+[_FKEYNUMPAD] = {
+{_______, _______, KC_VOLU, _______,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12, KC_PSCR, _______, _______},
+{_______, KC_MPRV, KC_VOLD, KC_MNXT,   KC_F4,   KC_F5,   KC_F6,    KC_J,    KC_K,    KC_L, KC_SCLN, _______},
+{_______, _______, _______, _______,   KC_F1,   KC_F2,   KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______},
+{XXXXXXX, _______, _______, XXXXXXX,  XXXXXXX,  XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__ }
+},
+[_ADJUST] = {
+  {_______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______},
+  { _______,  _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______},
+  {  _______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______},
+  {XXXXXXX, _______, _______,XXXXXXX,  XXXXXXX,  XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}
+ }
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+  [0] = ACTION_LAYER_TAP_KEY(_NUMSYM, KC_SPC),
+  [1] = ACTION_LAYER_TAP_KEY(_NUMPAD, KC_SPC),
+  [2] = ACTION_LAYER_TAP_KEY(_FUNCTION, KC_TAB),
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+static bool singular_key = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  uint16_t macro_kc = (keycode == MO(_ADJUST) ? DYN_REC_STOP : keycode);
+  if (!process_record_dynamic_macro(macro_kc, record)) {
+    return false;
+  }
+  println(" ");
+  print("process record");
+
+  switch (keycode) {
+  case MACSLEEP:
+    if (record->event.pressed) {
+      // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+      register_code(KC_RSFT);
+      register_code(KC_RCTL);
+      register_code(KC_POWER);
+      unregister_code(KC_POWER);
+      unregister_code(KC_RCTL);
+      unregister_code(KC_RSFT);
+    }
+    return false;
+    break;
+  case USEFNMODS:
+    if (record->event.pressed) {
+      persistent_default_layer_set(1UL<<_QWERTY);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_fnpc, false, 0);
+      #endif
+      print("Space-FN");
+    }
+    return false;
+    break;
+  case USENUMMODS:
+    if (record->event.pressed) {
+      persistent_default_layer_set(1UL<<_QWERTYNUMMODS);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_fnmac, false, 0);
+      #endif
+      print("Space-Numpad");
+    }
+    return false;
+    break;
+  default:
+      singular_key = false;
+    break;
+  }
+
+  return true;
+};
+
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+    // debug_enable = true;
+}
diff --git a/keyboards/jd45/keymaps/mjt6u/readme.md b/keyboards/jd45/keymaps/mjt6u/readme.md
new file mode 100644 (file)
index 0000000..a43ddf5
--- /dev/null
@@ -0,0 +1,23 @@
+# Mike's JD45 with 6u Spacebar
+
+- Early draft of numsym that misses a lot of symbols
+- Numpad layer available for evaluation
+- Works with iPhone Camera Adapter
+- Dynamic macros
+
+## Layers
+
+Qwerty for letters and mods.
+
+Qwertymods layer switches some Modifiers around
+
+Numsym puts the number keys across the top row like a Planck. Arrows are on hjkl
+which makes the other NumSym dynamic from my other boards fall apart
+
+Function layer replaces the top row numbers with Fkeys.
+
+Numpad layer makes a number pad in the center.
+
+Fkeynumpad replaces the numpad numbers with Fkeys.
+
+Adjust layer has macros and configuration.
diff --git a/keyboards/lets_split/keymaps/mjt/Makefile b/keyboards/lets_split/keymaps/mjt/Makefile
new file mode 100644 (file)
index 0000000..90616d1
--- /dev/null
@@ -0,0 +1,25 @@
+
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+NKRO_ENABLE = yes            # 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
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+ONEHAND_ENABLE = no        # Enable one-hand typing
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no    # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/mjt/config.h b/keyboards/lets_split/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..dc9fa5b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+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/>.
+*/
+
+
+#define USE_SERIAL
+
+#define MASTER_LEFT
+// #define _MASTER_RIGHT
+// #define EE_HANDS
+
+
+#ifdef SUBPROJECT_rev1
+    #include "../../rev1/config.h"
+#endif
+#ifdef SUBPROJECT_rev2
+    #include "../../rev2/config.h"
+#endif
+#ifdef SUBPROJECT_rev2fliphalf
+       #include "../../rev2fliphalf/config.h"
+#endif
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 10
\ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/mjt/keymap.c b/keyboards/lets_split/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..4dd0d9a
--- /dev/null
@@ -0,0 +1,217 @@
+#include "lets_split.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef BACKLIGHT_ENABLE
+  #include "backlight.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+// 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.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+  QWERTY = SAFE_RANGE,
+  COLEMAK,
+  DVORAK,
+  LOWER,
+  RAISE,
+  ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP( \
+  KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC, \
+  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_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP( \
+  KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC, \
+  KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, \
+  KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = KEYMAP( \
+  KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_BSPC, \
+  KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH, \
+  KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT , \
+  ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |     |    \  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = KEYMAP( \
+  KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+  KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |      |      |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = KEYMAP( \
+  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_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, \
+  _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |      |      |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] =  KEYMAP( \
+  _______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+  _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
+  _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, \
+  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
+float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+        #endif
+        persistent_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case COLEMAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+        #endif
+        persistent_default_layer_set(1UL<<_COLEMAK);
+      }
+      return false;
+      break;
+    case DVORAK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+        #endif
+        persistent_default_layer_set(1UL<<_DVORAK);
+      }
+      return false;
+      break;
+    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;
+}
\ No newline at end of file
diff --git a/keyboards/mitosis/keymaps/mjt/config.h b/keyboards/mitosis/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..2209a9e
--- /dev/null
@@ -0,0 +1,74 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID       0xFEEB
+#define PRODUCT_ID      0x6060
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    MJT
+#define PRODUCT         Mitosis
+#define DESCRIPTION     q.m.k. keyboard firmware for Mitosis
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 10
+
+// fix iPhone power adapter issue
+#define USB_MAX_POWER_CONSUMPTION 50
+// #define CATERINA_BOOTLOADER
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+    keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+#define PREVENT_STUCK_MODIFIERS
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+//UART settings for communication with the RF microcontroller
+#define SERIAL_UART_BAUD 1000000
+#define SERIAL_UART_DATA UDR1
+#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
+#define SERIAL_UART_INIT() do { \
+       /* baud rate */ \
+       UBRR1L = SERIAL_UART_UBRR; \
+       /* baud rate */ \
+       UBRR1H = SERIAL_UART_UBRR >> 8; \
+       /* enable TX and RX */ \
+       UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
+       /* 8-bit data */ \
+       UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+       } while(0)
+
+#endif
diff --git a/keyboards/mitosis/keymaps/mjt/keymap.c b/keyboards/mitosis/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..01443d5
--- /dev/null
@@ -0,0 +1,329 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "mitosis.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.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 mitosis_layers
+{
+  _QWERTY,
+  _SHIFTED,
+  _FUNCTIONPC,
+  _FUNCTIONMAC,
+  _FUNCSHIFT,
+  _ADJUST
+};
+
+enum mitosis_keycodes
+{
+  FNKEY = SAFE_RANGE,
+  SHIFT,
+  MACSLEEP,
+  FNMAC,
+  FNPC,
+  DYNAMIC_MACRO_RANGE,
+};
+
+
+// Macro definitions for readability
+enum mitosis_macros
+{
+  VOLU,
+  VOLD,
+  ESCM
+};
+
+
+#include "dynamic_macro.h"
+
+#define LONGPRESS_DELAY 150
+#define LAYER_TOGGLE_DELAY 900
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define __MOD__ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_QWERTY] = { /* QWERTY adapted to this crazy thing */
+    {KC_Q,       KC_W,    KC_E,    KC_R,    KC_T,           KC_Y,    KC_U,    KC_I,    KC_O,        KC_P    },
+    {KC_A,       KC_S,    KC_D,    KC_F,    KC_G,           KC_H,    KC_J,    KC_K,    KC_L,        KC_SCLN },
+    {SFT_T(KC_Z), KC_X,   KC_C,    KC_V,    KC_B,           KC_N,    KC_M,    KC_COMM, KC_DOT,      SFT_T(KC_SLSH) },
+    {XXXXXXX,    KC_LCTL, M(ESCM),  KC_TAB,  KC_QUOT,       KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT,    XXXXXXX },
+    {XXXXXXX,    KC_LALT, KC_LGUI, KC_SPC,  SHIFT,          FNKEY,   KC_BSPC, KC_ENT,  MO(_ADJUST), XXXXXXX }
+  },
+
+
+  [_SHIFTED] = { /* Shifted Layer, layered so that tri_layer can be used, or selectively
+                                   able to modify individual key's shifted behaviour */
+    {_______, _______, _______, _______, _______,       _______, _______, _______, _______, _______ },
+    {_______, _______, _______, _______, _______,       _______, _______, _______, _______, _______ },
+    {_______, _______, _______, _______, _______,       _______, _______, _______, _______, _______ },
+    {XXXXXXX, __MOD__, KC_DEL,  _______, _______,       _______, _______, _______, _______, XXXXXXX },
+    {XXXXXXX, __MOD__, __MOD__, _______, __MOD__,       __MOD__, _______, _______, KC_NO,   XXXXXXX }
+  },
+
+
+  [_FUNCTIONPC] = { /* Function Layer mimicks planck's raise layer somewhat */
+    {KC_1,       KC_2,          KC_3,    KC_4,      KC_5,          KC_6,    KC_7,    KC_8,    KC_9,    KC_0    },
+    {LCTL(KC_A), LCTL(KC_S),    _______, LCTL(KC_F),_______,       _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC },
+    {LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V),_______,       _______, KC_BSLS, _______, _______, KC_QUOT },
+    {XXXXXXX,    __MOD__,        KC_DEL, _______,   KC_GRV,        KC_HOME, KC_PGDN, KC_PGUP, KC_END,  XXXXXXX },
+    {XXXXXXX,    __MOD__,       __MOD__, _______,   __MOD__,       __MOD__, _______, KC_PSCR, KC_NO,   XXXXXXX }
+  },
+
+  [_FUNCTIONMAC] = { /* Function Layer mimicks planck's raise layer somewhat */
+    {KC_1,       KC_2,          KC_3,    KC_4,      KC_5,          KC_6,    KC_7,    KC_8,    KC_9,    KC_0    },
+    {LGUI(KC_A), LGUI(KC_S),    _______, LGUI(KC_F),_______,       _______, KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC },
+    {LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V),_______,       _______, KC_BSLS, _______, _______, KC_QUOT },
+    {XXXXXXX,    __MOD__,        KC_DEL, _______,   KC_GRV,        KC_HOME, KC_PGDN, KC_PGUP, KC_END,  XXXXXXX },
+    {XXXXXXX,    __MOD__,       __MOD__, _______,   __MOD__,       __MOD__, _______, KC_PSCR, KC_NO,   XXXXXXX }
+  },
+
+  [_FUNCSHIFT] = { /* Function Shifted Layer mimicks planck's lower layer somewhat */
+    {_______, _______, _______, _______, _______,       _______, _______, _______, _______, _______ },
+    {KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,         KC_F6,   _______, _______, KC_LCBR, KC_RCBR },
+    {KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,        KC_F12,  _______, _______, _______, _______ },
+    {XXXXXXX, __MOD__, KC_DEL,  _______, KC_TILD,       _______, _______, _______, _______, XXXXXXX },
+    {XXXXXXX, __MOD__, __MOD__, _______, __MOD__,       __MOD__, _______, _______, _______, XXXXXXX }
+  },
+
+
+  [_ADJUST] = { /* Adjust layer for fancy stuff and macros */
+    {RESET,   FNPC,    _______, _______,  _______,       _______, DYN_REC_START1,  DYN_REC_START2,  _______,  _______ },
+    {FNMAC,   _______,   AU_ON, AU_OFF,   _______,       _______, _______,         _______,         MACSLEEP, _______ },
+    {MUV_DE,  MUV_IN,    MU_ON, MU_OFF,   _______,       _______, KC_MUTE,         KC_MPRV,         KC_MNXT,  KC_MPLY },
+    {XXXXXXX, __MOD__, _______, _______,  _______,       _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,  _______,  XXXXXXX },
+    {XXXXXXX, __MOD__, __MOD__, _______,  __MOD__,       __MOD__, _______,         _______,         __MOD__,  XXXXXXX }
+  }
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2]     = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2]    = SONG(COLEMAK_SOUND);
+float tone_fnpc[][2]     = SONG(PLOVER_SOUND);
+float tone_fnmac[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+static uint16_t function_layer = _FUNCTIONMAC;
+static uint16_t key_timer;
+
+void persistent_function_layer_set(uint16_t new_function_layer) {
+  // eeconfig_update_function_layer(new_function_layer);
+  function_layer = new_function_layer;
+  // should clear layers to avoid getting stuck.
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+  // MACRODOWN only works in this function
+  switch(id) {
+
+  //switch multiplexing for media, short tap for volume up, long press for play/pause
+  case VOLU:
+    if (record->event.pressed) {
+      key_timer = timer_read();           // if the key is being pressed, we start the timer.
+    } else {         // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
+      if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {           // LONGPRESS_DELAY being 150ms, the threshhold we pick for counting something as a tap.
+        return MACRO(T(MPLY), END);
+      } else {
+        return MACRO(T(VOLU), END);
+      }
+    }
+    break;
+
+  //switch multiplexing for media, short tap for volume down, long press for next track
+  case VOLD:
+    if (record->event.pressed) {
+      key_timer = timer_read();
+    } else {
+      if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
+        return MACRO(T(MNXT), END);
+      } else {
+        return MACRO(T(VOLD), END);
+      }
+    }
+    break;
+
+  //switch multiplexing for escape, short tap for escape, long press for context menu
+  case ESCM:
+    if (record->event.pressed) {
+      key_timer = timer_read();
+    } else {
+      if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
+        return MACRO(T(APP), END);
+      } else {
+        return MACRO(T(ESC), END);
+      }
+    }
+    break;
+  }
+  return MACRO_NONE;
+};
+
+static bool singular_key = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  uint16_t macro_kc = (keycode == MO(_ADJUST) ? DYN_REC_STOP : keycode);
+  if (!process_record_dynamic_macro(macro_kc, record)) {
+    return false;
+  }
+  uint8_t layer;
+  layer = biton32(layer_state);  // get the current layer
+
+  //custom layer handling for tri_layer,
+  switch (keycode) {
+  case MACSLEEP:
+    if (record->event.pressed) {
+      // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+      register_code(KC_RSFT);
+      register_code(KC_RCTL);
+      register_code(KC_POWER);
+      unregister_code(KC_POWER);
+      unregister_code(KC_RCTL);
+      unregister_code(KC_RSFT);
+    }
+    return false;
+    break;
+  case FNKEY:
+    if (record->event.pressed) {
+      key_timer = timer_read();
+      singular_key = true;
+      // layer_on(_FUNCTION);
+      layer_on(function_layer);
+    } else {
+      if (timer_elapsed(key_timer) < LAYER_TOGGLE_DELAY || !singular_key) {
+        layer_off(function_layer);
+      }
+    }
+    update_tri_layer(function_layer, _SHIFTED, _FUNCSHIFT);
+    return false;
+    break;
+  //SHIFT is handled as LSHIFT in the general case
+  case SHIFT:
+    if (record->event.pressed) {
+      key_timer = timer_read();
+      singular_key = true;
+      layer_on(_SHIFTED);
+      register_code(KC_LSFT);
+    } else {
+      if (timer_elapsed(key_timer) < LAYER_TOGGLE_DELAY || !singular_key) {
+        layer_off(_SHIFTED);
+        unregister_code(KC_LSFT);
+      }
+    }
+    update_tri_layer(function_layer, _SHIFTED, _FUNCSHIFT);
+    return false;
+    break;
+  case FNPC:
+    if (record->event.pressed) {
+      persistent_function_layer_set(_FUNCTIONPC);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_fnpc, false, 0);
+      #endif
+    }
+    return false;
+    break;
+  case FNMAC:
+    if (record->event.pressed) {
+      persistent_function_layer_set(_FUNCTIONMAC);
+      #ifdef AUDIO_ENABLE
+        PLAY_NOTE_ARRAY(tone_fnmac, false, 0);
+      #endif
+    }
+    return false;
+    break;
+  //If any other key was pressed during the layer mod hold period,
+  //then the layer mod was used momentarily, and should block latching
+  default:
+    singular_key = false;
+    break;
+  }
+
+  //FUNCSHIFT has been shifted by the SHIFT handling, some keys need to be excluded
+  if (layer == _FUNCSHIFT) {
+    //F1-F12 should be sent as unshifted keycodes,
+    //and ] needs to be unshifted or it is sent as }
+    if ( (keycode >= KC_F1 && keycode <= KC_F12)
+         || keycode == KC_RBRC ) {
+      if (record->event.pressed) {
+        unregister_mods(MOD_LSFT);
+      } else {
+        register_mods(MOD_LSFT);
+      }
+    }
+  }
+
+  return true;
+};
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
+
+void matrix_scan_user(void) {
+  uint8_t layer = biton32(layer_state);
+
+  switch (layer) {
+  case _QWERTY:
+    set_led_off;
+    break;
+  case _FUNCTIONMAC:
+    set_led_blue;
+    break;
+  case _FUNCTIONPC:
+    set_led_cyan;
+    break;
+  case _SHIFTED:
+    set_led_red;
+    break;
+  case _FUNCSHIFT:
+    set_led_green;
+    break;
+  case _ADJUST:
+    set_led_white;
+    break;
+  default:
+    break;
+  }
+};
diff --git a/keyboards/planck/keymaps/mjt/Makefile b/keyboards/planck/keymaps/mjt/Makefile
new file mode 100644 (file)
index 0000000..457a3d0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/mjt/config.h b/keyboards/planck/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..4072c5d
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+// #define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// fix iPhone power adapter issue
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+#endif
diff --git a/keyboards/planck/keymaps/mjt/keymap.c b/keyboards/planck/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..599dedf
--- /dev/null
@@ -0,0 +1,283 @@
+// This is MJT's bastardization of the planck and minivan defaults
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// 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 planck_layers {
+  _QWERTY,
+  _LOWER,
+  _RAISE,
+  _PLOVER,
+  _ADJUST,
+  _DYN
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  PLOVER,
+  LOWER,
+  RAISE,
+  BACKLIT,
+  EXT_PLV,
+  MACSLEEP,
+  DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |Lower |    Space    |Raise | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {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_LSFT, 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(_DYN), KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |  |   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home | End  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+  {KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR,    KC_ASTR,    KC_LPRN, KC_RPRN, _______},
+  {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS,    KC_PLUS,    KC_LCBR, KC_RCBR, KC_PIPE},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END,  _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______,    KC_MNXT,    KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Dn |Pg Up |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Home |Pg Dn |Pg Up | End  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______},
+  {KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS},
+  {_______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGDN, KC_PGUP, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+  {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+  {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |Pause |PR SC |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|      |Sleep |Plover|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |TogLED|      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______ , RESET,   _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_PSCR, KC_DEL },
+  {_______ , _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  _______, MACSLEEP,  PLOVER, _______},
+  {_______ , MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+[_DYN] = {
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______ },
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______}
+}
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2]     = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
+  if (!process_record_dynamic_macro(macro_kc, record)) {
+    return false;
+  }
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_qwerty);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    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 BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_SONG(tone_plover);
+        #endif
+        layer_off(_RAISE);
+        layer_off(_LOWER);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_plover_gb);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+    case MACSLEEP:
+      if (record->event.pressed) {
+          // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+          register_code(KC_RSFT);
+          register_code(KC_RCTL);
+          register_code(KC_POWER);
+          unregister_code(KC_POWER);
+          unregister_code(KC_RCTL);
+          unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+    PLAY_SONG(tone_goodbye);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_SONG(music_scale);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/mjt/readme.md b/keyboards/planck/keymaps/mjt/readme.md
new file mode 100644 (file)
index 0000000..ce4d90f
--- /dev/null
@@ -0,0 +1,22 @@
+# Mike's Plancklike Planck
+
+- Music/Audio
+- Dynamic Macros
+- Media Keys
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Qwerty for letters and mods.
+
+Raise and Lower are mostly default with a few tweaks.
+
+Adjust layer is tough to get to so it is only for keyboard configuration stuff.
+
+## Dynamic Macros
+
+Hold TAB key, then press ";" to record macro 1 and "'" to record macro 2.
+
+When you are done recording, press TAB again.
+
+For playback of macros, TAB+"," plays macro 1 and TAB+","plays macro 2.
diff --git a/keyboards/planck/keymaps/mjtnumsym/Makefile b/keyboards/planck/keymaps/mjtnumsym/Makefile
new file mode 100644 (file)
index 0000000..457a3d0
--- /dev/null
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/mjtnumsym/config.h b/keyboards/planck/keymaps/mjtnumsym/config.h
new file mode 100644 (file)
index 0000000..4072c5d
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+   - MIDI notes can be sent when in Music mode is on
+*/
+// #define MIDI_BASIC
+
+/* enable advanced MIDI features:
+   - MIDI notes can be added to the keymap
+   - Octave shift and transpose
+   - Virtual sustain, portamento, and modulation wheel
+   - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// fix iPhone power adapter issue
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+#endif
diff --git a/keyboards/planck/keymaps/mjtnumsym/keymap.c b/keyboards/planck/keymaps/mjtnumsym/keymap.c
new file mode 100644 (file)
index 0000000..0be016f
--- /dev/null
@@ -0,0 +1,282 @@
+// This is MJT's bastardization of the planck and minivan defaults
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// 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 planck_layers {
+  _QWERTY,
+  _FKEYS,
+  _NUMSYM,
+  _PLOVER,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  PLOVER,
+  FKEYS,
+  NUMSYM,
+  BACKLIT,
+  EXT_PLV,
+  MACSLEEP,
+  DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt  | GUI  |FKEYS |    Space    |NUMSYM | Left | Down |  Up  |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+  {KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC},
+  {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_LSFT, 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_LCTL, KC_LCTL, KC_LALT, KC_LGUI, FKEYS,   KC_SPC,  KC_SPC,  NUMSYM,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT}
+},
+
+/* FKEYS
+ * ,-----------------------------------------------------------------------------------.
+ * |   ~  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del  | F11  | F12  | F13  | F14  | F15  |      |      |Sleep |      | Rec1 | Rec2 |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |      |      |      |      |      |      |      | Mac1 | Mac2 |      | Stop |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FKEYS] = {
+  {KC_TILD, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______},
+  {KC_DEL,  KC_F11,  KC_F12,  KC_F13,  KC_F14,  KC_F15,  KC_F6,   _______, _______, MACSLEEP, DYN_REC_START1, DYN_REC_START2},
+  {_______, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, DYN_REC_STOP},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* NUMSYM
+ * ,-----------------------------------------------------------------------------------.
+ * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |  Del |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  |  '   |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   _  |   +  |   {  |   }  |   |  |   -  |   =  |   [  |   ]  |   \  |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |      |      |      |      |      |             |      | Home |Pg Dn |Pg Up | End  |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMSYM] = {
+  {KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    _______},
+  {KC_DEL, KC_EXLM,  KC_AT,  KC_HASH, KC_DLR,  KC_PERC,  KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______},
+  {_______,KC_UNDS,  KC_PLUS,KC_LCBR, KC_RCBR, KC_PIPE,  KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS, _______},
+  {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |   D  |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |   Z  |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit |      |      |   A  |   O  |             |   E  |   U  |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+  {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+  {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {EXT_PLV, XXXXXXX, XXXXXXX, KC_C,    KC_V,    XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (FKEYS + NUMSYM)
+ * ,-----------------------------------------------------------------------------------.
+ * |      | Reset|      |      |      |      |      |      |      |Pause |PR SC |  Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|      |Sleep |Plover|      |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |      |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|      |      |      |      |      |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |TogLED|      |      |      |      |             |      |      |      |      |      |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+  {_______ , RESET,   _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_PSCR, KC_DEL },
+  {_______ , _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  _______, MACSLEEP,  PLOVER, _______},
+  {_______ , MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},
+  {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+} /*,
+[_DYN] = {
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______ },
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+  {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______}
+}*/
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2]     = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  uint16_t macro_kc = (keycode == FKEYS ? DYN_REC_STOP : keycode);
+  if (!process_record_dynamic_macro(macro_kc, record)) {
+    return false;
+  }
+  switch (keycode) {
+    case QWERTY:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_qwerty);
+        #endif
+        persistant_default_layer_set(1UL<<_QWERTY);
+      }
+      return false;
+      break;
+    case FKEYS:
+      if (record->event.pressed) {
+        layer_on(_FKEYS);
+        update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+      } else {
+        layer_off(_FKEYS);
+        update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+      }
+      return false;
+      break;
+    case NUMSYM:
+      if (record->event.pressed) {
+        layer_on(_NUMSYM);
+        update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+      } else {
+        layer_off(_NUMSYM);
+        update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        register_code(KC_RSFT);
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      } else {
+        unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+    case PLOVER:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          stop_all_notes();
+          PLAY_SONG(tone_plover);
+        #endif
+        layer_off(_NUMSYM);
+        layer_off(_FKEYS);
+        layer_off(_ADJUST);
+        layer_on(_PLOVER);
+        if (!eeconfig_is_enabled()) {
+            eeconfig_init();
+        }
+        keymap_config.raw = eeconfig_read_keymap();
+        keymap_config.nkro = 1;
+        eeconfig_update_keymap(keymap_config.raw);
+      }
+      return false;
+      break;
+    case EXT_PLV:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_SONG(tone_plover_gb);
+        #endif
+        layer_off(_PLOVER);
+      }
+      return false;
+      break;
+    case MACSLEEP:
+      if (record->event.pressed) {
+          // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+          register_code(KC_RSFT);
+          register_code(KC_RCTL);
+          register_code(KC_POWER);
+          unregister_code(KC_POWER);
+          unregister_code(KC_RCTL);
+          unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+    PLAY_SONG(tone_goodbye);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_SONG(music_scale);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/mjtnumsym/readme.md b/keyboards/planck/keymaps/mjtnumsym/readme.md
new file mode 100644 (file)
index 0000000..ba6d051
--- /dev/null
@@ -0,0 +1,26 @@
+# Mike's Rethought Planck
+
+- Music/Audio
+- Dynamic Macros
+- Media Keys
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Qwerty for letters and mods.
+
+Numsym for all numbers and symbols used in typing. Follows a similar approach to
+planck but puts both on the same layer eschewing the F-keys.  
+
+Fkeys layer is for the seldom used stuff like F-keys and some additional features
+such as dynamic macros, media keys, and a sleep shortcut for OS X.
+
+Adjust layer is mainly for keyboard configuration stuff.
+
+## Dynamic Macros
+
+Hold TAB key, then press ";" to record macro 1 and "'" to record macro 2.
+
+When you are done recording, press TAB again.
+
+For playback of macros, TAB+"," plays macro 1 and TAB+","plays macro 2.
diff --git a/keyboards/roadkit/keymaps/flipphone/Makefile b/keyboards/roadkit/keymaps/flipphone/Makefile
new file mode 100644 (file)
index 0000000..f4671a9
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # 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
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/config.h b/keyboards/roadkit/keymaps/flipphone/config.h
new file mode 100644 (file)
index 0000000..df06a26
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
\ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/keymap.c b/keyboards/roadkit/keymaps/flipphone/keymap.c
new file mode 100644 (file)
index 0000000..b48d72e
--- /dev/null
@@ -0,0 +1,216 @@
+#include "roadkit.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef BACKLIGHT_ENABLE
+  #include "backlight.h"
+#endif
+
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+
+void backlight_toggle(void){
+};
+
+enum roadkit_layers {
+  _NUMPAD,
+  _FPH,
+  _FPHNOISY,
+  _ADJUST,
+  _DYN
+};
+
+enum roadkit_keycodes {
+  NUMPAD = SAFE_RANGE,
+  FPH_1,
+  FPH_2,
+  FPH_3,
+  FPH_4,
+  FPH_5,
+  FPH_6,
+  FPH_7,
+  FPH_8,
+  FPH_9,
+  FN_0,
+  BACKLIT,
+  MACSLEEP,
+  DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// Fillers to make keymaps cleaner looking
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_NUMPAD] = /* Numpad */
+    KEYMAP(KC_KP_7, KC_KP_8,   KC_KP_9, KC_KP_PLUS,  \
+           KC_KP_4, KC_KP_5,   KC_KP_6,              \
+           KC_KP_1, KC_KP_2,   KC_KP_3, KC_KP_ENTER, \
+           LT(_ADJUST, KC_KP_0),  KC_KP_DOT),
+  [_FPH] = /* Quiet T9 */
+    KEYMAP(FPH_7, FPH_8,   FPH_9, KC_KP_PLUS,  \
+           FPH_4, FPH_5,   FPH_6,              \
+           FPH_1, FPH_2,   FPH_3, SFT_T(KC_KP_ENTER), \
+           LT(_ADJUST, KC_SPACE),   KC_KP_DOT),
+  [_FPHNOISY] = /* Noisy T9 */
+    KEYMAP(FPH_7, FPH_8,   FPH_9, KC_KP_PLUS,  \
+           FPH_4, FPH_5,   FPH_6,              \
+           FPH_1, FPH_2,   FPH_3, SFT_T(KC_KP_ENTER), \
+           LT(_ADJUST, KC_SPACE),   KC_KP_DOT),
+ [_ADJUST] = /* Adjustments */
+   KEYMAP(KC_NUMLOCK, TG(_FPHNOISY),  TG(_FPH), TG(_NUMPAD),  \
+         KC_BSPC, BACKLIT,   KC_DEL,              \
+         MACSLEEP, _______,   _______, _______, \
+         _______,           MO(_DYN)),
+ [_DYN] = /* DYNAMIC MACRO */
+    KEYMAP(DYN_REC_START1, DYN_REC_START2, _______, DYN_REC_STOP,  \
+         _______, _______,  _______,              \
+         DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
+         _______,            _______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+uint16_t fph_tap_qty = false;
+uint16_t fph_keycode = 0; // stores which spacebar was used, either raise or lower...
+
+uint16_t get_render_keycode(uint16_t keycode, uint16_t tap_qty){ // maybe replace shift with "mods"
+  tap_qty--; // reduce by one to match array indexes.
+  switch(keycode){
+    case FPH_2:
+      {uint16_t kc[] = {KC_A, KC_B, KC_C};
+       if(tap_qty % 6 > 2)
+        return LSFT(kc[tap_qty % 3]);
+      return kc[tap_qty % 3];}
+    break;
+    case FPH_3:
+      {uint16_t kc[] = {KC_D, KC_E, KC_F};
+       if(tap_qty % 6 > 2)
+        return LSFT(kc[tap_qty % 3]);
+      return kc[tap_qty % 3];}
+    break;
+    case FPH_4:
+      {uint16_t kc[] = {KC_G, KC_H, KC_I};
+       if(tap_qty % 6 > 2)
+        return LSFT(kc[tap_qty % 3]);
+      return kc[tap_qty % 3];}
+    break;
+    case FPH_5:
+      {uint16_t kc[] = {KC_J, KC_K, KC_L};
+       if(tap_qty % 6 > 2)
+        return LSFT(kc[tap_qty % 3]);
+      return kc[tap_qty % 3];}
+    break;
+    case FPH_6:
+      {uint16_t kc[] = {KC_M, KC_N, KC_O};
+       if(tap_qty % 6 > 2)
+        return LSFT(kc[tap_qty % 3]);
+      return kc[tap_qty % 3];}
+    break;
+    case FPH_7:
+      {uint16_t kc[] = {KC_P, KC_Q, KC_R, KC_S};
+       if(tap_qty % 8 > 2)
+        return LSFT(kc[tap_qty % 4]);
+      return kc[tap_qty % 4];}
+    break;
+    case FPH_8:
+      {uint16_t kc[] = {KC_T, KC_U, KC_V};
+       if(tap_qty % 8 > 2)
+        return LSFT(kc[tap_qty % 4]);
+      return kc[tap_qty % 4];}
+    break;
+    case FPH_9:
+      {uint16_t kc[] = {KC_W, KC_X, KC_Y, KC_Z};
+       if(tap_qty % 8 > 2)
+        return LSFT(kc[tap_qty % 4]);
+      return kc[tap_qty % 4];}
+    break;
+    case FPH_1:
+      {uint16_t kc[] = {KC_COMM, LSFT(KC_SLSH), KC_EXLM, KC_AT, KC_MINS, KC_UNDS, KC_PLUS, \
+          KC_SCLN, LSFT(KC_SCLN), KC_QUOT, LSFT(KC_QUOT), KC_TILD, \
+          KC_PIPE, KC_BSLS, KC_HASH, LSFT(KC_4), KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, \
+          KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, LSFT(KC_COMM), LSFT(KC_DOT)};
+      return kc[tap_qty % 26];}
+  }
+  return KC_NO;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+    if (!process_record_dynamic_macro(keycode, record)) {
+      return false;
+    }
+    uint8_t layer;
+    layer = biton32(layer_state);
+
+    switch (keycode) {
+    case FPH_1 ... FPH_9:
+      if(layer == _FPHNOISY){
+        if (record->event.pressed) {
+          if(fph_keycode != keycode) { // key change
+            fph_tap_qty = 0;
+            fph_keycode = keycode;
+          } else { // same key tapped again so erase and increment.
+            register_code(KC_BSPC);
+            unregister_code(KC_BSPC);
+            fph_tap_qty++;
+          }
+          uint16_t render_keycode = get_render_keycode(keycode, fph_tap_qty);
+          // find mods? Apply mods..
+          register_code(render_keycode);
+          unregister_code(render_keycode);
+        } else {
+          // do we need to do anything on key-release?
+        }
+      } else { // not noisy, be demure .
+        if (record->event.pressed) {
+          if(fph_keycode != keycode) { // key change, kill everything.
+            uint16_t render_keycode = get_render_keycode(fph_keycode, fph_tap_qty);
+            // find mods? Apply mods..
+            register_code(render_keycode);
+            unregister_code(render_keycode);
+            fph_keycode = keycode;
+            fph_tap_qty = 0;
+          } else { // same key tapped again so increment counter silently
+            fph_tap_qty++;
+          }
+        } else {
+            // do we need to do anything on key-release?
+            // maybe start a timer on this one?
+        }
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      }
+      return false;
+      break;
+    case MACSLEEP:
+      if (record->event.pressed) {
+          register_code(KC_RSFT);
+          register_code(KC_RCTL);
+          register_code(KC_POWER);
+          unregister_code(KC_POWER);
+          unregister_code(KC_RCTL);
+          unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/roadkit/keymaps/flipphone/readme.md b/keyboards/roadkit/keymaps/flipphone/readme.md
new file mode 100644 (file)
index 0000000..ad630be
--- /dev/null
@@ -0,0 +1,26 @@
+# Flip Phone layout for Roadkit
+
+BEWARE, THIS DOES NOT WORK YET. 
+
+Uses the numpad with classic cellular phone style letters assigned to the numbers.
+
+# LAYERS
+
+* Numpad - The layer that matches the caps mostly
+* FPH - Base layer for text
+* FPHNOISY - Text layer that outputs every character and then backspaces as they're replaced
+* DYN - dynamic macro layer for recording and playing macros
+
+## FPH
+
+Poke the "2" key twice and it makes "B".
+
+## FPHNOISY
+
+Poke the "2" key twice and it makes "A"+backspace+"B" so you can see it cycle through.
+
+## MACROS
+
+May be able to record macros with the T9 layer because the "KC_*"s are only sent
+at the end.  Trying to do a macro with T9NOISY would probably fill up the buffer
+in just a few characters.
diff --git a/keyboards/roadkit/keymaps/mjt/Makefile b/keyboards/roadkit/keymaps/mjt/Makefile
new file mode 100644 (file)
index 0000000..f4671a9
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in 
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = no         # Console for debug(+400)
+COMMAND_ENABLE = yes        # Commands for debug and configuration
+NKRO_ENABLE = yes           # 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
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
\ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/mjt/config.h b/keyboards/roadkit/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..df06a26
--- /dev/null
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
\ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/mjt/keymap.c b/keyboards/roadkit/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..d3c82ac
--- /dev/null
@@ -0,0 +1,236 @@
+#include "roadkit.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef BACKLIGHT_ENABLE
+  #include "backlight.h"
+#endif
+
+#ifdef AUDIO_ENABLE
+  #include "audio.h"
+#endif
+
+void backlight_toggle(void){
+};
+
+enum roadkit_layers {
+  _NUMPAD,
+  _NAVIGATION,
+  _EXCEL,
+  _ADJUST,
+  _DYN
+};
+
+enum minivan_keycodes {
+  NUMPAD = SAFE_RANGE,
+  NAVIGATION,
+  EXCEL,
+  NUMPAD_LOCK,
+  NAVIGATION_LOCK,
+  EXCEL_LOCK,
+  PARENS,
+  BRACKETS,
+  BRACES,
+  BACKLIT,
+  MACSLEEP,
+  DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// Fillers to make keymaps cleaner looking
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+  [_NUMPAD] = /* Numpad */
+    KEYMAP(KC_KP_7, KC_KP_8,   KC_KP_9, KC_KP_PLUS,  \
+           KC_KP_4, KC_KP_5,   KC_KP_6,              \
+           KC_KP_1, KC_KP_2,   KC_KP_3, NAVIGATION, \
+           EXCEL,            KC_KP_DOT),
+  [_EXCEL] = /* Excel related */
+    KEYMAP(KC_KP_SLASH, KC_KP_ASTERISK,   KC_MINS, KC_TAB,  \
+          KC_QUOT, KC_KP_EQUAL,  PARENS ,              \
+          KC_DQT, BRACKETS,  BRACES, _______, \
+          _______,            MO(_DYN)),
+  [_NAVIGATION] = /* Navigation */
+    KEYMAP(KC_HOME, _______,  KC_PGUP, KC_TAB,  \
+          KC_END,  KC_UP,     KC_PGDN,              \
+          KC_LEFT, KC_DOWN,   KC_RIGHT, _______, \
+          _______,            MO(_DYN)),
+ [_ADJUST] = /* Adjustments */
+   KEYMAP(KC_NUMLOCK, MACSLEEP,   BACKLIT, _______,  \
+         KC_BSPC, _______,   KC_DEL,              \
+         EXCEL_LOCK, NUMPAD_LOCK,   NAVIGATION_LOCK, _______, \
+         _______,          _______),
+ [_DYN] = /* DYNAMIC MACRO */
+    KEYMAP(DYN_REC_START1, DYN_REC_START2, _______, _______,  \
+         _______, _______,  _______,              \
+         DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
+         _______,            _______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]    = SONG(STARTUP_SOUND);
+float tone_numpad[][2]     = SONG(QWERTY_SOUND);
+float tone_excel[][2]     = SONG(DVORAK_SOUND);
+float tone_navigation[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]     = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2]  = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]     = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+bool fn_tap_used = false; // sets to false when space is pressed,
+                          // sets to true when any other key is pressed,
+                          //when space is lifted, if another key was prssed, don't send space.
+uint16_t fn_keycode = 0; // stores which spacebar was used, either raise or lower...
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  if (!process_record_dynamic_macro(keycode, record)) {
+    return false;
+  }
+
+  switch (keycode) {
+      case NAVIGATION: // This key is enter if tapped, navigation if held
+        if (record->event.pressed) {
+          fn_keycode = NAVIGATION; // these two lines figure out if the next action is
+          fn_tap_used = false;
+          layer_on(_NAVIGATION);
+          update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+        } else {
+          layer_off(_NAVIGATION);
+          update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+          if(!fn_tap_used && fn_keycode == NAVIGATION ){
+              register_code(KC_KP_ENTER);
+              unregister_code(KC_KP_ENTER);
+              fn_keycode = 0;
+              fn_tap_used = false;
+          }
+        }
+        return false;
+        break;
+      case EXCEL:
+        if (record->event.pressed) {
+          fn_keycode = EXCEL;
+          fn_tap_used = false;
+          layer_on(_EXCEL);
+          update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+        } else {
+          layer_off(_EXCEL);
+          update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+          if(!fn_tap_used && fn_keycode == EXCEL ){
+              register_code(KC_KP_0);
+              unregister_code(KC_KP_0);
+              fn_keycode = 0;
+              fn_tap_used = false;
+          }
+        }
+        return false;
+        break;
+    default:
+        fn_tap_used = true;
+        break; // don't return because this just handles the spacebars.
+    }
+    // this is the normal keycode processing switch from Planck default layout.
+    switch (keycode) {
+    case NUMPAD_LOCK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_numpad, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_NUMPAD);
+      }
+      return false;
+      break;
+    case NAVIGATION_LOCK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_navigation, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_NAVIGATION);
+      }
+      return false;
+      break;
+    case EXCEL_LOCK:
+      if (record->event.pressed) {
+        #ifdef AUDIO_ENABLE
+          PLAY_NOTE_ARRAY(tone_excel, false, 0);
+        #endif
+        persistant_default_layer_set(1UL<<_EXCEL);
+      }
+      return false;
+      break;
+    case PARENS:
+      if (record->event.pressed) {
+          register_code(KC_RSFT);
+          register_code(KC_9);
+          unregister_code(KC_9);
+          register_code(KC_0);
+          unregister_code(KC_0);
+          register_code(KC_RSFT);
+          register_code(KC_LEFT);
+          unregister_code(KC_LEFT);
+      }
+      return false;
+      break;
+    case BRACKETS:
+      if (record->event.pressed) {
+          register_code(KC_LBRC);
+          unregister_code(KC_LBRC);
+          register_code(KC_RBRC);
+          unregister_code(KC_RBRC);
+          register_code(KC_LEFT);
+          unregister_code(KC_LEFT);
+        }
+        return false;
+        break;
+    case BRACES:
+      if (record->event.pressed) {
+          register_code(KC_RSFT);
+          register_code(KC_LBRC);
+          unregister_code(KC_LBRC);
+          register_code(KC_RBRC);
+          unregister_code(KC_RBRC);
+          unregister_code(KC_RSFT);
+          register_code(KC_LEFT);
+          unregister_code(KC_LEFT);
+      }
+      return false;
+      break;
+    case BACKLIT:
+      if (record->event.pressed) {
+        #ifdef BACKLIGHT_ENABLE
+          backlight_step();
+        #endif
+      }
+      return false;
+      break;
+    case MACSLEEP:
+      if (record->event.pressed) {
+          register_code(KC_RSFT);
+          register_code(KC_RCTL);
+          register_code(KC_POWER);
+          unregister_code(KC_POWER);
+          unregister_code(KC_RCTL);
+          unregister_code(KC_RSFT);
+      }
+      return false;
+      break;
+  }
+  return true;
+}
diff --git a/keyboards/roadkit/keymaps/mjt/readme.md b/keyboards/roadkit/keymaps/mjt/readme.md
new file mode 100644 (file)
index 0000000..80c0e52
--- /dev/null
@@ -0,0 +1,22 @@
+# Mike's custom keymap for roadkit
+
+Based on the 13 key layout.
+
+## LAYERS
+
+* Numpad - The layer that matches the caps
+* Excel - / * - = and () [] {} macros
+* Navigation - arrow keys and home/end
+* ADJUST - just like planck adjust, lets you set default layer.
+* DYN - dynamic macro layer for recording and playing macros
+
+## MACROS
+
+Sadly, the dynamic macros are probably going worthless because they keys that
+they record have to be pressed on this keyboard. This keyboard doesn't have
+most letters...
+
+## LEADER KEYS
+
+This board would probably be better with the user of leader keys instead of
+complex layers with a raise/lower setup...  Something to look into for later. 
diff --git a/keyboards/tv44/keymaps/mjt/Makefile b/keyboards/tv44/keymaps/mjt/Makefile
new file mode 100644 (file)
index 0000000..41afd9a
--- /dev/null
@@ -0,0 +1,21 @@
+# Build Options
+#   change to "no" to disable the options, or define them in the Makefile in
+#   the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
+CONSOLE_ENABLE = yes         # Console for debug(+400)
+COMMAND_ENABLE = no        # Commands for debug and configuration
+NKRO_ENABLE = no           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality
+MIDI_ENABLE = no            # MIDI controls
+AUDIO_ENABLE = no           # Audio output on port C6
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight.  Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+       include ../../../../Makefile
+endif
diff --git a/keyboards/tv44/keymaps/mjt/config.h b/keyboards/tv44/keymaps/mjt/config.h
new file mode 100644 (file)
index 0000000..e89a3ea
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+#ifdef BACKLIGHT_ENABLE
+    #define BACKLIGHT_PIN B2
+    #define BACKLIGHT_LEVELS 7
+#endif
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+#endif
diff --git a/keyboards/tv44/keymaps/mjt/keymap.c b/keyboards/tv44/keymaps/mjt/keymap.c
new file mode 100644 (file)
index 0000000..25f8cfc
--- /dev/null
@@ -0,0 +1,199 @@
+//Author: mike terhar
+
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef BACKLIGHT_ENABLE
+  #include "backlight.h"
+#endif
+
+enum minivan_layers {
+  _QWERTY,
+  _NUMSYM,
+  _FKEYS,
+  _FKEYGRV,
+  _PLOVER,
+  _ADJUST
+};
+
+enum planck_keycodes {
+  QWERTY = SAFE_RANGE,
+  DYNKEY,
+  DYNAMIC_MACRO_RANGE,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define FKEYS F(_FKEYS)
+#define NUMSYM F(_NUMSYM)
+#define FKEYGRV F(_FKEYGRV)
+#define MACSLEEP M(5)
+#define PLOVER M(6)
+#define LAYERRESET M(7)
+#define BACKLIT M(8)
+#define ADJUST M(9)
+#define XXXXXXX KC_NO
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = {
+  {FKEYS, KC_Q,   KC_W,   KC_E, KC_R,   KC_T,   KC_Y,   KC_U, KC_I,   KC_O,  KC_P,   KC_BSPC},
+  {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_LSFT,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_LCTL,KC_LALT,KC_LGUI, KC_SPC,XXXXXXX,XXXXXXX,XXXXXXX,NUMSYM,KC_LEFT,KC_DOWN,KC_UP ,KC_RIGHT}
+},
+[_NUMSYM] = {
+  {FKEYGRV,  KC_1,  KC_2,    KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,  _______},
+  {KC_DEL,KC_EXLM, KC_AT,  KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, ADJUST },
+  { _______,  KC_UNDS,KC_PLUS, KC_LCBR,KC_RCBR,KC_PIPE , KC_MINS,KC_EQL,KC_LBRC, KC_RBRC, KC_BSLS, _______},
+  {_______,_______,_______,_______,XXXXXXX,XXXXXXX,XXXXXXX,_______,    KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+[_FKEYS] ={
+  {_______, KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5, KC_F6, KC_F7,  KC_F8,  KC_F9,  KC_F10, _______},
+  {KC_DEL, KC_F11, KC_F12,  KC_F13,  KC_F14,  KC_F15, _______, _______,  _______,  MACSLEEP, DYN_REC_START1, DYN_REC_START2 },
+  {KC_CAPS,  _______, _______,  _______,  _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,_______,DYN_REC_STOP},
+  {_______,_______,_______,LAYERRESET,XXXXXXX,XXXXXXX,XXXXXXX,LAYERRESET,    KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[_PLOVER] = {
+  {KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1,    KC_1   },
+  {XXXXXXX, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC},
+  {XXXXXXX, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT},
+  {LAYERRESET, XXXXXXX, KC_C,    KC_V,   XXXXXXX ,  XXXXXXX, XXXXXXX, KC_N,    KC_M,    XXXXXXX, XXXXXXX, XXXXXXX}
+},
+[_ADJUST] = {
+ {_______ , RESET,   _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PAUS, KC_PSCR, KC_DEL },
+ {_______ , _______, _______, _______, _______,  AG_NORM, AG_SWAP, QWERTY,  _______, MACSLEEP,  PLOVER, _______},
+ {_______ , _______,  _______,  _______,   _______,  _______,   _______,  _______, _______, _______, _______, _______},
+ {BACKLIT, _______, _______, LAYERRESET, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______}
+}
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2]           = SONG(STARTUP_SOUND);
+float tone_qwerty[][2]            = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2]     = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2]    = SONG(COLEMAK_SOUND);
+float tone_plover[][2]            = SONG(PLOVER_SOUND);
+float tone_adjust[][2]            = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2]            = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+  eeconfig_update_default_layer(default_layer);
+  default_layer_set(default_layer);
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+ [_FKEYS] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_TAB),
+ [_FKEYGRV] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_GRV),
+ [_NUMSYM] = ACTION_LAYER_TAP_TOGGLE(_NUMSYM),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+      switch(id) {
+        case 5: // MACSLEEP
+            if (record->event.pressed) {
+              register_code(KC_RSFT);
+              register_code(KC_RCTL);
+              register_code(KC_POWER);
+              unregister_code(KC_POWER);
+              unregister_code(KC_RCTL);
+              unregister_code(KC_RSFT);
+            }
+        break;
+        case 6: // PLOVER
+              if (record->event.pressed) {
+              #ifdef AUDIO_ENABLE
+                stop_all_notes();
+                PLAY_NOTE_ARRAY(tone_plover, false, 0);
+              #endif
+              layer_off(_NUMSYM);
+              layer_off(_FKEYS);
+              layer_off(_ADJUST);
+              layer_on(_PLOVER);
+            }
+        break;
+        case 7: // LAYERRESET
+              if (record->event.pressed) {
+              #ifdef AUDIO_ENABLE
+                PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+              #endif
+              layer_off(_NUMSYM);
+              layer_off(_FKEYS);
+              layer_off(_PLOVER);
+              layer_off(_ADJUST);
+            }
+        break;
+        case 8: // BACKLIT
+          if (record->event.pressed) {
+            register_code(KC_RSFT);
+            #ifdef BACKLIGHT_ENABLE
+              backlight_step();
+            #endif
+          } else {
+            unregister_code(KC_RSFT);
+          }
+        break;
+        case 9: // ADJUST
+          if(record->event.pressed) {
+            #ifdef AUDIO_ENABLE
+              stop_all_notes();
+              PLAY_NOTE_ARRAY(tone_adjust, false, 0);
+            #endif
+            layer_off(_NUMSYM);
+            layer_off(_FKEYS);
+            layer_off(_PLOVER);
+            layer_on(_ADJUST);
+          }
+      }
+    return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+  uint16_t macro_kc = keycode;
+  if (keycode == FKEYS || keycode == ADJUST || keycode == FKEYGRV ){
+    macro_kc = DYN_REC_STOP;
+  }
+  if (!process_record_dynamic_macro(macro_kc, record)) {
+    return false;
+  }
+
+  return true;
+}
+
+void matrix_init_user(void) {
+    #ifdef AUDIO_ENABLE
+        startup_user();
+    #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+    _delay_ms(20); // gets rid of tick
+    PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+    PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+    _delay_ms(150);
+    stop_all_notes();
+}
+
+void music_on_user(void)
+{
+    music_scale_user();
+}
+
+void music_scale_user(void)
+{
+    PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+#endif
diff --git a/keyboards/tv44/keymaps/mjt/readme.md b/keyboards/tv44/keymaps/mjt/readme.md
new file mode 100644 (file)
index 0000000..c86985f
--- /dev/null
@@ -0,0 +1,26 @@
+# Mike's Minivan
+
+- Arrow Layout (45key)
+- Dynamic Macros
+- Media Keys
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Qwerty for letters and mods.
+
+Numsym for all numbers and symbols used in typing. Follows a similar approach to
+planck but puts both on the same layer eschewing the F-keys.  
+
+Fkeys layer is for the seldom used stuff like F-keys and some additional features
+such as dynamic macros, media keys, and a sleep shortcut for OS X.
+
+Adjust layer is tough to get to so it is only for keyboard configuration stuff.
+
+## Dynamic Macros
+
+Hold TAB key, then press ";" to record macro 1 and "'" to record macro 2.
+
+When you are done recording, press TAB again.
+
+For playback of macros, TAB+"," plays macro 1 and TAB+","plays macro 2.