aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/api/api_sysex.c1
-rw-r--r--quantum/keymap.h3
-rw-r--r--quantum/process_keycode/process_midi.c58
-rw-r--r--quantum/process_keycode/process_midi.h5
-rw-r--r--quantum/quantum.c8
-rw-r--r--quantum/quantum.h1
6 files changed, 48 insertions, 28 deletions
diff --git a/quantum/api/api_sysex.c b/quantum/api/api_sysex.c
index 6a2ee9012..89c66a2a2 100644
--- a/quantum/api/api_sysex.c
+++ b/quantum/api/api_sysex.c
@@ -16,6 +16,7 @@
16#include "api_sysex.h" 16#include "api_sysex.h"
17#include "sysex_tools.h" 17#include "sysex_tools.h"
18#include "print.h" 18#include "print.h"
19#include "qmk_midi.h"
19 20
20void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length) { 21void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length) {
21 // SEND_STRING("\nTX: "); 22 // SEND_STRING("\nTX: ");
diff --git a/quantum/keymap.h b/quantum/keymap.h
index 5d64be19c..bfcb2f7cd 100644
--- a/quantum/keymap.h
+++ b/quantum/keymap.h
@@ -23,6 +23,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
23#include "action.h" 23#include "action.h"
24#if defined(__AVR__) 24#if defined(__AVR__)
25#include <avr/pgmspace.h> 25#include <avr/pgmspace.h>
26#elif defined PROTOCOL_CHIBIOS
27//We need to ensure that chibios is include before redefining reset
28#include "ch.h"
26#endif 29#endif
27#include "keycode.h" 30#include "keycode.h"
28#include "action_macro.h" 31#include "action_macro.h"
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index 9184feaae..9728076df 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -16,11 +16,13 @@
16#include "process_midi.h" 16#include "process_midi.h"
17 17
18#ifdef MIDI_ENABLE 18#ifdef MIDI_ENABLE
19#include <LUFA/Drivers/USB/USB.h>
19#include "midi.h" 20#include "midi.h"
21#include "qmk_midi.h"
20 22
21#ifdef MIDI_BASIC 23#ifdef MIDI_BASIC
22 24
23void process_midi_basic_noteon(uint8_t note) 25void process_midi_basic_noteon(uint8_t note)
24{ 26{
25 midi_send_noteon(&midi_device, 0, note, 128); 27 midi_send_noteon(&midi_device, 0, note, 128);
26} 28}
@@ -46,6 +48,7 @@ static uint8_t tone_status[MIDI_TONE_COUNT];
46static uint8_t midi_modulation; 48static uint8_t midi_modulation;
47static int8_t midi_modulation_step; 49static int8_t midi_modulation_step;
48static uint16_t midi_modulation_timer; 50static uint16_t midi_modulation_timer;
51midi_config_t midi_config;
49 52
50inline uint8_t compute_velocity(uint8_t setting) 53inline uint8_t compute_velocity(uint8_t setting)
51{ 54{
@@ -70,30 +73,6 @@ void midi_init(void)
70 midi_modulation_timer = 0; 73 midi_modulation_timer = 0;
71} 74}
72 75
73void midi_task(void)
74{
75 if (timer_elapsed(midi_modulation_timer) < midi_config.modulation_interval)
76 return;
77 midi_modulation_timer = timer_read();
78
79 if (midi_modulation_step != 0)
80 {
81 dprintf("midi modulation %d\n", midi_modulation);
82 midi_send_cc(&midi_device, midi_config.channel, 0x1, midi_modulation);
83
84 if (midi_modulation_step < 0 && midi_modulation < -midi_modulation_step) {
85 midi_modulation = 0;
86 midi_modulation_step = 0;
87 return;
88 }
89
90 midi_modulation += midi_modulation_step;
91
92 if (midi_modulation > 127)
93 midi_modulation = 127;
94 }
95}
96
97uint8_t midi_compute_note(uint16_t keycode) 76uint8_t midi_compute_note(uint16_t keycode)
98{ 77{
99 return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose; 78 return 12 * midi_config.octave + (keycode - MIDI_TONE_MIN) + midi_config.transpose;
@@ -250,4 +229,33 @@ bool process_midi(uint16_t keycode, keyrecord_t *record)
250 229
251#endif // MIDI_ADVANCED 230#endif // MIDI_ADVANCED
252 231
232void midi_task(void)
233{
234 midi_device_process(&midi_device);
235#ifdef MIDI_ADVANCED
236 if (timer_elapsed(midi_modulation_timer) < midi_config.modulation_interval)
237 return;
238 midi_modulation_timer = timer_read();
239
240 if (midi_modulation_step != 0)
241 {
242 dprintf("midi modulation %d\n", midi_modulation);
243 midi_send_cc(&midi_device, midi_config.channel, 0x1, midi_modulation);
244
245 if (midi_modulation_step < 0 && midi_modulation < -midi_modulation_step) {
246 midi_modulation = 0;
247 midi_modulation_step = 0;
248 return;
249 }
250
251 midi_modulation += midi_modulation_step;
252
253 if (midi_modulation > 127)
254 midi_modulation = 127;
255 }
256#endif
257}
258
259
260
253#endif // MIDI_ENABLE 261#endif // MIDI_ENABLE
diff --git a/quantum/process_keycode/process_midi.h b/quantum/process_keycode/process_midi.h
index ccac8981a..1968fbe3f 100644
--- a/quantum/process_keycode/process_midi.h
+++ b/quantum/process_keycode/process_midi.h
@@ -27,6 +27,8 @@ void process_midi_basic_noteoff(uint8_t note);
27void process_midi_all_notes_off(void); 27void process_midi_all_notes_off(void);
28#endif 28#endif
29 29
30void midi_task(void);
31
30#ifdef MIDI_ADVANCED 32#ifdef MIDI_ADVANCED
31typedef union { 33typedef union {
32 uint32_t raw; 34 uint32_t raw;
@@ -39,10 +41,9 @@ typedef union {
39 }; 41 };
40} midi_config_t; 42} midi_config_t;
41 43
42midi_config_t midi_config; 44extern midi_config_t midi_config;
43 45
44void midi_init(void); 46void midi_init(void);
45void midi_task(void);
46bool process_midi(uint16_t keycode, keyrecord_t *record); 47bool process_midi(uint16_t keycode, keyrecord_t *record);
47 48
48#define MIDI_INVALID_NOTE 0xFF 49#define MIDI_INVALID_NOTE 0xFF
diff --git a/quantum/quantum.c b/quantum/quantum.c
index d3685f50b..bd95d5ea8 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -34,6 +34,14 @@ extern backlight_config_t backlight_config;
34#include "fauxclicky.h" 34#include "fauxclicky.h"
35#endif 35#endif
36 36
37#ifdef API_ENABLE
38#include "api.h"
39#endif
40
41#ifdef MIDI_ENABLE
42#include "process_midi.h"
43#endif
44
37#ifdef AUDIO_ENABLE 45#ifdef AUDIO_ENABLE
38 #ifndef GOODBYE_SONG 46 #ifndef GOODBYE_SONG
39 #define GOODBYE_SONG SONG(GOODBYE_SOUND) 47 #define GOODBYE_SONG SONG(GOODBYE_SOUND)
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 6ca5ecb5c..b4c9e0b89 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -49,7 +49,6 @@ extern uint32_t default_layer_state;
49#endif 49#endif
50 50
51#ifdef MIDI_ENABLE 51#ifdef MIDI_ENABLE
52 #include <lufa.h>
53#ifdef MIDI_ADVANCED 52#ifdef MIDI_ADVANCED
54 #include "process_midi.h" 53 #include "process_midi.h"
55#endif 54#endif