X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Fosc%2Fosc_controllable.cc;h=dae6ee6d6d2d894db1524d58b47061a6536fa5b8;hb=e0ff70cf86c01c42f98faf8b0eaf1a8ccf867946;hp=3d3fefcac1a6f57a3e512be8531c2bbe0267cd9d;hpb=b65f8073ba306ac2d85133875746767e7c6b0eb6;p=ardour.git diff --git a/libs/surfaces/osc/osc_controllable.cc b/libs/surfaces/osc/osc_controllable.cc index 3d3fefcac1..dae6ee6d6d 100644 --- a/libs/surfaces/osc/osc_controllable.cc +++ b/libs/surfaces/osc/osc_controllable.cc @@ -1,6 +1,6 @@ /* Copyright (C) 2009 Paul Davis - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -19,27 +19,30 @@ #include /* for sprintf, sigh */ #include -#include -#include +#include "pbd/error.h" +#include "pbd/xml++.h" -#include +#include "ardour/route.h" +#include "osc.h" #include "osc_controllable.h" using namespace sigc; using namespace PBD; using namespace ARDOUR; +using namespace ArdourSurface; OSCControllable::OSCControllable (lo_address a, const std::string& p, boost::shared_ptr c) : controllable (c) - , addr (a) , path (p) { - c->Changed.connect (mem_fun (*this, &OSCControllable::send_change)); + addr = lo_address_new (lo_address_get_hostname(a) , lo_address_get_port(a)); + c->Changed.connect (changed_connection, MISSING_INVALIDATOR, boost::bind (&OSCControllable::send_change_message, this), OSC::instance()); } OSCControllable::~OSCControllable () { + changed_connection.disconnect(); lo_address_free (addr); } @@ -51,16 +54,16 @@ OSCControllable::get_state () } int -OSCControllable::set_state (const XMLNode& /*node*/) +OSCControllable::set_state (const XMLNode& /*node*/, int /*version*/) { return 0; } void -OSCControllable::send_change () +OSCControllable::send_change_message () { lo_message msg = lo_message_new (); - + lo_message_add_float (msg, (float) controllable->get_value()); /* XXX thread issues */ @@ -69,9 +72,9 @@ OSCControllable::send_change () lo_message_free (msg); } -/*------------------------------------------------------------*/ +/*------------------------------------------------------------*/ -OSCRouteControllable::OSCRouteControllable (lo_address a, const std::string& p, +OSCRouteControllable::OSCRouteControllable (lo_address a, const std::string& p, boost::shared_ptr c, boost::shared_ptr r) : OSCControllable (a, p, c) , _route (r) @@ -83,16 +86,19 @@ OSCRouteControllable::~OSCRouteControllable () } void -OSCRouteControllable::send_change () +OSCRouteControllable::send_change_message () { lo_message msg = lo_message_new (); - lo_message_add_int32 (msg, _route->remote_control_id()); + /* Can only send ID part of RID at present */ + + lo_message_add_int32 (msg, _route->presentation_info().group_order()); lo_message_add_float (msg, (float) controllable->get_value()); /* XXX thread issues */ - std::cerr << "ORC: send " << path << " = " << controllable->get_value() << std::endl; + //std::cerr << "ORC: send " << path << " = " << controllable->get_value() << std::endl; + lo_send_message (addr, path.c_str(), msg); lo_message_free (msg); }