You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2022/10/02 21:14:09 UTC
[incubator-nuttx] 03/05: bluetooth: Forward ioctl to btuart lowerhalf driver
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 <xi...@xiaomi.com>
AuthorDate: Sun Oct 2 03:34:17 2022 +0800
bluetooth: Forward ioctl to btuart lowerhalf driver
Signed-off-by: Xiang Xiao <xi...@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);
};
/****************************************************************************