OSC: finish /set_surface group of commands.
authorLen Ovens <len@ovenwerks.net>
Wed, 1 Jun 2016 05:04:25 +0000 (22:04 -0700)
committerLen Ovens <len@ovenwerks.net>
Wed, 1 Jun 2016 05:04:25 +0000 (22:04 -0700)
libs/surfaces/osc/osc.cc
libs/surfaces/osc/osc.h

index fc798b907448c93c8b92b9628c5fcbb08773f2b2..bb9e65e3a37fbcadc140381e65bfa1bbec7d1357 100644 (file)
@@ -355,6 +355,9 @@ OSC::register_callbacks()
 
                REGISTER_CALLBACK (serv, "/set_surface", "iiii", set_surface);
                REGISTER_CALLBACK (serv, "/set_surface/feedback", "i", set_surface_feedback);
+               REGISTER_CALLBACK (serv, "/set_surface/bank_size", "i", set_surface_bank_size);
+               REGISTER_CALLBACK (serv, "/set_surface/gainmode", "i", set_surface_gainmode);
+               REGISTER_CALLBACK (serv, "/set_surface/strip_types", "i", set_surface_strip_types);
                REGISTER_CALLBACK (serv, "/strip/list", "", routes_list);
                REGISTER_CALLBACK (serv, "/add_marker", "", add_marker);
                REGISTER_CALLBACK (serv, "/add_marker", "f", add_marker);
@@ -1049,16 +1052,55 @@ OSC::set_surface (uint32_t b_size, uint32_t strips, uint32_t fb, uint32_t gm, lo
        return 0;
 }
 
+int
+OSC::set_surface_bank_size (uint32_t bs, lo_message msg)
+{
+       OSCSurface *s = get_surface(lo_message_get_source (msg));
+       s->bank_size = bs;
+
+       // set bank and strip feedback
+       set_bank(s->bank, msg);
+       return 0;
+}
+
+
+int
+OSC::set_surface_strip_types (uint32_t st, lo_message msg)
+{
+       OSCSurface *s = get_surface(lo_message_get_source (msg));
+       s->strip_types = st;
+
+       // set bank and strip feedback
+       set_bank(s->bank, msg);
+       return 0;
+}
+
+
 int
 OSC::set_surface_feedback (uint32_t fb, lo_message msg)
 {
        OSCSurface *s = get_surface(lo_message_get_source (msg));
        s->feedback = fb;
+
+       // set bank and strip feedback
+       set_bank(s->bank, msg);
+
+       // Set global/master feedback
+       global_feedback (s->feedback, msg, s->gainmode);
+       return 0;
+}
+
+
+int
+OSC::set_surface_gainmode (uint32_t gm, lo_message msg)
+{
+       OSCSurface *s = get_surface(lo_message_get_source (msg));
+       s->gainmode = gm;
+
        // set bank and strip feedback
        set_bank(s->bank, msg);
 
        // Set global/master feedback
-       // global_feedback should include s->feedback in whole.
        global_feedback (s->feedback, msg, s->gainmode);
        return 0;
 }
index 555c79c4f4ecc880a80ca42bbc04937b36d43f41..6d33fabd4e3040a81b7bf7ccd7205b33c9dfff91 100644 (file)
@@ -318,7 +318,10 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
                return 0;                                               \
        }
 
+       PATH_CALLBACK1_MSG(set_surface_bank_size,i);
+       PATH_CALLBACK1_MSG(set_surface_strip_types,i);
        PATH_CALLBACK1_MSG(set_surface_feedback,i);
+       PATH_CALLBACK1_MSG(set_surface_gainmode,i);
 
 #define PATH_CALLBACK2(name,arg1type,arg2type)                 \
         static int _ ## name (const char *path, const char *types, lo_arg **argv, int argc, void *data, void *user_data) { \
@@ -412,7 +415,10 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
        int bank_up (lo_message msg);
        int bank_down (lo_message msg);
        int set_surface (uint32_t b_size, uint32_t strips, uint32_t fb, uint32_t gmode, lo_message msg);
+       int set_surface_bank_size (uint32_t bs, lo_message msg);
+       int set_surface_strip_types (uint32_t st, lo_message msg);
        int set_surface_feedback (uint32_t fb, lo_message msg);
+       int set_surface_gainmode (uint32_t gm, lo_message msg);
 
        int master_set_gain (float dB);
        int master_set_fader (uint32_t position);