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