commit 4b6fd2421b83058d37ea7834de3cd5beb9880418
parent 8722bd441455df26b4ce514d69041bee4792fd5b
Author: Johannes Lorenz <j.git@lorenz-ho.me>
Date: Tue, 27 Mar 2018 06:16:07 +0200
Activate port checker
* Activate rtosc port checker for official tests. It currently
does not check anything...
* Move path-search into rtosc
Diffstat:
5 files changed, 47 insertions(+), 78 deletions(-)
diff --git a/TODO-default-values.txt b/TODO-default-values.txt
@@ -1,16 +0,0 @@
-TODOs for default values:
-* use # for bundles, not a
-* 1 ... 7 => 1 2 ... 7
-* also after scanning?
-
-* rEnabled vs rExists:
- * clarify/rename
- * make a clean function?
-
-test:
-* zyn fx (all presets)
-* rtosc arg val maths
-
-finally:
-* remove rDefaultMissing if possible
-* fix all TODOs from default_values
diff --git a/src/Misc/MiddleWare.cpp b/src/Misc/MiddleWare.cpp
@@ -74,64 +74,6 @@ static void liblo_error_cb(int i, const char *m, const char *loc)
fprintf(stderr, "liblo :-( %d-%s@%s\n",i,m,loc);
}
-void path_search(const char *m, const char *url)
-{
- using rtosc::Ports;
- using rtosc::Port;
-
- //assumed upper bound of 32 ports (may need to be resized)
- char types[256+1];
- rtosc_arg_t args[256];
- size_t pos = 0;
- const Ports *ports = NULL;
- const char *str = rtosc_argument(m,0).s;
- const char *needle = rtosc_argument(m,1).s;
-
- //zero out data
- memset(types, 0, sizeof(types));
- memset(args, 0, sizeof(args));
-
- if(!*str) {
- ports = &Master::ports;
- } else {
- const Port *port = Master::ports.apropos(rtosc_argument(m,0).s);
- if(port)
- ports = port->ports;
- }
-
- if(ports) {
- //RTness not confirmed here
- for(const Port &p:*ports) {
- if(strstr(p.name, needle) != p.name || !p.name)
- continue;
- types[pos] = 's';
- args[pos++].s = p.name;
- types[pos] = 'b';
- if(p.metadata && *p.metadata) {
- args[pos].b.data = (unsigned char*) p.metadata;
- auto tmp = rtosc::Port::MetaContainer(p.metadata);
- args[pos++].b.len = tmp.length();
- } else {
- args[pos].b.data = (unsigned char*) NULL;
- args[pos++].b.len = 0;
- }
- }
- }
-
-
- //Reply to requester [wow, these messages are getting huge...]
- char buffer[1024*20];
- size_t length = rtosc_amessage(buffer, sizeof(buffer), "/paths", types, args);
- if(length) {
- lo_message msg = lo_message_deserialise((void*)buffer, length, NULL);
- lo_address addr = lo_address_new_from_url(url);
- if(addr)
- lo_send_message(addr, buffer, msg);
- lo_address_free(addr);
- lo_message_free(msg);
- }
-}
-
static int handler_function(const char *path, const char *types, lo_arg **argv,
int argc, lo_message msg, void *user_data)
{
@@ -153,8 +95,26 @@ static int handler_function(const char *path, const char *types, lo_arg **argv,
memset(buffer, 0, sizeof(buffer));
size_t size = 2048;
lo_message_serialise(msg, path, buffer, &size);
- if(!strcmp(buffer, "/path-search") && !strcmp("ss", rtosc_argument_string(buffer))) {
- path_search(buffer, mw->activeUrl().c_str());
+
+ if(!strcmp(buffer, "/path-search") &&
+ !strcmp("ss", rtosc_argument_string(buffer))) {
+ auto reply_cb = [](const char* url, const char* types, const rtosc_arg_t* args)
+ {
+ char buffer[1024*20];
+ size_t length = rtosc_amessage(buffer, sizeof(buffer),
+ "/paths", types, args);
+ if(length) {
+ lo_message msg = lo_message_deserialise((void*)buffer,
+ length, NULL);
+ lo_address addr = lo_address_new_from_url(url);
+ if(addr)
+ lo_send_message(addr, buffer, msg);
+ lo_address_free(addr);
+ lo_message_free(msg);
+ }
+ };
+ rtosc::path_search(Master::ports, buffer, mw->activeUrl().c_str(),
+ reply_cb);
} else if(buffer[0]=='/' && strrchr(buffer, '/')[1]) {
mw->transmitMsg(rtosc::Ports::collapsePath(buffer));
}
diff --git a/src/Params/PADnoteParameters.cpp b/src/Params/PADnoteParameters.cpp
@@ -231,7 +231,8 @@ static const rtosc::Ports non_realtime_ports =
rParamI(Pquality.oct, rShort("octaves"), rLinear(0,7), rDefault(3),
"Number of octaves to sample (above the first sample"),
- {"Pbandwidth::i", rShort("bandwidth") rProp(parameter) rLinear(0,1000) rDoc("Bandwith Of Harmonics"), NULL,
+ {"Pbandwidth::i", rShort("bandwidth") rProp(parameter) rLinear(0,1000)
+ rDefault(500) rDoc("Bandwith Of Harmonics"), NULL,
[](const char *msg, rtosc::RtData &d) {
PADnoteParameters *p = ((PADnoteParameters*)d.obj);
if(rtosc_narguments(msg)) {
diff --git a/src/Tests/CMakeLists.txt b/src/Tests/CMakeLists.txt
@@ -1,3 +1,8 @@
+function(cp_script script_name)
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${script_name}
+ ${CMAKE_CURRENT_BINARY_DIR}/${script_name} COPYONLY)
+endfunction()
+
#for tests looking for files stored in the source dir
add_definitions(-DSOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
@@ -64,12 +69,15 @@ target_link_libraries(EffectTest ${test_lib})
add_executable(ins-test InstrumentStats.cpp)
target_link_libraries(ins-test ${test_lib} rt)
+cp_script(check-ports.rb)
+add_test(PortChecker check-ports.rb)
+
add_executable(save-osc SaveOSC.cpp)
target_link_libraries(save-osc
zynaddsubfx_core zynaddsubfx_nio
zynaddsubfx_gui_bridge
${GUI_LIBRARIES} ${NIO_LIBRARIES} ${AUDIO_LIBRARIES})
-#this will be replace with a for loop when the code will get more stable:
+#this will be replaced with a for loop when the code will get more stable:
add_test(SaveOsc save-osc ../../../instruments/examples/Arpeggio\ 1.xmz)
#message(STATUS "Plugin Test ${GUI_LIBRARIES} ${NIO_LIBRARIES} ${AUDIO_LIBRARIES}")
diff --git a/src/Tests/check-ports.rb b/src/Tests/check-ports.rb
@@ -0,0 +1,16 @@
+#!/usr/bin/ruby
+
+require 'open3'
+
+# start zyn, grep the lo server port, and connect the port checker to it
+Open3.popen3(Dir.pwd + "/../zynaddsubfx -O null --no-gui") do |stdin, stdout, stderr, wait_thr|
+ pid = wait_thr[:pid]
+ while line=stderr.gets do
+ # print "line: " + line;
+ if /^lo server running on (\d+)$/.match(line) then
+ rval = system(Dir.pwd + "/../../rtosc/port-checker 'osc.udp://localhost:" + $1 + "/'")
+ Process.kill("KILL", pid)
+ exit rval
+ end
+ end
+end