diff options
| author | Gabriel Young <gabeplaysdrums@live.com> | 2017-02-18 21:07:07 -0800 |
|---|---|---|
| committer | Gabriel Young <gabeplaysdrums@live.com> | 2017-02-19 16:43:45 -0800 |
| commit | ae0752dff552a07fb52e08c7057979959959d247 (patch) | |
| tree | 1f1c1dc6605e20ddf46894cef2e6b52bd2dc2b81 | |
| parent | 5e6097f0154403dccb9b5658390c84441aa509bc (diff) | |
| download | qmk_firmware-ae0752dff552a07fb52e08c7057979959959d247.tar.gz qmk_firmware-ae0752dff552a07fb52e08c7057979959959d247.zip | |
expose midi_config
| -rw-r--r-- | quantum/process_keycode/process_midi.c | 23 | ||||
| -rw-r--r-- | quantum/process_keycode/process_midi.h | 18 |
2 files changed, 24 insertions, 17 deletions
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 4d60aefb1..9190fa047 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c | |||
| @@ -1,22 +1,6 @@ | |||
| 1 | #include "process_midi.h" | 1 | #include "process_midi.h" |
| 2 | #include "timer.h" | 2 | #include "timer.h" |
| 3 | 3 | ||
| 4 | typedef union { | ||
| 5 | uint32_t raw; | ||
| 6 | struct { | ||
| 7 | uint8_t octave :4; | ||
| 8 | int8_t transpose :4; | ||
| 9 | uint8_t velocity :4; | ||
| 10 | uint8_t channel :4; | ||
| 11 | uint8_t modulation_interval :4; | ||
| 12 | }; | ||
| 13 | } midi_config_t; | ||
| 14 | |||
| 15 | midi_config_t midi_config; | ||
| 16 | |||
| 17 | #define MIDI_INVALID_NOTE 0xFF | ||
| 18 | |||
| 19 | #define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) | ||
| 20 | static uint8_t tone_status[MIDI_TONE_COUNT]; | 4 | static uint8_t tone_status[MIDI_TONE_COUNT]; |
| 21 | 5 | ||
| 22 | static uint8_t midi_modulation; | 6 | static uint8_t midi_modulation; |
| @@ -70,6 +54,11 @@ void midi_task(void) | |||
| 70 | } | 54 | } |
| 71 | } | 55 | } |
| 72 | 56 | ||
| 57 | uint8_t midi_compute_note(uint16_t keycode) | ||
| 58 | { | ||
| 59 | return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose; | ||
| 60 | } | ||
| 61 | |||
| 73 | bool process_midi(uint16_t keycode, keyrecord_t *record) | 62 | bool process_midi(uint16_t keycode, keyrecord_t *record) |
| 74 | { | 63 | { |
| 75 | switch (keycode) { | 64 | switch (keycode) { |
| @@ -79,7 +68,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) | |||
| 79 | uint8_t tone = keycode - MIDI_TONE_MIN; | 68 | uint8_t tone = keycode - MIDI_TONE_MIN; |
| 80 | uint8_t velocity = compute_velocity(midi_config.velocity); | 69 | uint8_t velocity = compute_velocity(midi_config.velocity); |
| 81 | if (record->event.pressed) { | 70 | if (record->event.pressed) { |
| 82 | uint8_t note = 12 * midi_config.octave + tone + midi_config.transpose; | 71 | uint8_t note = midi_compute_note(keycode); |
| 83 | midi_send_noteon(&midi_device, channel, note, velocity); | 72 | midi_send_noteon(&midi_device, channel, note, velocity); |
| 84 | dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); | 73 | dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); |
| 85 | tone_status[tone] = note; | 74 | tone_status[tone] = note; |
diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h index 66ce60b0e..ffd41579f 100644 --- a/quantum/process_keycode/process_midi.h +++ b/quantum/process_keycode/process_midi.h | |||
| @@ -4,8 +4,26 @@ | |||
| 4 | #include "quantum.h" | 4 | #include "quantum.h" |
| 5 | #include "midi.h" | 5 | #include "midi.h" |
| 6 | 6 | ||
| 7 | typedef union { | ||
| 8 | uint32_t raw; | ||
| 9 | struct { | ||
| 10 | uint8_t octave :4; | ||
| 11 | int8_t transpose :4; | ||
| 12 | uint8_t velocity :4; | ||
| 13 | uint8_t channel :4; | ||
| 14 | uint8_t modulation_interval :4; | ||
| 15 | }; | ||
| 16 | } midi_config_t; | ||
| 17 | |||
| 18 | midi_config_t midi_config; | ||
| 19 | |||
| 7 | void midi_init(void); | 20 | void midi_init(void); |
| 8 | void midi_task(void); | 21 | void midi_task(void); |
| 9 | bool process_midi(uint16_t keycode, keyrecord_t *record); | 22 | bool process_midi(uint16_t keycode, keyrecord_t *record); |
| 10 | 23 | ||
| 24 | #define MIDI_INVALID_NOTE 0xFF | ||
| 25 | #define MIDI_TONE_COUNT (MIDI_TONE_MAX - MIDI_TONE_MIN + 1) | ||
| 26 | |||
| 27 | uint8_t midi_compute_note(uint16_t keycode); | ||
| 28 | |||
| 11 | #endif \ No newline at end of file | 29 | #endif \ No newline at end of file |
