Ok ![]()
Open midio_midi.inc, search for following section:
;; if All Notes Off CC active: check it here
SET_BSR MIDIO_BASE
movf MIDIO_ALL_NOTES_OFF_CHANNEL, W, BANKED
bz MIDIO_MIDI_NotifyReceivedEventNC ; ignore if channel value == 0
addlw -1 ; MIDI channel = channel value - 1
andlw 0x0f
iorlw 0xb0 ; check for CC | <channel>
xorwf MIDIO_LAST_RECEIVED_EVNT0, W, BANKED
bnz MIDIO_MIDI_NotifyReceivedEventNC
movf MIDIO_LAST_RECEIVED_EVNT1, W, BANKED ; check for CC#123
xorlw 123
bnz MIDIO_MIDI_NotifyReceivedEventNC
movf MIDIO_LAST_RECEIVED_EVNT2, W, BANKED ; check for value > 0
bz MIDIO_MIDI_NotifyReceivedEventNC
MIDIO_MIDI_NotifyReceivedEventNO
goto MIDIO_DOUT_ClearAll ; set all DOUTs to passive state
MIDIO_MIDI_NotifyReceivedEventNC
[/code]
and replace it by:
[code]
;; if All Notes Off CC active: check it here
SET\_BSR MIDIO\_BASE
movf MIDIO\_ALL\_NOTES\_OFF\_CHANNEL, W, BANKED
bz MIDIO\_MIDI\_NotifyReceivedEventNC ; ignore if channel value == 0
;; react on any channel (omni mode)
movf MIDIO\_LAST\_RECEIVED\_EVNT0, W, BANKED ; check for CC
andlw 0xf0
xorlw 0xb0
bnz MIDIO\_MIDI\_NotifyReceivedEventNC
movf MIDIO\_LAST\_RECEIVED\_EVNT1, W, BANKED ; check for CC#123
xorlw 123
bnz MIDIO\_MIDI\_NotifyReceivedEventNC
MIDIO\_MIDI\_NotifyReceivedEventNO
goto MIDIO\_DOUT\_ClearAll ; set all DOUTs to passive state
MIDIO\_MIDI\_NotifyReceivedEventNC
I think, that it isnât required to parse for CC#120 in addition - one CC is enough to deactivate all DOUTs
Best Regards, Thorsten.