summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-10-03 12:03:07 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-10-03 13:13:58 -0400
commit6bf0d4f6274750aa6ae0a1f38d46f00355678040 (patch)
tree75c7ae71d3adeaab6017d19aefd856db66edf334 /libs
parent4ef45aacc15c131170420341fab3439aefb72545 (diff)
add basic support for HUI heartbeat, only used for HUI devices
Diffstat (limited to 'libs')
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc19
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.h2
-rw-r--r--libs/surfaces/mackie/surface.cc17
-rw-r--r--libs/surfaces/mackie/surface.h3
4 files changed, 39 insertions, 2 deletions
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<Glib::TimeoutSource> 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 ();
@@ -443,6 +450,18 @@ MackieControlProtocol::set_active (bool yn)
}
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 ()
{
if (!active()) {
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*);