* [ulanding_radar] Fix comms error perf counter usage
* [ulanding_radar] Workaround for lost messages by lowering sampling rate
The current implementation of the Aerotenna uLanding radar driver assumes that
the UART frames are received in full. If the driver polls with 10ms this is not
always the case and the driver will fail to parse the frame leading to
significant packet loss. This workaround polls at 12ms which ensures that at
least one entire frame is received.
To simplify logic for wrap-around cases and cases in which bins outside the FOV may be filled. Bin indices are offset such that the 0th bin is the first bin within the sensor FOV. This way we can always fill bins from smallest to largest index.
Calls function from ObstacleMath library that accounts for the vehicle's attitude w.r.t the obstacle. Obstacles are assumed to be flat, vertical walls.
* fixes to restart the state machine if sensor does not init correctly
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
* fixes
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
* increase fail count
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
* remove extra flush, switch from warn to debug, add enum states for sensor bring-up
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
* remove dead code, decrease restart fail count metric, break out of loop with consec errors if over the fail count and not init
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
---------
Signed-off-by: dirksavage88 <dirksavage88@gmail.com>
In the lightware_parser function, LW_PARSE_STATE2_GOT_DIGIT0 state can be repeated unexpectedly without proper parserbuf_index or state checking. This behavior will trigger a heap buffer overflow vulnerability by allowing to write some data. And the writable size is sizeof(unsigned).
const char *data = "www\r\n";
Defines a cstring of 6 bytes: 'w', 'w', 'w', '\r', '\n', '\0'
type of data: char const*
type of &data: char const**
So when we call
write(_fd, &data, strlen(data));
then strlen(data) == 5
and we send the 4 byte memory address of data
+ some additional random byte.
Correct is
write(_fd, data, strlen(data));
where char const* gets casted to const void * and we pass
the pointer to the content of data.
The fundamental problem here is write() not being typesafe.
In rare occasions asking for the protocol values after setting it returned
[0, 0]. I did not see any documentation for having to wait, but adding a
short wait period fixes it.