Skip to content

Commit

Permalink
bluetooth: add bt_driver_register interface
Browse files Browse the repository at this point in the history
add bt_driver_register interface, which could handle
these cases:bth4 bth5 btbridge btslip and btuart_lowerhalf_s etc.

Signed-off-by: chengkai <[email protected]>
  • Loading branch information
chengkai15 committed Oct 15, 2024
1 parent 5a057a0 commit 12189b2
Show file tree
Hide file tree
Showing 5 changed files with 164 additions and 2 deletions.
6 changes: 6 additions & 0 deletions drivers/wireless/bluetooth/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@

if DRIVERS_BLUETOOTH

config BLUETOOTH_DEVICE_ID
int "Bluetooth Device ID, eg: /dev/ttyBT0"
default 0
---help---
Bluetooth Device ID.

config BLUETOOTH_UART
bool "Bluetooth UART driver"
default n
Expand Down
2 changes: 2 additions & 0 deletions drivers/wireless/bluetooth/Make.defs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ ifeq ($(CONFIG_DRIVERS_BLUETOOTH),y)

# Include Bluetooth drivers into the build

CSRCS += bt_driver.c

ifeq ($(CONFIG_BLUETOOTH_UART),y)
CSRCS += bt_uart.c
ifeq ($(CONFIG_BLUETOOTH_UART_GENERIC),y)
Expand Down
133 changes: 133 additions & 0 deletions drivers/wireless/bluetooth/bt_driver.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
/****************************************************************************
* drivers/wireless/bluetooth/bt_driver.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/

/****************************************************************************
* Included Files
****************************************************************************/

#include <nuttx/config.h>
#include <nuttx/wireless/bluetooth/bt_driver.h>

#ifdef CONFIG_UART_BTH4
# include <nuttx/serial/uart_bth4.h>
#endif

#ifdef CONFIG_BLUETOOTH_BRIDGE
# include <nuttx/wireless/bluetooth/bt_bridge.h>
#endif

#ifdef CONFIG_BLUETOOTH_SLIP
# include <nuttx/wireless/bluetooth/bt_slip.h>
#endif

#include <stdio.h>

/****************************************************************************
* Private Functions
****************************************************************************/

static int bt_driver_register_internal(FAR struct bt_driver_s *driver,
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, driver);
#elif defined(CONFIG_NET_BLUETOOTH)
return bt_netdev_register(driver);
#else
# error "Please select CONFIG_UART_BTH4 or CONFIG_NET_BLUETOOTH"
#endif
}

/****************************************************************************
* Public Functions
****************************************************************************/

/****************************************************************************
* Name: bt_driver_register_with_id
*
* Description:
* Register bluetooth driver.
*
* Input Parameters:
* driver - an instance of the bt_driver_s interface
* id - bluetooth device id
*
* Returned Value:
* Zero is returned on success; a negated errno value is returned on any
* failure.
*
****************************************************************************/

int bt_driver_register_with_id(FAR struct bt_driver_s *driver, int id)
{
#ifdef CONFIG_BLUETOOTH_BRIDGE
FAR struct bt_driver_s *btdrv;
FAR struct bt_driver_s *bledrv;
#endif
int ret;

#ifdef CONFIG_BLUETOOTH_SLIP
driver = bt_slip_register(driver);
if (driver == NULL)
{
return -ENOMEM;
}
#endif

#ifdef CONFIG_BLUETOOTH_BRIDGE
ret = bt_bridge_register(driver, &btdrv, &bledrv);
if (ret < 0)
{
return ret;
}

ret = bt_driver_register_internal(btdrv, id, true);
if (ret < 0)
{
return ret;
}

ret = bt_driver_register_internal(bledrv, id, false);
if (ret < 0)
{
return ret;
}

#else
ret = bt_driver_register_internal(driver, id, true);
if (ret < 0)
{
return ret;
}
#endif

return ret;
}
4 changes: 2 additions & 2 deletions drivers/wireless/bluetooth/bt_uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -353,10 +353,10 @@ int btuart_register(FAR const struct btuart_lowerhalf_s *lower)
return ret;
}

ret = bt_netdev_register(driver);
ret = bt_driver_register(driver);
if (ret < 0)
{
wlerr("ERROR: bt_netdev_register failed: %d\n", ret);
wlerr("ERROR: bt_driver_register failed: %d\n", ret);
kmm_free(driver);
}

Expand Down
21 changes: 21 additions & 0 deletions include/nuttx/wireless/bluetooth/bt_driver.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@
#define bt_netdev_receive(btdev, type, data, len) \
(btdev)->receive(btdev, type, data, len)

#define bt_driver_register(btdev) \
bt_driver_register_with_id(btdev, CONFIG_BLUETOOTH_DEVICE_ID)

/****************************************************************************
* Public Types
****************************************************************************/
Expand Down Expand Up @@ -136,4 +139,22 @@ int bt_netdev_register(FAR struct bt_driver_s *btdev);

int bt_netdev_unregister(FAR struct bt_driver_s *btdev);

/****************************************************************************
* Name: bt_driver_register_with_id
*
* Description:
* Register bluetooth driver.
*
* Input Parameters:
* driver - an instance of the bt_driver_s interface
* id - bluetooth device id
*
* Returned Value:
* Zero is returned on success; a negated errno value is returned on any
* failure.
*
****************************************************************************/

int bt_driver_register_with_id(FAR struct bt_driver_s *driver, int id);

#endif /* __INCLUDE_NUTTX_WIRELESS_BLUETOOTH_BT_DRIVER_H */

0 comments on commit 12189b2

Please sign in to comment.