Home | History | Annotate | Download | only in gap
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2009-2013 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 #ifndef GAP_INT_H
     21 #define GAP_INT_H
     22 
     23 #include "bt_target.h"
     24 #include "gap_api.h"
     25 #include "gki.h"
     26 #include "gatt_api.h"
     27 #define GAP_MAX_BLOCKS 2        /* Concurrent GAP commands pending at a time*/
     28 /* Define the Generic Access Profile control structure */
     29 typedef struct
     30 {
     31     void          *p_data;      /* Pointer to any data returned in callback */
     32     tGAP_CALLBACK *gap_cback;   /* Pointer to users callback function */
     33     tGAP_CALLBACK *gap_inq_rslt_cback; /* Used for inquiry results */
     34     UINT16         event;       /* Passed back in the callback */
     35     UINT8          index;       /* Index of this control block and callback */
     36     BOOLEAN        in_use;      /* True when structure is allocated */
     37 } tGAP_INFO;
     38 
     39 /* Define the control block for the FindAddrByName operation (Only 1 active at a time) */
     40 typedef struct
     41 {
     42     tGAP_CALLBACK           *p_cback;
     43     tBTM_INQ_INFO           *p_cur_inq; /* Pointer to the current inquiry database entry */
     44     tGAP_FINDADDR_RESULTS    results;
     45     BOOLEAN                  in_use;
     46 } tGAP_FINDADDR_CB;
     47 
     48 /* Define the GAP Connection Control Block.
     49 */
     50 typedef struct
     51 {
     52 #define GAP_CCB_STATE_IDLE              0
     53 #define GAP_CCB_STATE_LISTENING         1
     54 #define GAP_CCB_STATE_CONN_SETUP        2
     55 #define GAP_CCB_STATE_CFG_SETUP         3
     56 #define GAP_CCB_STATE_WAIT_SEC          4
     57 #define GAP_CCB_STATE_CONNECTED         5
     58     UINT8             con_state;
     59 
     60 #define GAP_CCB_FLAGS_IS_ORIG           0x01
     61 #define GAP_CCB_FLAGS_HIS_CFG_DONE      0x02
     62 #define GAP_CCB_FLAGS_MY_CFG_DONE       0x04
     63 #define GAP_CCB_FLAGS_SEC_DONE          0x08
     64 #define GAP_CCB_FLAGS_CONN_DONE         0x0E
     65     UINT8             con_flags;
     66 
     67     UINT8             service_id;           /* Used by BTM                          */
     68     UINT16            gap_handle;           /* GAP handle                           */
     69     UINT16            connection_id;        /* L2CAP CID                            */
     70     BOOLEAN           rem_addr_specified;
     71     UINT8             chan_mode_mask;       /* Supported channel modes (FCR)        */
     72     BD_ADDR           rem_dev_address;
     73     UINT16            psm;
     74     UINT16            rem_mtu_size;
     75 
     76     BOOLEAN           is_congested;
     77     BUFFER_Q          tx_queue;             /* Queue of buffers waiting to be sent  */
     78     BUFFER_Q          rx_queue;             /* Queue of buffers waiting to be read  */
     79 
     80     UINT32            rx_queue_size;        /* Total data count in rx_queue         */
     81 
     82     tGAP_CONN_CALLBACK *p_callback;         /* Users callback function              */
     83 
     84     tL2CAP_CFG_INFO   cfg;                  /* Configuration                        */
     85     tL2CAP_ERTM_INFO  ertm_info;            /* Pools and modes for ertm */
     86 } tGAP_CCB;
     87 
     88 typedef struct
     89 {
     90 #if AMP_INCLUDED == TRUE
     91     tAMP_APPL_INFO    reg_info;
     92 #else
     93     tL2CAP_APPL_INFO  reg_info;                     /* L2CAP Registration info */
     94 #endif
     95     tGAP_CCB    ccb_pool[GAP_MAX_CONNECTIONS];
     96 } tGAP_CONN;
     97 
     98 
     99 #if BLE_INCLUDED == TRUE
    100 #define GAP_MAX_CHAR_NUM          4
    101 
    102 typedef struct
    103 {
    104     UINT16                  handle;
    105     UINT16                  uuid;
    106     tGAP_BLE_ATTR_VALUE     attr_value;
    107 }tGAP_ATTR;
    108 #endif
    109 /**********************************************************************
    110 ** M A I N   C O N T R O L   B L O C K
    111 ***********************************************************************/
    112 
    113 #define GAP_MAX_CL GATT_CL_MAX_LCB
    114 
    115 typedef struct
    116 {
    117     UINT16 uuid;
    118     tGAP_BLE_CMPL_CBACK *p_cback;
    119 } tGAP_BLE_REQ;
    120 
    121 typedef struct
    122 {
    123     BD_ADDR                 bda;
    124     tGAP_BLE_CMPL_CBACK     *p_cback;
    125     UINT16                  conn_id;
    126     UINT16                  cl_op_uuid;
    127     BOOLEAN                 in_use;
    128     BOOLEAN                 connected;
    129     BUFFER_Q                pending_req_q;
    130 
    131 }tGAP_CLCB;
    132 
    133 typedef struct
    134 {
    135     tGAP_INFO        blk[GAP_MAX_BLOCKS];
    136     tBTM_CMPL_CB    *btm_cback[GAP_MAX_BLOCKS];
    137     UINT8            trace_level;
    138     tGAP_FINDADDR_CB findaddr_cb;   /* Contains the control block for finding a device addr */
    139     tBTM_INQ_INFO   *cur_inqptr;
    140 
    141 #if GAP_CONN_INCLUDED == TRUE
    142     tGAP_CONN        conn;
    143 #endif
    144 
    145     /* LE GAP attribute database */
    146 #if BLE_INCLUDED == TRUE
    147     tGAP_ATTR               gatt_attr[GAP_MAX_CHAR_NUM];
    148     tGAP_CLCB               clcb[GAP_MAX_CL]; /* connection link*/
    149     tGATT_IF                gatt_if;
    150 #endif
    151 } tGAP_CB;
    152 
    153 
    154 extern tGAP_CB  gap_cb;
    155 #if (GAP_CONN_INCLUDED == TRUE)
    156     extern void gap_conn_init(void);
    157 #endif
    158 #if (BLE_INCLUDED == TRUE)
    159     extern void gap_attr_db_init(void);
    160 #endif
    161 
    162 #endif
    163