From 9a56523d8354d25804f23e6eee2624dde9aad1f0 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Wed, 19 Oct 2016 22:31:05 +0200 Subject: [PATCH] Don't highlight any controllers if no MIDI controller is attached. Previously, we'd highlight unconditionally as long as we had a MIDI mapping loaded. --- midi_mapper.cpp | 23 +++++++++++++++++++++-- midi_mapper.h | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/midi_mapper.cpp b/midi_mapper.cpp index 6395ff7..ba996e8 100644 --- a/midi_mapper.cpp +++ b/midi_mapper.cpp @@ -346,13 +346,27 @@ void MIDIMapper::handle_event(snd_seq_t *seq, snd_seq_event_t *event) case SND_SEQ_EVENT_PORT_EXIT: printf("MIDI port %d:%d went away.\n", event->data.addr.client, event->data.addr.port); break; + case SND_SEQ_EVENT_PORT_SUBSCRIBED: + if (event->data.connect.sender.client != 0 && // Ignore system senders. + event->data.connect.sender.client != snd_seq_client_id(seq) && + event->data.connect.dest.client == snd_seq_client_id(seq)) { + ++num_subscribed_ports; + update_highlights(); + } + break; + case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: + if (event->data.connect.sender.client != 0 && // Ignore system senders. + event->data.connect.sender.client != snd_seq_client_id(seq) && + event->data.connect.dest.client == snd_seq_client_id(seq)) { + --num_subscribed_ports; + update_highlights(); + } + break; case SND_SEQ_EVENT_NOTEOFF: case SND_SEQ_EVENT_CLIENT_START: case SND_SEQ_EVENT_CLIENT_EXIT: case SND_SEQ_EVENT_CLIENT_CHANGE: case SND_SEQ_EVENT_PORT_CHANGE: - case SND_SEQ_EVENT_PORT_SUBSCRIBED: - case SND_SEQ_EVENT_PORT_UNSUBSCRIBED: break; default: printf("Ignoring MIDI event of unknown type %d.\n", event->type); @@ -467,6 +481,11 @@ void MIDIMapper::refresh_lights() void MIDIMapper::update_highlights() { + if (num_subscribed_ports.load() == 0) { + receiver->clear_all_highlights(); + return; + } + // Global controllers. bool highlight_locut = false; bool highlight_limiter_threshold = false; diff --git a/midi_mapper.h b/midi_mapper.h index be785ec..6274616 100644 --- a/midi_mapper.h +++ b/midi_mapper.h @@ -117,6 +117,7 @@ private: std::unique_ptr mapping_proto; // Under . int num_controller_banks; // Under . std::atomic current_controller_bank{0}; + std::atomic num_subscribed_ports{0}; std::thread midi_thread; std::map current_light_status; // Keyed by note number. Under . -- 2.39.2