mirror of
https://github.com/espressif/esp-nimble.git
synced 2026-10-03 13:47:21 +00:00
host/mesh: fix Extended Adv for mesh
Fixes build and advertising.
This commit is contained in:
committed by
Krzysztof Kopyściński
parent
649fad1f21
commit
d22137b286
@@ -38,6 +38,11 @@ extern uint8_t g_mesh_addr_type;
|
||||
struct os_mbuf_pool adv_os_mbuf_pool;
|
||||
struct ble_npl_eventq bt_mesh_adv_queue;
|
||||
|
||||
os_membuf_t adv_buf_mem[OS_MEMPOOL_SIZE(
|
||||
MYNEWT_VAL(BLE_MESH_ADV_BUF_COUNT),
|
||||
BT_MESH_ADV_DATA_SIZE + BT_MESH_MBUF_HEADER_SIZE)];
|
||||
struct os_mempool adv_buf_mempool;
|
||||
|
||||
static struct bt_mesh_adv adv_pool[CONFIG_BT_MESH_ADV_BUF_COUNT];
|
||||
|
||||
static struct bt_mesh_adv *adv_alloc(int id)
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
/* We declare it as extern here to share it between 'adv' and 'adv_legacy' */
|
||||
extern struct os_mbuf_pool adv_os_mbuf_pool;
|
||||
extern struct ble_npl_eventq bt_mesh_adv_queue;
|
||||
extern struct os_mempool adv_buf_mempool;
|
||||
extern os_membuf_t adv_buf_mem[];
|
||||
|
||||
enum bt_mesh_adv_type
|
||||
{
|
||||
|
||||
@@ -28,7 +28,6 @@ static struct ble_gap_ext_adv_params adv_param = {
|
||||
};
|
||||
|
||||
bool ext_adv_configured = false;
|
||||
struct ble_npl_eventq bt_mesh_adv_queue;
|
||||
|
||||
enum {
|
||||
/** Controller is currently advertising */
|
||||
@@ -273,13 +272,13 @@ static void send_pending_adv(struct ble_npl_event *work)
|
||||
|
||||
/* No more pending buffers */
|
||||
if (bt_mesh_is_provisioned()) {
|
||||
if (IS_ENABLED(CONFIG_BT_MESH_GATT_PROXY)) {
|
||||
err = bt_mesh_pb_gatt_adv_start();
|
||||
BT_DBG("Proxy Advertising");
|
||||
}
|
||||
if (IS_ENABLED(CONFIG_BT_MESH_GATT_PROXY)) {
|
||||
err = bt_mesh_proxy_adv_start();
|
||||
BT_DBG("Proxy Advertising");
|
||||
}
|
||||
} else if (IS_ENABLED(CONFIG_BT_MESH_PB_GATT)) {
|
||||
err = bt_mesh_prov_adv_start();
|
||||
BT_DBG("PB-GATT Advertising");
|
||||
err = bt_mesh_pb_gatt_adv_start();
|
||||
BT_DBG("PB-GATT Advertising");
|
||||
}
|
||||
|
||||
if (!err) {
|
||||
@@ -301,47 +300,27 @@ void bt_mesh_adv_buf_ready(void)
|
||||
|
||||
void bt_mesh_adv_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
rc = os_mempool_init(&adv_buf_mempool, MYNEWT_VAL(BLE_MESH_ADV_BUF_COUNT),
|
||||
BT_MESH_ADV_DATA_SIZE + BT_MESH_MBUF_HEADER_SIZE,
|
||||
adv_buf_mem, "adv_buf_pool");
|
||||
assert(rc == 0);
|
||||
|
||||
rc = os_mbuf_pool_init(&adv_os_mbuf_pool, &adv_buf_mempool,
|
||||
BT_MESH_ADV_DATA_SIZE + BT_MESH_MBUF_HEADER_SIZE,
|
||||
MYNEWT_VAL(BLE_MESH_ADV_BUF_COUNT));
|
||||
assert(rc == 0);
|
||||
|
||||
ble_npl_eventq_init(&bt_mesh_adv_queue);
|
||||
|
||||
k_work_init_delayable(&adv.work, send_pending_adv);
|
||||
}
|
||||
|
||||
int bt_mesh_adv_enable(void)
|
||||
{
|
||||
struct ble_gap_ext_adv_params params;
|
||||
ble_addr_t addr;
|
||||
int rc;
|
||||
|
||||
if (ext_adv_configured) {
|
||||
/* Already initialized */
|
||||
return 0;
|
||||
}
|
||||
|
||||
params.itvl_min = BT_MESH_ADV_SCAN_UNIT(ADV_INT_FAST_MS);
|
||||
params.itvl_max = BT_MESH_ADV_SCAN_UNIT(ADV_INT_FAST_MS);
|
||||
|
||||
if (MYNEWT_VAL(BLE_MESH_DEBUG_USE_ID_ADDR)) {
|
||||
params.own_addr_type = BLE_OWN_ADDR_PUBLIC;
|
||||
} else {
|
||||
params.own_addr_type = BLE_OWN_ADDR_RANDOM;
|
||||
/* set random (NRPA) address for instance */
|
||||
rc = ble_hs_id_gen_rnd(1, &addr);
|
||||
assert (rc == 0);
|
||||
|
||||
rc = ble_gap_ext_adv_set_addr(BT_ID_DEFAULT, &addr );
|
||||
assert (rc == 0);
|
||||
}
|
||||
|
||||
params.primary_phy = BLE_HCI_LE_PHY_1M;
|
||||
params.secondary_phy = BLE_HCI_LE_PHY_1M;
|
||||
params.tx_power = 127;
|
||||
params.sid = 4;
|
||||
|
||||
rc = ble_gap_ext_adv_configure(BT_ID_DEFAULT, ¶ms, NULL,
|
||||
ble_mesh_ext_adv_event_handler, NULL);
|
||||
if (rc == 0) {
|
||||
ext_adv_configured = true;
|
||||
}
|
||||
|
||||
return rc;
|
||||
/* No need to initialize extended advertiser instance here */
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bt_mesh_adv_start(const struct ble_gap_adv_params *param, int32_t duration,
|
||||
|
||||
@@ -44,10 +44,7 @@ static int adv_initialized = false;
|
||||
OS_TASK_STACK_DEFINE(g_blemesh_stack, MYNEWT_VAL(BLE_MESH_ADV_STACK_SIZE));
|
||||
struct os_task adv_task;
|
||||
#endif
|
||||
static os_membuf_t adv_buf_mem[OS_MEMPOOL_SIZE(
|
||||
MYNEWT_VAL(BLE_MESH_ADV_BUF_COUNT),
|
||||
BT_MESH_ADV_DATA_SIZE + BT_MESH_MBUF_HEADER_SIZE)];
|
||||
static struct os_mempool adv_buf_mempool;
|
||||
|
||||
static int32_t adv_timeout;
|
||||
|
||||
static inline void adv_send(struct os_mbuf *buf)
|
||||
|
||||
Reference in New Issue
Block a user