Bluetooth: controller: Refactor to use ull_sync naming

Refactored to use ull_sync naming instead of ull_scan_sync.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
This commit is contained in:
Vinayak Kariappa Chettimada 2020-08-11 09:48:29 +05:30 committed by Carles Cufí
commit 99916bead0
7 changed files with 199 additions and 48 deletions

View file

@ -45,7 +45,7 @@ if(CONFIG_BT_LL_SW_SPLIT)
)
zephyr_library_sources_ifdef(
CONFIG_BT_CTLR_SCAN_PERIODIC
ll_sw/ull_scan_sync.c
ll_sw/ull_sync.c
)
endif()
if(CONFIG_BT_CONN)

View file

@ -2065,7 +2065,7 @@ static void le_per_adv_create_sync(struct net_buf *buf, struct net_buf **evt)
skip = sys_le16_to_cpu(cmd->skip);
sync_timeout = sys_le16_to_cpu(cmd->sync_timeout);
status = ll_scan_sync_create(cmd->options, cmd->sid, cmd->addr.type,
status = ll_sync_create(cmd->options, cmd->sid, cmd->addr.type,
cmd->addr.a.val, skip, sync_timeout,
cmd->cte_type);
@ -2078,7 +2078,7 @@ static void le_per_adv_create_sync_cancel(struct net_buf *buf,
struct bt_hci_evt_cc_status *ccst;
uint8_t status;
status = ll_scan_sync_create_cancel();
status = ll_sync_create_cancel();
ccst = hci_cmd_complete(evt, sizeof(*ccst));
ccst->status = status;
@ -2093,7 +2093,7 @@ static void le_per_adv_terminate_sync(struct net_buf *buf, struct net_buf **evt)
handle = sys_le16_to_cpu(cmd->handle);
status = ll_scan_sync_terminate(handle);
status = ll_sync_terminate(handle);
ccst = hci_cmd_complete(evt, sizeof(*ccst));
ccst->status = status;
@ -2108,7 +2108,7 @@ static void le_per_adv_recv_enable(struct net_buf *buf, struct net_buf **evt)
handle = sys_le16_to_cpu(cmd->handle);
status = ll_scan_sync_recv_enable(handle, cmd->enable);
status = ll_sync_recv_enable(handle, cmd->enable);
ccst = hci_cmd_complete(evt, sizeof(*ccst));
ccst->status = status;

View file

@ -98,12 +98,12 @@ uint8_t ll_adv_enable(uint8_t enable);
uint8_t ll_scan_params_set(uint8_t type, uint16_t interval, uint16_t window,
uint8_t own_addr_type, uint8_t filter_policy);
uint8_t ll_scan_enable(uint8_t enable);
uint8_t ll_scan_sync_create(uint8_t options, uint8_t sid, uint8_t adv_addr_type,
uint8_t ll_sync_create(uint8_t options, uint8_t sid, uint8_t adv_addr_type,
uint8_t *adv_addr, uint16_t skip,
uint16_t sync_timeout, uint8_t sync_cte_type);
uint8_t ll_scan_sync_create_cancel(void);
uint8_t ll_scan_sync_terminate(uint16_t handle);
uint8_t ll_scan_sync_recv_enable(uint16_t handle, uint8_t enable);
uint8_t ll_sync_create_cancel(void);
uint8_t ll_sync_terminate(uint16_t handle);
uint8_t ll_sync_recv_enable(uint16_t handle, uint8_t enable);
#else /* !CONFIG_BT_CTLR_ADV_EXT */
uint8_t ll_scan_params_set(uint8_t type, uint16_t interval, uint16_t window,
uint8_t own_addr_type, uint8_t filter_policy);

View file

@ -23,6 +23,7 @@
#include "lll_scan_aux.h"
#include "ull_scan_types.h"
#include "ull_sync_types.h"
#include "ull_internal.h"
#include "ull_scan_internal.h"

View file

@ -1,35 +0,0 @@
/*
* Copyright (c) 2020 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdint.h>
#include <bluetooth/hci.h>
uint8_t ll_scan_sync_create(uint8_t options, uint8_t sid, uint8_t adv_addr_type,
uint8_t *adv_addr, uint16_t skip,
uint16_t sync_timeout, uint8_t sync_cte_type)
{
/* TODO: */
return BT_HCI_ERR_CMD_DISALLOWED;
}
uint8_t ll_scan_sync_create_cancel(void)
{
/* TODO: */
return BT_HCI_ERR_CMD_DISALLOWED;
}
uint8_t ll_scan_sync_terminate(uint16_t handle)
{
/* TODO: */
return BT_HCI_ERR_CMD_DISALLOWED;
}
uint8_t ll_scan_sync_recv_enable(uint16_t handle, uint8_t enable)
{
/* TODO: */
return BT_HCI_ERR_CMD_DISALLOWED;
}

View file

@ -0,0 +1,158 @@
/*
* Copyright (c) 2020 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr.h>
#include <bluetooth/hci.h>
#include "hal/ccm.h"
#include "hal/radio.h"
#include "util/util.h"
#include "util/mem.h"
#include "util/memq.h"
#include "pdu.h"
#include "ll.h"
#include "lll.h"
#include "lll_scan.h"
#include "lll_sync.h"
#include "ull_scan_types.h"
#include "ull_sync_types.h"
#include "ull_scan_internal.h"
#define BT_DBG_ENABLED IS_ENABLED(CONFIG_BT_DEBUG_HCI_DRIVER)
#define LOG_MODULE_NAME bt_ctlr_ull_sync
#include "common/log.h"
#include <soc.h>
#include "hal/debug.h"
static int init_reset(void);
static inline struct ll_sync_set *sync_acquire(void);
static struct ll_sync_set ll_sync_pool[CONFIG_BT_CTLR_SCAN_SYNC_SET];
static void *sync_free;
uint8_t ll_sync_create(uint8_t options, uint8_t sid, uint8_t adv_addr_type,
uint8_t *adv_addr, uint16_t skip,
uint16_t sync_timeout, uint8_t sync_cte_type)
{
struct ll_scan_set *scan_coded = NULL;
struct ll_scan_set *scan = NULL;
struct ll_sync_set *sync;
scan = ull_scan_set_get(SCAN_HANDLE_1M);
if (!scan || scan->sync) {
return BT_HCI_ERR_CMD_DISALLOWED;
}
if (IS_ENABLED(CONFIG_BT_CTLR_PHY_CODED)) {
scan_coded = ull_scan_set_get(SCAN_HANDLE_PHY_CODED);
if (!scan_coded || scan_coded->sync) {
return BT_HCI_ERR_CMD_DISALLOWED;
}
}
sync = sync_acquire();
if (!sync) {
return BT_HCI_ERR_MEM_CAPACITY_EXCEEDED;
}
sync->filter_policy = options & BIT(0);
if (!sync->filter_policy) {
sync->sid = sid;
sync->adv_addr_type = adv_addr_type;
memcpy(sync->adv_addr, adv_addr, BDADDR_SIZE);
}
sync->skip = skip;
sync->skip_countdown = skip;
sync->timeout = sync_timeout;
/* TODO: Support for CTE type */
/* Reporting initially enabled/disabled */
sync->lll.is_enabled = options & BIT(1);
/* Enable scanner to create sync */
scan->sync = sync;
if (IS_ENABLED(CONFIG_BT_CTLR_PHY_CODED)) {
scan_coded->sync = sync;
}
return 0;
}
uint8_t ll_sync_create_cancel(void)
{
/* TODO: */
return BT_HCI_ERR_CMD_DISALLOWED;
}
uint8_t ll_sync_terminate(uint16_t handle)
{
/* TODO: */
return BT_HCI_ERR_CMD_DISALLOWED;
}
uint8_t ll_sync_recv_enable(uint16_t handle, uint8_t enable)
{
/* TODO: */
return BT_HCI_ERR_CMD_DISALLOWED;
}
int ull_sync_init(void)
{
int err;
err = init_reset();
if (err) {
return err;
}
return 0;
}
int ull_sync_reset(void)
{
int err;
err = init_reset();
if (err) {
return err;
}
return 0;
}
static int init_reset(void)
{
/* Initialize sync pool. */
mem_init(ll_sync_pool, sizeof(struct ll_sync_set),
sizeof(ll_sync_pool) / sizeof(struct ll_sync_set),
&sync_free);
return 0;
}
static inline struct ll_sync_set *sync_acquire(void)
{
return mem_acquire(&sync_free);
}
static inline void sync_release(struct ll_sync_set *sync)
{
mem_release(sync, &sync_free);
}
static inline uint8_t sync_handle_get(struct ll_sync_set *sync)
{
return mem_index_get(sync, ll_sync_pool, sizeof(struct ll_sync_set));
}

View file

@ -0,0 +1,27 @@
/*
* Copyright (c) 2020 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#define LL_SYNC_STATE_IDLE 0x00
#define LL_SYNC_STATE_ADDR_MATCH 0x01
#define LL_SYNC_STATE_CREATED 0x02
struct ll_sync_set {
struct evt_hdr evt;
struct ull_hdr ull;
struct lll_sync lll;
uint8_t sid;
uint8_t adv_addr_type:1;
uint8_t filter_policy:1;
uint8_t state:2;
uint8_t adv_addr[BDADDR_SIZE];
uint16_t skip;
uint16_t skip_countdown;
uint16_t timeout;
/* TODO: handling of sync CTE type */
};