xref: /nrf52832-nimble/packages/NimBLE-latest/nimble/host/mesh/src/adv.h (revision 042d53a763ad75cb1465103098bb88c245d95138)
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