M keyboard/planck/keymaps/experimental/keymap.c => keyboard/planck/keymaps/experimental/keymap.c +5 -1
@@ 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);
M keyboard/planck/keymaps/experimental/makefile.mk => keyboard/planck/keymaps/experimental/makefile.mk +4 -1
@@ 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
M quantum/keymap_common.c => quantum/keymap_common.c +0 -5
@@ 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;
M quantum/keymap_common.h => quantum/keymap_common.h +5 -0
@@ 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
M quantum/quantum.c => quantum/quantum.c +83 -5
@@ 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
M quantum/quantum.h => quantum/quantum.h +2 -1
@@ 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"
M quantum/quantum.mk => quantum/quantum.mk +3 -3
@@ 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
M tmk_core/protocol/lufa/lufa.c => tmk_core/protocol/lufa/lufa.c +1 -1
@@ 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);