This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 6ec74d8d364d7bfb6a4bdef6dc80efc1cebe769b Author: Xiang Xiao <xiaoxi...@xiaomi.com> AuthorDate: Sun Oct 2 03:34:17 2022 +0800 bluetooth: Forward ioctl to btuart lowerhalf driver Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com> --- drivers/wireless/bluetooth/bt_uart.c | 20 ++++++++++++++++++++ drivers/wireless/bluetooth/bt_uart.h | 2 ++ drivers/wireless/bluetooth/bt_uart_bcm4343x.c | 1 + drivers/wireless/bluetooth/bt_uart_cc2564.c | 1 + drivers/wireless/bluetooth/bt_uart_generic.c | 1 + include/nuttx/wireless/bluetooth/bt_uart.h | 5 +++++ 6 files changed, 30 insertions(+) diff --git a/drivers/wireless/bluetooth/bt_uart.c b/drivers/wireless/bluetooth/bt_uart.c index a50f1b0498..b56be92dbd 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 1abaa507ef..9aeb32c297 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 b19252c89b..620b05884b 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 ff39218d54..aa2c1da688 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 d194360d36..6b462cf2ff 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 98bdda78ee..bd92e478a3 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); }; /****************************************************************************