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 #include "syscfg/syscfg.h" 10*042d53a7SEvalZero #include "mesh/mesh.h" 11*042d53a7SEvalZero 12*042d53a7SEvalZero #define TRANS_SEQ_AUTH_NVAL 0xffffffffffffffff 13*042d53a7SEvalZero 14*042d53a7SEvalZero #define BT_MESH_TX_SDU_MAX (CONFIG_BT_MESH_TX_SEG_MAX * 12) 15*042d53a7SEvalZero 16*042d53a7SEvalZero #define TRANS_CTL_OP_MASK ((u8_t)BIT_MASK(7)) 17*042d53a7SEvalZero #define TRANS_CTL_OP(data) ((data)[0] & TRANS_CTL_OP_MASK) 18*042d53a7SEvalZero #define TRANS_CTL_HDR(op, seg) ((op & TRANS_CTL_OP_MASK) | (seg << 7)) 19*042d53a7SEvalZero 20*042d53a7SEvalZero #define TRANS_CTL_OP_ACK 0x00 21*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_POLL 0x01 22*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_UPDATE 0x02 23*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_REQ 0x03 24*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_OFFER 0x04 25*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_CLEAR 0x05 26*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_CLEAR_CFM 0x06 27*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_SUB_ADD 0x07 28*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_SUB_REM 0x08 29*042d53a7SEvalZero #define TRANS_CTL_OP_FRIEND_SUB_CFM 0x09 30*042d53a7SEvalZero #define TRANS_CTL_OP_HEARTBEAT 0x0a 31*042d53a7SEvalZero 32*042d53a7SEvalZero struct bt_mesh_ctl_friend_poll { 33*042d53a7SEvalZero u8_t fsn; 34*042d53a7SEvalZero }__attribute__((__packed__)); 35*042d53a7SEvalZero 36*042d53a7SEvalZero struct bt_mesh_ctl_friend_update { 37*042d53a7SEvalZero u8_t flags; 38*042d53a7SEvalZero u32_t iv_index; 39*042d53a7SEvalZero u8_t md; 40*042d53a7SEvalZero }__attribute__((__packed__)); 41*042d53a7SEvalZero 42*042d53a7SEvalZero struct bt_mesh_ctl_friend_req { 43*042d53a7SEvalZero u8_t criteria; 44*042d53a7SEvalZero u8_t recv_delay; 45*042d53a7SEvalZero u8_t poll_to[3]; 46*042d53a7SEvalZero u16_t prev_addr; 47*042d53a7SEvalZero u8_t num_elem; 48*042d53a7SEvalZero u16_t lpn_counter; 49*042d53a7SEvalZero }__attribute__((__packed__)); 50*042d53a7SEvalZero 51*042d53a7SEvalZero struct bt_mesh_ctl_friend_offer { 52*042d53a7SEvalZero u8_t recv_win; 53*042d53a7SEvalZero u8_t queue_size; 54*042d53a7SEvalZero u8_t sub_list_size; 55*042d53a7SEvalZero s8_t rssi; 56*042d53a7SEvalZero u16_t frnd_counter; 57*042d53a7SEvalZero }__attribute__((__packed__)); 58*042d53a7SEvalZero 59*042d53a7SEvalZero struct bt_mesh_ctl_friend_clear { 60*042d53a7SEvalZero u16_t lpn_addr; 61*042d53a7SEvalZero u16_t lpn_counter; 62*042d53a7SEvalZero }__attribute__((__packed__)); 63*042d53a7SEvalZero 64*042d53a7SEvalZero struct bt_mesh_ctl_friend_clear_confirm { 65*042d53a7SEvalZero u16_t lpn_addr; 66*042d53a7SEvalZero u16_t lpn_counter; 67*042d53a7SEvalZero }__attribute__((__packed__)); 68*042d53a7SEvalZero 69*042d53a7SEvalZero #define BT_MESH_FRIEND_SUB_MIN_LEN (1 + 2) 70*042d53a7SEvalZero struct bt_mesh_ctl_friend_sub { 71*042d53a7SEvalZero u8_t xact; 72*042d53a7SEvalZero u16_t addr_list[5]; 73*042d53a7SEvalZero }__attribute__((__packed__)); 74*042d53a7SEvalZero 75*042d53a7SEvalZero struct bt_mesh_ctl_friend_sub_confirm { 76*042d53a7SEvalZero u8_t xact; 77*042d53a7SEvalZero }__attribute__((__packed__)); 78*042d53a7SEvalZero 79*042d53a7SEvalZero void bt_mesh_set_hb_sub_dst(u16_t addr); 80*042d53a7SEvalZero 81*042d53a7SEvalZero struct bt_mesh_app_key *bt_mesh_app_key_find(u16_t app_idx); 82*042d53a7SEvalZero 83*042d53a7SEvalZero bool bt_mesh_tx_in_progress(void); 84*042d53a7SEvalZero 85*042d53a7SEvalZero void bt_mesh_rx_reset(void); 86*042d53a7SEvalZero void bt_mesh_tx_reset(void); 87*042d53a7SEvalZero 88*042d53a7SEvalZero int bt_mesh_ctl_send(struct bt_mesh_net_tx *tx, u8_t ctl_op, void *data, 89*042d53a7SEvalZero size_t data_len, u64_t *seq_auth, 90*042d53a7SEvalZero const struct bt_mesh_send_cb *cb, void *cb_data); 91*042d53a7SEvalZero 92*042d53a7SEvalZero int bt_mesh_trans_send(struct bt_mesh_net_tx *tx, struct os_mbuf *msg, 93*042d53a7SEvalZero const struct bt_mesh_send_cb *cb, void *cb_data); 94*042d53a7SEvalZero 95*042d53a7SEvalZero int bt_mesh_trans_recv(struct os_mbuf *buf, struct bt_mesh_net_rx *rx); 96*042d53a7SEvalZero 97*042d53a7SEvalZero void bt_mesh_trans_init(void); 98*042d53a7SEvalZero 99*042d53a7SEvalZero void bt_mesh_rpl_clear(void); 100