- reorders operations, such that the most expensive one (orb_copy) is done
only when really needed.
- corner case: when the topic was not advertised yet, orb_stat() would fail
and then update() was called, which succeeds for the first advertisement.
In that case the timestamp was incorrectly set to 0 and true was
returned.
The next call would again return true, because the timestamp was updated,
but the topic data was still the same.
Reduces CPU load by ~2% on a Pixracer.
reorder & reduce instance to uint8_t (which is more than enough).
Reduces sizeof(MavlinkOrbSubscription) from 40 to 24.
On Pixracer this frees almost 2KB of RAM
This fixes a corner case where the first advertise/publish of a
vehicle_command_ack was missed. What happened was that the
orb_subscribe_multi was not called until the topic had been published
and therefore orb_exists was happy. This means that by the time
orb_subscribe_multi was finally called, the first vehicle_command_ack
was already history and not detected by orb_check.
This changed adds a flag to the MavlinkOrbSubscription which tells it to
subscribe to a topic from the beginning.
The MavlinkOrbSubscription only had an interface to either always copy
or copy based on a timestamp. This commit adds a copy interface if the
topic has been updated.
If the topic has not been published, orb_copy returns a
negative number which causes update() to memset the data
contents to zero.
In some instances data is a null pointer. This causes a
segment violation crash.
Added a check for data != 0
Signed-off-by: Mark Charlebois <charlebm@gmail.com>