diff --git a/libraries/AP_HAL_ChibiOS/UARTDriver.cpp b/libraries/AP_HAL_ChibiOS/UARTDriver.cpp index 9f277fec11..1cfed5c348 100644 --- a/libraries/AP_HAL_ChibiOS/UARTDriver.cpp +++ b/libraries/AP_HAL_ChibiOS/UARTDriver.cpp @@ -556,6 +556,22 @@ uint32_t UARTDriver::available() { return _readbuf.available(); } +uint32_t UARTDriver::available_locked(uint32_t key) +{ + if (lock_read_key != 0 && key != lock_read_key) { + return -1; + } + if (sdef.is_usb) { +#ifdef HAVE_USB_SERIAL + + if (((SerialUSBDriver*)sdef.serial)->config->usbp->state != USB_ACTIVE) { + return 0; + } +#endif + } + return _readbuf.available(); +} + uint32_t UARTDriver::txspace() { if (!_initialised) { diff --git a/libraries/AP_HAL_ChibiOS/UARTDriver.h b/libraries/AP_HAL_ChibiOS/UARTDriver.h index 10581ff234..ab2b51aa4d 100644 --- a/libraries/AP_HAL_ChibiOS/UARTDriver.h +++ b/libraries/AP_HAL_ChibiOS/UARTDriver.h @@ -42,6 +42,8 @@ public: uint32_t available() override; + uint32_t available_locked(uint32_t key) override; + uint32_t txspace() override; int16_t read() override; ssize_t read(uint8_t *buffer, uint16_t count) override;