From 6bf0d4f6274750aa6ae0a1f38d46f00355678040 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 3 Oct 2015 12:03:07 -0400 Subject: add basic support for HUI heartbeat, only used for HUI devices --- libs/surfaces/mackie/mackie_control_protocol.cc | 19 +++++++++++++++++++ libs/surfaces/mackie/mackie_control_protocol.h | 2 ++ libs/surfaces/mackie/surface.cc | 17 ++++++++++++++++- libs/surfaces/mackie/surface.h | 3 ++- 4 files changed, 39 insertions(+), 2 deletions(-) (limited to 'libs/surfaces') diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc index 1b66528754..f4ad499313 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.cc +++ b/libs/surfaces/mackie/mackie_control_protocol.cc @@ -428,6 +428,13 @@ MackieControlProtocol::set_active (bool yn) redisplay_connection = redisplay_timeout->connect (sigc::mem_fun (*this, &MackieControlProtocol::redisplay)); redisplay_timeout->attach (main_loop()->get_context()); + if (_device_info.device_type() == DeviceInfo::HUI) { + Glib::RefPtr hui_timeout = Glib::TimeoutSource::create (1000); // milliseconds + hui_connection = hui_timeout->connect (sigc::mem_fun (*this, &MackieControlProtocol::hui_heartbeat)); + hui_timeout->attach (main_loop()->get_context()); + } + + } else { BaseUI::quit (); @@ -442,6 +449,18 @@ MackieControlProtocol::set_active (bool yn) return 0; } +bool +MackieControlProtocol::hui_heartbeat () +{ + Glib::Threads::Mutex::Lock lm (surfaces_lock); + + for (Surfaces::iterator s = surfaces.begin(); s != surfaces.end(); ++s) { + (*s)->hui_heartbeat (); + } + + return true; +} + bool MackieControlProtocol::periodic () { diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h index 2008d9c887..1908070a9e 100644 --- a/libs/surfaces/mackie/mackie_control_protocol.h +++ b/libs/surfaces/mackie/mackie_control_protocol.h @@ -282,6 +282,7 @@ class MackieControlProtocol Mackie::DeviceProfile _device_profile; sigc::connection periodic_connection; sigc::connection redisplay_connection; + sigc::connection hui_connection; uint32_t _current_initial_bank; PBD::ScopedConnectionList audio_engine_connections; PBD::ScopedConnectionList session_connections; @@ -324,6 +325,7 @@ class MackieControlProtocol int create_surfaces (); bool periodic(); bool redisplay(); + bool hui_heartbeat (); void build_gui (); bool midi_input_handler (Glib::IOCondition ioc, MIDI::Port* port); void clear_ports (); diff --git a/libs/surfaces/mackie/surface.cc b/libs/surfaces/mackie/surface.cc index 3770a335e7..a4b1feccad 100644 --- a/libs/surfaces/mackie/surface.cc +++ b/libs/surfaces/mackie/surface.cc @@ -440,8 +440,12 @@ Surface::handle_midi_note_on_message (MIDI::Parser &, MIDI::EventTwoBytes* ev) if (_mcp.device_info().no_handshake()) { turn_it_on (); - } + } + if (_mcp.device_info().device_type() == DeviceInfo::HUI && ev->note_number == 0 && ev->velocity == 127) { + turn_it_on (); + } + /* fader touch sense is given by "buttons" 0xe..0xe7 and 0xe8 for the * master. */ @@ -1087,3 +1091,14 @@ Surface::set_touch_sensitivity (int sensitivity) } } } + +void +Surface::hui_heartbeat () +{ + if (!_port) { + return; + } + + MidiByteArray msg (3, MIDI::on, 0x0, 0x0); + _port->write (msg); +} diff --git a/libs/surfaces/mackie/surface.h b/libs/surfaces/mackie/surface.h index dc3b51566e..a3d874a89a 100644 --- a/libs/surfaces/mackie/surface.h +++ b/libs/surfaces/mackie/surface.h @@ -87,7 +87,8 @@ public: void periodic (uint64_t now_usecs); void redisplay (); - + void hui_heartbeat (); + void handle_midi_pitchbend_message (MIDI::Parser&, MIDI::pitchbend_t, uint32_t channel_id); void handle_midi_controller_message (MIDI::Parser&, MIDI::EventTwoBytes*); void handle_midi_note_on_message (MIDI::Parser&, MIDI::EventTwoBytes*); -- cgit v1.2.3