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 fab8b081c0b1167a114bd4eca278e208b241c706
Author: Xiang Xiao <xiaoxi...@xiaomi.com>
AuthorDate: Sun Oct 2 03:20:15 2022 +0800

    bluetooth: Implement btuart_close for btuart upperhalf driver
    
    Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com>
---
 drivers/wireless/bluetooth/bt_uart.c          | 22 ++++++++++++++++++----
 drivers/wireless/bluetooth/bt_uart.h          |  1 +
 drivers/wireless/bluetooth/bt_uart_bcm4343x.c |  1 +
 drivers/wireless/bluetooth/bt_uart_cc2564.c   |  1 +
 drivers/wireless/bluetooth/bt_uart_generic.c  |  1 +
 5 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/drivers/wireless/bluetooth/bt_uart.c 
b/drivers/wireless/bluetooth/bt_uart.c
index d0e3a89687..a50f1b0498 100644
--- a/drivers/wireless/bluetooth/bt_uart.c
+++ b/drivers/wireless/bluetooth/bt_uart.c
@@ -275,10 +275,6 @@ int btuart_open(FAR struct bt_driver_s *dev)
   DEBUGASSERT(upper != NULL && upper->lower != NULL);
   lower = upper->lower;
 
-  /* Disable Rx callbacks */
-
-  lower->rxenable(lower, false);
-
   /* Drain any cached Rx data */
 
   lower->rxdrain(lower);
@@ -292,3 +288,21 @@ int btuart_open(FAR struct bt_driver_s *dev)
   lower->rxenable(lower, true);
   return OK;
 }
+
+void btuart_close(FAR struct bt_driver_s *dev)
+{
+  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;
+
+  /* Disable Rx callbacks */
+
+  lower->rxenable(lower, false);
+
+  /* Detach the Rx event handler */
+
+  lower->rxattach(lower, NULL, NULL);
+}
diff --git a/drivers/wireless/bluetooth/bt_uart.h 
b/drivers/wireless/bluetooth/bt_uart.h
index 0b8bcc0f45..1abaa507ef 100644
--- a/drivers/wireless/bluetooth/bt_uart.h
+++ b/drivers/wireless/bluetooth/bt_uart.h
@@ -91,5 +91,6 @@ int btuart_send(FAR struct bt_driver_s *dev,
                 enum bt_buf_type_e type,
                 FAR void *data, size_t len);
 int btuart_open(FAR struct bt_driver_s *dev);
+void btuart_close(FAR struct bt_driver_s *dev);
 
 #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 503719cd56..b19252c89b 100644
--- a/drivers/wireless/bluetooth/bt_uart_bcm4343x.c
+++ b/drivers/wireless/bluetooth/bt_uart_bcm4343x.c
@@ -423,6 +423,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s 
*lower)
   upper->dev.head_reserve = H4_HEADER_SIZE;
   upper->dev.open = btuart_open;
   upper->dev.send = btuart_send;
+  upper->dev.close = btuart_close;
   upper->lower = lower;
 
   /* Load firmware */
diff --git a/drivers/wireless/bluetooth/bt_uart_cc2564.c 
b/drivers/wireless/bluetooth/bt_uart_cc2564.c
index 2e9d514c8b..ff39218d54 100644
--- a/drivers/wireless/bluetooth/bt_uart_cc2564.c
+++ b/drivers/wireless/bluetooth/bt_uart_cc2564.c
@@ -189,6 +189,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s 
*lower)
   upper->dev.head_reserve = H4_HEADER_SIZE;
   upper->dev.open         = btuart_open;
   upper->dev.send         = btuart_send;
+  upper->dev.close        = btuart_close;
   upper->lower            = lower;
 
   /* Load firmware */
diff --git a/drivers/wireless/bluetooth/bt_uart_generic.c 
b/drivers/wireless/bluetooth/bt_uart_generic.c
index a2a5e01e7a..d194360d36 100644
--- a/drivers/wireless/bluetooth/bt_uart_generic.c
+++ b/drivers/wireless/bluetooth/bt_uart_generic.c
@@ -83,6 +83,7 @@ int btuart_register(FAR const struct btuart_lowerhalf_s 
*lower)
   upper->dev.head_reserve = H4_HEADER_SIZE;
   upper->dev.open         = btuart_open;
   upper->dev.send         = btuart_send;
+  upper->dev.close        = btuart_close;
   upper->lower            = lower;
 
   /* And register the driver with the network and the Bluetooth stack. */

Reply via email to