summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLen Ovens <len@ovenwerks.net>2016-06-11 13:57:27 -0700
committerLen Ovens <len@ovenwerks.net>2016-06-11 13:57:27 -0700
commit3d9517c22ff081b00faba119c6eee56796c39a62 (patch)
treec8c17b86dd838870c7db12794db598b6df286b00
parent2c44225df2569bffe452fe2a84b698488f203cf0 (diff)
OSC: Add send enable control.
-rw-r--r--libs/surfaces/osc/osc.cc119
-rw-r--r--libs/surfaces/osc/osc.h5
2 files changed, 101 insertions, 23 deletions
diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc
index d68e52b59b..edaf5b76b4 100644
--- a/libs/surfaces/osc/osc.cc
+++ b/libs/surfaces/osc/osc.cc
@@ -533,6 +533,7 @@ OSC::register_callbacks()
REGISTER_CALLBACK (serv, "/select/pan_stereo_width", "f", sel_pan_width);
REGISTER_CALLBACK (serv, "/select/send_gain", "if", sel_sendgain);
REGISTER_CALLBACK (serv, "/select/send_fader", "if", sel_sendfader);
+ REGISTER_CALLBACK (serv, "/select/send_enable", "if", sel_sendenable);
/* These commands require the route index in addition to the arg; TouchOSC (et al) can't use these */
REGISTER_CALLBACK (serv, "/strip/mute", "ii", route_mute);
@@ -557,6 +558,7 @@ OSC::register_callbacks()
REGISTER_CALLBACK (serv, "/strip/send/gainabs", "iif", route_set_send_gain_abs);
REGISTER_CALLBACK (serv, "/strip/send/gain", "iif", route_set_send_gain_dB);
REGISTER_CALLBACK (serv, "/strip/send/fader", "iif", route_set_send_fader);
+ REGISTER_CALLBACK (serv, "/strip/send/enable", "iif", route_set_send_enable);
/* still not-really-standardized query interface */
//REGISTER_CALLBACK (serv, "/ardour/*/#current_value", "", current_value);
@@ -1881,8 +1883,7 @@ OSC::strip_gui_select (int ssid, int yn, lo_message msg)
int rid = get_rid (ssid, lo_message_get_source (msg));
boost::shared_ptr<Stripable> s = session->get_remote_nth_stripable (rid, PresentationInfo::Route);
if (s) {
- //SetStripableSelection ((*s)->presentation_info().order());
- SetStripableSelection (rid); //alt above may end up being better
+ SetStripableSelection (rid);
} else {
route_send_fail ("gui_select", ssid, 0, lo_message_get_source (msg));
}
@@ -2102,13 +2103,7 @@ OSC::route_set_send_gain_abs (int ssid, int sid, float val, lo_message msg)
int
OSC::route_set_send_gain_dB (int ssid, int sid, float val, lo_message msg)
{
- int ret;
- ret = route_set_send_gain_abs (ssid, sid, dB_to_coefficient (val), msg);
- if (ret != 0) {
- return route_send_fail ("send/gain", ssid, -193, lo_message_get_source (msg));
- }
-
-return 0;
+ return route_set_send_gain_abs (ssid, sid, dB_to_coefficient (val), msg);
}
int
@@ -2117,39 +2112,94 @@ OSC::route_set_send_fader (int ssid, int sid, float pos, lo_message msg)
if (!session) {
return -1;
}
- int ret;
if ((pos > 799.5) && (pos < 800.5)) {
- ret = route_set_send_gain_abs (ssid, sid, 1.0, msg);
+ return route_set_send_gain_abs (ssid, sid, 1.0, msg);
} else {
- ret = route_set_send_gain_abs (ssid, sid, slider_position_to_gain_with_max ((pos/1023), 2.0), msg);
- }
- if (ret != 0) {
- return route_send_fail ("send/fader", ssid, -193, lo_message_get_source (msg));
+ return route_set_send_gain_abs (ssid, sid, slider_position_to_gain_with_max ((pos/1023), 2.0), msg);
}
-
- return ret;
}
int
OSC::sel_sendgain (int id, float val, lo_message msg)
{
OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ int ret;
if (sur->surface_sel) {
- return route_set_send_gain_dB(sur->surface_sel, id, val, msg);
- } else {
- return route_send_fail ("send_gain", 0, -193, lo_message_get_source (msg));
+ ret = route_set_send_gain_dB(sur->surface_sel, id, val, msg);
}
+ if (!ret) {
+ return ret;
+ }
+ return sel_send_fail ("send_gain", id, -193, lo_message_get_source (msg));
}
int
OSC::sel_sendfader (int id, float val, lo_message msg)
{
OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ int ret;
if (sur->surface_sel) {
- return route_set_send_fader(sur->surface_sel, id, val, msg);
- } else {
- return route_send_fail ("send_gain", 0, -193, lo_message_get_source (msg));
+ ret = route_set_send_fader(sur->surface_sel, id, val, msg);
+ }
+ if (!ret) {
+ return ret;
}
+ return sel_send_fail ("send_gain", id, 0, lo_message_get_source (msg));
+
+}
+
+int
+OSC::route_set_send_enable (int ssid, int sid, float val, lo_message msg)
+{
+ if (!session) {
+ return -1;
+ }
+ int rid = get_rid (ssid, lo_message_get_source (msg));
+
+ boost::shared_ptr<Stripable> s = session->get_remote_nth_stripable (rid, PresentationInfo::Route);
+
+ if (s) {
+
+ /* revert to zero-based counting */
+
+ if (sid > 0) {
+ --sid;
+ }
+
+ if (s->send_enable_controllable (sid)) {
+ s->send_enable_controllable (sid)->set_value (val, PBD::Controllable::NoGroup);
+ return 0;
+ }
+
+ if (s->send_level_controllable (sid)) {
+ return 1;
+ }
+
+ }
+
+ return -1;
+}
+
+int
+OSC::sel_sendenable (int id, float val, lo_message msg)
+{
+ OSCSurface *sur = get_surface(lo_message_get_source (msg));
+ int ret;
+ if (sur->surface_sel) {
+ ret = route_set_send_enable(sur->surface_sel, id, val, msg);
+ }
+ switch (ret) {
+ case 0:
+ return ret;
+ case 1:
+ return sel_send_fail ("send_enable", id, 1, lo_message_get_source (msg));
+ default:
+ sel_send_fail ("send_enable", id, 0, lo_message_get_source (msg));
+ return -1;
+ }
+ return -1;
+
+
}
int
@@ -2348,6 +2398,29 @@ OSC::route_send_fail (string path, uint32_t ssid, float val, lo_address addr)
return 0;
}
+int
+OSC::sel_send_fail (string path, uint32_t id, float val, lo_address addr)
+{
+ OSCSurface *sur = get_surface(addr);
+
+ ostringstream os;
+ lo_message reply;
+ reply = lo_message_new ();
+ if (sur->feedback[2]) {
+ os << "/select/" << path << "/" << id;
+ } else {
+ os << "/select/" << path;
+ lo_message_add_int32 (reply, id);
+ }
+ string str_pth = os.str();
+ lo_message_add_float (reply, (float) val);
+
+ lo_send_message (addr, str_pth.c_str(), reply);
+ lo_message_free (reply);
+
+ return 0;
+}
+
XMLNode&
OSC::get_state ()
{
diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h
index 0ff427ecf0..7ef4b5aaf5 100644
--- a/libs/surfaces/osc/osc.h
+++ b/libs/surfaces/osc/osc.h
@@ -394,6 +394,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK2_MSG(sel_sendgain,i,f);
PATH_CALLBACK2_MSG(sel_sendfader,i,f);
+ PATH_CALLBACK2_MSG(sel_sendenable,i,f);
PATH_CALLBACK4(set_surface,i,i,i,i);
PATH_CALLBACK2(locate,i,i);
@@ -418,6 +419,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PATH_CALLBACK3(route_set_send_gain_abs,i,i,f);
PATH_CALLBACK3(route_set_send_gain_dB,i,i,f);
PATH_CALLBACK3(route_set_send_fader,i,i,f);
+ PATH_CALLBACK3(route_set_send_enable,i,i,f);
PATH_CALLBACK4(route_plugin_parameter,i,i,i,f);
PATH_CALLBACK3(route_plugin_parameter_print,i,i,i);
@@ -443,6 +445,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int route_set_send_gain_abs (int rid, int sid, float val, lo_message msg);
int route_set_send_gain_dB (int rid, int sid, float val, lo_message msg);
int route_set_send_fader (int rid, int sid, float val, lo_message msg);
+ int route_set_send_enable (int rid, int sid, float val, lo_message msg);
int route_plugin_parameter (int rid, int piid,int par, float val, lo_message msg);
int route_plugin_parameter_print (int rid, int piid,int par, lo_message msg);
@@ -479,6 +482,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
int sel_pan_width (float val, lo_message msg);
int sel_sendgain (int id, float dB, lo_message msg);
int sel_sendfader (int id, float pos, lo_message msg);
+ int sel_sendenable (int id, float pos, lo_message msg);
void listen_to_route (boost::shared_ptr<ARDOUR::Stripable>, lo_address);
void end_listen (boost::shared_ptr<ARDOUR::Stripable>, lo_address);
@@ -493,6 +497,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
PBD::ScopedConnectionList session_connections;
int route_send_fail (std::string path, uint32_t ssid, float val, lo_address addr);
+ int sel_send_fail (std::string path, uint32_t id, float val, lo_address addr);
typedef std::list<OSCRouteObserver*> RouteObservers;