From d082c492153b44bd16c576e00197f660d013d4e7 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 24 Nov 2025 08:09:56 +0100 Subject: [PATCH] - Added CC 123 Command to reset the NoteOn Counters - Fixed Bug, where NoteOn Counters could be negative --- Firmware/Command_Definition.h | 3 +++ Firmware/Core1_Light_Controller.c | 44 ++++++++++++++++++++++++++++--- Firmware/Core1_Light_Controller.h | 1 + Firmware/Core1_MIDI_Receiver.c | 31 +++++++++++++--------- Firmware/build/build_number.txt | 2 +- 5 files changed, 64 insertions(+), 17 deletions(-) diff --git a/Firmware/Command_Definition.h b/Firmware/Command_Definition.h index fa0e385..9b85397 100644 --- a/Firmware/Command_Definition.h +++ b/Firmware/Command_Definition.h @@ -283,6 +283,9 @@ enum Idle_Screen #define MIDI_SYSTEM_ACTIVE_SENSING 0xE // Active Sensing (Keep Alive) #define MIDI_SYSTEM_RESET 0xF // Reset +// MIDI Control Changes +#define MIDI_CC_ALL_NOTES_OFF 0x7B // [Channel Mode Message] All Notes Off + ///////////////////////////////////////// // Helping functions parsing MIDI Data // diff --git a/Firmware/Core1_Light_Controller.c b/Firmware/Core1_Light_Controller.c index bb63bf2..ab8110d 100644 --- a/Firmware/Core1_Light_Controller.c +++ b/Firmware/Core1_Light_Controller.c @@ -268,7 +268,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t { if(midi_note_in_octave == NOTE_COLOR_RED || midi_note_in_octave == NOTE_COLOR_RED_ALT) { - _NoteOn_Color_Counter[ch][R]--; + if(_NoteOn_Color_Counter[ch][R] > 0) { + _NoteOn_Color_Counter[ch][R]--; + } + if(_NoteOn_Color_Counter[ch][R] == 0) { Core1_LED_Control_Set_DC_Direct(ch, R, 0); } #ifdef COUNT_APPLIED_NOTES @@ -277,7 +280,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t } else if(midi_note_in_octave == NOTE_COLOR_GREEN || midi_note_in_octave == NOTE_COLOR_GREEN_ALT) { - _NoteOn_Color_Counter[ch][G]--; + if(_NoteOn_Color_Counter[ch][G] > 0) { + _NoteOn_Color_Counter[ch][G]--; + } + if(_NoteOn_Color_Counter[ch][G] == 0) { Core1_LED_Control_Set_DC_Direct(ch, G, 0); } #ifdef COUNT_APPLIED_NOTES @@ -286,7 +292,10 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t } else if(midi_note_in_octave == NOTE_COLOR_BLUE || midi_note_in_octave == NOTE_COLOR_BLUE_ALT) { - _NoteOn_Color_Counter[ch][B]--; + if(_NoteOn_Color_Counter[ch][B] > 0) { + _NoteOn_Color_Counter[ch][B]--; + } + if(_NoteOn_Color_Counter[ch][B] == 0) { Core1_LED_Control_Set_DC_Direct(ch, B, 0); } #ifdef COUNT_APPLIED_NOTES @@ -313,6 +322,35 @@ void Core1_Light_Controller_MIDI_Full_Note_Received(uint8_t midi_event, uint8_t } } +void Core1_Light_Controller_MIDI_Full_CC_Received(uint8_t midi_event, uint8_t midi_channel, uint8_t controller_number, uint8_t controller_value) +{ + Core1_Light_Controller_Pause_Light_Trigger(midi_event, midi_channel); + + for(uint ch=0;ch