1*042d53a7SEvalZero /* Bluetooth Mesh */ 2*042d53a7SEvalZero 3*042d53a7SEvalZero /* 4*042d53a7SEvalZero * Copyright (c) 2017 Intel Corporation 5*042d53a7SEvalZero * 6*042d53a7SEvalZero * SPDX-License-Identifier: Apache-2.0 7*042d53a7SEvalZero */ 8*042d53a7SEvalZero 9*042d53a7SEvalZero #ifndef __ADV_H__ 10*042d53a7SEvalZero #define __ADV_H__ 11*042d53a7SEvalZero 12*042d53a7SEvalZero /* Maximum advertising data payload for a single data type */ 13*042d53a7SEvalZero #include "mesh/mesh.h" 14*042d53a7SEvalZero 15*042d53a7SEvalZero #define BT_MESH_ADV(om) (*(struct bt_mesh_adv **) OS_MBUF_USRHDR(om)) 16*042d53a7SEvalZero 17*042d53a7SEvalZero #define BT_MESH_ADV_DATA_SIZE 31 18*042d53a7SEvalZero 19*042d53a7SEvalZero /* The user data is a pointer (4 bytes) to struct bt_mesh_adv */ 20*042d53a7SEvalZero #define BT_MESH_ADV_USER_DATA_SIZE (sizeof(struct bt_mesh_adv *)) 21*042d53a7SEvalZero 22*042d53a7SEvalZero #define BT_MESH_MBUF_HEADER_SIZE (sizeof(struct os_mbuf_pkthdr) + \ 23*042d53a7SEvalZero BT_MESH_ADV_USER_DATA_SIZE +\ 24*042d53a7SEvalZero sizeof(struct os_mbuf)) 25*042d53a7SEvalZero 26*042d53a7SEvalZero enum bt_mesh_adv_type 27*042d53a7SEvalZero { 28*042d53a7SEvalZero BT_MESH_ADV_PROV, 29*042d53a7SEvalZero BT_MESH_ADV_DATA, 30*042d53a7SEvalZero BT_MESH_ADV_BEACON, 31*042d53a7SEvalZero BT_MESH_ADV_URI, 32*042d53a7SEvalZero }; 33*042d53a7SEvalZero 34*042d53a7SEvalZero typedef void (*bt_mesh_adv_func_t)(struct os_mbuf *buf, u16_t duration, 35*042d53a7SEvalZero int err, void *user_data); 36*042d53a7SEvalZero 37*042d53a7SEvalZero struct bt_mesh_adv { 38*042d53a7SEvalZero const struct bt_mesh_send_cb *cb; 39*042d53a7SEvalZero void *cb_data; 40*042d53a7SEvalZero 41*042d53a7SEvalZero u8_t type:2, 42*042d53a7SEvalZero busy:1; 43*042d53a7SEvalZero u8_t xmit; 44*042d53a7SEvalZero 45*042d53a7SEvalZero union { 46*042d53a7SEvalZero /* Address, used e.g. for Friend Queue messages */ 47*042d53a7SEvalZero u16_t addr; 48*042d53a7SEvalZero 49*042d53a7SEvalZero /* For transport layer segment sending */ 50*042d53a7SEvalZero struct { 51*042d53a7SEvalZero u8_t attempts; 52*042d53a7SEvalZero } seg; 53*042d53a7SEvalZero }; 54*042d53a7SEvalZero 55*042d53a7SEvalZero int ref_cnt; 56*042d53a7SEvalZero struct ble_npl_event ev; 57*042d53a7SEvalZero }; 58*042d53a7SEvalZero 59*042d53a7SEvalZero typedef struct bt_mesh_adv *(*bt_mesh_adv_alloc_t)(int id); 60*042d53a7SEvalZero 61*042d53a7SEvalZero /* xmit_count: Number of retransmissions, i.e. 0 == 1 transmission */ 62*042d53a7SEvalZero struct os_mbuf *bt_mesh_adv_create(enum bt_mesh_adv_type type, u8_t xmit, 63*042d53a7SEvalZero s32_t timeout); 64*042d53a7SEvalZero 65*042d53a7SEvalZero struct os_mbuf *bt_mesh_adv_create_from_pool(struct os_mbuf_pool *pool, 66*042d53a7SEvalZero bt_mesh_adv_alloc_t get_id, 67*042d53a7SEvalZero enum bt_mesh_adv_type type, 68*042d53a7SEvalZero u8_t xmit, s32_t timeout); 69*042d53a7SEvalZero 70*042d53a7SEvalZero void bt_mesh_adv_send(struct os_mbuf *buf, const struct bt_mesh_send_cb *cb, 71*042d53a7SEvalZero void *cb_data); 72*042d53a7SEvalZero 73*042d53a7SEvalZero void bt_mesh_adv_update(void); 74*042d53a7SEvalZero 75*042d53a7SEvalZero void bt_mesh_adv_init(void); 76*042d53a7SEvalZero 77*042d53a7SEvalZero int bt_mesh_scan_enable(void); 78*042d53a7SEvalZero 79*042d53a7SEvalZero int bt_mesh_scan_disable(void); 80*042d53a7SEvalZero 81*042d53a7SEvalZero int ble_adv_gap_mesh_cb(struct ble_gap_event *event, void *arg); 82*042d53a7SEvalZero #endif 83