transport: Add bridge transport

blehci application is for controller only build with external
interface. In case of dual-core MCUs (NRF5340, DA1469x) controller
runs on second core that may not be able to operate on external
interface. To be able to run blehci like application on dual-core
systems, application side has to route traffic from external interface
transport to internal transport.
So far only one transport package was used, for bridge configuration
application must include two transport packages.
To facilitate this:
- transport package has BLE_HCI_BRIDGE that is set to 1 for dual-core
  bridge configuration
- common syscfg values defined for in all transports are moved
  to transport package (BLE_HCI_EVT_HI_BUF_COUNT..)
- syscfg definitions present in all transport packages are converted to
  syscfg values
- DA1469x and NRF5340 transports in bridge configuration will NOT create
  buffers for commands and events they relay on external transport provided
  buffers
This commit is contained in:
Jerzy Kasenberg
2022-01-20 18:38:47 +01:00
committed by kasjer
parent 30370ffb57
commit 403ae02652
21 changed files with 167 additions and 197 deletions
+7 -23
View File
@@ -16,28 +16,12 @@
# under the License.
#
syscfg.defs:
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'Number of high-priority event buffers.'
value: 2
syscfg.vals.'!BLE_HCI_BRIDGE && !BLE_EXT_ADV':
BLE_HCI_EVT_HI_BUF_COUNT: 2
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_HCI_EVT_BUF_SIZE: 70
BLE_ACL_BUF_COUNT: 4
BLE_ACL_BUF_SIZE: 255
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'Number of low-priority event buffers.'
value: 8
BLE_HCI_EVT_BUF_SIZE:
description: 'Size of each event buffer, in bytes.'
value: 70
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 4
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 255
syscfg.vals.BLE_EXT_ADV:
syscfg.vals.'!BLE_HCI_BRIDGE && BLE_EXT_ADV':
BLE_HCI_EVT_BUF_SIZE: 274
@@ -20,7 +20,7 @@
#include "syscfg/syscfg.h"
#include "mcu/mcu.h"
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
void
cmac_diag_setup_host(void)
{
@@ -131,7 +131,7 @@ struct cmac_shared_data {
uint8_t mbox_c2s_buf[ MYNEWT_VAL(CMAC_MBOX_SIZE_C2S) ];
};
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
extern volatile struct cmac_shared_data *g_cmac_shared_data;
#elif MYNEWT_VAL(BLE_CONTROLLER)
extern volatile struct cmac_shared_data g_cmac_shared_data;
@@ -161,7 +161,7 @@ void cmac_rand_set_isr_cb(cmac_rand_isr_cb_t cb);
void cmac_shared_init(void);
void cmac_shared_sync(void);
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
#define CMAC_SHARED_LOCK_VAL 0x40000000
#elif MYNEWT_VAL(BLE_CONTROLLER)
#define CMAC_SHARED_LOCK_VAL 0xc0000000
@@ -37,3 +37,6 @@ pkg.post_link_cmds.BLE_CONTROLLER:
pkg.pre_link_cmds.BLE_HOST:
scripts/build_libcmac.sh: 100
pkg.pre_link_cmds.BLE_HCI_BRIDGE:
scripts/build_libcmac.sh: 100
@@ -49,7 +49,7 @@ cmac_mbox_set_write_notif_cb(cmac_mbox_write_notif_cb *cb)
int
cmac_mbox_read(void)
{
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
volatile struct cmac_mbox *mbox = &g_cmac_shared_data->mbox_c2s;
uint8_t *mbox_buf = (uint8_t *)&g_cmac_shared_data->mbox_c2s_buf;
const uint16_t mbox_size = MYNEWT_VAL(CMAC_MBOX_SIZE_C2S);
@@ -96,7 +96,7 @@ cmac_mbox_read(void)
int
cmac_mbox_write(const void *data, uint16_t len)
{
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
volatile struct cmac_mbox *mbox = &g_cmac_shared_data->mbox_s2c;
uint8_t *mbox_buf = (uint8_t *)&g_cmac_shared_data->mbox_s2c_buf;
const uint16_t mbox_size = MYNEWT_VAL(CMAC_MBOX_SIZE_S2C);
@@ -26,7 +26,7 @@
#include "os/os_arch.h"
#include "os/os.h"
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
int
cmac_rand_is_active(void)
{
@@ -34,7 +34,7 @@
#define min(_a, _b) ((_a) < (_b) ? (_a) : (_b))
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
volatile struct cmac_shared_data *g_cmac_shared_data;
#include "mcu/da1469x_clock.h"
#define MCU_DIAG_SER(_x)
@@ -45,7 +45,7 @@ volatile struct cmac_shared_data g_cmac_shared_data __attribute__((section("
void
cmac_shared_init(void)
{
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
g_cmac_shared_data = (void *)(MCU_MEM_SYSRAM_START_ADDRESS +
MEMCTRL->CMI_SHARED_BASE_REG);
@@ -77,7 +77,7 @@ cmac_shared_sync(void)
* to wait until CMAC finished initialization as otherwise host may start
* sending HCI packets which will timeout as there is no one to read them.
*/
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
assert(g_cmac_shared_data->magic_sys == 0);
while (g_cmac_shared_data->magic_cmac != CMAC_SHARED_MAGIC_CMAC);
@@ -41,6 +41,7 @@
BLE_MBUF_MEMBLOCK_OVERHEAD + \
BLE_HCI_DATA_HDR_SZ, OS_ALIGNMENT)
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
static uint8_t ble_hci_pool_cmd_mempool_buf[
OS_MEMPOOL_BYTES(HCI_CMD_COUNT, BLE_HCI_TRANS_CMD_SZ)];
static struct os_mempool ble_hci_pool_cmd_mempool;
@@ -54,6 +55,7 @@ static uint8_t ble_hci_pool_evt_lo_mempool_buf[
OS_MEMPOOL_BYTES(MYNEWT_VAL(BLE_HCI_EVT_LO_BUF_COUNT),
MYNEWT_VAL(BLE_HCI_EVT_BUF_SIZE))];
static struct os_mempool ble_hci_pool_evt_lo_mempool;
#endif
static uint8_t ble_hci_pool_acl_mempool_buf[
OS_MEMPOOL_BYTES(MYNEWT_VAL(BLE_ACL_BUF_COUNT),
@@ -66,6 +68,7 @@ __attribute__((weak)) void ble_hci_trans_notify_free(void);
static os_mempool_put_fn *g_ble_hci_pool_acl_mempool_put_cb;
static void *g_ble_hci_pool_acl_mempool_put_arg;
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
int
ble_hci_trans_reset(void)
{
@@ -117,6 +120,7 @@ ble_hci_trans_buf_free(uint8_t *buf)
ble_hci_trans_notify_free();
}
#endif
struct os_mbuf *
ble_hci_cmac_alloc_acl_mbuf(void)
@@ -147,6 +151,7 @@ ble_hci_cmac_free_acl_cb(struct os_mempool_ext *mpe, void *data, void *arg)
}
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
int
ble_hci_trans_set_acl_free_cb(os_mempool_put_fn *cb, void *arg)
{
@@ -155,6 +160,7 @@ ble_hci_trans_set_acl_free_cb(os_mempool_put_fn *cb, void *arg)
return 0;
}
#endif
void
ble_hci_cmac_init(void)
@@ -163,6 +169,7 @@ ble_hci_cmac_init(void)
SYSINIT_ASSERT_ACTIVE();
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
rc = os_mempool_init(&ble_hci_pool_cmd_mempool,
HCI_CMD_COUNT, BLE_HCI_TRANS_CMD_SZ,
ble_hci_pool_cmd_mempool_buf, "ble_hci_cmd");
@@ -179,6 +186,7 @@ ble_hci_cmac_init(void)
MYNEWT_VAL(BLE_HCI_EVT_BUF_SIZE),
ble_hci_pool_evt_lo_mempool_buf, "ble_hci_evt_lo");
SYSINIT_PANIC_ASSERT(rc == 0);
#endif
rc = os_mempool_ext_init(&ble_hci_pool_acl_mempool,
MYNEWT_VAL(BLE_ACL_BUF_COUNT), POOL_ACL_BLOCK_SIZE,
@@ -21,7 +21,7 @@
#include <string.h>
#include "syscfg/syscfg.h"
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
#include "cmac_driver/cmac_shared.h"
#include "cmac_driver/cmac_host.h"
@@ -64,7 +64,7 @@ ble_hci_trans_h4_rxs_start(struct ble_hci_trans_h4_rx_state *rxs, uint8_t pkt_ty
case BLE_HCI_TRANS_H4_PKT_TYPE_ACL:
rxs->min_len = 4;
break;
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
case BLE_HCI_TRANS_H4_PKT_TYPE_EVT:
rxs->min_len = 2;
break;
@@ -95,7 +95,7 @@ static int
ble_hci_trans_h4_rx_state_w4_header(struct ble_hci_trans_h4_rx_state *rxs,
struct input_buffer *ib)
{
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
int pool;
#endif
int rc;
@@ -127,7 +127,7 @@ ble_hci_trans_h4_rx_state_w4_header(struct ble_hci_trans_h4_rx_state *rxs,
os_mbuf_append(rxs->om, rxs->hdr, rxs->len);
rxs->expected_len = get_le16(&rxs->hdr[2]) + 4;
break;
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
case BLE_HCI_TRANS_H4_PKT_TYPE_EVT:
pool = BLE_HCI_TRANS_BUF_EVT_HI;
if (rxs->hdr[0] == BLE_HCI_EVCODE_LE_META) {
@@ -194,7 +194,7 @@ ble_hci_trans_h4_rx_state_w4_payload(struct ble_hci_trans_h4_rx_state *rxs,
#if MYNEWT_VAL(BLE_CONTROLLER)
case BLE_HCI_TRANS_H4_PKT_TYPE_CMD:
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
case BLE_HCI_TRANS_H4_PKT_TYPE_EVT:
#endif
if (rxs->buf) {
@@ -240,7 +240,7 @@ ble_hci_trans_h4_rx_state_completed(struct ble_hci_trans_h4_rx_state *rxs,
#if MYNEWT_VAL(BLE_CONTROLLER)
case BLE_HCI_TRANS_H4_PKT_TYPE_CMD:
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
case BLE_HCI_TRANS_H4_PKT_TYPE_EVT:
#endif
if (rxs->buf) {
+7 -23
View File
@@ -16,28 +16,12 @@
# under the License.
#
syscfg.defs:
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'Number of high-priority event buffers.'
value: 2
syscfg.vals.'!BLE_HCI_BRIDGE && !(BLE_EXT_ADV || BLE_LL_CFG_FEAT_LL_EXT_ADV)':
BLE_HCI_EVT_HI_BUF_COUNT: 2
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_HCI_EVT_BUF_SIZE: 70
BLE_ACL_BUF_COUNT: 4
BLE_ACL_BUF_SIZE: 255
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'Number of low-priority event buffers.'
value: 8
BLE_HCI_EVT_BUF_SIZE:
description: 'Size of each event buffer, in bytes.'
value: 70
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 4
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 255
syscfg.vals.'BLE_EXT_ADV || BLE_LL_CFG_FEAT_LL_EXT_ADV':
syscfg.vals.'!BLE_HCI_BRIDGE && (BLE_EXT_ADV || BLE_LL_CFG_FEAT_LL_EXT_ADV)':
BLE_HCI_EVT_BUF_SIZE: 257
+8 -23
View File
@@ -28,28 +28,6 @@ syscfg.defs:
# This is a host-only transport.
- BLE_HOST
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'Number of high-priority event buffers.'
value: 2
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'Number of low-priority event buffers.'
value: 8
BLE_HCI_EVT_BUF_SIZE:
description: 'Size of each event buffer, in bytes.'
value: 70
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 4
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 255
BLE_HCI_ACL_OUT_COUNT:
description: >
This count is used in creating a pool of elements used by the
@@ -95,5 +73,12 @@ syscfg.defs:
Sysinit stage for the EMSPI BLE transport.
value: 100
syscfg.vals.BLE_EXT_ADV:
syscfg.vals.'!BLE_HCI_BRIDGE && BLE_EXT_ADV':
BLE_HCI_EVT_BUF_SIZE: 257
syscfg.vals.'!BLE_HCI_BRIDGE && !BLE_EXT_ADV':
BLE_HCI_EVT_HI_BUF_COUNT: 2
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_HCI_EVT_BUF_SIZE: 70
BLE_ACL_BUF_COUNT: 4
BLE_ACL_BUF_SIZE: 255
+17 -6
View File
@@ -39,7 +39,7 @@
#define IPC_RX_CHANNEL 1
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
#define IPC_TX_CHANNEL 1
#define IPC_RX_CHANNEL 0
#endif
@@ -49,7 +49,7 @@ struct nrf5340_ble_hci_api {
ble_hci_trans_rx_cmd_fn *cmd_cb;
void *cmd_arg;
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
ble_hci_trans_rx_cmd_fn *evt_cb;
void *evt_arg;
#endif
@@ -73,6 +73,7 @@ struct nrf5340_ble_hci_pool_cmd {
bool allocated;
};
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
/*
* If controller-to-host flow control is enabled we need to hold an extra command
* buffer for HCI_Host_Number_Of_Completed_Packets which can be sent at any time.
@@ -98,6 +99,8 @@ static uint8_t nrf5340_ble_hci_pool_evt_lo_buf[OS_MEMPOOL_BYTES(
MYNEWT_VAL(BLE_HCI_EVT_BUF_SIZE))];
static struct os_mempool nrf5340_ble_hci_pool_evt_lo;
#endif
/* Pool for ACL data */
static uint8_t nrf5340_ble_hci_pool_acl_buf[OS_MEMPOOL_BYTES(
MYNEWT_VAL(BLE_ACL_BUF_COUNT),
@@ -111,12 +114,14 @@ static struct nrf5340_ble_hci_api nrf5340_ble_hci_api;
/* State of RX currently in progress (needs to reassemble frame) */
static struct nrf5340_ble_hci_rx_data nrf5340_ble_hci_rx_data;
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
int
ble_hci_trans_reset(void)
{
/* XXX Should we do something with RF and/or BLE core? */
return 0;
}
#endif
static int
ble_hci_trans_acl_tx(struct os_mbuf *om)
@@ -177,7 +182,7 @@ ble_hci_trans_ll_acl_tx(struct os_mbuf *om)
}
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
void
ble_hci_trans_cfg_hs(ble_hci_trans_rx_cmd_fn *evt_cb, void *evt_arg,
ble_hci_trans_rx_acl_fn *acl_cb, void *acl_arg)
@@ -212,6 +217,7 @@ ble_hci_trans_hs_acl_tx(struct os_mbuf *om)
}
#endif
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
uint8_t *
ble_hci_trans_buf_alloc(int type)
{
@@ -255,12 +261,13 @@ ble_hci_trans_buf_free(uint8_t *buf)
assert(rc == 0);
}
}
#endif
static void
nrf5340_ble_hci_trans_rx_process(int channel)
{
struct nrf5340_ble_hci_rx_data *rxd = &nrf5340_ble_hci_rx_data;
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
int pool = BLE_HCI_TRANS_BUF_EVT_HI;
#endif
int rc;
@@ -274,7 +281,7 @@ nrf5340_ble_hci_trans_rx_process(int channel)
#if MYNEWT_VAL(BLE_CONTROLLER)
assert((rxd->type == HCI_PKT_ACL) || (rxd->type == HCI_PKT_CMD));
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
assert((rxd->type == HCI_PKT_ACL) || (rxd->type == HCI_PKT_EVT));
#endif
break;
@@ -312,7 +319,7 @@ nrf5340_ble_hci_trans_rx_process(int channel)
rxd->type = HCI_PKT_NONE;
break;
#endif
#if MYNEWT_VAL(BLE_HOST)
#if MYNEWT_VAL(BLE_HOST) || MYNEWT_VAL(BLE_HCI_BRIDGE)
case HCI_PKT_EVT:
/* header */
if (rxd->len < 2) {
@@ -433,6 +440,7 @@ nrf5340_ble_hci_trans_rx(int channel, void *user_data)
}
}
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
int
ble_hci_trans_set_acl_free_cb(os_mempool_put_fn *cb, void *arg)
{
@@ -441,6 +449,7 @@ ble_hci_trans_set_acl_free_cb(os_mempool_put_fn *cb, void *arg)
return 0;
}
#endif
void
nrf5340_ble_hci_init(void)
@@ -460,6 +469,7 @@ nrf5340_ble_hci_init(void)
MYNEWT_VAL(BLE_ACL_BUF_COUNT));
SYSINIT_PANIC_ASSERT(rc == 0);
#if !MYNEWT_VAL(BLE_HCI_BRIDGE)
rc = os_mempool_init(&nrf5340_ble_hci_pool_evt_hi,
MYNEWT_VAL(BLE_HCI_EVT_HI_BUF_COUNT),
MYNEWT_VAL(BLE_HCI_EVT_BUF_SIZE),
@@ -479,6 +489,7 @@ nrf5340_ble_hci_init(void)
nrf5340_ble_hci_pool_cmd_mempool_buf,
"nrf5340_ble_hci_pool_cmd_mempool");
SYSINIT_PANIC_ASSERT(rc == 0);
#endif
ipc_nrf5340_recv(IPC_RX_CHANNEL, nrf5340_ble_hci_trans_rx, NULL);
}
+10 -23
View File
@@ -17,34 +17,21 @@
#
syscfg.defs:
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'Number of high-priority event buffers.'
value: 2
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'Number of low-priority event buffers.'
value: 8
BLE_HCI_EVT_BUF_SIZE:
description: 'Size of each event buffer, in bytes.'
value: 70
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 4
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 255
BLE_TRANS_NRF5340_SYSINIT_STAGE:
description: >
Sysinit stage for the RAM BLE transport.
value: 100
syscfg.vals.BLE_EXT_ADV:
syscfg.vals.'!BLE_HCI_BRIDGE:
BLE_HCI_EVT_HI_BUF_COUNT: 2
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_ACL_BUF_COUNT: 4
BLE_ACL_BUF_SIZE: 255
syscfg.vals.'!BLE_HCI_BRIDGE && !BLE_EXT_ADV':
BLE_HCI_EVT_BUF_SIZE: 70
syscfg.vals.'!BLE_HCI_BRIDGE && BLE_EXT_ADV':
BLE_HCI_EVT_BUF_SIZE: 257
syscfg.restrictions:
+6
View File
@@ -52,3 +52,9 @@ pkg.deps.'BLE_HCI_TRANSPORT == "usb"':
pkg.deps.'BLE_HCI_TRANSPORT == "nrf5340"':
- nimble/transport/nrf5340
pkg.deps.'BLE_HCI_BRIDGE_TRANSPORT == "nrf5340"':
- nimble/transport/nrf5340
pkg.deps.'BLE_HCI_BRIDGE_TRANSPORT == "dialog_cmac"':
- nimble/transport/dialog_cmac
+7 -22
View File
@@ -17,32 +17,17 @@
#
syscfg.defs:
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'Number of high-priority event buffers.'
value: 2
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'Number of low-priority event buffers.'
value: 8
BLE_HCI_EVT_BUF_SIZE:
description: 'Size of each event buffer, in bytes.'
value: 70
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 4
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 65535
BLE_TRANS_RAM_SYSINIT_STAGE:
description: >
Sysinit stage for the RAM BLE transport.
value: 100
syscfg.vals:
BLE_HCI_EVT_HI_BUF_COUNT: 2
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_HCI_EVT_BUF_SIZE: 70
BLE_ACL_BUF_COUNT: 4
BLE_ACL_BUF_SIZE: 65535
syscfg.vals.BLE_EXT_ADV:
BLE_HCI_EVT_BUF_SIZE: 257
+8 -19
View File
@@ -17,24 +17,6 @@
#
syscfg.defs:
BLE_HCI_EVT_BUF_SIZE:
description: 'The size of the allocated event buffers'
value: 70
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'The number of high priority event buffers'
value: 8
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'The number of low priority event buffers'
value: 8
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 24
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 255
BLE_HCI_ACL_OUT_COUNT:
description: >
This count is used in creating a pool of elements used by the
@@ -75,5 +57,12 @@ syscfg.defs:
Sysinit stage for the socket BLE transport.
value: 500
syscfg.vals.BLE_EXT_ADV:
syscfg.vals.'!BLE_HCI_BRIDGE && BLE_EXT_ADV':
BLE_HCI_EVT_BUF_SIZE: 257
syscfg.vals.'!BLE_HCI_BRIDGE && !BLE_EXT_ADV':
BLE_HCI_EVT_BUF_SIZE: 70
BLE_HCI_EVT_HI_BUF_COUNT: 8
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_ACL_BUF_COUNT: 24
BLE_ACL_BUF_SIZE: 255
+48
View File
@@ -37,6 +37,47 @@ syscfg.defs:
- usb # USB
- nrf5340 # nRF5340
BLE_HCI_BRIDGE_TRANSPORT:
description: >
Selects HCI transport to be included in bridge configuration build.
This applies to multi core configurations where controller runs
on separate core and main core forwards HCI traffic to external host.
This has virtually the same effect as including package dependency
manually, but it allows to easily override HCI transport package in
application or target settings.
This is the transport
value:
choices:
- dialog_cmac # Dialog CMAC via shared memory
- nrf5340 # nRF5340
BLE_HCI_BRIDGE:
description: >
External interface (UART/USB/Socket) bridged to second core controller.
value: 0
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'Number of high-priority event buffers.'
value:
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'Number of low-priority event buffers.'
value:
BLE_HCI_EVT_BUF_SIZE:
description: 'Size of each event buffer, in bytes.'
value:
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value:
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets.
value:
# Deprecated settings
BLE_HCI_TRANSPORT_NIMBLE_BUILTIN:
description: Use BLE_HCI_TRANSPORT instead.
@@ -69,3 +110,10 @@ syscfg.vals.BLE_HCI_TRANSPORT_SOCKET:
BLE_HCI_TRANSPORT: socket
syscfg.vals.BLE_HCI_TRANSPORT_EMSPI:
BLE_HCI_TRANSPORT: emspi
syscfg.vals.'(MCU_TARGET == "DA14691" || MCU_TARGET == "DA14695" || MCU_TARGET == "DA14697" || MCU_TARGET == "DA14699")':
BLE_HCI_BRIDGE_TRANSPORT: dialog_cmac
syscfg.vals.'(MCU_TARGET == "nRF5340_APP")':
BLE_HCI_BRIDGE_TRANSPORT: nrf5340
+9 -7
View File
@@ -53,7 +53,7 @@
*/
/* XXX: for now, define this here */
#if MYNEWT_VAL(BLE_CONTROLLER)
#if MYNEWT_VAL(BLE_CONTROLLER) || MYNEWT_VAL(BLE_HCI_BRIDGE)
extern void ble_ll_data_buffer_overflow(void);
extern void ble_ll_hw_error(void);
@@ -385,7 +385,7 @@ ble_hci_uart_tx_char(void *arg)
return rc;
}
#if MYNEWT_VAL(BLE_CONTROLLER)
#if MYNEWT_VAL(BLE_CONTROLLER) || MYNEWT_VAL(BLE_HCI_BRIDGE)
/**
* HCI uart sync lost.
*
@@ -418,7 +418,7 @@ ble_hci_uart_rx_pkt_type(uint8_t data)
switch (ble_hci_uart_state.rx_type) {
/* Host should never receive a command! */
#if MYNEWT_VAL(BLE_CONTROLLER)
#if MYNEWT_VAL(BLE_CONTROLLER) || MYNEWT_VAL(BLE_HCI_BRIDGE)
case BLE_HCI_UART_H4_CMD:
ble_hci_uart_state.rx_cmd.len = 0;
ble_hci_uart_state.rx_cmd.cur = 0;
@@ -458,7 +458,7 @@ ble_hci_uart_rx_pkt_type(uint8_t data)
break;
default:
#if MYNEWT_VAL(BLE_CONTROLLER)
#if MYNEWT_VAL(BLE_CONTROLLER) || MYNEWT_VAL(BLE_HCI_BRIDGE)
/*
* If we receive an unknown HCI packet type this is considered a loss
* of sync.
@@ -477,7 +477,7 @@ ble_hci_uart_rx_pkt_type(uint8_t data)
return 0;
}
#if MYNEWT_VAL(BLE_CONTROLLER)
#if MYNEWT_VAL(BLE_CONTROLLER) || MYNEWT_VAL(BLE_HCI_BRIDGE)
/**
* HCI uart sync loss.
*
@@ -708,7 +708,7 @@ ble_hci_uart_rx_acl(uint8_t data)
*/
if (pktlen > MYNEWT_VAL(BLE_ACL_BUF_SIZE)) {
os_mbuf_free_chain(ble_hci_uart_state.rx_acl.buf);
#if MYNEWT_VAL(BLE_CONTROLLER)
#if MYNEWT_VAL(BLE_CONTROLLER) || MYNEWT_VAL(BLE_HCI_BRIDGE)
ble_hci_uart_sync_lost();
#else
/*
@@ -769,7 +769,7 @@ ble_hci_uart_rx_char(void *arg, uint8_t data)
switch (ble_hci_uart_state.rx_type) {
case BLE_HCI_UART_H4_NONE:
return ble_hci_uart_rx_pkt_type(data);
#if MYNEWT_VAL(BLE_CONTROLLER)
#if MYNEWT_VAL(BLE_CONTROLLER) || MYNEWT_VAL(BLE_HCI_BRIDGE)
case BLE_HCI_UART_H4_CMD:
ble_hci_uart_rx_cmd(data);
return 0;
@@ -898,6 +898,7 @@ ble_hci_trans_ll_acl_tx(struct os_mbuf *om)
return rc;
}
#if MYNEWT_VAL(BLE_HOST)
/**
* Sends an HCI command from the host to the controller.
*
@@ -955,6 +956,7 @@ ble_hci_trans_cfg_hs(ble_hci_trans_rx_cmd_fn *cmd_cb,
{
ble_hci_uart_set_rx_cbs(cmd_cb, cmd_arg, acl_cb, acl_arg);
}
#endif
/**
* Configures the HCI transport to operate with a host. The transport will
+7 -18
View File
@@ -17,24 +17,6 @@
#
syscfg.defs:
BLE_HCI_EVT_BUF_SIZE:
description: 'The size of the allocated event buffers'
value: 70
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'The number of high priority event buffers'
value: 8
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'The number of low priority event buffers'
value: 8
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 12
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 255
BLE_HCI_ACL_OUT_COUNT:
description: >
This count is used in creating a pool of elements used by the
@@ -70,3 +52,10 @@ syscfg.defs:
syscfg.vals.BLE_EXT_ADV:
BLE_HCI_EVT_BUF_SIZE: 257
syscfg.vals:
BLE_HCI_EVT_BUF_SIZE: 70
BLE_HCI_EVT_HI_BUF_COUNT: 8
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_ACL_BUF_COUNT: 12
BLE_ACL_BUF_SIZE: 255
+7 -18
View File
@@ -17,24 +17,6 @@
#
syscfg.defs:
BLE_HCI_EVT_BUF_SIZE:
description: 'The size of the allocated event buffers'
value: 70
BLE_HCI_EVT_HI_BUF_COUNT:
description: 'The number of high priority event buffers'
value: 8
BLE_HCI_EVT_LO_BUF_COUNT:
description: 'The number of low priority event buffers'
value: 8
BLE_ACL_BUF_COUNT:
description: 'The number of ACL data buffers'
value: 12
BLE_ACL_BUF_SIZE:
description: >
This is the maximum size of the data portion of HCI ACL data
packets. It does not include the HCI data header (of 4 bytes).
value: 255
BLE_HCI_ACL_OUT_COUNT:
description: >
This count is used in creating a pool of elements used by the
@@ -53,5 +35,12 @@ syscfg.defs:
syscfg.vals.BLE_EXT_ADV:
BLE_HCI_EVT_BUF_SIZE: 257
syscfg.vals:
BLE_HCI_EVT_BUF_SIZE: 70
BLE_HCI_EVT_HI_BUF_COUNT: 8
BLE_HCI_EVT_LO_BUF_COUNT: 8
BLE_ACL_BUF_COUNT: 12
BLE_ACL_BUF_SIZE: 255
syscfg.restrictions:
- '!BLE_HOST'