From 15e7b1999128ce9fdee119024b60df055d6e2004 Mon Sep 17 00:00:00 2001 From: Lorenz Meier Date: Fri, 5 Feb 2016 16:36:43 +0100 Subject: [PATCH] uORB: Block on simulation delay for orb_check() calls as well --- src/drivers/device/vdev_posix.cpp | 5 +++++ src/modules/uORB/uORBDevices_posix.cpp | 5 +++++ src/platforms/px4_posix.h | 1 + 3 files changed, 11 insertions(+) diff --git a/src/drivers/device/vdev_posix.cpp b/src/drivers/device/vdev_posix.cpp index 4926ee7070..2f8f8fb024 100644 --- a/src/drivers/device/vdev_posix.cpp +++ b/src/drivers/device/vdev_posix.cpp @@ -422,6 +422,11 @@ extern "C" { sim_delay = false; } + bool px4_sim_delay_enabled() + { + return sim_delay; + } + const char *px4_get_device_names(unsigned int *handle) { return VDev::devList(handle); diff --git a/src/modules/uORB/uORBDevices_posix.cpp b/src/modules/uORB/uORBDevices_posix.cpp index 7c48c4ed79..748e31df4e 100644 --- a/src/modules/uORB/uORBDevices_posix.cpp +++ b/src/modules/uORB/uORBDevices_posix.cpp @@ -384,6 +384,11 @@ uORB::DeviceNode::poll_notify_one(px4_pollfd_struct_t *fds, pollevent_t events) bool uORB::DeviceNode::appears_updated(SubscriberData *sd) { + /* block if in simulation mode */ + while (px4_sim_delay_enabled()) { + usleep(100); + } + //warnx("uORB::DeviceNode::appears_updated sd = %p", sd); /* assume it doesn't look updated */ bool ret = false; diff --git a/src/platforms/px4_posix.h b/src/platforms/px4_posix.h index 7d50f6f2ac..96db1d78cb 100644 --- a/src/platforms/px4_posix.h +++ b/src/platforms/px4_posix.h @@ -149,6 +149,7 @@ __EXPORT unsigned long px4_getpid(void); __EXPORT void px4_enable_sim_lockstep(void); __EXPORT void px4_sim_start_delay(void); __EXPORT void px4_sim_stop_delay(void); +__EXPORT bool px4_sim_delay_enabled(void); __END_DECLS #else