From 33bfe681c94f7c9ba36a683521daf74b5834b3e9 Mon Sep 17 00:00:00 2001 From: Len Ovens Date: Fri, 23 Jun 2017 18:08:04 -0700 Subject: OSC: Allow /bank_up to accept -1 as well as 1 so encoder can work. --- libs/surfaces/osc/osc.cc | 19 ++++++++++++++++++- libs/surfaces/osc/osc.h | 2 ++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'libs') diff --git a/libs/surfaces/osc/osc.cc b/libs/surfaces/osc/osc.cc index 7d44efda26..9818514e36 100644 --- a/libs/surfaces/osc/osc.cc +++ b/libs/surfaces/osc/osc.cc @@ -530,7 +530,7 @@ OSC::register_callbacks() REGISTER_CALLBACK (serv, "/scroll_dn_1_page", "f", scroll_dn_1_page); REGISTER_CALLBACK (serv, "/scroll_dn_1_page", "", scroll_dn_1_page); REGISTER_CALLBACK (serv, "/bank_up", "", bank_up); - REGISTER_CALLBACK (serv, "/bank_up", "f", bank_up); + REGISTER_CALLBACK (serv, "/bank_up", "f", bank_delta); REGISTER_CALLBACK (serv, "/bank_down", "", bank_down); REGISTER_CALLBACK (serv, "/bank_down", "f", bank_down); @@ -1908,6 +1908,23 @@ OSC::bank_up (lo_message msg) return 0; } +int +OSC::bank_delta (float delta, lo_message msg) +{ + if (!session) { + return -1; + } + OSCSurface *s = get_surface(get_address (msg)); + uint32_t new_bank = s->bank + (s->bank_size * (int) delta); + if ((int)new_bank < 1) { + new_bank = 1; + } + if (new_bank != s->bank) { + set_bank (new_bank, msg); + } + return 0; +} + int OSC::bank_down (lo_message msg) { diff --git a/libs/surfaces/osc/osc.h b/libs/surfaces/osc/osc.h index 805a3df663..06a2cdb6fc 100644 --- a/libs/surfaces/osc/osc.h +++ b/libs/surfaces/osc/osc.h @@ -419,6 +419,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI PATH_CALLBACK1_MSG(scrub,f); PATH_CALLBACK1_MSG(jog,f); PATH_CALLBACK1_MSG(jog_mode,f); + PATH_CALLBACK1_MSG(bank_delta,f); PATH_CALLBACK1_MSG(sel_recenable,i); PATH_CALLBACK1_MSG(sel_recsafe,i); PATH_CALLBACK1_MSG(sel_mute,i); @@ -589,6 +590,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI int set_bank (uint32_t bank_start, lo_message msg); int _set_bank (uint32_t bank_start, lo_address addr); int bank_up (lo_message msg); + int bank_delta (float delta, 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, uint32_t se_size, uint32_t pi_size, lo_message msg); int set_surface_bank_size (uint32_t bs, lo_message msg); -- cgit v1.2.3