~ruther/qmk_firmware

8df2e70ae475841543e468c7d1660957367fe74d — rookiebwoy 1 year, 2 months ago bc7d1cc
Late9 keymaps update, added VIA support (#22801)

9 files changed, 110 insertions(+), 275 deletions(-)

M keyboards/rookiebwoy/late9/readme.md
M keyboards/rookiebwoy/late9/rev1/info.json
M keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c
D keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c
D keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md
D keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk
A keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c
A keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk
M keyboards/rookiebwoy/late9/rev1/rules.mk
M keyboards/rookiebwoy/late9/readme.md => keyboards/rookiebwoy/late9/readme.md +5 -7
@@ 5,11 5,9 @@ The LATE-9 is a multi-tap input keyboard based on mobile phones from the late '9

![LATE-9](https://i.imgur.com/QXycTC3h.jpg "LATE-9 first proto")

See the project repository for gerbers.

* Keyboard maintainer: [rookiebwoy](https://github.com/rookiebwoy)
* Hardware supported: ProMicro, _Elite-C (not tested)_
* Project repository: [LATE-9 on github](https://github.com/rookiebwoy/late-9)
* Hardware Availability: LATE-9 is open source, check the [project repository](https://github.com/rookiebwoy/late-9) for gerbers.

Make example for this keyboard (after setting up your build environment):



@@ 19,9 17,9 @@ Flashing example for this keyboard:

    make rookiebwoy/late9/rev1:default:flash

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).

When asked by the terminal, short with a metal wire the pins on the backside of the board highlighted as `RST` (one is the `RESET` and the other one is `GROUND`) to enter the bootloader and let the OS detects the device.
After installing this firmware you can use Bootmagic to enter the bootloader while plugging in your LATE-9. By default it's the button on the upper-left of the keyboard.

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 [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader

When asked by the terminal, short with a metal wire the pins on the backside of the board highlighted as `RST` (one is the `RESET` and the other one is `GROUND`) to enter the bootloader and let the OS detects the device.\
After installing this firmware you can use Bootmagic to enter the bootloader while plugging in your LATE-9. By default it's the button on the upper-left of the keyboard.
\ No newline at end of file

M keyboards/rookiebwoy/late9/rev1/info.json => keyboards/rookiebwoy/late9/rev1/info.json +7 -2
@@ 4,8 4,8 @@
    "url": "https://github.com/rookiebwoy/late-9)",
    "maintainer": "rookiebwoy",
    "usb": {
        "vid": "0xFEED",
        "pid": "0x3777",
        "vid": "0x6961",
        "pid": "0x3032",
        "device_version": "0.1.0"
    },
    "tapping": {


@@ 19,6 19,11 @@
        "rows": ["B4", "E6", "D7", "B3", "B2", "B6"]
    },
    "diode_direction": "ROW2COL",
    "features": {
      "bootmagic": true,
      "nkro": true,
      "oled": true
    },
    "processor": "atmega32u4",
    "bootloader": "caterina",
    "layouts": {

M keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c => keyboards/rookiebwoy/late9/rev1/keymaps/default/keymap.c +12 -12
@@ 22,23 22,23 @@ enum layers {
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer
/* BL: Base Layer
 * ,-----------------------.
 * |MO(OP) | ↑     | BSPC  |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | <-    | ↓     | ->    |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | 1     | 2     | 3     |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | 4     | 5     | 6     |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | 7     | 8     | 9     |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | 0     | .     | =     |
 * |       |       |       |
 * `-----------------------'


@@ 52,23 52,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    KC_P0,         KC_PDOT,       KC_PEQL
  ),

/* Keymap _OP: Operators Layer
/* OP: Operators Layer
 * ,-----------------------.
 * |MO(OP) | ↑     | BSPC  |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | <-    | ↓     | ->    |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | /     | *     | -     |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | (     | )     | +     |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | &     | %     | ^     |
 * |       |       |       |
 * |-------|-------|-------|
 * |-------+-------+-------|
 * | |     | .     | =     |
 * |       |       |       |
 * `-----------------------'

D keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c => keyboards/rookiebwoy/late9/rev1/keymaps/multitap/keymap.c +0 -235
@@ 1,235 0,0 @@
/* Copyright 2021 rookiebwoy
 *
 * 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

// Layers declarations
enum layers {
    _BL
};

// Tap Dance declarations
enum {
    TD_PNCT,
    TD_ABC,
    TD_DEF,
    TD_GHI,
    TD_JKL,
    TD_MNO,
    TD_PQRS,
    TD_TUV,
    TD_WXYZ,
    TD_SPACE,
    TD_UPRCS,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: Base Layer
 * ,-----------------------.
 * |ENTER  | ↑     | BSPC  |
 * |       |       |       |
 * |-------|-------|-------|
 * | <-    | ↓     | ->    |
 * |       |       |       |
 * |-------|-------|-------|
 * | 1 .,' | 2     | 3     |
 * |?!-:;/ | abc   | def   |
 * |-------|-------|-------|
 * | 4     | 5     | 6     |
 * | ghi   | jkl   | mno   |
 * |-------|-------|-------|
 * | 7     | 8     | 9     |
 * | pqrs  | tuv   | wxyz  |
 * |-------|-------|-------|
 * | *     | 0     | CAPS  |
 * |       | space |       |
 * `-----------------------'
 */
  [_BL] = LAYOUT(
    KC_ENT,       KC_UP,        KC_BSPC,
    KC_LEFT,      KC_DOWN,      KC_RIGHT,
    TD(TD_PNCT),  TD(TD_ABC),   TD(TD_DEF),
    TD(TD_GHI),   TD(TD_JKL),   TD(TD_MNO),
    TD(TD_PQRS),  TD(TD_TUV),   TD(TD_WXYZ),
    KC_PAST,      TD(TD_SPACE), TD(TD_UPRCS)
  ),
};

// Tap Dance cycles
void dance_1 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_DOT);
        else return tap_code(KC_1);
    } else if (state->count == 2) {
        tap_code (KC_COMM);
    } else if (state->count == 3) {
        tap_code(KC_QUOT);
    } else if (state->count == 4) {
        tap_code16(KC_QUES);
    } else if (state->count == 5) {
        tap_code16(KC_EXLM);
    } else if (state->count == 6) {
        tap_code(KC_MINS);
    } else if (state->count == 7) {
        tap_code16(KC_COLN);
    } else if (state->count == 8) {
        tap_code(KC_SCLN);
    } else if (state->count == 9) {
        tap_code(KC_SLSH);
    } else {
        reset_tap_dance (state);
    }
}

void dance_2 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_A);
        else return tap_code(KC_2);
    } else if (state->count == 2) {
        tap_code (KC_B);
    } else if (state->count == 3) {
        tap_code(KC_C);
    } else {
        reset_tap_dance (state);
    }
}

void dance_3 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_D);
        else return tap_code(KC_3);
    } else if (state->count == 2) {
        tap_code (KC_E);
    } else if (state->count == 3) {
        tap_code(KC_F);
    } else {
        reset_tap_dance (state);
    }
}

void dance_4 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_G);
        else return tap_code(KC_4);
    } else if (state->count == 2) {
        tap_code (KC_H);
    } else if (state->count == 3) {
        tap_code(KC_I);
    } else {
        reset_tap_dance (state);
    }
}

void dance_5 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_J);
        else return tap_code(KC_5);
    } else if (state->count == 2) {
        tap_code (KC_K);
    } else if (state->count == 3) {
        tap_code(KC_L);
    } else {
        reset_tap_dance (state);
    }
}

void dance_6 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_M);
        else return tap_code(KC_6);
    } else if (state->count == 2) {
        tap_code (KC_N);
    } else if (state->count == 3) {
        tap_code(KC_O);
    } else {
        reset_tap_dance (state);
    }
}

void dance_7 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_P);
        else return tap_code(KC_7);
    } else if (state->count == 2) {
        tap_code (KC_Q);
    } else if (state->count == 3) {
        tap_code(KC_R);
    } else if (state->count == 4) {
        tap_code(KC_S);
    } else {
        reset_tap_dance (state);
    }
}

void dance_8 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_T);
        else return tap_code(KC_8);
    } else if (state->count == 2) {
        tap_code (KC_U);
    } else if (state->count == 3) {
        tap_code(KC_V);
    } else {
        reset_tap_dance (state);
    }
}

void dance_9 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_W);
        else return tap_code(KC_9);
    } else if (state->count == 2) {
        tap_code (KC_X);
    } else if (state->count == 3) {
        tap_code(KC_Y);
    } else if (state->count == 4) {
        tap_code(KC_Z);
    } else {
        reset_tap_dance (state);
    }
}

void dance_0 (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return tap_code(KC_SPACE);
        else return tap_code(KC_0);
    } else {
        reset_tap_dance (state);
    }
}

void dance_maiusc (tap_dance_state_t *state, void *user_data) {
    if (state->count == 1) {
        if (state->interrupted || !state->pressed) return set_oneshot_mods(MOD_BIT(KC_LSFT)); 
        else return tap_code(KC_CAPS);
    } else {
        reset_tap_dance (state);
    }
}

// Tap Dance actions
tap_dance_action_t tap_dance_actions[] = {
    [TD_PNCT] = ACTION_TAP_DANCE_FN (dance_1),
    [TD_ABC] = ACTION_TAP_DANCE_FN (dance_2),
    [TD_DEF] = ACTION_TAP_DANCE_FN (dance_3),
    [TD_GHI] = ACTION_TAP_DANCE_FN (dance_4),
    [TD_JKL] = ACTION_TAP_DANCE_FN (dance_5),
    [TD_MNO] = ACTION_TAP_DANCE_FN (dance_6),
    [TD_PQRS] = ACTION_TAP_DANCE_FN (dance_7),
    [TD_TUV] = ACTION_TAP_DANCE_FN (dance_8),
    [TD_WXYZ] = ACTION_TAP_DANCE_FN (dance_9),
    [TD_SPACE] = ACTION_TAP_DANCE_FN (dance_0),
    [TD_UPRCS] = ACTION_TAP_DANCE_FN (dance_maiusc),
};

D keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md => keyboards/rookiebwoy/late9/rev1/keymaps/multitap/readme.md +0 -3
@@ 1,3 0,0 @@
# LATE-9 multitap keymap

This is the intended LATE-9 layout with multitap `ON` and old mobile phone look-a-like layout..

D keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk => keyboards/rookiebwoy/late9/rev1/keymaps/multitap/rules.mk +0 -2
@@ 1,2 0,0 @@
# Enable Tap Dance feature
TAP_DANCE_ENABLE = yes

A keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c => keyboards/rookiebwoy/late9/rev1/keymaps/via/keymap.c +84 -0
@@ 0,0 1,84 @@
/* Copyright 2021 rookiebwoy
 *
 * 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

// Layers declarations
enum layers {
    _BL,
    _OL
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* BL: Base Layer
 * ,-----------------------.
 * |MO(OP) | ↑     | BSPC  |
 * |       |       |       |
 * |-------+-------+-------|
 * | <-    | ↓     | ->    |
 * |       |       |       |
 * |-------+-------+-------|
 * | 1     | 2     | 3     |
 * |       |       |       |
 * |-------+-------+-------|
 * | 4     | 5     | 6     |
 * |       |       |       |
 * |-------+-------+-------|
 * | 7     | 8     | 9     |
 * |       |       |       |
 * |-------+-------+-------|
 * | 0     | .     | =     |
 * |       |       |       |
 * `-----------------------'
 */
  [_BL] = LAYOUT(
    MO(1),         KC_UP,         KC_BSPC,
    KC_LEFT,       KC_DOWN,       KC_RIGHT,
    KC_P1,         KC_P2,         KC_P3,
    KC_P4,         KC_P5,         KC_P6,
    KC_P7,         KC_P8,         KC_P9,
    KC_P0,         KC_PDOT,       KC_PEQL
  ),

/* OP: Operators Layer
 * ,-----------------------.
 * |MO(OP) | ↑     | BSPC  |
 * |       |       |       |
 * |-------+-------+-------|
 * | <-    | ↓     | ->    |
 * |       |       |       |
 * |-------+-------+-------|
 * | /     | *     | -     |
 * |       |       |       |
 * |-------+-------+-------|
 * | (     | )     | +     |
 * |       |       |       |
 * |-------+-------+-------|
 * | &     | %     | ^     |
 * |       |       |       |
 * |-------+-------+-------|
 * | |     | .     | =     |
 * |       |       |       |
 * `-----------------------'
 */
  [_OL] = LAYOUT(
    MO(1),         KC_UP,         KC_BSPC,
    KC_LEFT,       KC_DOWN,       KC_RIGHT,
    KC_PSLS,       KC_PAST,       KC_PMNS,
    LSFT(KC_9),    LSFT(KC_0),    KC_PPLS,
    LSFT(KC_7),    LSFT(KC_5),    LSFT(KC_6),
    LSFT(KC_BSLS), KC_PDOT,       KC_PEQL
  ),
};
\ No newline at end of file

A keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk => keyboards/rookiebwoy/late9/rev1/keymaps/via/rules.mk +1 -0
@@ 0,0 1,1 @@
VIA_ENABLE = yes
\ No newline at end of file

M keyboards/rookiebwoy/late9/rev1/rules.mk => keyboards/rookiebwoy/late9/rev1/rules.mk +1 -14
@@ 1,14 1,1 @@
# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
MOUSEKEY_ENABLE = no        # Mouse keys
EXTRAKEY_ENABLE = no        # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # Commands for debug and configuration
NKRO_ENABLE = yes           # Enable N-Key Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
AUDIO_ENABLE = no           # Audio output

OLED_ENABLE = yes
# This file intentionally left blank

Do not follow this link