mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-22 14:24:21 +08:00
gps: fix Septentrino serial read (#22936)
For Septententrino we seem to sometimes fill the buffer pretty full. If we ask for too much, readAtLeast will fail completely and make the GPS discovery logic fall over. Therefore, let's not ask for too much and just read what we can given the available buffer. Signed-off-by: Julian Oes <julian@oes.ch>
This commit is contained in:
@@ -471,14 +471,14 @@ int GPS::callback(GPSCallbackType type, void *data1, int data2, void *user)
|
||||
int GPS::pollOrRead(uint8_t *buf, size_t buf_length, int timeout)
|
||||
{
|
||||
int ret = 0;
|
||||
const unsigned character_count = 32; // minimum bytes that we want to read
|
||||
const size_t character_count = 32; // minimum bytes that we want to read
|
||||
const int max_timeout = 50;
|
||||
int timeout_adjusted = math::min(max_timeout, timeout);
|
||||
|
||||
handleInjectDataTopic();
|
||||
|
||||
if (_interface == GPSHelper::Interface::UART) {
|
||||
ret = _uart.readAtLeast(buf, buf_length, character_count, timeout_adjusted);
|
||||
ret = _uart.readAtLeast(buf, buf_length, math::min(character_count, buf_length), timeout_adjusted);
|
||||
|
||||
// SPI is only supported on LInux
|
||||
#if defined(__PX4_LINUX)
|
||||
@@ -1560,4 +1560,4 @@ int
|
||||
gps_main(int argc, char *argv[])
|
||||
{
|
||||
return GPS::main(argc, argv);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user