virtual void set_compressor_threshold(unsigned bus_idx, float value) = 0;
virtual void set_fader(unsigned bus_idx, float value) = 0;
virtual void set_compressor_threshold(unsigned bus_idx, float value) = 0;
virtual void set_fader(unsigned bus_idx, float value) = 0;
virtual void toggle_locut(unsigned bus_idx) = 0;
virtual void toggle_auto_gain_staging(unsigned bus_idx) = 0;
virtual void toggle_compressor(unsigned bus_idx) = 0;
virtual void toggle_locut(unsigned bus_idx) = 0;
virtual void toggle_auto_gain_staging(unsigned bus_idx) = 0;
virtual void toggle_compressor(unsigned bus_idx) = 0;
virtual void highlight_compressor_threshold(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_fader(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_compressor_threshold(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_fader(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_toggle_locut(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_toggle_auto_gain_staging(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_toggle_compressor(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_toggle_locut(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_toggle_auto_gain_staging(unsigned bus_idx, bool highlight) = 0;
virtual void highlight_toggle_compressor(unsigned bus_idx, bool highlight) = 0;
void match_controller(int controller, int field_number, int bank_field_number, float value, std::function<void(unsigned, float)> func);
void match_button(int note, int field_number, int bank_field_number, std::function<void(unsigned)> func);
bool has_active_controller(unsigned bus_idx, int field_number, int bank_field_number); // Also works for buttons.
void match_controller(int controller, int field_number, int bank_field_number, float value, std::function<void(unsigned, float)> func);
void match_button(int note, int field_number, int bank_field_number, std::function<void(unsigned)> func);
bool has_active_controller(unsigned bus_idx, int field_number, int bank_field_number); // Also works for buttons.
+ void update_lights_lock_held();
+ void activate_lights(unsigned bus_idx, int field_number, std::set<unsigned> *active_lights);
+ void activate_lights_all_buses(int field_number, std::set<unsigned> *active_lights);
+
- mutable std::mutex mapping_mu;
- ControllerReceiver *receiver; // Under <mapping_mu>.
- std::unique_ptr<MIDIMappingProto> mapping_proto; // Under <mapping_mu>.
- int num_controller_banks; // Under <mapping_mu>.
+ std::atomic<bool> has_peaked[MAX_BUSES] {{ false }};
+
+ mutable std::mutex mu;
+ ControllerReceiver *receiver; // Under <mu>.
+ std::unique_ptr<MIDIMappingProto> mapping_proto; // Under <mu>.
+ int num_controller_banks; // Under <mu>.