~ruther/qmk_firmware

9cdbc040cd352aa1f44022c90f137ba5bcbe1c36 — James Young 3 years ago 26ae432
FFKeebs Púca Refactor (#15208)

M keyboards/ffkeebs/puca/info.json => keyboards/ffkeebs/puca/info.json +79 -9
@@ 2,35 2,105 @@
    "keyboard_name": "Puca",
    "url": "https://ffkeebs.com/collections/puca/",
    "maintainer": "Sleepdealr",
    "layout_aliases": {
        "LAYOUT": "LAYOUT_all"
    },
    "layouts": {
        "LAYOUT": {
        "LAYOUT_all": {
            "layout": [
                { "label": "Rotary", "x": 0.5, "y": 0 },
                { "label": "Pg Up", "x": 2, "y": 0 },
                { "label": "Pg Dn", "x": 3, "y": 0 },

                { "label": "Layer Toggle", "x": 0, "y": 1.25 },
                { "label": "/", "x": 1, "y": 1.25 },
                { "label": "*", "x": 2, "y": 1.25 },
                { "label": "-", "x": 3, "y": 1.25 },

                { "label": "7", "x": 0, "y": 2.25 },
                { "label": "8", "x": 1, "y": 2.25 },
                { "label": "9", "x": 2, "y": 2.25 },
                { "label": "+", "x": 3, "y": 2.25, "h": 2 },
                { "label": "+", "x": 4, "y": 2.25 },
                { "label": "+", "x": 3, "y": 2.25 },
                { "label": "+", "x": 4, "y": 2.25, "h": 2 },

                { "label": "4", "x": 0, "y": 3.25 },
                { "label": "5", "x": 1, "y": 3.25 },
                { "label": "6", "x": 2, "y": 3.25 },
                { "label": "|", "x": 3, "y": 3.25 },

                { "label": "1", "x": 0, "y": 4.25 },
                { "label": "2", "x": 1, "y": 4.25 },
                { "label": "3", "x": 2, "y": 4.25 },
                { "label": "Enter", "x": 3, "y": 4.25 },
                { "label": "Enter", "x": 4, "y": 4.25, "h": 2 },

                { "label": "0", "x": 0, "y": 5.25 },
                { "label": "00", "x": 1, "y": 5.25 },
                { "label": ".", "x": 2, "y": 5.25 },
                { "label": ".", "x": 3, "y": 5.25 },

                { "label": "0", "x": 0, "y": 6.25, "w": 2 }
            ]
        },
        "LAYOUT_numpad": {
            "layout": [
                { "label": "Rotary", "x": 0.5, "y": 0 },
                { "label": "Pg Up", "x": 2, "y": 0 },
                { "label": "Pg Dn", "x": 3, "y": 0 },

                { "label": "Layer Toggle", "x": 0, "y": 1.25 },
                { "label": "/", "x": 1, "y": 1.25 },
                { "label": "*", "x": 2, "y": 1.25 },
                { "label": "-", "x": 3, "y": 1.25 },

                { "label": "7", "x": 0, "y": 2.25 },
                { "label": "8", "x": 1, "y": 2.25 },
                { "label": "9", "x": 2, "y": 2.25 },

                { "label": "4", "x": 0, "y": 3.25 },
                { "label": "5", "x": 1, "y": 3.25 },
                { "label": "6", "x": 2, "y": 3.25 },
                { "label": "|", "x": 4, "y": 3.25 },
                { "label": "+", "x": 3, "y": 2.25, "h": 2 },

                { "label": "1", "x": 0, "y": 4.25 },
                { "label": "2", "x": 1, "y": 4.25 },
                { "label": "3", "x": 2, "y": 4.25 },
                { "label": "Enter", "x": 3, "y": 4.25, "h": 2 },
                { "label": "Enter", "x": 4, "y": 4.25 },

                { "label": "0", "x": 0, "y": 5.25, "w": 2 },
                { "label": ".", "x": 2, "y": 5.25 },
                { "label": ".", "x": 4, "y": 5.25 },
                { "label": "0", "x": 0, "y": 6.25 },
                { "label": "00", "x": 1, "y": 6.25 }
                { "label": "Enter", "x": 3, "y": 4.25, "h": 2 }
            ]
        },
        "LAYOUT_ortho": {
            "layout": [
                { "label": "Rotary", "x": 0.5, "y": 0 },
                { "label": "Pg Up", "x": 2, "y": 0 },
                { "label": "Pg Dn", "x": 3, "y": 0 },

                { "label": "Layer Toggle", "x": 0, "y": 1.25 },
                { "label": "/", "x": 1, "y": 1.25 },
                { "label": "*", "x": 2, "y": 1.25 },
                { "label": "-", "x": 3, "y": 1.25 },

                { "label": "7", "x": 0, "y": 2.25 },
                { "label": "8", "x": 1, "y": 2.25 },
                { "label": "9", "x": 2, "y": 2.25 },
                { "label": "+", "x": 3, "y": 2.25 },

                { "label": "4", "x": 0, "y": 3.25 },
                { "label": "5", "x": 1, "y": 3.25 },
                { "label": "6", "x": 2, "y": 3.25 },
                { "label": "|", "x": 3, "y": 3.25 },

                { "label": "1", "x": 0, "y": 4.25 },
                { "label": "2", "x": 1, "y": 4.25 },
                { "label": "3", "x": 2, "y": 4.25 },
                { "label": "Enter", "x": 3, "y": 4.25 },

                { "label": "0", "x": 0, "y": 5.25 },
                { "label": "00", "x": 1, "y": 5.25 },
                { "label": ".", "x": 2, "y": 5.25 },
                { "label": "Enter", "x": 3, "y": 5.25 }
            ]
        }
    }

M keyboards/ffkeebs/puca/keymaps/default/keymap.c => keyboards/ffkeebs/puca/keymaps/default/keymap.c +20 -32
@@ 1,4 1,4 @@
/* Copyright 2021 Sleepdealer
/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
 *
 * 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


@@ 15,38 15,26 @@
 */
#include QMK_KEYBOARD_H

// 00 Functionality
enum custom_keycodes {
    MC_00 = SAFE_RANGE,
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case MC_00:
            if (record->event.pressed) {
                SEND_STRING("00");
            }
            break;
    }
    return true;
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    [0] = LAYOUT_all(
        KC_MUTE,          KC_PGUP, KC_PGDN,
        TG(1),   KC_PSLS, KC_PAST, KC_PMNS,
        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,  KC_PPLS,
        KC_P4,   KC_P5,   KC_P6,   KC_PIPE,
        KC_P1,   KC_P2,   KC_P3,   KC_ENTER, KC_ENTER,
        KC_P0,   MC_00,   KC_PDOT, KC_PDOT,
        KC_P0
    ),

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    LAYOUT(
        KC_MUTE,         KC_PGUP, KC_PGDN,
		TG(1),  KC_PSLS, KC_PAST, KC_PMNS,
		KC_P7,  KC_P8,   KC_P9,   KC_PPLS,  KC_PPLS,
		KC_P4,  KC_P5,   KC_P6,   KC_PIPE,
		KC_P1,  KC_P2,   KC_P3,   KC_ENTER, KC_ENTER,
		KC_P0,  MC_00,   KC_PDOT, KC_PDOT,   
                KC_P0),
    LAYOUT(
    [1] = LAYOUT_all(
        KC_TRNS,          RGB_HUI, RGB_VAI,
		TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
		KC_PGUP, KC_UP,   KC_PGDN, RGB_MOD,  RGB_MOD,
		KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
		KC_INS,  KC_HOME, KC_END,  RGB_RMOD, RGB_RMOD,
		KC_ESC,  KC_TRNS, KC_DEL,  KC_TRNS, 
        KC_ESC)
        TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
        KC_PGUP, KC_UP,   KC_PGDN, RGB_MOD,  RGB_MOD,
        KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
        KC_INS,  KC_HOME, KC_END,  RGB_RMOD, RGB_RMOD,
        KC_ESC,  KC_TRNS, KC_DEL,  KC_TRNS,
        KC_ESC
    ),

};

A keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c => keyboards/ffkeebs/puca/keymaps/default_numpad/keymap.c +38 -0
@@ 0,0 1,38 @@
/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
 *
 * 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_numpad(
        KC_MUTE,          KC_PGUP, KC_PGDN,
        TG(1),   KC_PSLS, KC_PAST, KC_PMNS,
        KC_P7,   KC_P8,   KC_P9,
        KC_P4,   KC_P5,   KC_P6,   KC_PPLS,
        KC_P1,   KC_P2,   KC_P3,
        KC_P0,            KC_PDOT, KC_ENTER
    ),

    [1] = LAYOUT_numpad(
        _______,          RGB_HUI, RGB_VAI,
        TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
        KC_PGUP, KC_UP,   KC_PGDN,
        KC_LEFT, KC_DOWN, KC_RGHT, RGB_MOD,
        KC_INS,  KC_HOME, KC_END,
        KC_ESC,           KC_DEL,  RGB_RMOD
    ),

};

A keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c => keyboards/ffkeebs/puca/keymaps/default_ortho/keymap.c +38 -0
@@ 0,0 1,38 @@
/* Copyright 2021 Sleepdealer, James Young for QMK (@noroadsleft)
 *
 * 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_ortho(
        KC_MUTE,          KC_PGUP, KC_PGDN,
        TG(1),   KC_PSLS, KC_PAST, KC_PMNS,
        KC_P7,   KC_P8,   KC_P9,   KC_PPLS,
        KC_P4,   KC_P5,   KC_P6,   KC_PIPE,
        KC_P1,   KC_P2,   KC_P3,   KC_ENTER,
        KC_P0,   MC_00,   KC_PDOT, KC_ENTER
    ),

    [1] = LAYOUT_ortho(
        _______,          RGB_HUI, RGB_VAI,
        TG(1),   RGB_TOG, RGB_HUD, RGB_VAD,
        KC_PGUP, KC_UP,   KC_PGDN, RGB_MOD,
        KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX,
        KC_INS,  KC_HOME, KC_END,  RGB_RMOD,
        KC_ESC,  XXXXXXX, KC_DEL,  XXXXXXX
    )

};

M keyboards/ffkeebs/puca/puca.c => keyboards/ffkeebs/puca/puca.c +17 -3
@@ 15,6 15,20 @@
 */
#include "puca.h"

bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
    if (!process_record_user(keycode, record)) {
        return false;
    }
    switch (keycode) {
        case MC_00:
            if (record->event.pressed) {
                SEND_STRING("00");
            }
            break;
    }
    return true;
}

bool encoder_update_kb(uint8_t index, bool clockwise) {
    if (!encoder_update_user(index, clockwise)) { return false; }
    if (clockwise) {


@@ 105,7 119,7 @@ __attribute__((weak)) void oled_task_user(void) {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    }};
    

    void animation_phase(void) {
        current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
        oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);


@@ 114,7 128,7 @@ __attribute__((weak)) void oled_task_user(void) {
        anim_timer = timer_read32();
        animation_phase();
    }
    

    oled_set_cursor(0, 6);
    oled_write_P(PSTR("PUCA\nPAD\n"), false);
    oled_write_P(PSTR("-----\n"), false);


@@ 130,4 144,4 @@ __attribute__((weak)) void oled_task_user(void) {
            break;
    }
}
#endif
\ No newline at end of file
#endif

M keyboards/ffkeebs/puca/puca.h => keyboards/ffkeebs/puca/puca.h +78 -18
@@ 16,26 16,86 @@

#pragma once

// K24 is 2U Plus
// K44 is 2u Enter
// K54 is 2u 0
#include "quantum.h"

/* Keycodes defined here can be used by any keymap. If you wish to
 * define additional keycodes for your personal keymap only, assign
 * your first custom keycode to `= NEW_SAFE_RANGE`.
 *
 * See `process_record_kb()` in `puca.c`.
 */
enum keyboard_keycodes {
    MC_00 = SAFE_RANGE,
    NEW_SAFE_RANGE,
};

#define XXX KC_NO

#include "quantum.h"
/*
 *   ┌───┐ ┌───┬───┐
 *   │00 │ │02 │03 │
 *   └───┘ └───┴───┘
 * ┌───┬───┬───┬───┐
 * │10 │11 │12 │13 │
 * ├───┼───┼───┼───┤   ┌───┐
 * │20 │21 │22 │23 │   │   │
 * ├───┼───┼───┼───┤   │24 │ 2u Plus
 * │30 │31 │32 │33 │   │   │
 * ├───┼───┼───┼───┤   ├───┤
 * │40 │41 │42 │43 │   │   │
 * ├───┼───┼───┼───┤   │44 │ 2u Enter
 * │50 │51 │52 │53 │   │   │
 * └───┴───┴───┴───┘   └───┘
 * ┌───────┐
 * │54     │ 2u 0
 * └───────┘
 */

#define LAYOUT_all( \
      K00,    K02, K03,      \
    K10, K11, K12, K13,      \
    K20, K21, K22, K23,  K24,\
    K30, K31, K32, K33,      \
    K40, K41, K42, K43,  K44,\
    K50, K51, K52, K53,      \
      K54                    \
) { \
    { K00, XXX, K02, K03, XXX }, \
    { K10, K11, K12, K13, XXX }, \
    { K20, K21, K22, K23, K24 }, \
    { K30, K31, K32, K33, XXX }, \
    { K40, K41, K42, K43, K44 }, \
    { K50, K51, K52, K53, K54 }, \
}

#define LAYOUT_numpad( \
      K00,    K02, K03, \
    K10, K11, K12, K13, \
    K20, K21, K22,      \
    K30, K31, K32, K24, \
    K40, K41, K42,      \
      K54,    K52, K44  \
) { \
    { K00, XXX, K02, K03, XXX }, \
    { K10, K11, K12, K13, XXX }, \
    { K20, K21, K22, XXX, K24 }, \
    { K30, K31, K32, XXX, XXX }, \
    { K40, K41, K42, XXX, K44 }, \
    { XXX, XXX, K52, XXX, K54 }, \
}

#define LAYOUT( \
        K00,          K02,   K03,       \
        K10,   K11,   K12,   K13,       \
        K20,   K21,   K22,   K23,   K24,\
        K30,   K31,   K32,   K33,       \
        K40,   K41,   K42,   K43,   K44,\
        K50,   K51,   K52,   K53,       \
        K54                             \
#define LAYOUT_ortho( \
      K00,    K02, K03, \
    K10, K11, K12, K13, \
    K20, K21, K22, K23, \
    K30, K31, K32, K33, \
    K40, K41, K42, K43, \
    K50, K51, K52, K53  \
) { \
      { K00,   KC_NO, K02,   K03,   KC_NO },    \
      { K10,   K11,   K12,   K13,   KC_NO },    \
      { K20,   K21,   K22,   K23,   K24   },    \
      { K30,   K31,   K32,   K33,   KC_NO },    \
      { K40,   K41,   K42,   K43,   K44   },    \
      { K50,   K51,   K52,   K53,   K54   },    \
    { K00, XXX, K02, K03, XXX }, \
    { K10, K11, K12, K13, XXX }, \
    { K20, K21, K22, K23, XXX }, \
    { K30, K31, K32, K33, XXX }, \
    { K40, K41, K42, K43, XXX }, \
    { K50, K51, K52, K53, XXX }, \
}

M keyboards/ffkeebs/puca/readme.md => keyboards/ffkeebs/puca/readme.md +1 -1
@@ 2,7 2,7 @@

* Keyboard Maintainer: [Sleepdealer](https://github.com/Sleepdealr)
* Hardware Supported: Puca Pad
* Hardware Availability: Puca GB
* Hardware Availability: [Puca GB](https://ffkeebs.com/collections/puca)

## Bootloader


M keyboards/ffkeebs/puca/rules.mk => keyboards/ffkeebs/puca/rules.mk +3 -3
@@ 19,7 19,7 @@ NKRO_ENABLE = no            # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow

ENCODER_ENABLE = yes 		#Rotary encoder
ENCODER_ENABLE = yes        # Enable rotary encoder support
OLED_ENABLE = yes           # Enable OLED support

OLED_ENABLE = yes	#OLED
LTO_ENABLE = yes			# Enable Link Time Optimization to reduce firmware size
LTO_ENABLE = yes            # Enable Link Time Optimization to reduce firmware size