diff --git a/deps/mruby-regexp-pcre b/deps/mruby-regexp-pcre --- a/deps/mruby-regexp-pcre +++ b/deps/mruby-regexp-pcre @@ -1 +1 @@ -Subproject commit a961225c0953dd2bd987111f0836821573616de2 +Subproject commit a961225c0953dd2bd987111f0836821573616de2-dirty diff --git a/mruby b/mruby --- a/mruby +++ b/mruby @@ -1 +1 @@ -Subproject commit 69482dbc8e590ed66f0944e9b48c4f9c2f83c873 +Subproject commit 69482dbc8e590ed66f0944e9b48c4f9c2f83c873-dirty diff --git a/src/mruby-widget-lib/src/gem.c b/src/mruby-widget-lib/src/gem.c index d773bb8..a6fa45d 100644 --- a/src/mruby-widget-lib/src/gem.c +++ b/src/mruby-widget-lib/src/gem.c @@ -488,6 +488,22 @@ mrb_remote_seti(mrb_state *mrb, mrb_value self) return self; } +static mrb_value +mrb_remote_setf(mrb_state *mrb, mrb_value self) +{ + remote_data *data = (remote_data*)mrb_data_get_ptr(mrb, self, &mrb_remote_type); + mrb_assert(data && data->br); + + mrb_value path; + mrb_float value = 0; + mrb_get_args(mrb, "of", &path, &value); + + float next = value; + //printf("[INFO] seti<%s> = %d\n", mrb_string_value_ptr(mrb, path), next); + br_set_value_float(data->br, mrb_string_value_ptr(mrb, path), next); + return self; +} + static mrb_value mrb_remote_settf(mrb_state *mrb, mrb_value self) { @@ -1234,6 +1250,7 @@ mrb_mruby_widget_lib_gem_init(mrb_state* mrb) { mrb_define_method(mrb, remote, "initialize", mrb_remote_initalize, MRB_ARGS_REQ(1)); mrb_define_method(mrb, remote, "tick", mrb_remote_tick, MRB_ARGS_NONE()); mrb_define_method(mrb, remote, "seti", mrb_remote_seti, MRB_ARGS_REQ(2)); + mrb_define_method(mrb, remote, "setf", mrb_remote_setf, MRB_ARGS_REQ(2)); mrb_define_method(mrb, remote, "settf", mrb_remote_settf, MRB_ARGS_REQ(2)); mrb_define_method(mrb, remote, "sets", mrb_remote_sets, MRB_ARGS_REQ(2)); mrb_define_method(mrb, remote, "action", mrb_remote_action, MRB_ARGS_ANY()); diff --git a/src/mruby-zest/qml/Envelope.qml b/src/mruby-zest/qml/Envelope.qml index a89e79e..c5b2be0 100644 --- a/src/mruby-zest/qml/Envelope.qml +++ b/src/mruby-zest/qml/Envelope.qml @@ -172,29 +172,29 @@ Widget { function cvt_x(x) { fval = Math::log2(x/10.0 + 1.0) * 127.0/12.0 - [0, [127, fval.round].min].max.to_i + (2**(12*([0.0, [127.0, fval].min].max)/127.0)-1)/100.0 } function update_nonfree_x(pts) { if(emode == 1) - $remote.seti(extern + "PA_dt", cvt_x(pts[1])) - $remote.seti(extern + "PD_dt", cvt_x(pts[2])) - $remote.seti(extern + "PR_dt", cvt_x(pts[3])) + $remote.setf(extern + "A_dt", cvt_x(pts[1])) + $remote.setf(extern + "D_dt", cvt_x(pts[2])) + $remote.setf(extern + "R_dt", cvt_x(pts[3])) elsif(emode == 2) - $remote.seti(extern + "PA_dt", cvt_x(pts[1])) - $remote.seti(extern + "PD_dt", cvt_x(pts[2])) - $remote.seti(extern + "PR_dt", cvt_x(pts[3])) + $remote.setf(extern + "A_dt", cvt_x(pts[1])) + $remote.setf(extern + "D_dt", cvt_x(pts[2])) + $remote.setf(extern + "R_dt", cvt_x(pts[3])) elsif(emode == 3) - $remote.seti(extern + "PA_dt", cvt_x(pts[1])) - $remote.seti(extern + "PR_dt", cvt_x(pts[2])) + $remote.setf(extern + "A_dt", cvt_x(pts[1])) + $remote.setf(extern + "R_dt", cvt_x(pts[2])) elsif(emode == 4) - $remote.seti(extern + "PA_dt", cvt_x(pts[1])) - $remote.seti(extern + "PD_dt", cvt_x(pts[2])) - $remote.seti(extern + "PR_dt", cvt_x(pts[3])) + $remote.setf(extern + "A_dt", cvt_x(pts[1])) + $remote.setf(extern + "D_dt", cvt_x(pts[2])) + $remote.setf(extern + "R_dt", cvt_x(pts[3])) elsif(emode == 5) - $remote.seti(extern + "PA_dt", cvt_x(pts[1])) - $remote.seti(extern + "PR_dt", cvt_x(pts[2])) + $remote.setf(extern + "A_dt", cvt_x(pts[1])) + $remote.setf(extern + "R_dt", cvt_x(pts[2])) end whenTime.call if whenTime } diff --git a/src/osc-bridge/src/bridge.c b/src/osc-bridge/src/bridge.c index d3016ee..ad402a2 100644 --- a/src/osc-bridge/src/bridge.c +++ b/src/osc-bridge/src/bridge.c @@ -156,7 +156,7 @@ static int cache_set_vector(bridge_t *br, uri_t uri, char *types, rtosc_arg_t *a //the vector fields differ in type OR //the vector fields differ in value if(!line->valid || line->type != 'v' || strcmp(line->vec_type, types) || - memcmp(&line->vec_value, &args, sizeof(args[0])*line_size)) + memcmp(line->vec_value, args, sizeof(args[0])*strlen(line->vec_type))) { if(line->type == 'v') declone_vec_value(line->vec_type, line->vec_value); @@ -170,12 +170,15 @@ static int cache_set_vector(bridge_t *br, uri_t uri, char *types, rtosc_arg_t *a line->requests = 0; //check if cache line is currently debounced... - //int debounced = false; - //for(int i=0; idebounce_len; ++i) - // if(!strcmp(br->bounce[i].path, line->path)) - // debounced = true; + int debounced = false; + for(int i=0; idebounce_len; ++i) { + printf("%d <%s>\n", i, br->bounce[i].path); + if(!strcmp(br->bounce[i].path, line->path)) + debounced = true; + } + - //if(!debounced) + if(!debounced) run_callbacks(br, line); return true; @@ -328,7 +331,7 @@ void osc_send(bridge_t *br, const char *message) char *copy = (char*)malloc(len); memcpy(copy, message, len); do_send(br, copy, len); - //printf("osc sent...<%s>?\n", message); + //printf("BR SEND <%s>\n", message); } /***************************************************************************** @@ -925,7 +928,9 @@ void br_tick(bridge_t *br) double thresh = now - delta; for(int i=br->debounce_len-1; i >= 0; --i) { if(br->bounce[i].last_set < thresh) { - run_callbacks(br, cache_get(br, br->bounce[i].path)); + param_cache_t *cline = cache_get(br, br->bounce[i].path); + if(cline->valid) + run_callbacks(br, cline); debounce_pop(br, i); } }