Backed out change to uORBDevices_posix.cpp

Signed-off-by: Mark Charlebois <charlebm@gmail.com>
This commit is contained in:
Mark Charlebois
2016-02-19 16:59:44 +01:00
committed by Julian Oes
parent d56459bd17
commit 3dbb4fb34f
+19 -5
View File
@@ -287,7 +287,6 @@ uORB::DeviceNode::ioctl(device::file_t *filp, int cmd, unsigned long arg)
case ORBIOCSETINTERVAL: case ORBIOCSETINTERVAL:
sd->update_interval = arg; sd->update_interval = arg;
sd->last_update = hrt_absolute_time();
return PX4_OK; return PX4_OK;
case ORBIOCGADVERTISER: case ORBIOCGADVERTISER:
@@ -406,6 +405,7 @@ uORB::DeviceNode::appears_updated(SubscriberData *sd)
* don't match then we might have a visible update. * don't match then we might have a visible update.
*/ */
while (sd->generation != _generation) { while (sd->generation != _generation) {
/* /*
* Handle non-rate-limited subscribers. * Handle non-rate-limited subscribers.
*/ */
@@ -426,17 +426,31 @@ uORB::DeviceNode::appears_updated(SubscriberData *sd)
break; break;
} }
// If we have not yet reached the deadline, then assume that we can ignore any /*
// newly received data. * If the interval timer is still running, the topic should not
if (sd->last_update + sd->update_interval > hrt_absolute_time()) { * appear updated, even though at this point we know that it has.
* We have previously been through here, so the subscriber
* must have collected the update we reported, otherwise
* update_reported would still be true.
*/
if (!hrt_called(&sd->update_call)) {
break; break;
} }
/*
* Make sure that we don't consider the topic to be updated again
* until the interval has passed once more by restarting the interval
* timer and thereby re-scheduling a poll notification at that time.
*/
hrt_call_after(&sd->update_call,
sd->update_interval,
&uORB::DeviceNode::update_deferred_trampoline,
(void *)this);
/* /*
* Remember that we have told the subscriber that there is data. * Remember that we have told the subscriber that there is data.
*/ */
sd->update_reported = true; sd->update_reported = true;
sd->last_update = hrt_absolute_time();
ret = true; ret = true;
break; break;