This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit b352a625bfbfb477d695686c23cb3623f2f5667e
Author: chengkai <cheng...@xiaomi.com>
AuthorDate: Fri Aug 26 19:55:51 2022 +0800

    arch/sim: add bth4 bridge codes
    
    Signed-off-by: chengkai <cheng...@xiaomi.com>
---
 arch/sim/src/sim/up_hcisocket.c             | 61 +++++++++++++++++++++++++----
 boards/sim/sim/sim/configs/btuart/defconfig |  2 +-
 2 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/arch/sim/src/sim/up_hcisocket.c b/arch/sim/src/sim/up_hcisocket.c
index 794c77db97..1229da5758 100644
--- a/arch/sim/src/sim/up_hcisocket.c
+++ b/arch/sim/src/sim/up_hcisocket.c
@@ -40,6 +40,7 @@
 #include <nuttx/net/bluetooth.h>
 #include <nuttx/wireless/bluetooth/bt_driver.h>
 #include <nuttx/wireless/bluetooth/bt_uart.h>
+#include <nuttx/wireless/bluetooth/bt_bridge.h>
 #include <nuttx/serial/uart_bth4.h>
 
 #include "up_internal.h"
@@ -200,6 +201,33 @@ static struct bthcisock_s *bthcisock_alloc(int dev_id)
   return dev;
 }
 
+static void bthcisock_free(struct bthcisock_s *dev)
+{
+  sq_rem((sq_entry_t *)&dev->link, &g_bthcisock_list);
+  kmm_free(dev);
+}
+
+static int bthcisock_driver_register(struct bt_driver_s *drv, int id,
+                                     bool bt)
+{
+#ifdef CONFIG_UART_BTH4
+  char name[32];
+
+  if (bt)
+    {
+      snprintf(name, sizeof(name), "/dev/ttyBT%d", id);
+    }
+  else
+    {
+      snprintf(name, sizeof(name), "/dev/ttyBLE%d", id);
+    }
+
+  return uart_bth4_register(name, drv);
+#else
+  return bt_netdev_register(drv);
+#endif
+}
+
 /****************************************************************************
  * Public Functions
  ****************************************************************************/
@@ -222,8 +250,9 @@ static struct bthcisock_s *bthcisock_alloc(int dev_id)
 int bthcisock_register(int dev_id)
 {
   struct bthcisock_s *dev;
-#if defined(CONFIG_UART_BTH4)
-  char name[32];
+#if defined(CONFIG_BLUETOOTH_BRIDGE)
+  struct bt_driver_s *btdrv;
+  struct bt_driver_s *bledrv;
 #endif
   int ret;
 
@@ -233,15 +262,33 @@ int bthcisock_register(int dev_id)
       return -ENOMEM;
     }
 
-#if defined(CONFIG_UART_BTH4)
-  snprintf(name, sizeof(name), "/dev/ttyHCI%d", dev_id);
-  ret = uart_bth4_register(name, &dev->drv);
+#if defined(CONFIG_BLUETOOTH_BRIDGE)
+  ret = bt_bridge_register(&dev->drv, &btdrv, &bledrv);
+  if (ret < 0)
+    {
+      goto end;
+    }
+
+  ret = bthcisock_driver_register(btdrv, dev_id, true);
+  if (ret < 0)
+    {
+      goto end;
+    }
+
+  ret = bthcisock_driver_register(bledrv, dev_id, false);
+  if (ret < 0)
+    {
+      goto end;
+    }
+
+end:
 #else
-  ret = bt_netdev_register(&dev->drv);
+  ret = bthcisock_driver_register(&dev->drv, dev_id, true);
 #endif
+
   if (ret < 0)
     {
-      kmm_free(dev);
+      bthcisock_free(dev);
     }
 
   return ret;
diff --git a/boards/sim/sim/sim/configs/btuart/defconfig 
b/boards/sim/sim/sim/configs/btuart/defconfig
index 13a94cc263..feebe89b94 100644
--- a/boards/sim/sim/sim/configs/btuart/defconfig
+++ b/boards/sim/sim/sim/configs/btuart/defconfig
@@ -11,7 +11,7 @@ CONFIG_ARCH_BOARD="sim"
 CONFIG_ARCH_BOARD_SIM=y
 CONFIG_ARCH_CHIP="sim"
 CONFIG_ARCH_SIM=y
-CONFIG_BLUETOOTH_UART=y
+CONFIG_BLUETOOTH_BRIDGE=y
 CONFIG_BOARDCTL_POWEROFF=y
 CONFIG_BUILTIN=y
 CONFIG_DEBUG_SYMBOLS=y

Reply via email to