summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-06-24 13:46:07 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-06-24 13:46:07 -0400
commit2ea5962af2a389277703c6eebc2160cf52302468 (patch)
tree17e13680e0823c8eb6d933f9ff4a7f466871c051
parent2b81d4d0feb06a18d31463ab884de5e56722a346 (diff)
rationalize save/restore of control surface "feedback" property
-rw-r--r--libs/surfaces/control_protocol/control_protocol.cc13
-rw-r--r--libs/surfaces/control_protocol/control_protocol/control_protocol.h2
-rw-r--r--libs/surfaces/generic_midi/generic_midi_control_protocol.cc7
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.cc4
-rw-r--r--libs/surfaces/mackie/mackie_control_protocol.h7
-rw-r--r--libs/surfaces/osc/osc.cc19
6 files changed, 31 insertions, 21 deletions
diff --git a/libs/surfaces/control_protocol/control_protocol.cc b/libs/surfaces/control_protocol/control_protocol.cc
index 71cae36086..6ac673925a 100644
--- a/libs/surfaces/control_protocol/control_protocol.cc
+++ b/libs/surfaces/control_protocol/control_protocol.cc
@@ -374,6 +374,19 @@ ControlProtocol::get_state ()
XMLNode* node = new XMLNode (state_node_name);
node->add_property ("name", _name);
+ node->add_property ("feedback", get_feedback() ? "yes" : "no");
return *node;
}
+
+int
+ControlProtocol::set_state (XMLNode const & node, int /* version */)
+{
+ const XMLProperty* prop;
+
+ if ((prop = node.property ("feedback")) != 0) {
+ set_feedback (string_is_affirmative (prop->value()));
+ }
+
+ return 0;
+}
diff --git a/libs/surfaces/control_protocol/control_protocol/control_protocol.h b/libs/surfaces/control_protocol/control_protocol/control_protocol.h
index f5af008e4a..13b8dcad7a 100644
--- a/libs/surfaces/control_protocol/control_protocol/control_protocol.h
+++ b/libs/surfaces/control_protocol/control_protocol/control_protocol.h
@@ -135,6 +135,8 @@ class LIBCONTROLCP_API ControlProtocol : public PBD::Stateful, public PBD::Scope
virtual void tear_down_gui() { }
XMLNode& get_state ();
+ int set_state (XMLNode const &, int version);
+
static const std::string state_node_name;
protected:
diff --git a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
index 702d361965..85a81400c4 100644
--- a/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
+++ b/libs/surfaces/generic_midi/generic_midi_control_protocol.cc
@@ -464,7 +464,6 @@ GenericMidiControlProtocol::get_state ()
XMLNode& node (ControlProtocol::get_state());
char buf[32];
- node.add_property (X_("feedback"), do_feedback ? "1" : "0");
snprintf (buf, sizeof (buf), "%" PRIu64, _feedback_interval);
node.add_property (X_("feedback_interval"), buf);
snprintf (buf, sizeof (buf), "%d", _threshold);
@@ -501,10 +500,8 @@ GenericMidiControlProtocol::set_state (const XMLNode& node, int version)
XMLNodeConstIterator niter;
const XMLProperty* prop;
- if ((prop = node.property ("feedback")) != 0) {
- do_feedback = (bool) atoi (prop->value().c_str());
- } else {
- do_feedback = false;
+ if (ControlProtocol::set_state (node, version)) {
+ return -1;
}
if ((prop = node.property ("feedback_interval")) != 0) {
diff --git a/libs/surfaces/mackie/mackie_control_protocol.cc b/libs/surfaces/mackie/mackie_control_protocol.cc
index fc036513cc..5d6e55e742 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.cc
+++ b/libs/surfaces/mackie/mackie_control_protocol.cc
@@ -827,6 +827,10 @@ MackieControlProtocol::set_state (const XMLNode & node, int version)
const XMLProperty* prop;
uint32_t bank = 0;
+ if (ControlProtocol::set_state (node, version)) {
+ return -1;
+ }
+
if ((prop = node.property (X_("ipmidi-base"))) != 0) {
set_ipmidi_base (atoi (prop->value()));
}
diff --git a/libs/surfaces/mackie/mackie_control_protocol.h b/libs/surfaces/mackie/mackie_control_protocol.h
index 510cbf11ba..f521684a80 100644
--- a/libs/surfaces/mackie/mackie_control_protocol.h
+++ b/libs/surfaces/mackie/mackie_control_protocol.h
@@ -140,7 +140,12 @@ class MackieControlProtocol
XMLNode& get_state ();
int set_state (const XMLNode&, int version);
-
+
+ /* Note: because Mackie control is inherently a duplex protocol,
+ we do not implement get/set_feedback() since this aspect of
+ support for the protocol is not optional.
+ */
+
static bool probe();
Glib::Threads::Mutex surfaces_lock;
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index 5878b34d80..727485d83c 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -1090,25 +1090,14 @@ OSC::route_plugin_parameter_print (int rid, int piid, int par)
XMLNode&
OSC::get_state ()
{
- XMLNode& node (ControlProtocol::get_state());
-
- node.add_property (X_("feedback"), _send_route_changes ? "1" : "0");
- return node;
+ return ControlProtocol::get_state();
}
int
-OSC::set_state (const XMLNode& node, int /*version*/)
+OSC::set_state (const XMLNode& node, int version)
{
- const XMLProperty* prop = node.property (X_("feedback"));
-
- if (prop) {
- if (PBD::string_is_affirmative (prop->value())) {
- _send_route_changes = true;
- } else {
- _send_route_changes = false;
- }
- } else {
- /* leave it alone */
+ if (ControlProtocol::set_state (node, version)) {
+ return -1;
}
return 0;