mirror of
https://gitee.com/xiaohuolufeihua/bizhang_-obav.git
synced 2026-05-21 09:22:18 +00:00
Added wait_for_topic builtin command
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
This commit is contained in:
committed by
Lorenz Meier
parent
830eb8528e
commit
b9ba673009
@@ -19,6 +19,7 @@ int list_files_main(int argc, char *argv[]);
|
||||
int list_devices_main(int argc, char *argv[]);
|
||||
int list_topics_main(int argc, char *argv[]);
|
||||
int sleep_main(int argc, char *argv[]);
|
||||
int wait_for_topic(int argc, char *argv[]);
|
||||
|
||||
}
|
||||
|
||||
@@ -33,6 +34,7 @@ ${builtin_apps_string}
|
||||
apps["list_devices"] = list_devices_main;
|
||||
apps["list_topics"] = list_topics_main;
|
||||
apps["sleep"] = sleep_main;
|
||||
apps["wait_for_topic"] = wait_for_topic;
|
||||
}
|
||||
|
||||
void list_builtins(apps_map_type &apps)
|
||||
@@ -84,3 +86,32 @@ int sleep_main(int argc, char *argv[])
|
||||
usleep(usecs);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#include "uORB/uORB.h"
|
||||
|
||||
static int wait_for_topic(int argc, char *argv[])
|
||||
{
|
||||
if (argc < 2 || argc > 3) {
|
||||
cout << "Usage: wait_for_topic <topic> [timeout_sec]" << endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct orb_metadata meta = { .o_name = argv[1],
|
||||
.o_size = 0,
|
||||
.o_size_no_padding = 0,
|
||||
.o_fields = nullptr };
|
||||
|
||||
unsigned int timeout = (argc == 3) ? (unsigned int)atoi(argv[2]) : 0;
|
||||
unsigned int elapsed = 0;
|
||||
|
||||
cout << "Waiting for topic " << argv[1] << " timeout " << timeout << endl;
|
||||
|
||||
while (orb_exists(&meta, 0) != 0 && (timeout && (elapsed < timeout)))
|
||||
{
|
||||
sleep(1);
|
||||
elapsed += 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user