blob: 447224bcd03096dc9e64ae62dc2c083dd6ffd29c [file] [log] [blame]
/* Bluetooth Mesh */
/*
* Copyright (c) 2017 Intel Corporation
* Copyright (c) 2021 Lingao Meng
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_SUBSYS_BLUETOOTH_MESH_PROXY_MSG_H_
#define ZEPHYR_SUBSYS_BLUETOOTH_MESH_PROXY_MSG_H_
#define PDU_TYPE(data) (data[0] & BIT_MASK(6))
#define CFG_FILTER_SET 0x00
#define CFG_FILTER_ADD 0x01
#define CFG_FILTER_REMOVE 0x02
#define CFG_FILTER_STATUS 0x03
#define BT_MESH_PROXY_NET_PDU 0x00
#define BT_MESH_PROXY_BEACON 0x01
#define BT_MESH_PROXY_CONFIG 0x02
#define BT_MESH_PROXY_PROV 0x03
#define PDU_HDR(sar, type) (sar << 6 | (type & BIT_MASK(6)))
struct bt_mesh_proxy_role;
typedef int (*proxy_send_cb_t)(uint16_t conn_handle,
const void *data, uint16_t len);
typedef void (*proxy_recv_cb_t)(struct bt_mesh_proxy_role *role);
struct bt_mesh_proxy_role {
unsigned int index;
uint16_t conn_handle;
uint8_t msg_type;
struct {
proxy_send_cb_t send;
proxy_recv_cb_t recv;
} cb;
struct k_work_delayable sar_timer;
struct os_mbuf *buf;
};
struct bt_mesh_proxy_client {
struct bt_mesh_proxy_role *cli;
uint16_t conn_handle;
uint16_t filter[MYNEWT_VAL(BLE_MESH_PROXY_FILTER_SIZE)];
enum __packed {
NONE,
ACCEPT,
REJECT,
} filter_type;
struct ble_npl_callout send_beacons;
};
int bt_mesh_proxy_msg_recv(struct bt_mesh_proxy_role *role,
const void *buf, uint16_t len);
int bt_mesh_proxy_msg_send(struct bt_mesh_proxy_role *role, uint8_t type, struct os_mbuf *msg);
void bt_mesh_proxy_role_cleanup(struct bt_mesh_proxy_role *role);
struct bt_mesh_proxy_role *bt_mesh_proxy_role_setup(uint16_t conn_handle,
proxy_send_cb_t send,
proxy_recv_cb_t recv);
struct bt_mesh_proxy_client *find_client(uint16_t conn_handle);
struct bt_mesh_proxy_role *bt_mesh_proxy_role_find_with_buf(const struct os_mbuf *buf);
void bt_mesh_proxy_msg_init(void);
#endif /* ZEPHYR_SUBSYS_BLUETOOTH_MESH_PROXY_MSG_H_ */