]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Refactor E6V2 BMC PCB to get rid of custom i2c code in favor of QMK i2c_master (...
authorDrashna Jaelre <drashna@live.com>
Sun, 7 Apr 2019 14:33:10 +0000 (07:33 -0700)
committerGitHub <noreply@github.com>
Sun, 7 Apr 2019 14:33:10 +0000 (07:33 -0700)
* remove custom i2c code in favor of QMK i2c_master

* clean up config file

* fix pyusb install instructions

* fix naming in usbconfig.h

* disable bootmagic as it does not work for bmc boards

15 files changed:
keyboards/facew/config.h
keyboards/facew/facew.c
keyboards/facew/facew.h
keyboards/facew/i2c.c [deleted file]
keyboards/facew/i2c.h [deleted file]
keyboards/facew/keymaps/mechmerlin/keymap.c [deleted file]
keyboards/facew/keymaps/mechmerlin/readme.md [deleted file]
keyboards/facew/matrix.c [deleted file]
keyboards/facew/readme.md
keyboards/facew/rules.mk
keyboards/facew/usbconfig.h
keyboards/kc60/keymaps/noroadsleft/keymap.c
keyboards/kc60/keymaps/noroadsleft/readme.md
keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
keyboards/kc60/keymaps/noroadsleft/readme_ch5.md

index c952ca737233efd04a12cfbedbc3ed55d84b709c..b4fb0d4cddd19a492bbd5e6a34e71756e6067166 100644 (file)
@@ -15,8 +15,7 @@ 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 FACEW_CONFIG_H
-#define FACEW_CONFIG_H
+#pragma once
 
 #include "config_common.h"
 
@@ -40,7 +39,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define NO_BACKLIGHT_CLOCK
 #define BACKLIGHT_LEVELS 1
 #define RGBLIGHT_ANIMATIONS
-
-#define NO_UART 1
-
-#endif
index 9c255c68f4508612810e83f43e99cc12f3b2e266..7ec56548b16d1e1169d456e1f7e4e0ef107d8b05 100644 (file)
@@ -26,7 +26,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <avr/pgmspace.h>
 
 #include "action_layer.h"
-#include "i2c.h"
+#include "i2c_master.h"
 #include "quantum.h"
 
 #ifdef RGBLIGHT_ENABLE
@@ -42,7 +42,7 @@ void rgblight_set(void) {
     }
 
     i2c_init();
-    i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+    i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100);
 }
 #endif
 
index 215e06090cc06d8ef5079d7457a40413455e660a..b3356f2628e2080b92923a56e581fd2e252a1b9e 100644 (file)
@@ -15,8 +15,7 @@ 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 FACEW_H
-#define FACEW_H
+#pragma once
 
 #include "quantum.h"
 
@@ -53,5 +52,3 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
   { KC_NO, K61,   KC_NO, KC_NO, K64, K65, K66,   KC_NO, K68,   K69,   K60},   \
   { KC_NO, K71,   K72,   K73,   K74, K75, K76,   K77,   K78,   KC_NO, KC_NO}, \
 }
-
-#endif
diff --git a/keyboards/facew/i2c.c b/keyboards/facew/i2c.c
deleted file mode 100644 (file)
index a4f9521..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@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/>.
-*/
-
-// Please do not modify this file 
-
-#include <avr/io.h>
-#include <util/twi.h>
-
-#include "i2c.h"
-
-void i2c_set_bitrate(uint16_t bitrate_khz) {
-    uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
-    if (bitrate_div >= 16) {
-        bitrate_div = (bitrate_div - 16) / 2;
-    }
-    TWBR = bitrate_div;
-}
-
-void i2c_init(void) {
-    // set pull-up resistors on I2C bus pins
-    PORTC |= 0b11;
-
-    i2c_set_bitrate(400);
-
-    // enable TWI (two-wire interface)
-    TWCR |= (1 << TWEN);
-
-    // enable TWI interrupt and slave address ACK
-    TWCR |= (1 << TWIE);
-    TWCR |= (1 << TWEA);
-}
-
-uint8_t i2c_start(uint8_t address) {
-    // reset TWI control register
-    TWCR = 0;
-
-    // begin transmission and wait for it to end
-    TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
-    while (!(TWCR & (1<<TWINT)));
-
-    // check if the start condition was successfully transmitted
-    if ((TWSR & 0xF8) != TW_START) {
-        return 1;
-    }
-
-    // transmit address and wait
-    TWDR = address;
-    TWCR = (1<<TWINT) | (1<<TWEN);
-    while (!(TWCR & (1<<TWINT)));
-
-    // check if the device has acknowledged the READ / WRITE mode
-    uint8_t twst = TW_STATUS & 0xF8;
-    if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
-        return 1;
-    }
-
-    return 0;
-}
-
-void i2c_stop(void) {
-    TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-}
-
-uint8_t i2c_write(uint8_t data) {
-    TWDR = data;
-
-    // transmit data and wait
-    TWCR = (1<<TWINT) | (1<<TWEN);
-    while (!(TWCR & (1<<TWINT)));
-
-    if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
-        return 1;
-    }
-
-    return 0;
-}
-
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
-    if (i2c_start(address)) {
-        return 1;
-    }
-
-    for (uint16_t i = 0; i < length; i++) {
-        if (i2c_write(data[i])) {
-            return 1;
-        }
-    }
-
-    i2c_stop();
-
-    return 0;
-}
diff --git a/keyboards/facew/i2c.h b/keyboards/facew/i2c.h
deleted file mode 100644 (file)
index 93a69c9..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-Copyright 2016 Luiz Ribeiro <luizribeiro@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/>.
-*/
-
-// Please do not modify this file 
-
-#ifndef __I2C_H__
-#define __I2C_H__
-
-void i2c_init(void);
-void i2c_set_bitrate(uint16_t bitrate_khz);
-uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
-
-#endif
diff --git a/keyboards/facew/keymaps/mechmerlin/keymap.c b/keyboards/facew/keymaps/mechmerlin/keymap.c
deleted file mode 100644 (file)
index d7fb7a7..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@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/>.
-*/
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-  [0] = LAYOUT_all(
-      KC_GESC, 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_NO, KC_BSPC,
-      KC_TAB,  KC_Q,    KC_W,    KC_E,     KC_R,  KC_T,    KC_Y,    KC_U, KC_I, KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
-      KC_LCTL, KC_A,    KC_S,    KC_D,     KC_F,  KC_G,    KC_H,    KC_J, KC_K, KC_L,    KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
-      KC_LSFT, KC_NO,   KC_Z,    KC_X,     KC_C,  KC_V,    KC_B,    KC_N, KC_M, KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, TG(2),
-      KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RALT, KC_RGUI, KC_RCTL
-      ),
-  [1] = LAYOUT_all(
-      KC_GRV,  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_NO, KC_DEL,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      MO(3),   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
-      ),
-  [2] = LAYOUT_all(
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
-      ),
-
-  [3] = LAYOUT_all(
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,   KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-      KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
-      ),
-};
-
diff --git a/keyboards/facew/keymaps/mechmerlin/readme.md b/keyboards/facew/keymaps/mechmerlin/readme.md
deleted file mode 100644 (file)
index eeb83b0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-MechMerlin's FaceW Sprit Edition Layout
-======================
-
-This is the preferred 60% layout used by u/merlin36, host of the [MechMerlin YouTube channel](www.youtube.com/mechmerlin).
-
-## Keyboard Notes
-- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
-- Uses ps2avru instead of ps2avrgb
-- To put in reset mode hold `q` while inserting the USB cable
-- Use flashing instructions from ps2avrgb QMK port
-
-## Keymap Notes
-- Does not support any form of inswitch lighting as Merlin hates them.
-- Arrow toggle switch to the right of right shift
-- Reset is FN + Left Shift + R
-
-### Build
-To build this keymap, simply run `make facew:mechmerlin` from the qmk_firmware directory.
diff --git a/keyboards/facew/matrix.c b/keyboards/facew/matrix.c
deleted file mode 100644 (file)
index 57aa36b..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright 2017 Luiz Ribeiro <luizribeiro@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/>.
-*/
-
-#include <avr/io.h>
-#include <util/delay.h>
-
-#include "matrix.h"
-
-#ifndef DEBOUNCE
-#define DEBOUNCE       5
-#endif
-
-static uint8_t debouncing = DEBOUNCE;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-void matrix_init(void) {
-    // all outputs for rows high
-    DDRB = 0xFF;
-    PORTB = 0xFF;
-    // all inputs for columns
-    DDRA = 0x00;
-    DDRC &= ~(0x111111<<2);
-    DDRD &= ~(1<<PIND7);
-    // all columns are pulled-up
-    PORTA = 0xFF;
-    PORTC |= (0b111111<<2);
-    PORTD |= (1<<PIND7);
-
-    // initialize matrix state: all keys off
-    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-        matrix[row] = 0x00;
-        matrix_debouncing[row] = 0x00;
-    }
-}
-
-void matrix_set_row_status(uint8_t row) {
-    DDRB = (1 << row);
-    PORTB = ~(1 << row);
-}
-
-uint8_t bit_reverse(uint8_t x) {
-    x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
-    x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
-    x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
-    return x;
-}
-
-uint8_t matrix_scan(void) {
-    for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
-        matrix_set_row_status(row);
-        _delay_us(5);
-
-        matrix_row_t cols = (
-            // cols 0..7, PORTA 0 -> 7
-            (~PINA) & 0xFF
-        ) | (
-            // cols 8..13, PORTC 7 -> 0
-            bit_reverse((~PINC) & 0xFF) << 8
-        ) | (
-            // col 14, PORTD 7
-            ((~PIND) & (1 << PIND7)) << 7
-        );
-
-        if (matrix_debouncing[row] != cols) {
-            matrix_debouncing[row] = cols;
-            debouncing = DEBOUNCE;
-        }
-    }
-
-    if (debouncing) {
-        if (--debouncing) {
-            _delay_ms(1);
-        } else {
-            for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
-                matrix[i] = matrix_debouncing[i];
-            }
-        }
-    }
-
-    matrix_scan_user();
-
-    return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
-    return matrix[row];
-}
-
-void matrix_print(void) {
-}
index 578dcf888843d310f96598ab84dd676edcda8d3e..b749d18d296ac570c266766c8e71fe4e259f8697 100644 (file)
@@ -2,20 +2,12 @@
 
 A 60% no frills keyboard.
 
-The FaceW is a special run of the WKL B.Face sourced from Sprit that doesn't have underglow RGB LEDs
-but does have in switch LEDs. Also unlike the B.Face, it is based on ps2avru instead of ps2avrGB. It 
-is designed and manufactured in Korea.  It originally uses BootMapperClient for programming but 
-can now also use QMK. 
+The FaceW is a special run of the WKL B.Face sourced from Sprit that doesn't have underglow RGB LEDs but does have in switch LEDs. Also unlike the B.Face, it is based on ps2avru instead of ps2avrGB. It is designed and manufactured in Korea. 
 
 Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)  
 Hardware Supported: FaceW Sprit Edition PCB  
 Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1352
 
-## Keyboard Notes
-- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
-- Uses ps2avru instead of ps2avrgb
-- To put in reset mode hold `q` while inserting the USB cable
-
 Make example for this keyboard (after setting up your build environment):
 
     make facew:default
@@ -24,6 +16,8 @@ Flashing
 
 ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods. 
 
+**Reset Key:** To put the FaceW into reset, hold `q` (`K01`) while plugging in.
+
 Windows: 
 1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
 2. Place your keyboard into reset. 
@@ -42,12 +36,12 @@ macOS:
     ```
 3. Install the following packages:
     ```
-    brew install python
-    brew install pyusb
-    brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+    brew install python3
+    pip3 install pyusb
+    brew install --HEAD https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
 
 4. Place your keyboard into reset. 
 5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file. 
 
 
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
index 77d29b3320d0a5c6b6d00670c9f2b4718f2c2ac3..b939b0fd240b4208d6a4c3a371bd46f4f134281e 100644 (file)
@@ -31,20 +31,19 @@ F_CPU = 12000000
 BOOTLOADER = bootloadHID
 
 # build options
-BOOTMAGIC_ENABLE = yes
+BOOTMAGIC_ENABLE = no
 MOUSEKEY_ENABLE = yes
 EXTRAKEY_ENABLE = yes
 CONSOLE_ENABLE = yes
 COMMAND_ENABLE = yes
-BACKLIGHT_ENABLE = no
-RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
 RGBLIGHT_CUSTOM_DRIVER = yes
 
 OPT_DEFS = -DDEBUG_LEVEL=0
 
 # custom matrix setup
-CUSTOM_MATRIX = yes
-SRC = matrix.c i2c.c
+SRC = i2c_master.c
 
 # programming options
 PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
index d2d848fcdc8fd19f07621d98589d3f152dff5e28..f3d663f8a6ee1a3b6f915644c8b3dfd486c100c9 100644 (file)
@@ -8,8 +8,7 @@
  * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
  */
 
-#ifndef __usbconfig_h_included__
-#define __usbconfig_h_included__
+#pragma once
 
 #include "config.h"
 
@@ -241,8 +240,8 @@ section at the end of this file).
 #define USB_CFG_DEVICE_VERSION  0x00, 0x02
 /* Version number of the device: Minor number first, then major number.
  */
-#define USB_CFG_VENDOR_NAME     'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
-#define USB_CFG_VENDOR_NAME_LEN 13
+#define USB_CFG_VENDOR_NAME     'S', 'p', 'r', 'i', 't'
+#define USB_CFG_VENDOR_NAME_LEN 5
 /* These two values define the vendor name returned by the USB device. The name
  * must be given as a list of characters under single quotes. The characters
  * are interpreted as Unicode (UTF-16) entities.
@@ -251,8 +250,8 @@ section at the end of this file).
  * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
  * details.
  */
-#define USB_CFG_DEVICE_NAME     'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
-#define USB_CFG_DEVICE_NAME_LEN 8
+#define USB_CFG_DEVICE_NAME     'F', 'a', 'c', 'e', 'W'
+#define USB_CFG_DEVICE_NAME_LEN 5
 /* Same as above for the device name. If you don't want a device name, undefine
  * the macros. See the file USB-IDs-for-free.txt before you assign a name if
  * you use a shared VID/PID.
@@ -392,5 +391,3 @@ section at the end of this file).
 /* #define USB_INTR_PENDING        EIFR */
 #define USB_INTR_PENDING_BIT    INTF1
 #define USB_INTR_VECTOR         INT1_vect
-
-#endif /* __usbconfig_h_included__ */
index ee1f69e914c55abe3c3ae7da5d78f65a818a5397..98d73535687c515ddb4e8f89ac25db1692cc9b95 100644 (file)
@@ -9,24 +9,24 @@
 ** LAYER DEFINITIONS **
 **********************/
 enum layers_keymap {
-  // BASE LAYERS
-  _QWERTY = 0,
-  _DVORAK,
-  _COLEMAK,
-  _MAC,
-  _QUAKE2,
-  _QUAKE2_DVORAK,
-  _QUAKE2_CONSOLE,
-
-  // FUNCTION LAYERS
-  _FUNCWIN,
-  _FUNCMAC,
-  _FUNCQ2,
-
-  // OTHER LAYERS
-  _NUMPAD,
-  _MACROS,
-  _SYSTEM
+    // BASE LAYERS
+    _QWERTY = 0,
+    _DVORAK,
+    _COLEMAK,
+    _MAC,
+    _QUAKE2,
+    _QUAKE2_DVORAK,
+    _QUAKE2_CONSOLE,
+
+    // FUNCTION LAYERS
+    _FUNCWIN,
+    _FUNCMAC,
+    _FUNCQ2,
+
+    // OTHER LAYERS
+    _NUMPAD,
+    _MACROS,
+    _SYSTEM
 };
 
 // LAYER SHORT CODES
@@ -70,24 +70,24 @@ enum layers_keymap {
 
 // MACRO DEFINITIONS
 enum custom_keycodes {
-  F_CAPS = SAFE_RANGE,
-  T_L3DED,
-  G_PUSH,
-  G_FTCH,
-  G_COMM,
-  G_RST,
-  G_C10R,
-  G_BRCH,
-  SIGNA,
-  GO_Q2,
-  Q2_ON,
-  Q2_OFF,
-  Q2_ESC,
-  Q2_GRV,
-  MC_UNDO,
-  MC_PSTE,
-  NUBS_Z,
-  VRSN
+    F_CAPS = SAFE_RANGE,
+    T_L3DED,
+    G_PUSH,
+    G_FTCH,
+    G_COMM,
+    G_RST,
+    G_C10R,
+    G_BRCH,
+    SIGNA,
+    GO_Q2,
+    Q2_ON,
+    Q2_OFF,
+    Q2_ESC,
+    Q2_GRV,
+    MC_UNDO,
+    MC_PSTE,
+    NUBS_Z,
+    VRSN
 };
 
 
@@ -98,293 +98,314 @@ enum custom_keycodes {
 
 
 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-  switch(keycode) {
-    // these are our macros!
-    case F_CAPS:
-      /*
-        Objective: write a macro that checks the current layers that are
-        enabled, and activates the appropriate function layer.
-      */
-      if ( biton32(layer_state) == _MAC ) {
-        if (record->event.pressed) {
-          layer_on(_FUNCMAC);
-        } else {
-          layer_off(_FUNCMAC);
-        }
-      } else {
-        if (record->event.pressed) {
-          layer_on(_FUNCWIN);
-        } else {
-          layer_off(_FUNCWIN);
-        }
-      };
-      return false;
-    case T_L3DED:
-      if (record->event.pressed) {
-        SEND_STRING("lavak3DED ");
-      };
-      return false;
-    case G_PUSH:
-      if (record->event.pressed) {
-        SEND_STRING("git push origin ");
-      };
-      return false;
-    case G_FTCH:
-      if (record->event.pressed) {
-        if ( get_mods() & MOD_MASK_SHIFT ) {
-          clear_mods();
-          SEND_STRING("git pull upstream ");
-        } else {
-          SEND_STRING("git fetch upstream ");
-        }
-      };
-      return false;
-    case G_COMM:
-      if (record->event.pressed) {
-        SEND_STRING("git commit -m \"\"" SS_TAP(X_LEFT));
-        layer_off(_MACROS);
-      };
-      return false;
-    case G_BRCH:
-      if (record->event.pressed) {
-        if ( get_mods() & MOD_MASK_SHIFT ) {
-          clear_mods();
-          SEND_STRING("master");
-        } else {
-          SEND_STRING("$(git branch-name)");
-        }
-        layer_off(_MACROS);
-      };
-      return false;
-    case SIGNA:
-      if (record->event.pressed) {
-        SEND_STRING("\\- @noroadsleft" SS_TAP(X_ENTER));
-        layer_off(_MACROS);
-      };
-      return false;
-    case GO_Q2:
-      if (record->event.pressed) {
-        //default_layer_set(_QWERTY);
-        layer_move(_QWERTY); // TO(_QWERTY);
-        layer_on(_QUAKE2);
-        //layer_off(_SYSTEM);
-      };
-      return false;
-    case Q2_ON:
-      if (record->event.pressed) {
-        SEND_STRING(SS_TAP(X_ENTER));
-        layer_on(_DVORAK);
-        layer_on(_QUAKE2_DVORAK);
-      };
-      return false;
-    case Q2_OFF:
-      if (record->event.pressed) {
-        SEND_STRING(SS_TAP(X_ENTER));
-        layer_move(_QWERTY); // TO(_QWERTY);
-        layer_on(_QUAKE2);
-      };
-      return false;
-    case Q2_ESC:
-      if (record->event.pressed) {
-        SEND_STRING(SS_TAP(X_ESCAPE));
-        layer_move(_QWERTY); // TO(_QWERTY);
-        layer_on(_QUAKE2);
-      };
-      return false;
-    case Q2_GRV:
-      if (record->event.pressed) {
-        SEND_STRING(SS_TAP(X_GRAVE));
-        layer_on(_DVORAK);
-        layer_on(_QUAKE2_DVORAK);
-        layer_on(_QUAKE2_CONSOLE);
-      };
-      return false;
-    case MC_UNDO:
-      if (record->event.pressed) {
-        if ( get_mods() & MOD_MASK_SHIFT ) {
-          SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
-        } else {
-          SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) );
-        }
-      };
-      return false;
-    case MC_PSTE:
-      if (record->event.pressed) {
-        if ( get_mods() & MOD_MASK_SHIFT ) {
-          SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_V) SS_UP(X_LALT) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
-        } else {
-          SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_V) SS_UP(X_LGUI) );
-        }
-      };
-      return false;
-    case NUBS_Z:
-      if (record->event.pressed) {
-        if ( get_mods() & MOD_MASK_RALT ) {
-          SEND_STRING( SS_TAP(X_NONUS_BSLASH) );
-        } else {
-          SEND_STRING( SS_TAP(X_Z) );
-        }
-      };
-      return false;
-    case VRSN:
-      if (record->event.pressed) {
-        SEND_STRING( QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION );
-      }
-      return false;
-  } // switch()
-  return true;
+    switch(keycode) {
+        // these are our macros!
+        case F_CAPS:
+            /*
+             * Objective: write a macro that checks the current layers that are
+             * enabled, and activates the appropriate function layer.
+             */
+            if ( biton32(layer_state) == _MAC ) {
+                if (record->event.pressed) {
+                    layer_on(_FUNCMAC);
+                } else {
+                    layer_off(_FUNCMAC);
+                }
+            } else {
+                if (record->event.pressed) {
+                    layer_on(_FUNCWIN);
+                } else {
+                    layer_off(_FUNCWIN);
+                }
+            };
+            return false;
+        case T_L3DED:
+            if (record->event.pressed) {
+                SEND_STRING("lavak3DED ");
+            };
+            return false;
+        case G_PUSH:
+            if (record->event.pressed) {
+                SEND_STRING("git push origin ");
+            };
+            return false;
+        case G_FTCH:
+            if (record->event.pressed) {
+                if ( get_mods() & MOD_MASK_SHIFT ) {
+                    clear_mods();
+                    SEND_STRING("git pull upstream ");
+                } else {
+                    SEND_STRING("git fetch upstream ");
+                }
+            };
+            return false;
+        case G_COMM:
+            if (record->event.pressed) {
+                SEND_STRING("git commit -m \"\"" SS_TAP(X_LEFT));
+                layer_off(_MACROS);
+            };
+            return false;
+        case G_BRCH:
+            if (record->event.pressed) {
+                if ( get_mods() & MOD_MASK_SHIFT ) {
+                    clear_mods();
+                    SEND_STRING("master");
+                } else {
+                    SEND_STRING("$(git branch-name)");
+                }
+                layer_off(_MACROS);
+            };
+            return false;
+        case SIGNA:
+            if (record->event.pressed) {
+                SEND_STRING("\\- @noroadsleft" SS_TAP(X_ENTER));
+                layer_off(_MACROS);
+            };
+            return false;
+        case GO_Q2:
+            if (record->event.pressed) {
+                //default_layer_set(_QWERTY);
+                layer_move(_QWERTY); // TO(_QWERTY);
+                layer_on(_QUAKE2);
+                //layer_off(_SYSTEM);
+            };
+            return false;
+        case Q2_ON:
+            if (record->event.pressed) {
+                SEND_STRING(SS_TAP(X_ENTER));
+                layer_on(_DVORAK);
+                layer_on(_QUAKE2_DVORAK);
+            };
+            return false;
+        case Q2_OFF:
+            if (record->event.pressed) {
+                SEND_STRING(SS_TAP(X_ENTER));
+                layer_move(_QWERTY); // TO(_QWERTY);
+                layer_on(_QUAKE2);
+            };
+            return false;
+        case Q2_ESC:
+            if (record->event.pressed) {
+                SEND_STRING(SS_TAP(X_ESCAPE));
+                layer_move(_QWERTY); // TO(_QWERTY);
+                layer_on(_QUAKE2);
+            };
+            return false;
+        case Q2_GRV:
+            if (record->event.pressed) {
+                SEND_STRING(SS_TAP(X_GRAVE));
+                layer_on(_DVORAK);
+                layer_on(_QUAKE2_DVORAK);
+                layer_on(_QUAKE2_CONSOLE);
+            };
+            return false;
+        case MC_UNDO:
+            if (record->event.pressed) {
+                if ( get_mods() & MOD_MASK_SHIFT ) {
+                    SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
+                } else {
+                    SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) );
+                }
+            };
+            return false;
+        case MC_PSTE:
+            if (record->event.pressed) {
+                if ( get_mods() & MOD_MASK_SHIFT ) {
+                    SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_V) SS_UP(X_LALT) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
+                } else {
+                    SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_V) SS_UP(X_LGUI) );
+                }
+            };
+            return false;
+        case NUBS_Z:
+            if (record->event.pressed) {
+                if ( get_mods() & MOD_MASK_RALT ) {
+                    SEND_STRING( SS_DOWN(X_NONUS_BSLASH) );
+                } else {
+                    SEND_STRING( SS_DOWN(X_Z) );
+                }
+            } else {
+                if ( get_mods() & MOD_MASK_RALT ) {
+                    SEND_STRING( SS_UP(X_NONUS_BSLASH) );
+                } else {
+                    SEND_STRING( SS_UP(X_Z) );
+                }
+            };
+            return false;
+        case VRSN:
+            if (record->event.pressed) {
+                SEND_STRING( QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION );
+            }
+            return false;
+        case KC_1 ... KC_0:
+            if (record->event.pressed) {
+                if ( get_mods() & MOD_MASK_RALT ) {
+                    register_code( keycode + 0x3b );
+                } else {
+                    register_code( keycode );
+                }
+            } else {
+                if ( get_mods() & MOD_MASK_RALT ) {
+                    unregister_code( keycode + 0x3b );
+                } else {
+                    unregister_code( keycode );
+                }
+            }
+            return false;
+    } // switch()
+    return true;
 };
 
 
 // KEYMAPS
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 
-  /****************
-  ** BASE LAYERS **
-  ****************/
-
-  /* QWERTY */
-  [_QWERTY] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    KC_GESC, 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_BSPC, \
-    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_BSLS, \
-    FW_CAPS, 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, NUBS_Z,  KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   \
-    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FW), KC_RCTL  \
-  ),
-
-  /* Dvorak */
-  [_DVORAK] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC, KC_BSPC, \
-    KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH, KC_EQL,  KC_BSLS, \
-    FW_CAPS, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS, KC_ENT,           \
-    KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT,                   \
-    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FW), KC_RCTL  \
-  ),
-
-  /* Colemak */
-  [_COLEMAK] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    KC_GESC, 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_BSPC, \
-    KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
-    FW_CAPS, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, KC_ENT,           \
-    KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   \
-    KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FW), KC_RCTL  \
-  ),
-
-  /****************
-  ** OS OVERLAYS **
-  ****************/
-
-  /* Mac */
-  [_MAC] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    FM_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
-    _______, _______, _______,                   _______,                                     _______, _______, MO(_FM), _______  \
-  ),
-
-  /*********************
-  ** QUAKE 2 OVERLAYS **
-  *********************/
-
-  /* Quake 2 */
-  [_QUAKE2] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_ON,            \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
-    _______, _______, _______,                   _______,                                     _______, _______, MO(_FQ), _______  \
-  ),
-
-  [_QUAKE2_DVORAK] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    Q2_ESC,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_OFF,           \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
-    _______, _______, _______,                   _______,                                     _______, _______, MO(_FQ), _______  \
-  ),
-
-  [_QUAKE2_CONSOLE] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    Q2_ESC,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT,           \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
-    _______, _______, _______,                   _______,                                     _______, _______, MO(_FQ), _______  \
-  ),
-
-  /********************
-  ** FUNCTION LAYERS **
-  ********************/
-
-  /* Windows Fn layer */
-  [_FUNCWIN] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
-    _______, KC_CALC, KC_APP,  _______, _______, _______, KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
-    NO_CHNG, WN_SALL, _______, _______, _______, _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_PENT,          \
-    _______, WN_UNDO, WN_CUT,  WN_COPY, WN_PSTE, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SY), _______,                   \
-    _______, _______, _______,                   TG(_NP),                                     _______, TG(_MA), NO_CHNG, _______  \
-  ),
-
-  /* MacOS Fn layer */
-  [_FUNCMAC] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
-    _______, _______, _______, _______, _______, _______, KC_INS,  MC_HOME, KC_UP,   MC_END,  KC_PGUP, MC_PSCR, _______, _______, \
-    NO_CHNG, MC_SALL, _______, _______, _______, _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______,          \
-    _______, MC_UNDO, MC_CUT,  MC_COPY, MC_PSTE, _______, _______, _______, _______, _______, TG(_SY), _______,                   \
-    _______, _______, _______,                   TG(_NP),                                     _______, _______, NO_CHNG, _______  \
-  ),
-
-  /* Quake 2 Fn layer */
-  [_FUNCQ2] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    Q2_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
-    _______, _______, _______, _______, _______, _______, KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
-    NO_CHNG, _______, _______, _______, _______, _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_ENT,           \
-    _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(_SY), _______,                   \
-    _______, _______, _______,                   _______,                                     _______, _______, NO_CHNG, _______  \
-  ),
-
-  /*****************
-  ** OTHER LAYERS **
-  *****************/
-
-  /* Numpad layer */
-  [_NUMPAD] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    _______, _______, _______, _______, _______, _______, _______, KC_P7,   KC_P8,   KC_P9,   _______, _______, _______, _______, \
-    _______, _______, _______, _______, KC_E,    KC_F,    _______, KC_P4,   KC_P5,   KC_P6,   KC_PAST, KC_PSLS, KC_PEQL, _______, \
-    _______, _______, _______, _______, KC_C,    KC_D,    _______, KC_P1,   KC_P2,   KC_P3,   KC_PPLS, KC_PMNS, KC_PENT,          \
-    _______, _______, _______, _______, KC_A,    KC_B,    _______, KC_P0,   _______, KC_PDOT, _______, _______,                   \
-    _______, _______, _______,                   TG(_NP),                                     _______, _______, NO_CHNG, _______  \
-  ),
-
-  /* Macro layer */
-  [_MACROS] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, G_PUSH,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
-    _______, _______, _______, G_FTCH,  G_COMM,  _______, _______, _______, _______, T_L3DED, _______, _______, _______,          \
-    _______, _______, _______, _______, _______, G_BRCH,  SIGNA,   _______, _______, _______, _______, _______,                   \
-    _______, _______, _______,                   _______,                                     _______, _______, NO_CHNG, _______  \
-  ),
-
-  /* System layer */
-  [_SYSTEM] = LAYOUT_60_ansi(
-    //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
-    TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2,   XXXXXXX, XXXXXXX, XXXXXXX, RESET,   XXXXXXX, DEBUG,   XXXXXXX, VRSN,    XXXXXXX, \
-    XXXXXXX, XXXXXXX, TG(_MC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
-    XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          \
-    XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_TOGG, BL_INC,  BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   \
-    XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX,                                     XXXXXXX, XXXXXXX, NO_CHNG, XXXXXXX  \
-  ),
+    /****************
+    ** BASE LAYERS **
+    ****************/
+
+    /* QWERTY */
+    [_QWERTY] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        KC_GESC, 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_BSPC, \
+        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_BSLS, \
+        FW_CAPS, 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, NUBS_Z,  KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   \
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FW), KC_RCTL  \
+    ),
+
+    /* Dvorak */
+    [_DVORAK] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC, KC_BSPC, \
+        KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH, KC_EQL,  KC_BSLS, \
+        FW_CAPS, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_MINS, KC_ENT,           \
+        KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_RSFT,                   \
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FW), KC_RCTL  \
+    ),
+
+    /* Colemak */
+    [_COLEMAK] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        KC_GESC, 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_BSPC, \
+        KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
+        FW_CAPS, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT, KC_ENT,           \
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT,                   \
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                                      KC_RALT, KC_RGUI, MO(_FW), KC_RCTL  \
+    ),
+
+    /****************
+    ** OS OVERLAYS **
+    ****************/
+
+    /* Mac */
+    [_MAC] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        FM_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
+        _______, _______, _______,                   _______,                                     _______, _______, MO(_FM), _______  \
+    ),
+
+    /*********************
+    ** QUAKE 2 OVERLAYS **
+    *********************/
+
+    /* Quake 2 */
+    [_QUAKE2] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_ON,            \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
+        _______, _______, _______,                   _______,                                     _______, _______, MO(_FQ), _______  \
+    ),
+
+    [_QUAKE2_DVORAK] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        Q2_ESC,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_OFF,           \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
+        _______, _______, _______,                   _______,                                     _______, _______, MO(_FQ), _______  \
+    ),
+
+    [_QUAKE2_CONSOLE] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        Q2_ESC,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT,           \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,                   \
+        _______, _______, _______,                   _______,                                     _______, _______, MO(_FQ), _______  \
+    ),
+
+    /********************
+    ** FUNCTION LAYERS **
+    ********************/
+
+    /* Windows Fn layer */
+    [_FUNCWIN] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+        _______, KC_CALC, KC_APP,  _______, _______, _______, KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
+        NO_CHNG, WN_SALL, _______, _______, _______, _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_PENT,          \
+        _______, WN_UNDO, WN_CUT,  WN_COPY, WN_PSTE, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SY), _______,                   \
+        _______, _______, _______,                   TG(_NP),                                     _______, TG(_MA), NO_CHNG, _______  \
+    ),
+
+    /* MacOS Fn layer */
+    [_FUNCMAC] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+        _______, _______, _______, _______, _______, _______, KC_INS,  MC_HOME, KC_UP,   MC_END,  KC_PGUP, MC_PSCR, _______, _______, \
+        NO_CHNG, MC_SALL, _______, _______, _______, _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______,          \
+        _______, MC_UNDO, MC_CUT,  MC_COPY, MC_PSTE, _______, _______, _______, _______, _______, TG(_SY), _______,                   \
+        _______, _______, _______,                   TG(_NP),                                     _______, _______, NO_CHNG, _______  \
+    ),
+
+    /* Quake 2 Fn layer */
+    [_FUNCQ2] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        Q2_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,  \
+        _______, _______, _______, _______, _______, _______, KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
+        NO_CHNG, _______, _______, _______, _______, _______, KC_DEL,  KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_ENT,           \
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(_SY), _______,                   \
+        _______, _______, _______,                   _______,                                     _______, _______, NO_CHNG, _______  \
+    ),
+
+    /*****************
+    ** OTHER LAYERS **
+    *****************/
+
+    /* Numpad layer */
+    [_NUMPAD] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        _______, _______, _______, _______, _______, _______, _______, KC_P7,   KC_P8,   KC_P9,   _______, _______, _______, _______, \
+        _______, _______, _______, _______, KC_E,    KC_F,    _______, KC_P4,   KC_P5,   KC_P6,   KC_PAST, KC_PSLS, KC_PEQL, _______, \
+        _______, _______, _______, _______, KC_C,    KC_D,    _______, KC_P1,   KC_P2,   KC_P3,   KC_PPLS, KC_PMNS, KC_PENT,          \
+        _______, _______, _______, _______, KC_A,    KC_B,    _______, KC_P0,   _______, KC_PDOT, _______, _______,                   \
+        _______, _______, _______,                   TG(_NP),                                     _______, _______, NO_CHNG, _______  \
+    ),
+
+    /* Macro layer */
+    [_MACROS] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, G_PUSH,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+        _______, _______, _______, G_FTCH,  G_COMM,  _______, _______, _______, _______, T_L3DED, _______, _______, _______,          \
+        _______, _______, _______, _______, _______, G_BRCH,  SIGNA,   _______, _______, _______, _______, _______,                   \
+        _______, _______, _______,                   _______,                                     _______, _______, NO_CHNG, _______  \
+    ),
+
+    /* System layer */
+    [_SYSTEM] = LAYOUT_60_ansi(
+        //       2        3        4        5        6        7        8        9        10       11       12       13       14       15       16
+        TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2,   XXXXXXX, XXXXXXX, XXXXXXX, RESET,   XXXXXXX, DEBUG,   XXXXXXX, VRSN,    XXXXXXX, \
+        XXXXXXX, XXXXXXX, TG(_MC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          \
+        XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC,  BL_TOGG, BL_INC,  BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                   \
+        XXXXXXX, XXXXXXX, XXXXXXX,                   XXXXXXX,                                     XXXXXXX, XXXXXXX, NO_CHNG, XXXXXXX  \
+    ),
 
 };
index 59fbfd246a4b152d276e56c1dab963ecb46c93bb..c9db4f8de208af5e6a3989fe6b3f2f84b9a0bec3 100644 (file)
@@ -1,6 +1,6 @@
 # @noroadsleft's KC60 keymap
 
-### Last updated: February 14, 2019, 3:50 AM UTC-0800
+### Last updated: April 7, 2019, 2:26 AM UTC-0700
 
 ![](https://i.imgur.com/tzhXQYI.jpg)
 
index ebcb3cca860a32c5383e64858691f8537e37e2ba..b9dc556e4e3bfaa9edbaf036bc1194b3cca00bbd 100644 (file)
@@ -16,7 +16,7 @@
 
 These layers were born out of the confusion I have had trying to use the in-game chat and the console in [Quake 2](https://en.wikipedia.org/wiki/Quake_II). When Quake 2 came out, alternate keyboard layouts weren't really a thing. As a result, all in-game text input is hard-locked to US QWERTY, regardless of what the operating system is using for its input method.
 
-I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L383), is a [macro](./keymap.c#L165-172) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching.
+I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L404), is a [macro](./keymap.c#L165-L172) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching.
 
 When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L173-L179) I've created sends the keycode for `Enter`, then follows with enabling the Hardware Dvorak layer and its corresponding overlay. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` [keycode macro](./keymap.c#L180-L186) is sent, which sends the message, then the macro brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L187-L193) that cancels the sending of the message, and undoes the layers.
 
index e5ee7cbdeb832f3dade425952f8ee03413ea5ef3..a65b3acbeb44e3a8aebadc55b4e9146d500ec981 100644 (file)
@@ -60,7 +60,7 @@ Output: `git commit -m ""` <kbd>Left</kbd>
 
 Readies a `git commit` command, moves the cursor between the quotation marks, then disables the Macro layer.
 
-#### [G_BRCH](./keymap.c#L148-158)
+#### [G_BRCH](./keymap.c#L148-L158)
 
 | Condition | Output |
 | :-------- | :----- |
@@ -93,7 +93,7 @@ An Undo shortcut that turns to Redo if <kbd>Shift</kbd> is being held. I'm not s
 
 The program I use this in uses <kbd>Shift</kbd> + <kbd>Command</kbd> + <kbd>Option</kbd> + <kbd>V</kbd> to paste while maintaining formatting (typeface, text size, etc.). Sometimes I want this and sometimes I don't. Using <kbd>Shift</kbd> changes the behavior.
 
-#### [NUBS_Z](./keymap.c#L220-L228)
+#### [NUBS_Z](./keymap.c#L220-L234)
 
 | Condition | Output |
 | :-------- | :----- |
@@ -102,11 +102,15 @@ The program I use this in uses <kbd>Shift</kbd> + <kbd>Command</kbd> + <kbd>Opti
 
 Sometimes I type in languages from countries that use ISO layout, but my keyboard is ANSI, so I have one key fewer. This macro simulates the Non-US Backslash key if I use Right Alt + Z.
 
-#### [VRSN](./keymap.c#L229-L233)
+#### [VRSN](./keymap.c#L235-L239)
 
 Outputs a string that tells me the Git commit from which my flashed firmware was built. Looks something like:
 
-    kc60/noroadsleft @ 0.6.240-20-ge91549-dirty
+    kc60/noroadsleft @ 0.6.326-6-gae6d7b-dirty
+
+#### [Emulated Numeric Keypad](./keymap.c#L240-L254)
+
+If I hold the Right Alt key, the number row (`KC_1` through `KC_0`) will output numpad keycodes instead of number row keycodes, enabling quicker access to characters like ™ and °.
 
 ----