diff options
author | James Young <18669334+noroadsleft@users.noreply.github.com> | 2020-11-28 12:02:18 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-28 12:02:18 -0800 |
commit | c66df1664497546f32662409778731143e45a552 (patch) | |
tree | da73a2d532a27685a31d932b3a44a707d4a3af81 /quantum/process_keycode/process_midi.c | |
parent | 15385d4113414d42bd062c60c9de5df797d3157f (diff) | |
download | qmk_firmware-c66df1664497546f32662409778731143e45a552.tar.gz qmk_firmware-c66df1664497546f32662409778731143e45a552.zip |
2020 November 28 Breaking Changes Update (#11053)
* Branch point for 2020 November 28 Breaking Change
* Remove matrix_col_t to allow MATRIX_ROWS > 32 (#10183)
* Add support for soft serial to ATmega32U2 (#10204)
* Change MIDI velocity implementation to allow direct control of velocity value (#9940)
* Add ability to build a subset of all keyboards based on platform.
* Actually use eeprom_driver_init().
* Make bootloader_jump weak for ChibiOS. (#10417)
* Joystick 16-bit support (#10439)
* Per-encoder resolutions (#10259)
* Share button state from mousekey to pointing_device (#10179)
* Add hotfix for chibios keyboards not wake (#10088)
* Add advanced/efficient RGB Matrix Indicators (#8564)
* Naming change.
* Support for STM32 GPIOF,G,H,I,J,K (#10206)
* Add milc as a dependency and remove the installed milc (#10563)
* ChibiOS upgrade: early init conversions (#10214)
* ChibiOS upgrade: configuration file migrator (#9952)
* Haptic and solenoid cleanup (#9700)
* XD75 cleanup (#10524)
* OLED display update interval support (#10388)
* Add definition based on currently-selected serial driver. (#10716)
* New feature: Retro Tapping per key (#10622)
* Allow for modification of output RGB values when using rgblight/rgb_matrix. (#10638)
* Add housekeeping task callbacks so that keyboards/keymaps are capable of executing code for each main loop iteration. (#10530)
* Rescale both ChibiOS and AVR backlighting.
* Reduce Helix keyboard build variation (#8669)
* Minor change to behavior allowing display updates to continue between task ticks (#10750)
* Some GPIO manipulations in matrix.c change to atomic. (#10491)
* qmk cformat (#10767)
* [Keyboard] Update the Speedo firmware for v3.0 (#10657)
* Maartenwut/Maarten namechange to evyd13/Evy (#10274)
* [quantum] combine repeated lines of code (#10837)
* Add step sequencer feature (#9703)
* aeboards/ext65 refactor (#10820)
* Refactor xelus/dawn60 for Rev2 later (#10584)
* add DEBUG_MATRIX_SCAN_RATE_ENABLE to common_features.mk (#10824)
* [Core] Added `add_oneshot_mods` & `del_oneshot_mods` (#10549)
* update chibios os usb for the otg driver (#8893)
* Remove HD44780 References, Part 4 (#10735)
* [Keyboard] Add Valor FRL TKL (+refactor) (#10512)
* Fix cursor position bug in oled_write_raw functions (#10800)
* Fixup version.h writing when using SKIP_VERSION=yes (#10972)
* Allow for certain code in the codebase assuming length of string. (#10974)
* Add AT90USB support for serial.c (#10706)
* Auto shift: support repeats and early registration (#9826)
* Rename ledmatrix.h to match .c file (#7949)
* Split RGB_MATRIX_ENABLE into _ENABLE and _DRIVER (#10231)
* Split LED_MATRIX_ENABLE into _ENABLE and _DRIVER (#10840)
* Merge point for 2020 Nov 28 Breaking Change
Diffstat (limited to 'quantum/process_keycode/process_midi.c')
-rw-r--r-- | quantum/process_keycode/process_midi.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index e52577014..8e2fb955e 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c | |||
@@ -41,12 +41,12 @@ static int8_t midi_modulation_step; | |||
41 | static uint16_t midi_modulation_timer; | 41 | static uint16_t midi_modulation_timer; |
42 | midi_config_t midi_config; | 42 | midi_config_t midi_config; |
43 | 43 | ||
44 | inline uint8_t compute_velocity(uint8_t setting) { return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1)); } | 44 | inline uint8_t compute_velocity(uint8_t setting) { return setting * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN)); } |
45 | 45 | ||
46 | void midi_init(void) { | 46 | void midi_init(void) { |
47 | midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN; | 47 | midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN; |
48 | midi_config.transpose = 0; | 48 | midi_config.transpose = 0; |
49 | midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN); | 49 | midi_config.velocity = 127; |
50 | midi_config.channel = 0; | 50 | midi_config.channel = 0; |
51 | midi_config.modulation_interval = 8; | 51 | midi_config.modulation_interval = 8; |
52 | 52 | ||
@@ -66,7 +66,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { | |||
66 | case MIDI_TONE_MIN ... MIDI_TONE_MAX: { | 66 | case MIDI_TONE_MIN ... MIDI_TONE_MAX: { |
67 | uint8_t channel = midi_config.channel; | 67 | uint8_t channel = midi_config.channel; |
68 | uint8_t tone = keycode - MIDI_TONE_MIN; | 68 | uint8_t tone = keycode - MIDI_TONE_MIN; |
69 | uint8_t velocity = compute_velocity(midi_config.velocity); | 69 | uint8_t velocity = midi_config.velocity; |
70 | if (record->event.pressed) { | 70 | if (record->event.pressed) { |
71 | if (tone_status[tone] == MIDI_INVALID_NOTE) { | 71 | if (tone_status[tone] == MIDI_INVALID_NOTE) { |
72 | uint8_t note = midi_compute_note(keycode); | 72 | uint8_t note = midi_compute_note(keycode); |
@@ -124,19 +124,30 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { | |||
124 | return false; | 124 | return false; |
125 | case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: | 125 | case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: |
126 | if (record->event.pressed) { | 126 | if (record->event.pressed) { |
127 | midi_config.velocity = keycode - MIDI_VELOCITY_MIN; | 127 | midi_config.velocity = compute_velocity(keycode - MIDI_VELOCITY_MIN); |
128 | dprintf("midi velocity %d\n", midi_config.velocity); | 128 | dprintf("midi velocity %d\n", midi_config.velocity); |
129 | } | 129 | } |
130 | return false; | 130 | return false; |
131 | case MI_VELD: | 131 | case MI_VELD: |
132 | if (record->event.pressed && midi_config.velocity > 0) { | 132 | if (record->event.pressed && midi_config.velocity > 0) { |
133 | midi_config.velocity--; | 133 | if (midi_config.velocity == 127) { |
134 | midi_config.velocity -= 10; | ||
135 | } else if (midi_config.velocity > 12) { | ||
136 | midi_config.velocity -= 13; | ||
137 | } else { | ||
138 | midi_config.velocity = 0; | ||
139 | } | ||
140 | |||
134 | dprintf("midi velocity %d\n", midi_config.velocity); | 141 | dprintf("midi velocity %d\n", midi_config.velocity); |
135 | } | 142 | } |
136 | return false; | 143 | return false; |
137 | case MI_VELU: | 144 | case MI_VELU: |
138 | if (record->event.pressed) { | 145 | if (record->event.pressed && midi_config.velocity < 127) { |
139 | midi_config.velocity++; | 146 | if (midi_config.velocity < 115) { |
147 | midi_config.velocity += 13; | ||
148 | } else { | ||
149 | midi_config.velocity = 127; | ||
150 | } | ||
140 | dprintf("midi velocity %d\n", midi_config.velocity); | 151 | dprintf("midi velocity %d\n", midi_config.velocity); |
141 | } | 152 | } |
142 | return false; | 153 | return false; |