diff --git a/drivers/wireless/bluetooth/bt_uart.c b/drivers/wireless/bluetooth/bt_uart.c index a50f1b0498e..b56be92dbd4 100644 --- a/drivers/wireless/bluetooth/bt_uart.c +++ b/drivers/wireless/bluetooth/bt_uart.c @@ -306,3 +306,23 @@ void btuart_close(FAR struct bt_driver_s *dev) lower->rxattach(lower, NULL, NULL); } + +int btuart_ioctl(FAR struct bt_driver_s *dev, + int cmd, unsigned long arg) +{ + FAR struct btuart_upperhalf_s *upper; + FAR const struct btuart_lowerhalf_s *lower; + + upper = (FAR struct btuart_upperhalf_s *)dev; + DEBUGASSERT(upper != NULL && upper->lower != NULL); + lower = upper->lower; + + if (lower->ioctl) + { + return lower->ioctl(lower, cmd, arg); + } + else + { + return -ENOTTY; + } +} diff --git a/drivers/wireless/bluetooth/bt_uart.h b/drivers/wireless/bluetooth/bt_uart.h index 1abaa507eff..9aeb32c2979 100644 --- a/drivers/wireless/bluetooth/bt_uart.h +++ b/drivers/wireless/bluetooth/bt_uart.h @@ -92,5 +92,7 @@ int btuart_send(FAR struct bt_driver_s *dev, FAR void *data, size_t len); int btuart_open(FAR struct bt_driver_s *dev); void btuart_close(FAR struct bt_driver_s *dev); +int btuart_ioctl(FAR struct bt_driver_s *dev, + int cmd, unsigned long arg); #endif /* __DRIVER_WIRELESS_BLUETOOTH_BT_UART_H */ diff --git a/drivers/wireless/bluetooth/bt_uart_bcm4343x.c b/drivers/wireless/bluetooth/bt_uart_bcm4343x.c index b19252c89b6..620b05884b0 100644 --- a/drivers/wireless/bluetooth/bt_uart_bcm4343x.c +++ b/drivers/wireless/bluetooth/bt_uart_bcm4343x.c @@ -424,6 +424,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s *lower) upper->dev.open = btuart_open; upper->dev.send = btuart_send; upper->dev.close = btuart_close; + upper->dev.ioctl = btuart_ioctl; upper->lower = lower; /* Load firmware */ diff --git a/drivers/wireless/bluetooth/bt_uart_cc2564.c b/drivers/wireless/bluetooth/bt_uart_cc2564.c index ff39218d54e..aa2c1da688c 100644 --- a/drivers/wireless/bluetooth/bt_uart_cc2564.c +++ b/drivers/wireless/bluetooth/bt_uart_cc2564.c @@ -190,6 +190,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s *lower) upper->dev.open = btuart_open; upper->dev.send = btuart_send; upper->dev.close = btuart_close; + upper->dev.ioctl = btuart_ioctl; upper->lower = lower; /* Load firmware */ diff --git a/drivers/wireless/bluetooth/bt_uart_generic.c b/drivers/wireless/bluetooth/bt_uart_generic.c index d194360d369..6b462cf2ff5 100644 --- a/drivers/wireless/bluetooth/bt_uart_generic.c +++ b/drivers/wireless/bluetooth/bt_uart_generic.c @@ -84,6 +84,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s *lower) upper->dev.open = btuart_open; upper->dev.send = btuart_send; upper->dev.close = btuart_close; + upper->dev.ioctl = btuart_ioctl; upper->lower = lower; /* And register the driver with the network and the Bluetooth stack. */ diff --git a/include/nuttx/wireless/bluetooth/bt_uart.h b/include/nuttx/wireless/bluetooth/bt_uart.h index 98bdda78ee2..bd92e478a3e 100644 --- a/include/nuttx/wireless/bluetooth/bt_uart.h +++ b/include/nuttx/wireless/bluetooth/bt_uart.h @@ -137,6 +137,11 @@ struct btuart_lowerhalf_s /* Flush/drain all buffered RX data */ CODE ssize_t (*rxdrain)(FAR const struct btuart_lowerhalf_s *lower); + + /* Lower-half logic may support platform-specific ioctl commands */ + + CODE int (*ioctl)(FAR const struct btuart_lowerhalf_s *lower, + int cmd, unsigned long arg); }; /****************************************************************************