LTC Slave, add support for variable framerates
[ardour.git] / libs / surfaces / osc / osc.h
index 804c8a5fbd46888c48137ebc50b8b9e8a8ddb20c..c09792ec64ddb869c8e95fe22b065de99cbad73c 100644 (file)
@@ -37,6 +37,7 @@
 #include "control_protocol/control_protocol.h"
 
 class OSCControllable;
+class OSCRouteObserver;
 
 namespace ARDOUR {
 class Session;
@@ -45,7 +46,7 @@ class Route;
        
 /* this is mostly a placeholder because I suspect that at some
    point we will want to add more members to accomodate
-   certain types of requests to the MIDI UI
+   certain types of requests to the OSC UI
 */
 
 struct OSCUIRequest : public BaseUI::BaseRequestObject {
@@ -110,11 +111,27 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
 
        void send_current_value (const char* path, lo_arg** argv, int argc, lo_message msg);
        void current_value_query (const char* path, size_t len, lo_arg **argv, int argc, lo_message msg);
+       
+       int current_value (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data);
+       
        int catchall (const char *path, const char *types, lo_arg **argv, int argc, void *data);
        static int _catchall (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data);
 
-       int current_value (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data);
+       void routes_list (lo_message msg);
+       void transport_frame(lo_message msg);
 
+#define PATH_CALLBACK_MSG(name)                                        \
+        static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
+               return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, data); \
+        } \
+        int cb_ ## name (const char *, const char *, lo_arg **, int, void *data) { \
+               name (data);            \
+               return 0;               \
+       }
+       
+       PATH_CALLBACK_MSG(routes_list);
+       PATH_CALLBACK_MSG(transport_frame);
+       
 #define PATH_CALLBACK(name) \
         static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
                return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, data); \
@@ -171,7 +188,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
         static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
                return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, data); \
         } \
-        int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \
+        int cb_ ## name (const char *, const char *, lo_arg **argv, int argc, void *data) { \
                 if (argc > 1) {                                                \
                  name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type); \
                 }                                                      \
@@ -182,7 +199,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
         static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
                return static_cast<OSC*>(user_data)->cb_ ## name (path, types, argv, argc, data); \
         } \
-        int cb_ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data) { \
+        int cb_ ## name (const char *, const char *, lo_arg **argv, int argc, void *data) { \
                 if (argc > 1) {                                                \
                  name (argv[0]->arg1type, argv[1]->arg2type,argv[2]->arg3type,argv[3]->arg4type); \
                 }                                                      \
@@ -209,14 +226,19 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int route_set_pan_stereo_width (int rid, float percent);
        int route_plugin_parameter (int rid, int piid,int par, float val);
        int route_plugin_parameter_print (int rid, int piid,int par);
-
+       
        void listen_to_route (boost::shared_ptr<ARDOUR::Route>, lo_address);
        void end_listen (boost::shared_ptr<ARDOUR::Route>, lo_address);
        void drop_route (boost::weak_ptr<ARDOUR::Route>);
+       
+       void route_name_changed (const PBD::PropertyChange&, boost::weak_ptr<ARDOUR::Route> r, lo_address addr);
+       
+       void update_clock ();
+
 
-       typedef std::list<OSCControllable*> Controllables;
+       typedef std::list<OSCRouteObserver*> RouteObservers;
        
-       Controllables controllables;
+       RouteObservers route_observers;
 
        static OSC* _instance;
 };