Home | History | Annotate | Download | only in pan
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2004-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 is the private interface file for the BTA data gateway.
     22  *
     23  ******************************************************************************/
     24 #ifndef BTA_PAN_INT_H
     25 #define BTA_PAN_INT_H
     26 
     27 #include "bta_sys.h"
     28 #include "bta_pan_api.h"
     29 
     30 /*****************************************************************************
     31 **  Constants
     32 *****************************************************************************/
     33 
     34 
     35 
     36 
     37 /* PAN events */
     38 enum
     39 {
     40     /* these events are handled by the state machine */
     41     BTA_PAN_API_CLOSE_EVT = BTA_SYS_EVT_START(BTA_ID_PAN),
     42     BTA_PAN_CI_TX_READY_EVT,
     43     BTA_PAN_CI_RX_READY_EVT,
     44     BTA_PAN_CI_TX_FLOW_EVT,
     45     BTA_PAN_CI_RX_WRITE_EVT,
     46     BTA_PAN_CI_RX_WRITEBUF_EVT,
     47     BTA_PAN_CONN_OPEN_EVT,
     48     BTA_PAN_CONN_CLOSE_EVT,
     49     BTA_PAN_BNEP_FLOW_ENABLE_EVT,
     50     BTA_PAN_RX_FROM_BNEP_READY_EVT,
     51 
     52     /* these events are handled outside of the state machine */
     53     BTA_PAN_API_ENABLE_EVT,
     54     BTA_PAN_API_DISABLE_EVT,
     55     BTA_PAN_API_SET_ROLE_EVT,
     56     BTA_PAN_API_OPEN_EVT
     57 };
     58 
     59 
     60 
     61 
     62 /*****************************************************************************
     63 **  Data types
     64 *****************************************************************************/
     65 
     66 /* data type for BTA_PAN_API_ENABLE_EVT */
     67 typedef struct
     68 {
     69     BT_HDR              hdr;                        /* Event header */
     70     tBTA_PAN_CBACK     *p_cback;                    /* PAN callback function */
     71 } tBTA_PAN_API_ENABLE;
     72 
     73 /* data type for BTA_PAN_API_REG_ROLE_EVT */
     74 typedef struct
     75 {
     76     BT_HDR              hdr;                             /* Event header */
     77     char                user_name[BTA_SERVICE_NAME_LEN+1];   /* Service name */
     78     char                gn_name[BTA_SERVICE_NAME_LEN+1];     /* Service name */
     79     char                nap_name[BTA_SERVICE_NAME_LEN+1];    /* Service name */
     80     tBTA_PAN_ROLE       role;
     81     UINT8               user_app_id;
     82     UINT8               gn_app_id;
     83     UINT8               nap_app_id;
     84     tBTA_SEC            user_sec_mask;                   /* Security mask */
     85     tBTA_SEC            gn_sec_mask;                     /* Security mask */
     86     tBTA_SEC            nap_sec_mask;                    /* Security mask */
     87 
     88 
     89 } tBTA_PAN_API_SET_ROLE;
     90 
     91 /* data type for BTA_PAN_API_OPEN_EVT */
     92 typedef struct
     93 {
     94     BT_HDR              hdr;                        /* Event header */
     95     tBTA_PAN_ROLE        local_role;                 /* local role */
     96     tBTA_PAN_ROLE        peer_role;                  /* peer role */
     97     BD_ADDR             bd_addr;                    /* peer bdaddr */
     98 } tBTA_PAN_API_OPEN;
     99 
    100 /* data type for BTA_PAN_CI_TX_FLOW_EVT */
    101 typedef struct
    102 {
    103     BT_HDR          hdr;                    /* Event header */
    104     BOOLEAN         enable;                 /* Flow control setting */
    105 } tBTA_PAN_CI_TX_FLOW;
    106 
    107 /* data type for BTA_PAN_CONN_OPEN_EVT */
    108 typedef struct
    109 {
    110     BT_HDR          hdr;        /* Event header */
    111     tPAN_RESULT     result;
    112 
    113 } tBTA_PAN_CONN;
    114 
    115 
    116 
    117 
    118 /* union of all data types */
    119 typedef union
    120 {
    121     BT_HDR                   hdr;
    122     tBTA_PAN_API_ENABLE      api_enable;
    123     tBTA_PAN_API_SET_ROLE    api_set_role;
    124     tBTA_PAN_API_OPEN        api_open;
    125     tBTA_PAN_CI_TX_FLOW      ci_tx_flow;
    126     tBTA_PAN_CONN            conn;
    127 } tBTA_PAN_DATA;
    128 
    129 /* state machine control block */
    130 typedef struct
    131 {
    132     BD_ADDR                 bd_addr;        /* peer bdaddr */
    133     BUFFER_Q                data_queue;     /* Queue of buffers waiting to be passed to application */
    134     UINT16                  handle;         /* BTA PAN/BNEP handle */
    135     BOOLEAN                 in_use;         /* scb in use */
    136     tBTA_SEC                sec_mask;       /* Security mask */
    137     BOOLEAN                 pan_flow_enable;/* BNEP flow control state */
    138     BOOLEAN                 app_flow_enable;/* Application flow control state */
    139     UINT8                   state;          /* State machine state */
    140     tBTA_PAN_ROLE            local_role;     /* local role */
    141     tBTA_PAN_ROLE            peer_role;      /* peer role */
    142     UINT8                    app_id;         /* application id for the connection */
    143 
    144 } tBTA_PAN_SCB;
    145 
    146 
    147 
    148 /* main control block */
    149 typedef struct
    150 {
    151     tBTA_PAN_SCB    scb[BTA_PAN_NUM_CONN];          /* state machine control blocks */
    152     tBTA_PAN_CBACK *p_cback;                        /* PAN callback function */
    153     UINT8            app_id[3];                      /* application id for PAN roles */
    154     UINT8           flow_mask;                      /* Data flow mask */
    155     UINT8           q_level;                        /* queue level set by application for TX data */
    156 
    157 } tBTA_PAN_CB;
    158 
    159 
    160 /* pan data param */
    161 typedef struct
    162 {
    163     BT_HDR  hdr;
    164     BD_ADDR src;
    165     BD_ADDR dst;
    166     UINT16  protocol;
    167     BOOLEAN ext;
    168     BOOLEAN forward;
    169 
    170 } tBTA_PAN_DATA_PARAMS;
    171 
    172 
    173 /*****************************************************************************
    174 **  Global data
    175 *****************************************************************************/
    176 
    177 /* PAN control block */
    178 
    179 #if BTA_DYNAMIC_MEMORY == FALSE
    180 extern tBTA_PAN_CB  bta_pan_cb;
    181 #else
    182 extern tBTA_PAN_CB *bta_pan_cb_ptr;
    183 #define bta_pan_cb (*bta_pan_cb_ptr)
    184 #endif
    185 
    186 /*****************************************************************************
    187 **  Function prototypes
    188 *****************************************************************************/
    189 extern tBTA_PAN_SCB *bta_pan_scb_alloc(void);
    190 extern void bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb);
    191 extern UINT8 bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb);
    192 extern tBTA_PAN_SCB *bta_pan_scb_by_handle(UINT16 handle);
    193 extern BOOLEAN bta_pan_hdl_event(BT_HDR *p_msg);
    194 
    195 /* action functions */
    196 extern void bta_pan_enable(tBTA_PAN_DATA *p_data);
    197 extern void bta_pan_disable(void);
    198 extern void bta_pan_set_role(tBTA_PAN_DATA *p_data);
    199 extern void bta_pan_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    200 extern void bta_pan_api_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    201 extern void bta_pan_set_shutdown(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    202 extern void bta_pan_rx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    203 extern void bta_pan_tx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    204 extern void bta_pan_tx_flow(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    205 extern void bta_pan_conn_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    206 extern void bta_pan_conn_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    207 extern void bta_pan_writebuf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    208 extern void bta_pan_write_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    209 extern void bta_pan_free_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    210 
    211 
    212 #endif /* BTA_PAN_INT_H */
    213