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