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 /* state machine states */
     60 enum
     61 {
     62     BTA_PAN_IDLE_ST,
     63     BTA_PAN_OPEN_ST,
     64     BTA_PAN_CLOSING_ST
     65 };
     66 
     67 
     68 
     69 
     70 /*****************************************************************************
     71 **  Data types
     72 *****************************************************************************/
     73 
     74 /* data type for BTA_PAN_API_ENABLE_EVT */
     75 typedef struct
     76 {
     77     BT_HDR              hdr;                        /* Event header */
     78     tBTA_PAN_CBACK     *p_cback;                    /* PAN callback function */
     79 } tBTA_PAN_API_ENABLE;
     80 
     81 /* data type for BTA_PAN_API_REG_ROLE_EVT */
     82 typedef struct
     83 {
     84     BT_HDR              hdr;                             /* Event header */
     85     char                user_name[BTA_SERVICE_NAME_LEN+1];   /* Service name */
     86     char                gn_name[BTA_SERVICE_NAME_LEN+1];     /* Service name */
     87     char                nap_name[BTA_SERVICE_NAME_LEN+1];    /* Service name */
     88     tBTA_PAN_ROLE       role;
     89     UINT8               user_app_id;
     90     UINT8               gn_app_id;
     91     UINT8               nap_app_id;
     92     tBTA_SEC            user_sec_mask;                   /* Security mask */
     93     tBTA_SEC            gn_sec_mask;                     /* Security mask */
     94     tBTA_SEC            nap_sec_mask;                    /* Security mask */
     95 
     96 
     97 } tBTA_PAN_API_SET_ROLE;
     98 
     99 /* data type for BTA_PAN_API_OPEN_EVT */
    100 typedef struct
    101 {
    102     BT_HDR              hdr;                        /* Event header */
    103     tBTA_PAN_ROLE        local_role;                 /* local role */
    104     tBTA_PAN_ROLE        peer_role;                  /* peer role */
    105     BD_ADDR             bd_addr;                    /* peer bdaddr */
    106 } tBTA_PAN_API_OPEN;
    107 
    108 /* data type for BTA_PAN_CI_TX_FLOW_EVT */
    109 typedef struct
    110 {
    111     BT_HDR          hdr;                    /* Event header */
    112     BOOLEAN         enable;                 /* Flow control setting */
    113 } tBTA_PAN_CI_TX_FLOW;
    114 
    115 /* data type for BTA_PAN_CONN_OPEN_EVT */
    116 typedef struct
    117 {
    118     BT_HDR          hdr;        /* Event header */
    119     tPAN_RESULT     result;
    120 
    121 } tBTA_PAN_CONN;
    122 
    123 
    124 
    125 
    126 /* union of all data types */
    127 typedef union
    128 {
    129     BT_HDR                   hdr;
    130     tBTA_PAN_API_ENABLE      api_enable;
    131     tBTA_PAN_API_SET_ROLE    api_set_role;
    132     tBTA_PAN_API_OPEN        api_open;
    133     tBTA_PAN_CI_TX_FLOW      ci_tx_flow;
    134     tBTA_PAN_CONN            conn;
    135 } tBTA_PAN_DATA;
    136 
    137 /* state machine control block */
    138 typedef struct
    139 {
    140     BD_ADDR                 bd_addr;        /* peer bdaddr */
    141     BUFFER_Q                data_queue;     /* Queue of buffers waiting to be passed to application */
    142     UINT16                  handle;         /* BTA PAN/BNEP handle */
    143     BOOLEAN                 in_use;         /* scb in use */
    144     tBTA_SEC                sec_mask;       /* Security mask */
    145     BOOLEAN                 pan_flow_enable;/* BNEP flow control state */
    146     BOOLEAN                 app_flow_enable;/* Application flow control state */
    147     UINT8                   state;          /* State machine state */
    148     tBTA_PAN_ROLE            local_role;     /* local role */
    149     tBTA_PAN_ROLE            peer_role;      /* peer role */
    150     UINT8                    app_id;         /* application id for the connection */
    151 
    152 } tBTA_PAN_SCB;
    153 
    154 
    155 
    156 /* main control block */
    157 typedef struct
    158 {
    159     tBTA_PAN_SCB    scb[BTA_PAN_NUM_CONN];          /* state machine control blocks */
    160     tBTA_PAN_CBACK *p_cback;                        /* PAN callback function */
    161     UINT8            app_id[3];                      /* application id for PAN roles */
    162     UINT8           flow_mask;                      /* Data flow mask */
    163     UINT8           q_level;                        /* queue level set by application for TX data */
    164 
    165 } tBTA_PAN_CB;
    166 
    167 
    168 /* pan data param */
    169 typedef struct
    170 {
    171     BT_HDR  hdr;
    172     BD_ADDR src;
    173     BD_ADDR dst;
    174     UINT16  protocol;
    175     BOOLEAN ext;
    176     BOOLEAN forward;
    177 
    178 } tBTA_PAN_DATA_PARAMS;
    179 
    180 
    181 /*****************************************************************************
    182 **  Global data
    183 *****************************************************************************/
    184 
    185 /* PAN control block */
    186 
    187 #if BTA_DYNAMIC_MEMORY == FALSE
    188 extern tBTA_PAN_CB  bta_pan_cb;
    189 #else
    190 extern tBTA_PAN_CB *bta_pan_cb_ptr;
    191 #define bta_pan_cb (*bta_pan_cb_ptr)
    192 #endif
    193 
    194 /*****************************************************************************
    195 **  Function prototypes
    196 *****************************************************************************/
    197 extern tBTA_PAN_SCB *bta_pan_scb_alloc(void);
    198 extern void bta_pan_scb_dealloc(tBTA_PAN_SCB *p_scb);
    199 extern UINT8 bta_pan_scb_to_idx(tBTA_PAN_SCB *p_scb);
    200 extern tBTA_PAN_SCB *bta_pan_scb_by_handle(UINT16 handle);
    201 extern BOOLEAN bta_pan_hdl_event(BT_HDR *p_msg);
    202 
    203 /* action functions */
    204 extern void bta_pan_enable(tBTA_PAN_DATA *p_data);
    205 extern void bta_pan_disable(void);
    206 extern void bta_pan_set_role(tBTA_PAN_DATA *p_data);
    207 extern void bta_pan_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    208 extern void bta_pan_api_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    209 extern void bta_pan_set_shutdown(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    210 extern void bta_pan_rx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    211 extern void bta_pan_tx_path(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    212 extern void bta_pan_tx_flow(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    213 extern void bta_pan_conn_open(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    214 extern void bta_pan_conn_close(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    215 extern void bta_pan_writebuf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    216 extern void bta_pan_write_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    217 extern void bta_pan_free_buf(tBTA_PAN_SCB *p_scb, tBTA_PAN_DATA *p_data);
    218 
    219 
    220 #endif /* BTA_PAN_INT_H */
    221