1/******************************************************************************
2 *
3 *  Copyright (C) 2001-2012 Broadcom Corporation
4 *
5 *  Licensed under the Apache License, Version 2.0 (the "License");
6 *  you may not use this file except in compliance with the License.
7 *  You may obtain a copy of the License at:
8 *
9 *  http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 *
17 ******************************************************************************/
18
19/******************************************************************************
20 *
21 *  This file contains internally used PAN definitions
22 *
23 ******************************************************************************/
24
25#ifndef PAN_INT_H
26#define PAN_INT_H
27
28#include "pan_api.h"
29
30/*
31 * This role is used to shutdown the profile. Used internally
32 * Applications should call PAN_Deregister to shutdown the profile
33*/
34#define PAN_ROLE_INACTIVE 0
35
36/* Protocols supported by the host internal stack, are registered with SDP */
37#define PAN_PROTOCOL_IP 0x0800
38#define PAN_PROTOCOL_ARP 0x0806
39
40#define PAN_PROFILE_VERSION 0x0100 /* Version 1.00 */
41
42/* Define the PAN Connection Control Block
43*/
44typedef struct {
45#define PAN_STATE_IDLE 0
46#define PAN_STATE_CONN_START 1
47#define PAN_STATE_CONNECTED 2
48  uint8_t con_state;
49
50#define PAN_FLAGS_CONN_COMPLETED 0x01
51  uint8_t con_flags;
52
53  uint16_t handle;
54  BD_ADDR rem_bda;
55
56  uint16_t bad_pkts_rcvd;
57  uint16_t src_uuid;
58  uint16_t dst_uuid;
59  uint16_t prv_src_uuid;
60  uint16_t prv_dst_uuid;
61  uint16_t ip_addr_known;
62  uint32_t ip_addr;
63
64} tPAN_CONN;
65
66/*  The main PAN control block
67*/
68typedef struct {
69  uint8_t role;
70  uint8_t active_role;
71  uint8_t prv_active_role;
72  tPAN_CONN pcb[MAX_PAN_CONNS];
73
74  tPAN_CONN_STATE_CB* pan_conn_state_cb; /* Connection state callback */
75  tPAN_BRIDGE_REQ_CB* pan_bridge_req_cb;
76  tPAN_DATA_IND_CB* pan_data_ind_cb;
77  tPAN_DATA_BUF_IND_CB* pan_data_buf_ind_cb;
78  tPAN_FILTER_IND_CB*
79      pan_pfilt_ind_cb; /* protocol filter indication callback */
80  tPAN_MFILTER_IND_CB*
81      pan_mfilt_ind_cb; /* multicast filter indication callback */
82  tPAN_TX_DATA_FLOW_CB* pan_tx_data_flow_cb;
83
84  char* user_service_name;
85  char* gn_service_name;
86  char* nap_service_name;
87  uint32_t pan_user_sdp_handle;
88  uint32_t pan_gn_sdp_handle;
89  uint32_t pan_nap_sdp_handle;
90  uint8_t num_conns;
91  uint8_t trace_level;
92} tPAN_CB;
93
94/* Global PAN data
95*/
96extern tPAN_CB pan_cb;
97
98/******************************************************************************/
99extern void pan_register_with_bnep(void);
100extern void pan_conn_ind_cb(uint16_t handle, BD_ADDR p_bda,
101                            tBT_UUID* remote_uuid, tBT_UUID* local_uuid,
102                            bool is_role_change);
103extern void pan_connect_state_cb(uint16_t handle, BD_ADDR rem_bda,
104                                 tBNEP_RESULT result, bool is_role_change);
105extern void pan_data_ind_cb(uint16_t handle, uint8_t* src, uint8_t* dst,
106                            uint16_t protocol, uint8_t* p_data, uint16_t len,
107                            bool fw_ext_present);
108extern void pan_data_buf_ind_cb(uint16_t handle, uint8_t* src, uint8_t* dst,
109                                uint16_t protocol, BT_HDR* p_buf, bool ext);
110extern void pan_tx_data_flow_cb(uint16_t handle, tBNEP_RESULT event);
111void pan_proto_filt_ind_cb(uint16_t handle, bool indication,
112                           tBNEP_RESULT result, uint16_t num_filters,
113                           uint8_t* p_filters);
114void pan_mcast_filt_ind_cb(uint16_t handle, bool indication,
115                           tBNEP_RESULT result, uint16_t num_filters,
116                           uint8_t* p_filters);
117extern uint32_t pan_register_with_sdp(uint16_t uuid, uint8_t sec_mask,
118                                      const char* p_name, const char* p_desc);
119extern tPAN_CONN* pan_allocate_pcb(BD_ADDR p_bda, uint16_t handle);
120extern tPAN_CONN* pan_get_pcb_by_handle(uint16_t handle);
121extern tPAN_CONN* pan_get_pcb_by_addr(BD_ADDR p_bda);
122extern void pan_close_all_connections(void);
123extern void pan_release_pcb(tPAN_CONN* p_pcb);
124extern void pan_dump_status(void);
125
126/******************************************************************************/
127
128#endif
129