diff --git a/platforms/common/Serial.cpp b/platforms/common/Serial.cpp index 748dcba9b2..250293c96d 100644 --- a/platforms/common/Serial.cpp +++ b/platforms/common/Serial.cpp @@ -69,6 +69,11 @@ bool Serial::close() return _impl.close(); } +bool Serial::getPollFd(const px4_pollevent_t events, px4_pollfd_struct_t *pfd) +{ + return _impl.getPollFd(events, pfd); +} + ssize_t Serial::bytesAvailable() { return _impl.bytesAvailable(); diff --git a/platforms/common/include/px4_platform_common/Serial.hpp b/platforms/common/include/px4_platform_common/Serial.hpp index 983834ccf6..af5284499c 100644 --- a/platforms/common/include/px4_platform_common/Serial.hpp +++ b/platforms/common/include/px4_platform_common/Serial.hpp @@ -35,6 +35,7 @@ #include +#include #include using device::SerialConfig::ByteSize; @@ -61,6 +62,8 @@ public: bool close(); + bool getPollFd(const px4_pollevent_t events, px4_pollfd_struct_t *pfd); + ssize_t bytesAvailable(); ssize_t read(uint8_t *buffer, size_t buffer_size); ssize_t readAtLeast(uint8_t *buffer, size_t buffer_size, size_t character_count = 1, uint32_t timeout_ms = 0); diff --git a/platforms/nuttx/src/px4/common/SerialImpl.cpp b/platforms/nuttx/src/px4/common/SerialImpl.cpp index f8968e4881..668da297a2 100644 --- a/platforms/nuttx/src/px4/common/SerialImpl.cpp +++ b/platforms/nuttx/src/px4/common/SerialImpl.cpp @@ -289,6 +289,18 @@ bool SerialImpl::close() return true; } +bool SerialImpl::getPollFd(const px4_pollevent_t events, px4_pollfd_struct_t *pfd) +{ + if (!_open) { + PX4_ERR("Device not open!"); + return false; + } + + pfd->fd = _serial_fd; + pfd->events = events; + return true; +} + ssize_t SerialImpl::bytesAvailable() { if (!_open) { diff --git a/platforms/nuttx/src/px4/common/include/SerialImpl.hpp b/platforms/nuttx/src/px4/common/include/SerialImpl.hpp index 82e4ddd29d..3062e27827 100644 --- a/platforms/nuttx/src/px4/common/include/SerialImpl.hpp +++ b/platforms/nuttx/src/px4/common/include/SerialImpl.hpp @@ -36,6 +36,7 @@ #include #include +#include #include using device::SerialConfig::ByteSize; @@ -59,6 +60,8 @@ public: bool close(); + bool getPollFd(const px4_pollevent_t events, px4_pollfd_struct_t *pfd); + ssize_t bytesAvailable(); ssize_t read(uint8_t *buffer, size_t buffer_size); ssize_t readAtLeast(uint8_t *buffer, size_t buffer_size, size_t character_count = 1, uint32_t timeout_us = 0); diff --git a/platforms/posix/include/SerialImpl.hpp b/platforms/posix/include/SerialImpl.hpp index 82e4ddd29d..ddd5756398 100644 --- a/platforms/posix/include/SerialImpl.hpp +++ b/platforms/posix/include/SerialImpl.hpp @@ -36,6 +36,7 @@ #include #include +#include #include using device::SerialConfig::ByteSize; @@ -59,6 +60,8 @@ public: bool close(); + bool getPollFd(px4_pollevent_t event, px4_pollfd_struct_t *pfd); + ssize_t bytesAvailable(); ssize_t read(uint8_t *buffer, size_t buffer_size); ssize_t readAtLeast(uint8_t *buffer, size_t buffer_size, size_t character_count = 1, uint32_t timeout_us = 0); diff --git a/platforms/qurt/include/SerialImpl.hpp b/platforms/qurt/include/SerialImpl.hpp index c7739429ef..ace86edd9e 100644 --- a/platforms/qurt/include/SerialImpl.hpp +++ b/platforms/qurt/include/SerialImpl.hpp @@ -35,6 +35,7 @@ #include +#include #include using device::SerialConfig::ByteSize; @@ -58,6 +59,8 @@ public: bool close(); + bool getPollFd(const px4_pollevent_t events, px4_pollfd_struct_t *pfd); + ssize_t bytesAvailable(); ssize_t read(uint8_t *buffer, size_t buffer_size); ssize_t readAtLeast(uint8_t *buffer, size_t buffer_size, size_t character_count = 1, uint32_t timeout_us = 0);