Added Qurt platform Serial implementations for bytesAvailable() and flush(). (#25348)

This commit is contained in:
Eric Katzfey 2025-08-01 14:22:00 -07:00 committed by GitHub
parent 0cddd3dfb0
commit c5b8445ffc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 6 deletions

View File

@ -79,7 +79,12 @@
#define ASYNC_UART_READ_WAIT_US 2000 #define ASYNC_UART_READ_WAIT_US 2000
extern "C" { __EXPORT int dsp_hitl_main(int argc, char *argv[]); }
extern "C" {
__EXPORT int dsp_hitl_main(int argc, char *argv[]);
__EXPORT int fc_uart_rx_available(int fd, uint32_t *data);
__EXPORT int fc_uart_flush_rx(int fd);
}
namespace dsp_hitl namespace dsp_hitl
{ {
@ -952,7 +957,17 @@ int readResponse(void *buf, size_t len)
return -1; return -1;
} }
return qurt_uart_read(_uart_fd, (char *) buf, len, ASYNC_UART_READ_WAIT_US); uint32_t rx_bytes_available = 0;
(void) fc_uart_rx_available(_uart_fd, &rx_bytes_available);
int bytes_read = 0;
if (rx_bytes_available) {
bytes_read = qurt_uart_read(_uart_fd, (char *) buf, len, ASYNC_UART_READ_WAIT_US);
}
// (void) fc_uart_flush_rx(_uart_fd);
return bytes_read;
} }
int writeResponse(void *buf, size_t len) int writeResponse(void *buf, size_t len)

View File

@ -39,6 +39,11 @@
#define MODULE_NAME "SerialImpl" #define MODULE_NAME "SerialImpl"
extern "C" {
__EXPORT int fc_uart_rx_available(int fd, uint32_t *data);
__EXPORT int fc_uart_flush_rx(int fd);
}
namespace device namespace device
{ {
@ -160,9 +165,14 @@ bool SerialImpl::close()
ssize_t SerialImpl::bytesAvailable() ssize_t SerialImpl::bytesAvailable()
{ {
// TODO: if (!_open) {
PX4_WARN("bytesAvailable not implemented!"); PX4_ERR("Device not open!");
return 0; return -1;
}
uint32_t rx_bytes = 0;
(void) fc_uart_rx_available(_serial_fd, &rx_bytes);
return (ssize_t) rx_bytes;
} }
ssize_t SerialImpl::read(uint8_t *buffer, size_t buffer_size) ssize_t SerialImpl::read(uint8_t *buffer, size_t buffer_size)
@ -267,7 +277,9 @@ ssize_t SerialImpl::write(const void *buffer, size_t buffer_size)
void SerialImpl::flush() void SerialImpl::flush()
{ {
// TODO: Flush not implemented yet on Qurt if (_open) {
(void) fc_uart_flush_rx(_serial_fd);
}
} }
const char *SerialImpl::getPort() const const char *SerialImpl::getPort() const