diff options
| -rw-r--r-- | keyboard/planck/keymaps/experimental/keymap.c | 6 | ||||
| -rw-r--r-- | keyboard/planck/keymaps/experimental/makefile.mk | 5 | ||||
| -rw-r--r-- | quantum/keymap_common.c | 5 | ||||
| -rw-r--r-- | quantum/keymap_common.h | 5 | ||||
| -rw-r--r-- | quantum/quantum.c | 88 | ||||
| -rw-r--r-- | quantum/quantum.h | 3 | ||||
| -rw-r--r-- | quantum/quantum.mk | 6 | ||||
| -rw-r--r-- | tmk_core/protocol/lufa/lufa.c | 2 | 
8 files changed, 103 insertions, 17 deletions
diff --git a/keyboard/planck/keymaps/experimental/keymap.c b/keyboard/planck/keymaps/experimental/keymap.c index 8bc7334c9a..2f8a0510a8 100644 --- a/keyboard/planck/keymaps/experimental/keymap.c +++ b/keyboard/planck/keymaps/experimental/keymap.c @@ -162,7 +162,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  [_ADJUST] = {    {_______, RESET,   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},    {_______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  PLOVER,  _______}, -  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  _______, _______, _______, _______, _______, _______, _______}, +  {_______, MUV_DE,  MUV_IN,  MU_ON,   MU_OFF,  MI_ON,   MI_OFF,  _______, _______, _______, _______, _______},    {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}  } @@ -227,8 +227,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)          case _LOWER:            if (record->event.pressed) {              layer_on(_LOWER); +            #ifdef BACKLIGHT_ENABLE                  breathing_speed_set(2);                  breathing_pulse(); +            #endif              update_tri_layer(_LOWER, _RAISE, _ADJUST);            } else {              layer_off(_LOWER); @@ -238,8 +240,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)          case _RAISE:            if (record->event.pressed) {              layer_on(_RAISE); +            #ifdef BACKLIGHT_ENABLE                  breathing_speed_set(2);                  breathing_pulse(); +            #endif              update_tri_layer(_LOWER, _RAISE, _ADJUST);            } else {              layer_off(_RAISE); diff --git a/keyboard/planck/keymaps/experimental/makefile.mk b/keyboard/planck/keymaps/experimental/makefile.mk index 99fbfbd0bb..6c1e05b65a 100644 --- a/keyboard/planck/keymaps/experimental/makefile.mk +++ b/keyboard/planck/keymaps/experimental/makefile.mk @@ -1,2 +1,5 @@  AUDIO_ENABLE = yes -NKRO_ENABLE = yes
\ No newline at end of file +NKRO_ENABLE = yes +MIDI_ENABLE = yes +BACKLIGHT_ENABLE = no +COMMAND_ENABLE = no
\ No newline at end of file diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 0184770c4b..2aae13e679 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -282,11 +282,6 @@ static action_t keycode_to_action(uint16_t keycode)                  action.code = ACTION_MODS_ONESHOT(mod);              }              break; -    #ifdef MIDI_ENABLE -        case 0x6000 ... 0x6FFF: -            action.code =  ACTION_FUNCTION_OPT(keycode & 0xFF, (keycode & 0x0F00) >> 8); -            break; -    #endif          case 0x7000 ... 0x7FFF:              action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF);              break; diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index 0074ab164d..07020150ae 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -195,6 +195,7 @@ extern const uint16_t fn_actions[]; +  // MAGIC keycodes  #define MAGIC_SWAP_CONTROL_CAPSLOCK      0x5002  #define MAGIC_UNSWAP_CONTROL_CAPSLOCK    0x5003 @@ -232,6 +233,10 @@ extern const uint16_t fn_actions[];  #define MUV_IN 0x5024  #define MUV_DE 0x5025 +// Midi mode on/off +#define MI_ON  0x5026 +#define MI_OFF 0x5027 +  // GOTO layer - 16 layers max  // when:  // ON_PRESS    = 1 diff --git a/quantum/quantum.c b/quantum/quantum.c index dd5d84f826..5a978d3320 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -19,11 +19,15 @@ void leader_end(void) {}  #ifdef AUDIO_ENABLE    uint8_t starting_note = 0x0C; -  int offset = 0; +  int offset = 7;    bool music_activated = false;    float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);  #endif +#ifdef MIDI_ENABLE +  bool midi_activated = false; +#endif +  // Leader key stuff  bool leading = false;  uint16_t leader_time = 0; @@ -98,6 +102,82 @@ bool process_record_quantum(keyrecord_t *record) {      //   return false;      // } +  #ifdef MIDI_ENABLE +    if (keycode == MI_ON && record->event.pressed) { +      midi_activated = true; +      PLAY_NOTE_ARRAY(music_scale, false, 0); +      return false; +    } + +    if (keycode == MI_OFF && record->event.pressed) { +      midi_activated = false; +      midi_send_cc(&midi_device, 0, 0x7B, 0); +      return false; +    } + +    if (midi_activated) { +      if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) { +          if (record->event.pressed) { +              starting_note++; // Change key +              midi_send_cc(&midi_device, 0, 0x7B, 0); +              // midi_send_cc(&midi_device, 1, 0x7B, 0); +              // midi_send_cc(&midi_device, 2, 0x7B, 0); +              // midi_send_cc(&midi_device, 3, 0x7B, 0); +              // midi_send_cc(&midi_device, 4, 0x7B, 0); +          } +          return false; +      } +      if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) { +          if (record->event.pressed) { +              starting_note--; // Change key +              midi_send_cc(&midi_device, 0, 0x7B, 0); +              // midi_send_cc(&midi_device, 1, 0x7B, 0); +              // midi_send_cc(&midi_device, 2, 0x7B, 0); +              // midi_send_cc(&midi_device, 3, 0x7B, 0); +              // midi_send_cc(&midi_device, 4, 0x7B, 0); +          } +          return false; +      } +      if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { +          offset++; // Change scale +          midi_send_cc(&midi_device, 0, 0x7B, 0); +          // midi_send_cc(&midi_device, 1, 0x7B, 0); +          // midi_send_cc(&midi_device, 2, 0x7B, 0); +          // midi_send_cc(&midi_device, 3, 0x7B, 0); +          // midi_send_cc(&midi_device, 4, 0x7B, 0); +          return false; +      } +      if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) { +          offset--; // Change scale +          midi_send_cc(&midi_device, 0, 0x7B, 0); +          // midi_send_cc(&midi_device, 1, 0x7B, 0); +          // midi_send_cc(&midi_device, 2, 0x7B, 0); +          // midi_send_cc(&midi_device, 3, 0x7B, 0); +          // midi_send_cc(&midi_device, 4, 0x7B, 0); +          return false; +      } +      // basic +      // uint8_t note = (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row); +      // advanced +      // uint8_t note = (starting_note + record->event.key.col + offset)+12*(MATRIX_ROWS - record->event.key.row); +      // guitar +      uint8_t note = (starting_note + record->event.key.col + offset)+5*(MATRIX_ROWS - record->event.key.row); +      // violin +      // uint8_t note = (starting_note + record->event.key.col + offset)+7*(MATRIX_ROWS - record->event.key.row); + +      if (record->event.pressed) { +        // midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); +        midi_send_noteon(&midi_device, 0, note, 127); +      } else { +        // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127); +        midi_send_noteoff(&midi_device, 0, note, 127); +      } + +      if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through +        return false; +    } +  #endif +    #ifdef AUDIO_ENABLE      if (keycode == AU_ON && record->event.pressed) {        audio_on(); @@ -169,7 +249,7 @@ bool process_record_quantum(keyrecord_t *record) {          return false;        } -      float freq = ((float)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)); +      float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row));        if (record->event.pressed) {          play_note(freq, 0xF);          if (music_sequence_recording) { @@ -185,8 +265,6 @@ bool process_record_quantum(keyrecord_t *record) {      }    #endif - -  #ifndef DISABLE_LEADER    // Leader key set-up    if (record->event.pressed) { @@ -267,6 +345,6 @@ void matrix_scan_quantum() {    }    #endif -   +    matrix_scan_kb();  }
\ No newline at end of file diff --git a/quantum/quantum.h b/quantum/quantum.h index db726ad425..bfecdb2626 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -13,7 +13,8 @@    #include "audio.h"  #endif  #ifdef MIDI_ENABLE -	#include <keymap_midi.h> +	// #include <keymap_midi.h> +	#include <lufa.h>  #endif  #include "action_layer.h"  #include "eeconfig.h" diff --git a/quantum/quantum.mk b/quantum/quantum.mk index b45ad850ab..e7ccfd6598 100644 --- a/quantum/quantum.mk +++ b/quantum/quantum.mk @@ -24,9 +24,9 @@ ifndef CUSTOM_MATRIX  	SRC += $(QUANTUM_DIR)/matrix.c  endif -ifeq ($(strip $(MIDI_ENABLE)), yes) -	SRC += $(QUANTUM_DIR)/keymap_midi.c -endif +#ifeq ($(strip $(MIDI_ENABLE)), yes) +#	SRC += $(QUANTUM_DIR)/keymap_midi.c +#endif  ifeq ($(strip $(AUDIO_ENABLE)), yes)      SRC += $(QUANTUM_DIR)/audio/audio.c diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c index f03f9a9b92..aba94cd597 100644 --- a/tmk_core/protocol/lufa/lufa.c +++ b/tmk_core/protocol/lufa/lufa.c @@ -883,7 +883,7 @@ int main(void)      midi_register_cc_callback(&midi_device, cc_callback);      midi_register_sysex_callback(&midi_device, sysex_callback); -    init_notes(); +    // init_notes();      // midi_send_cc(&midi_device, 0, 1, 2);      // midi_send_cc(&midi_device, 15, 1, 0);      // midi_send_noteon(&midi_device, 0, 64, 127);  | 
