Skip to content

Commit c5b8445

Browse files
authored
Added Qurt platform Serial implementations for bytesAvailable() and flush(). (#25348)
1 parent 0cddd3d commit c5b8445

2 files changed

Lines changed: 33 additions & 6 deletions

File tree

boards/modalai/voxl2-slpi/src/drivers/dsp_hitl/dsp_hitl.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,12 @@
7979

8080
#define ASYNC_UART_READ_WAIT_US 2000
8181

82-
extern "C" { __EXPORT int dsp_hitl_main(int argc, char *argv[]); }
82+
83+
extern "C" {
84+
__EXPORT int dsp_hitl_main(int argc, char *argv[]);
85+
__EXPORT int fc_uart_rx_available(int fd, uint32_t *data);
86+
__EXPORT int fc_uart_flush_rx(int fd);
87+
}
8388

8489
namespace dsp_hitl
8590
{
@@ -952,7 +957,17 @@ int readResponse(void *buf, size_t len)
952957
return -1;
953958
}
954959

955-
return qurt_uart_read(_uart_fd, (char *) buf, len, ASYNC_UART_READ_WAIT_US);
960+
uint32_t rx_bytes_available = 0;
961+
(void) fc_uart_rx_available(_uart_fd, &rx_bytes_available);
962+
int bytes_read = 0;
963+
964+
if (rx_bytes_available) {
965+
bytes_read = qurt_uart_read(_uart_fd, (char *) buf, len, ASYNC_UART_READ_WAIT_US);
966+
}
967+
968+
// (void) fc_uart_flush_rx(_uart_fd);
969+
970+
return bytes_read;
956971
}
957972

958973
int writeResponse(void *buf, size_t len)

platforms/qurt/src/px4/SerialImpl.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939

4040
#define MODULE_NAME "SerialImpl"
4141

42+
extern "C" {
43+
__EXPORT int fc_uart_rx_available(int fd, uint32_t *data);
44+
__EXPORT int fc_uart_flush_rx(int fd);
45+
}
46+
4247
namespace device
4348
{
4449

@@ -160,9 +165,14 @@ bool SerialImpl::close()
160165

161166
ssize_t SerialImpl::bytesAvailable()
162167
{
163-
// TODO:
164-
PX4_WARN("bytesAvailable not implemented!");
165-
return 0;
168+
if (!_open) {
169+
PX4_ERR("Device not open!");
170+
return -1;
171+
}
172+
173+
uint32_t rx_bytes = 0;
174+
(void) fc_uart_rx_available(_serial_fd, &rx_bytes);
175+
return (ssize_t) rx_bytes;
166176
}
167177

168178
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)
267277

268278
void SerialImpl::flush()
269279
{
270-
// TODO: Flush not implemented yet on Qurt
280+
if (_open) {
281+
(void) fc_uart_flush_rx(_serial_fd);
282+
}
271283
}
272284

273285
const char *SerialImpl::getPort() const

0 commit comments

Comments
 (0)