From 6d1f0598684f250256f68f85e673109675e8be86 Mon Sep 17 00:00:00 2001 From: wxyangf Date: Sun, 16 May 2021 18:34:18 -0400 Subject: [Keyboard] Added bradpad support (#12912) Co-authored-by: Ryan Co-authored-by: Drashna Jaelre --- .../tempo_turtle/bradpad/keymaps/4brad/config.h | 20 +++ .../tempo_turtle/bradpad/keymaps/4brad/keymap.c | 148 +++++++++++++++++++++ .../tempo_turtle/bradpad/keymaps/4brad/rules.mk | 1 + 3 files changed, 169 insertions(+) create mode 100644 keyboards/tempo_turtle/bradpad/keymaps/4brad/config.h create mode 100644 keyboards/tempo_turtle/bradpad/keymaps/4brad/keymap.c create mode 100644 keyboards/tempo_turtle/bradpad/keymaps/4brad/rules.mk (limited to 'keyboards/tempo_turtle/bradpad/keymaps/4brad') 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 0000000000..4b885f24a1 --- /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 0000000000..4c5e988ed5 --- /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 0000000000..b7152364ae --- /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 -- cgit v1.2.3