MCP: probably fix crash on solo, another debug trace
[ardour.git] / libs / surfaces / osc / osc.h
index cda8a31704607cd3bee5258bdb52086e72b51907..c09792ec64ddb869c8e95fe22b065de99cbad73c 100644 (file)
@@ -46,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 {
@@ -111,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); \
@@ -172,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); \
                 }                                                      \
@@ -183,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); \
                 }                                                      \
@@ -210,7 +226,7 @@ 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>);
@@ -220,11 +236,9 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        void update_clock ();
 
 
-       typedef std::list<OSCControllable*> Controllables;
-       typedef std::list<OSCRouteObserver*> Observables;
+       typedef std::list<OSCRouteObserver*> RouteObservers;
        
-       Controllables controllables;
-       Observables observables;
+       RouteObservers route_observers;
 
        static OSC* _instance;
 };