~ruther/qmk_firmware

6d1f0598684f250256f68f85e673109675e8be86 — wxyangf 4 years ago 3e1fa8c
[Keyboard] Added bradpad support (#12912)

Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
A keyboards/tempo_turtle/bradpad/bradpad.c => keyboards/tempo_turtle/bradpad/bradpad.c +15 -0
@@ 0,0 1,15 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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 "bradpad.h"

A keyboards/tempo_turtle/bradpad/bradpad.h => keyboards/tempo_turtle/bradpad/bradpad.h +32 -0
@@ 0,0 1,32 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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/>.
*/

#pragma once
#include "quantum.h"

// clang-format off
#define LAYOUT( \
    k00, k01, k02, k03, \
    k10, k11, k12, k13, \
    k20, k21, k22, k23, \
    k30, k31, k32, k33, \
         k41, k42\
) { \
    { k00, k01, k02, k03, }, \
    { k10, k11, k12, k13, }, \
    { k20, k21, k22, k23, }, \
    { k30, k31, k32, k33, }, \
    { KC_NO, k41, k42, KC_NO } \
}
// clang-format on

A keyboards/tempo_turtle/bradpad/config.h => keyboards/tempo_turtle/bradpad/config.h +19 -0
@@ 0,0 1,19 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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/>.
*/

#pragma once

#include "config_common.h"

/*usb descriptor setup and keyboard setup (rows and cols) are located in info.json*/

A keyboards/tempo_turtle/bradpad/info.json => keyboards/tempo_turtle/bradpad/info.json +28 -0
@@ 0,0 1,28 @@
{
    "keyboard_name": "bradpad",
    "url": "https://tempoturtle.com",
    "maintainer": "wxyangf",
    "width": 4,
    "height": 5,
    "diode_direction": "ROW2COL",
    "matrix_pins":{
        "rows":["B7", "D5", "C7", "D2", "D3"],
        "cols":["D7", "E6", "B4", "F1"]
    },
    "usb":{
        "vid":"0x7474",
        "pid":"0x6270",
        "device_ver":"0x0001"
    },
    "layouts": {
        "LAYOUT": {
            "layout":[
                {"x": 0, "y":0},{"x": 1, "y":0},{"x": 2, "y":0},{"x": 3, "y":0},
                {"x": 0, "y":1},{"x": 1, "y":1},{"x": 2, "y":1},{"x": 3, "y":1},
                {"x": 0, "y":2},{"x": 1, "y":2},{"x": 2, "y":2},{"x": 3, "y":2},
                {"x": 0, "y":3},{"x": 1, "y":3},{"x": 2, "y":3},{"x": 3, "y":3},
                {"x": 0, "y":4, "w":2},{"x": 2, "y":4,"w":2}
            ]
        }
    }
}

A keyboards/tempo_turtle/bradpad/keymaps/4brad/config.h => keyboards/tempo_turtle/bradpad/keymaps/4brad/config.h +20 -0
@@ 0,0 1,20 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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/>.
*/

#pragma once
#undef TAPPING_TERM
#define TAPPING_TERM 190

#define MUSIC_MASK (keycode != KC_NO)
#define MIDI_ADVANCED

A keyboards/tempo_turtle/bradpad/keymaps/4brad/keymap.c => keyboards/tempo_turtle/bradpad/keymaps/4brad/keymap.c +148 -0
@@ 0,0 1,148 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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

extern MidiDevice midi_device;

enum layers {
    _NATURAL,
    _SHARP,
    _FLAT,
};

/*
MIDI CC codes for generic ON/OFF swiches
80,81,82,83
values off = 0-63
*/

#define OFF 0

/*values on = 64-127*/

#define ON 127

/*implementation inspo taken from here: https://github.com/luantty2/pheromone_keyboard/blob/master/keyboards/pheromone/keymaps/default/keymap.c */

enum custom_keycodes { MIDI_CC80 = SAFE_RANGE, MIDI_CC81, MIDI_CC82, MIDI_CC83 };

static bool toggled_MIDI_CC80 = 0, toggled_MIDI_CC81 = 0, toggled_MIDI_CC82 = 0, toggled_MIDI_CC83 = 0;

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case MIDI_CC80:
            if (!IS_LAYER_ON(_NATURAL)) {
                toggled_MIDI_CC80 = false;
                if (record->event.pressed) {
                    midi_send_cc(&midi_device, midi_config.channel, 80, ON);
                } else {
                    midi_send_cc(&midi_device, midi_config.channel, 80, OFF);
                }
                return true;
            } else {
                if (record->event.pressed) {
                    if (!toggled_MIDI_CC80) {
                        midi_send_cc(&midi_device, midi_config.channel, 80, ON);
                    } else {
                        midi_send_cc(&midi_device, midi_config.channel, 80, OFF);
                    }
                    toggled_MIDI_CC80 = !toggled_MIDI_CC80;
                }
                return false;
            }
        case MIDI_CC81:
            if (!IS_LAYER_ON(_NATURAL)) {
                toggled_MIDI_CC81 = false;
                if (record->event.pressed) {
                    midi_send_cc(&midi_device, midi_config.channel, 81, ON);
                } else {
                    midi_send_cc(&midi_device, midi_config.channel, 81, OFF);
                }
                return true;
            } else {
                if (record->event.pressed) {
                    if (!toggled_MIDI_CC81) {
                        midi_send_cc(&midi_device, midi_config.channel, 81, ON);
                    } else {
                        midi_send_cc(&midi_device, midi_config.channel, 81, OFF);
                    }
                    toggled_MIDI_CC81 = !toggled_MIDI_CC81;
                }
                return false;
            }
        case MIDI_CC82:
            if (!IS_LAYER_ON(_NATURAL)) {
                toggled_MIDI_CC82 = false;
                if (record->event.pressed) {
                    midi_send_cc(&midi_device, midi_config.channel, 82, ON);
                } else {
                    midi_send_cc(&midi_device, midi_config.channel, 82, OFF);
                }
                return true;
            } else {
                if (record->event.pressed) {
                    if (!toggled_MIDI_CC82) {
                        midi_send_cc(&midi_device, midi_config.channel, 82, ON);
                    } else {
                        midi_send_cc(&midi_device, midi_config.channel, 82, OFF);
                    }
                    toggled_MIDI_CC82 = !toggled_MIDI_CC82;
                }
                return false;
            }
        case MIDI_CC83:
            if (!IS_LAYER_ON(_NATURAL)) {
                toggled_MIDI_CC83 = false;
                if (record->event.pressed) {
                    midi_send_cc(&midi_device, midi_config.channel, 83, ON);
                } else {
                    midi_send_cc(&midi_device, midi_config.channel, 83, OFF);
                }
                return true;
            } else {
                if (record->event.pressed) {
                    if (!toggled_MIDI_CC83) {
                        midi_send_cc(&midi_device, midi_config.channel, 83, ON);
                    } else {
                        midi_send_cc(&midi_device, midi_config.channel, 83, OFF);
                    }
                    toggled_MIDI_CC83 = !toggled_MIDI_CC83;
                }
                return false;
            }
    }
    return true;
}

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [_NATURAL] = LAYOUT(
        MI_C, MI_BENDD,   MI_BENDU,  MI_G,
        MI_D, MIDI_CC80,  MIDI_CC81, MI_A,
        MI_E, MIDI_CC82,  MIDI_CC83, MI_B,
        MI_F, MI_OCTD,    MI_OCTU,   MI_C,
              MO(_SHARP), MO(_FLAT)),
    [_SHARP] = LAYOUT(
        MI_Cs, KC_TRNS,  KC_TRNS,  MI_Gs,
        MI_Ds, KC_TRNS,  KC_TRNS,  MI_As,
        MI_F , KC_TRNS,  KC_TRNS,  MI_C ,
        MI_Fs, MI_TRNSD, MI_TRNSU, MI_Cs,
               KC_TRNS,  KC_TRNS),
    [_FLAT] = LAYOUT(
        MI_B , KC_TRNS,  KC_TRNS,  MI_Gb,
        MI_Db, KC_TRNS,  KC_TRNS,  MI_Ab,
        MI_Eb, KC_TRNS,  KC_TRNS,  MI_Bb,
        MI_E , MI_TRNSD, MI_TRNSU, MI_B,
               KC_TRNS,  KC_TRNS),
};

A keyboards/tempo_turtle/bradpad/keymaps/4brad/rules.mk => keyboards/tempo_turtle/bradpad/keymaps/4brad/rules.mk +1 -0
@@ 0,0 1,1 @@
MIDI_ENABLE = yes  #enable MIDI
\ No newline at end of file

A keyboards/tempo_turtle/bradpad/keymaps/default/keymap.c => keyboards/tempo_turtle/bradpad/keymaps/default/keymap.c +24 -0
@@ 0,0 1,24 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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(
        KC_KP_7,    KC_KP_8,     KC_KP_9,   KC_KP_MINUS,
        KC_KP_4,    KC_KP_5,     KC_KP_6,   KC_KP_PLUS,
        KC_KP_1,    KC_KP_2,     KC_KP_3,   KC_KP_SLASH,
        KC_NUMLOCK, KC_KP_0,     KC_KP_DOT, KC_KP_ASTERISK,
                    KC_KP_ENTER, KC_EQUAL)
};

A keyboards/tempo_turtle/bradpad/keymaps/midi_demo/config.h => keyboards/tempo_turtle/bradpad/keymaps/midi_demo/config.h +20 -0
@@ 0,0 1,20 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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/>.
*/

#pragma once
#undef TAPPING_TERM
#define TAPPING_TERM 190

#define MUSIC_MASK (keycode != KC_NO)
#define MIDI_ADVANCED

A keyboards/tempo_turtle/bradpad/keymaps/midi_demo/keymap.c => keyboards/tempo_turtle/bradpad/keymaps/midi_demo/keymap.c +42 -0
@@ 0,0 1,42 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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

enum layers {
    _NATURAL,
    _SHARP,
    _FLAT
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [_NATURAL] = LAYOUT(
        MI_C, MI_BENDD, MI_BENDU, MI_G,
        MI_D, MI_VELD,  MI_VELU,  MI_A,
        MI_E, MI_TRNSD, MI_TRNSU, MI_B,
        MI_F, MI_OCTD,  MI_OCTU,  MI_C,
             MO(_SHARP), MO(_FLAT)),
    [_SHARP] = LAYOUT(
        MI_Cs, KC_TRNS, KC_TRNS, MI_Gs,
        MI_Ds, KC_TRNS, KC_TRNS, MI_As,
        MI_F , KC_TRNS, KC_TRNS, MI_C ,
        MI_Fs, KC_TRNS, KC_TRNS, MI_Cs,
             KC_TRNS, KC_TRNS),
    [_FLAT] = LAYOUT(
        MI_B , KC_TRNS, KC_TRNS, MI_Gb,
        MI_Db, KC_TRNS, KC_TRNS, MI_Ab,
        MI_Eb, KC_TRNS, KC_TRNS, MI_Bb,
        MI_E , KC_TRNS, KC_TRNS, MI_B,
             KC_TRNS, KC_TRNS),
};

A keyboards/tempo_turtle/bradpad/keymaps/midi_demo/rules.mk => keyboards/tempo_turtle/bradpad/keymaps/midi_demo/rules.mk +1 -0
@@ 0,0 1,1 @@
MIDI_ENABLE = yes  #enable MIDI
\ No newline at end of file

A keyboards/tempo_turtle/bradpad/keymaps/via/keymap.c => keyboards/tempo_turtle/bradpad/keymaps/via/keymap.c +50 -0
@@ 0,0 1,50 @@
/*
Copyright 2021 v3ritas <v3ritas@tempoturtle.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

enum layers {
    _LAYER0,
    _LAYER1,
    _LAYER2,
    _LAYER3,
};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [_LAYER0] = LAYOUT(
        KC_KP_7,    KC_KP_8,     KC_KP_9,   KC_KP_MINUS,    \
        KC_KP_4,    KC_KP_5,     KC_KP_6,   KC_KP_PLUS,     \
        KC_KP_1,    KC_KP_2,     KC_KP_3,   KC_KP_SLASH,    \
        KC_NUMLOCK, KC_KP_0,     KC_KP_DOT, KC_KP_ASTERISK, \
                    KC_KP_ENTER, KC_EQUAL),
    [_LAYER1] = LAYOUT(
        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),
    [_LAYER2] = LAYOUT(
        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),
    [_LAYER3] = LAYOUT(
        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)
};
// clang-format on

A keyboards/tempo_turtle/bradpad/keymaps/via/rules.mk => keyboards/tempo_turtle/bradpad/keymaps/via/rules.mk +1 -0
@@ 0,0 1,1 @@
VIA_ENABLE = yes

A keyboards/tempo_turtle/bradpad/readme.md => keyboards/tempo_turtle/bradpad/readme.md +32 -0
@@ 0,0 1,32 @@
# bradpad

![bradpad](https://imgur.com/1WONr4Ph.jpg)

The QMK firmware for the bradpad a music production inspired macropad.

* Keyboard Maintainer: [wxyangf](https://github.com/wxyangf)
* Hardware Supported: bradpad pcbs
* Hardware Availability: [1UP Keyboards](https://1upkeyboards.com/)

[Album of Prototype of Production Version(v1.5.x)](https://imgur.com/a/kH5ttny)

[Album of Elite-C Version (v1)](https://imgur.com/a/xjocnNo)

How to reset production version into bootloader mode:

[Video Tutorial](https://youtu.be/Bk429i4Y0E4)

  1. Locate the reset button on the underside of the pcb.
  2. Press the reset button for a few seconds using a paperclip, fingertip(if bare pcb), other similar object.
  3. Release the reset button.
  4. Your bradpad should now be in bootloader mode.
  
How to reset Elite-C version into bootloader mode:
  1. Located Elite-C
  2. Reset Elite-C

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

    make tempo_turtle/bradpad:default

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.

A keyboards/tempo_turtle/bradpad/rules.mk => keyboards/tempo_turtle/bradpad/rules.mk +23 -0
@@ 0,0 1,23 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = atmel-dfu

# Build Options
#   change yes to no to disable
#
BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes       # Mouse keys
EXTRAKEY_ENABLE = yes       # Audio control and System control
CONSOLE_ENABLE = no         # Console for debug
COMMAND_ENABLE = no         # 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
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes           # USB Nkey Rollover
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no       # Enable Bluetooth
AUDIO_ENABLE = no           # Audio output
UNICODE_ENABLE = yes