From 011c4a05d818a85a54246896e5dee53a2c4ac79a Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Fri, 24 Mar 2017 13:07:03 -0700 Subject: [PATCH] OSC: update /strip/list response to add aux, midi bus and VCAs --- libs/surfaces/osc/osc.cc | 74 ++++++++++++++++++++++++++++------------ libs/surfaces/osc/osc.h | 1 + 2 files changed, 53 insertions(+), 22 deletions(-) diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index d6463411da..eef4e065fb 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -1174,37 +1174,61 @@ OSC::routes_list (lo_message msg) if (!session) { return; } - for (int n = 0; n < (int) session->nroutes(); ++n) { + OSCSurface *sur = get_surface(get_address (msg)); + sur->no_clear = true; - boost::shared_ptr r = session->get_remote_nth_route (n); + for (int n = 0; n < (int) sur->nstrips; ++n) { - if (r) { + boost::shared_ptr s = get_strip (n + 1, get_address (msg)); + + if (s) { + // some things need the route + boost::shared_ptr r = boost::dynamic_pointer_cast (s); lo_message reply = lo_message_new (); - if (boost::dynamic_pointer_cast(r)) { + if (s->presentation_info().flags() & PresentationInfo::AudioTrack) { lo_message_add_string (reply, "AT"); - } else if (boost::dynamic_pointer_cast(r)) { + } else if (s->presentation_info().flags() & PresentationInfo::MidiTrack) { lo_message_add_string (reply, "MT"); - } else { - lo_message_add_string (reply, "B"); + } else if (s->presentation_info().flags() & PresentationInfo::AudioBus) { + // r->feeds (session->master_out()) may make more sense + if (r->direct_feeds_according_to_reality (session->master_out())) { + // this is a bus + lo_message_add_string (reply, "B"); + } else { + // this is an Aux out + lo_message_add_string (reply, "AX"); + } + } else if (s->presentation_info().flags() & PresentationInfo::MidiBus) { + lo_message_add_string (reply, "MB"); + } else if (s->presentation_info().flags() & PresentationInfo::VCA) { + lo_message_add_string (reply, "V"); } - lo_message_add_string (reply, r->name().c_str()); - lo_message_add_int32 (reply, r->n_inputs().n_audio()); - lo_message_add_int32 (reply, r->n_outputs().n_audio()); - lo_message_add_int32 (reply, r->muted()); - lo_message_add_int32 (reply, r->soloed()); - /* XXX Can only use order at this point */ - //lo_message_add_int32 (reply, r->presentation_info().order()); - // try this instead. - lo_message_add_int32 (reply, get_sid (r, get_address (msg))); - - if (boost::dynamic_pointer_cast(r) - || boost::dynamic_pointer_cast(r)) { - - boost::shared_ptr t = boost::dynamic_pointer_cast(r); - lo_message_add_int32 (reply, (int32_t) t->rec_enable_control()->get_value()); + lo_message_add_string (reply, s->name().c_str()); + if (r) { + // routes have inputs and outputs + lo_message_add_int32 (reply, r->n_inputs().n_audio()); + lo_message_add_int32 (reply, r->n_outputs().n_audio()); + } else { + // non-routes like VCAs don't + lo_message_add_int32 (reply, 0); + lo_message_add_int32 (reply, 0); + } + if (s->mute_control()) { + lo_message_add_int32 (reply, s->mute_control()->get_value()); + } else { + lo_message_add_int32 (reply, 0); + } + if (s->solo_control()) { + lo_message_add_int32 (reply, s->solo_control()->get_value()); + } else { + lo_message_add_int32 (reply, 0); + } + lo_message_add_int32 (reply, n + 1); + if (s->rec_enable_control()) { + lo_message_add_int32 (reply, s->rec_enable_control()->get_value()); } //Automatically listen to routes listed @@ -1221,6 +1245,12 @@ OSC::routes_list (lo_message msg) lo_message_add_string (reply, "end_route_list"); lo_message_add_int64 (reply, session->frame_rate()); lo_message_add_int64 (reply, session->current_end_frame()); + if (session->monitor_out()) { + // this session has a monitor section + lo_message_add_int32 (reply, 1); + } else { + lo_message_add_int32 (reply, 0); + } lo_send_message (get_address (msg), "#reply", reply); diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index c3722bd7d5..bc612b0881 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -102,6 +102,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI struct OSCSurface { public: std::string remote_url; // the url these setting belong to + bool no_clear; // don't send osc clear messages on strip change uint32_t bank; // current bank uint32_t bank_size; // size of banks for this surface std::bitset<32> strip_types;// what strip types are a part of this bank -- 2.30.2