diff --git a/keyboards/tempo_turtle/bradpad/bradpad.c b/keyboards/tempo_turtle/bradpad/bradpad.c new file mode 100644 index 00000000000..073f37a4cf9 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/bradpad.c @@ -0,0 +1,15 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#include "bradpad.h" diff --git a/keyboards/tempo_turtle/bradpad/bradpad.h b/keyboards/tempo_turtle/bradpad/bradpad.h new file mode 100644 index 00000000000..69955a5da61 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/bradpad.h @@ -0,0 +1,32 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#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 diff --git a/keyboards/tempo_turtle/bradpad/config.h b/keyboards/tempo_turtle/bradpad/config.h new file mode 100644 index 00000000000..c6a405b05fc --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/config.h @@ -0,0 +1,19 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#pragma once + +#include "config_common.h" + +/*usb descriptor setup and keyboard setup (rows and cols) are located in info.json*/ diff --git a/keyboards/tempo_turtle/bradpad/info.json b/keyboards/tempo_turtle/bradpad/info.json new file mode 100644 index 00000000000..37125e64e42 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/info.json @@ -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} + ] + } + } +} diff --git a/keyboards/tempo_turtle/bradpad/keymaps/4brad/config.h b/keyboards/tempo_turtle/bradpad/keymaps/4brad/config.h new file mode 100644 index 00000000000..4b885f24a16 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/4brad/config.h @@ -0,0 +1,20 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#pragma once +#undef TAPPING_TERM +#define TAPPING_TERM 190 + +#define MUSIC_MASK (keycode != KC_NO) +#define MIDI_ADVANCED diff --git a/keyboards/tempo_turtle/bradpad/keymaps/4brad/keymap.c b/keyboards/tempo_turtle/bradpad/keymaps/4brad/keymap.c new file mode 100644 index 00000000000..4c5e988ed5b --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/4brad/keymap.c @@ -0,0 +1,148 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#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), +}; diff --git a/keyboards/tempo_turtle/bradpad/keymaps/4brad/rules.mk b/keyboards/tempo_turtle/bradpad/keymaps/4brad/rules.mk new file mode 100644 index 00000000000..b7152364aee --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/4brad/rules.mk @@ -0,0 +1 @@ +MIDI_ENABLE = yes #enable MIDI \ No newline at end of file diff --git a/keyboards/tempo_turtle/bradpad/keymaps/default/keymap.c b/keyboards/tempo_turtle/bradpad/keymaps/default/keymap.c new file mode 100644 index 00000000000..331466438ab --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/default/keymap.c @@ -0,0 +1,24 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#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) +}; diff --git a/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/config.h b/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/config.h new file mode 100644 index 00000000000..4b885f24a16 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/config.h @@ -0,0 +1,20 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#pragma once +#undef TAPPING_TERM +#define TAPPING_TERM 190 + +#define MUSIC_MASK (keycode != KC_NO) +#define MIDI_ADVANCED diff --git a/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/keymap.c b/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/keymap.c new file mode 100644 index 00000000000..714e64ba804 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/keymap.c @@ -0,0 +1,42 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#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), +}; diff --git a/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/rules.mk b/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/rules.mk new file mode 100644 index 00000000000..b7152364aee --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/midi_demo/rules.mk @@ -0,0 +1 @@ +MIDI_ENABLE = yes #enable MIDI \ No newline at end of file diff --git a/keyboards/tempo_turtle/bradpad/keymaps/via/keymap.c b/keyboards/tempo_turtle/bradpad/keymaps/via/keymap.c new file mode 100644 index 00000000000..0ef205288a3 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/via/keymap.c @@ -0,0 +1,50 @@ +/* +Copyright 2021 v3ritas +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 . +*/ + +#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 diff --git a/keyboards/tempo_turtle/bradpad/keymaps/via/rules.mk b/keyboards/tempo_turtle/bradpad/keymaps/via/rules.mk new file mode 100644 index 00000000000..1e5b99807cb --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/tempo_turtle/bradpad/readme.md b/keyboards/tempo_turtle/bradpad/readme.md new file mode 100644 index 00000000000..d42373e7b57 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/readme.md @@ -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. diff --git a/keyboards/tempo_turtle/bradpad/rules.mk b/keyboards/tempo_turtle/bradpad/rules.mk new file mode 100644 index 00000000000..c0685cf3049 --- /dev/null +++ b/keyboards/tempo_turtle/bradpad/rules.mk @@ -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