From 1269dfbc43b8a2dc2a593192c1fd8c88c23b7c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Fri, 15 Apr 2016 14:29:35 +0200 Subject: [PATCH 1/2] generate_listener.py: fix listener command the loop variable i was increased even if no topic was updated. This means less messages are outputed than specified. --- Tools/generate_listener.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Tools/generate_listener.py b/Tools/generate_listener.py index 057aa9250f..fefb4bf013 100755 --- a/Tools/generate_listener.py +++ b/Tools/generate_listener.py @@ -158,9 +158,9 @@ for index,m in enumerate(messages[1:]): print("\t\twhile(i < num_msgs) {") print("\t\t\torb_check(sub,&updated);") print("\t\t\tif (i == 0) { updated = true; } else { usleep(500); }") - print("\t\t\ti++;") print("\t\t\tif (updated) {") - print("\t\tprintf(\"\\nTOPIC: %s #%%d\\n\", i);" % m) + print("\t\t\ti++;") + print("\t\t\tprintf(\"\\nTOPIC: %s #%%d\\n\", i);" % m) print("\t\t\torb_copy(ID,sub,&container);") for item in message_elements[index+1]: if item[0] == "float": From 9259406a2981083e08d6497376251eb0aa7c5e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Fri, 15 Apr 2016 15:02:26 +0200 Subject: [PATCH 2/2] generate_listener.py: add a timeout of 2 seconds abort if within 2s there is no new message published --- Tools/generate_listener.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Tools/generate_listener.py b/Tools/generate_listener.py index fefb4bf013..4e428d3409 100755 --- a/Tools/generate_listener.py +++ b/Tools/generate_listener.py @@ -106,6 +106,7 @@ print(""" * Tool for listening to topics when running flight stack on linux. */ +#include #include #include #include @@ -125,6 +126,14 @@ print(""" #define PRId64 "lld" #endif +static bool check_timeout(const hrt_abstime& time) { + if (hrt_elapsed_time(&time) > 2*1000*1000) { + printf("Waited for 2 seconds without a message. Giving up.\\n"); + return true; + } + return false; +} + """) for m in messages: print("#include " % m) @@ -155,10 +164,12 @@ for index,m in enumerate(messages[1:]): print("\t\tmemset(&container, 0, sizeof(container));") print("\t\tbool updated;") print("\t\tunsigned i = 0;") + print("\t\thrt_abstime start_time = hrt_absolute_time();") print("\t\twhile(i < num_msgs) {") print("\t\t\torb_check(sub,&updated);") print("\t\t\tif (i == 0) { updated = true; } else { usleep(500); }") print("\t\t\tif (updated) {") + print("\t\t\tstart_time = hrt_absolute_time();") print("\t\t\ti++;") print("\t\t\tprintf(\"\\nTOPIC: %s #%%d\\n\", i);" % m) print("\t\t\torb_copy(ID,sub,&container);") @@ -203,6 +214,10 @@ for index,m in enumerate(messages[1:]): print("\t\t\tprintf(\"%s: %%u\\n\",(unsigned)container.%s);" % (item[1], item[1])) elif item[0] == "bool": print("\t\t\tprintf(\"%s: %%s\\n\",container.%s ? \"True\" : \"False\");" % (item[1], item[1])) + print("\t\t\t} else {") + print("\t\t\t\tif (check_timeout(start_time)) {") + print("\t\t\t\t\tbreak;") + print("\t\t\t\t}") print("\t\t\t}") print("\t\t}") print("\t} else {")