Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2009-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 #ifndef BTIF_HL_H
     20 #define BTIF_HL_H
     21 
     22 /*******************************************************************************
     23 **  Constants & Macros
     24 ********************************************************************************/
     25 
     26 #define BTIF_HL_DATA_TYPE_NONE               0x0000
     27 #define BTIF_HL_DATA_TYPE_PULSE_OXIMETER     0x1004   /* from BT assigned number */
     28 #define BTIF_HL_DATA_TYPE_BLOOD_PRESSURE_MON 0x1007
     29 #define BTIF_HL_DATA_TYPE_BODY_THERMOMETER   0x1008
     30 #define BTIF_HL_DATA_TYPE_BODY_WEIGHT_SCALE  0x100F
     31 #define BTIF_HL_DATA_TYPE_GLUCOSE_METER      0x1011
     32 #define BTIF_HL_DATA_TYPE_STEP_COUNTER       0x1068
     33 
     34 #define BTIF_HL_CCH_NUM_FILTER_ELEMS            3
     35 #define BTIF_HL_APPLICATION_NAME_LEN          512
     36 
     37 
     38 
     39 /*******************************************************************************
     40 **  Type definitions and return values
     41 ********************************************************************************/
     42 
     43 typedef enum
     44 {
     45     BTIF_HL_SOC_STATE_IDLE,
     46     BTIF_HL_SOC_STATE_W4_ADD,
     47     BTIF_HL_SOC_STATE_W4_CONN,
     48     BTIF_HL_SOC_STATE_W4_READ,
     49     BTIF_HL_SOC_STATE_W4_REL
     50 } btif_hl_soc_state_t;
     51 
     52 typedef enum
     53 {
     54     BTIF_HL_STATE_DISABLED,
     55     BTIF_HL_STATE_DISABLING,
     56     BTIF_HL_STATE_ENABLED,
     57     BTIF_HL_STATE_ENABLING,
     58 } btif_hl_state_t;
     59 
     60 typedef enum
     61 {
     62     BTIF_HL_CCH_OP_NONE,
     63     BTIF_HL_CCH_OP_MDEP_FILTERING,
     64     BTIF_HL_CCH_OP_MATCHED_CTRL_PSM,
     65     BTIF_HL_CCH_OP_DCH_OPEN,
     66     BTIF_HL_CCH_OP_DCH_RECONNECT,
     67     BTIF_HL_CCH_OP_DCH_ECHO_TEST
     68 } btif_hl_cch_op_t;
     69 
     70 typedef enum
     71 {
     72     BTIF_HL_PEND_DCH_OP_NONE,
     73     BTIF_HL_PEND_DCH_OP_DELETE_MDL,
     74     BTIF_HL_PEND_DCH_OP_OPEN,
     75     BTIF_HL_PEND_DCH_OP_RECONNECT
     76 } btif_hl_pend_dch_op_t;
     77 
     78 typedef enum
     79 {
     80     BTIF_HL_DCH_OP_NONE,
     81     BTIF_HL_DCH_OP_DISC
     82 } btif_hl_dch_op_t;
     83 
     84 typedef enum
     85 {
     86     BTIF_HL_CHAN_CB_STATE_NONE,
     87     BTIF_HL_CHAN_CB_STATE_CONNECTING_PENDING,
     88     BTIF_HL_CHAN_CB_STATE_CONNECTED_PENDING,
     89 
     90     BTIF_HL_CHAN_CB_STATE_DISCONNECTING_PENDING,
     91     BTIF_HL_CHAN_CB_STATE_DISCONNECTED_PENDING,
     92     BTIF_HL_CHAN_CB_STATE_DESTROYED_PENDING,
     93 } btif_hl_chan_cb_state_t;
     94 
     95 enum
     96 {
     97     BTIF_HL_SEND_CONNECTED_CB,
     98     BTIF_HL_SEND_DISCONNECTED_CB,
     99     BTIF_HL_REG_APP,
    100     BTIF_HL_UNREG_APP,
    101     BTIF_HL_UPDATE_MDL,
    102 };
    103 
    104 typedef struct
    105 {
    106     UINT8 mdep_cfg_idx;
    107     int data_type;
    108     tBTA_HL_MDEP_ID peer_mdep_id;
    109 } btif_hl_extra_mdl_cfg_t;
    110 
    111 typedef struct
    112 {
    113     tBTA_HL_MDL_CFG         base;
    114     btif_hl_extra_mdl_cfg_t extra;
    115 } btif_hl_mdl_cfg_t;
    116 
    117 typedef struct
    118 {
    119     BOOLEAN active;
    120     UINT8 app_idx;
    121 } btif_hl_app_data_t;
    122 
    123 typedef struct
    124 {
    125     int                     channel_id;
    126     BD_ADDR                 bd_addr;
    127     UINT8                   mdep_cfg_idx;
    128     int                     max_s;
    129     int                     socket_id[2];
    130     UINT8                   app_idx;
    131     UINT8                   mcl_idx;
    132     UINT8                   mdl_idx;
    133     btif_hl_soc_state_t     state;
    134 }btif_hl_soc_cb_t;
    135 
    136 typedef struct
    137 {
    138     UINT16                  data_type;
    139     UINT16                  max_tx_apdu_size;
    140     UINT16                  max_rx_apdu_size;
    141 } btif_hl_data_type_cfg_t;
    142 
    143 typedef struct
    144 {
    145     UINT16                  data_type;
    146     tBTA_HL_MDEP_ROLE       peer_mdep_role;
    147 } btif_hl_filter_elem_t;
    148 
    149 typedef struct
    150 {
    151     UINT8                   num_elems;
    152     btif_hl_filter_elem_t   elem[BTIF_HL_CCH_NUM_FILTER_ELEMS];
    153 } btif_hl_cch_filter_t;
    154 
    155 typedef struct
    156 {
    157     BOOLEAN                 in_use;
    158     UINT16                  mdl_id;
    159     tBTA_HL_MDL_HANDLE      mdl_handle;
    160     btif_hl_dch_op_t        dch_oper;
    161     tBTA_HL_MDEP_ID         local_mdep_id;
    162     UINT8                   local_mdep_cfg_idx;
    163     tBTA_HL_DCH_CFG         local_cfg;
    164     tBTA_HL_MDEP_ID         peer_mdep_id;
    165     UINT16                  peer_data_type;
    166     tBTA_HL_MDEP_ROLE       peer_mdep_role;
    167     tBTA_HL_DCH_MODE        dch_mode;
    168     tBTA_SEC                sec_mask;
    169     BOOLEAN                 is_the_first_reliable;
    170     BOOLEAN                 delete_mdl;
    171     UINT16                  mtu;
    172     tMCA_CHNL_CFG           chnl_cfg;
    173     UINT16                  tx_size;
    174     UINT8                   *p_tx_pkt;
    175     UINT8                   *p_rx_pkt;
    176     BOOLEAN                 cong;
    177     btif_hl_soc_cb_t        *p_scb;
    178     int                     channel_id;
    179 } btif_hl_mdl_cb_t;
    180 
    181 typedef struct
    182 {
    183     int                     channel_id;
    184     int                     mdep_cfg_idx;
    185     BOOLEAN                 in_use;
    186     btif_hl_chan_cb_state_t cb_state;
    187     btif_hl_pend_dch_op_t   op;
    188     BD_ADDR                 bd_addr;
    189     BOOLEAN                 abort_pending;
    190 } btif_hl_pending_chan_cb_t;
    191 
    192 typedef struct
    193 {
    194     btif_hl_mdl_cb_t        mdl[BTA_HL_NUM_MDLS_PER_MCL];
    195     BOOLEAN                 in_use;
    196     BOOLEAN                 is_connected;
    197     UINT16                  req_ctrl_psm;
    198     UINT16                  ctrl_psm;
    199     UINT16                  data_psm;
    200     BD_ADDR                 bd_addr;
    201     UINT16                  cch_mtu;
    202     tBTA_SEC                sec_mask;
    203     tBTA_HL_MCL_HANDLE      mcl_handle;
    204     btif_hl_pending_chan_cb_t pcb;
    205     BOOLEAN                 valid_sdp_idx;
    206     UINT8                   sdp_idx;
    207     tBTA_HL_SDP             sdp;
    208     btif_hl_cch_op_t        cch_oper;
    209     BOOLEAN                 cch_timer_active;
    210     TIMER_LIST_ENT          cch_timer;
    211 } btif_hl_mcl_cb_t;
    212 
    213 typedef struct
    214 {
    215     BOOLEAN                 active;
    216     UINT16                  mdl_id;
    217     UINT8                   mdep_cfg_idx;
    218     BD_ADDR                 bd_addr;
    219     int                     channel_id;
    220 } btif_hl_delete_mdl_t;
    221 
    222 typedef struct
    223 {
    224     btif_hl_mcl_cb_t        mcb[BTA_HL_NUM_MCLS]; /* application Control Blocks */
    225     BOOLEAN                 in_use;              /* this CB is in use*/
    226     BOOLEAN                 reg_pending;
    227     UINT8                   app_id;
    228 
    229     tBTA_HL_SUP_FEATURE     sup_feature;
    230     tBTA_HL_DCH_CFG         channel_type[BTA_HL_NUM_MDEPS];
    231     tBTA_HL_SDP_INFO_IND    sdp_info_ind;
    232     btif_hl_cch_filter_t    filter;
    233 
    234     btif_hl_mdl_cfg_t       mdl_cfg[BTA_HL_NUM_MDL_CFGS];
    235     int                     mdl_cfg_channel_id[BTA_HL_NUM_MDL_CFGS];
    236 
    237     btif_hl_delete_mdl_t    delete_mdl;
    238     tBTA_HL_DEVICE_TYPE     dev_type;
    239     tBTA_HL_APP_HANDLE      app_handle;
    240     UINT16                  sec_mask;   /* Security mask for BTM_SetSecurityLevel() */
    241     char                    srv_name[BTA_SERVICE_NAME_LEN +1];        /* service name to be used in the SDP; null terminated*/
    242     char                    srv_desp[BTA_SERVICE_DESP_LEN +1];        /* service description to be used in the SDP; null terminated */
    243     char                    provider_name[BTA_PROVIDER_NAME_LEN +1];   /* provide name to be used in the SDP; null terminated */
    244     char                    application_name[BTIF_HL_APPLICATION_NAME_LEN +1];   /* applicaiton name */
    245 } btif_hl_app_cb_t;
    246 
    247 typedef struct
    248 {
    249     BOOLEAN                 in_use;
    250     UINT8                   app_idx;
    251 } btif_hl_pending_reg_cb_t;
    252 
    253 /* BTIF-HL control block  */
    254 typedef struct
    255 {
    256     btif_hl_app_cb_t        acb[BTA_HL_NUM_APPS];      /* HL Control Blocks */
    257     tBTA_HL_CTRL_CBACK      *p_ctrl_cback;             /* pointer to control callback function */
    258     UINT8                   next_app_id;
    259     UINT16                  next_channel_id;
    260     btif_hl_state_t         state;
    261 } btif_hl_cb_t;
    262 
    263 typedef UINT8 btif_hl_evt_t;
    264 
    265 typedef struct
    266 {
    267     int                     app_id;
    268     BD_ADDR                 bd_addr;
    269     int                     mdep_cfg_index;
    270     int                     channel_id;
    271     btif_hl_chan_cb_state_t cb_state;
    272     int                     fd;
    273 } btif_hl_send_chan_state_cb_t;
    274 
    275 
    276 typedef struct
    277 {
    278     UINT8 app_idx;
    279 } btif_hl_reg_t;
    280 
    281 typedef btif_hl_reg_t btif_hl_unreg_t;
    282 typedef btif_hl_reg_t btif_hl_update_mdl_t;
    283 
    284 typedef union
    285 {
    286     btif_hl_send_chan_state_cb_t    chan_cb;
    287     btif_hl_reg_t           reg;
    288     btif_hl_unreg_t         unreg;
    289     btif_hl_update_mdl_t    update_mdl;
    290 } btif_hl_evt_cb_t;
    291 
    292 
    293 /*******************************************************************************
    294 **  Functions
    295 ********************************************************************************/
    296 
    297 #define BTIF_HL_GET_CB_PTR() &(btif_hl_cb)
    298 #define BTIF_HL_GET_APP_CB_PTR(app_idx) &(btif_hl_cb.acb[(app_idx)])
    299 #define BTIF_HL_GET_MCL_CB_PTR(app_idx, mcl_idx) &(btif_hl_cb.acb[(app_idx)].mcb[(mcl_idx)])
    300 #define BTIF_HL_GET_MDL_CB_PTR(app_idx, mcl_idx, mdl_idx) &(btif_hl_cb.acb[(app_idx)].mcb[(mcl_idx)].mdl[mdl_idx])
    301 #define BTIF_HL_GET_PCB_PTR(app_idx, mcl_idx) &(btif_hl_cb.acb[app_idx].mcb[mcl_idx].pcb)
    302 #define BTIF_HL_GET_MDL_CFG_PTR(app_idx, item_idx) &(btif_hl_cb.acb[(app_idx)].mdl_cfg[(item_idx)])
    303 #define BTIF_HL_GET_MDL_CFG_CHANNEL_ID_PTR(app_idx, item_idx) &(btif_hl_cb.acb[(app_idx)].mdl_cfg_channel_id[(item_idx)])
    304 
    305 extern btif_hl_cb_t  btif_hl_cb;
    306 extern btif_hl_cb_t *p_btif_hl_cb;
    307 
    308 extern BOOLEAN btif_hl_find_mcl_idx(UINT8 app_idx, BD_ADDR p_bd_addr, UINT8 *p_mcl_idx);
    309 extern BOOLEAN btif_hl_find_app_idx(UINT8 app_id, UINT8 *p_app_idx);
    310 extern BOOLEAN btif_hl_find_avail_mcl_idx(UINT8 app_idx, UINT8 *p_mcl_idx);
    311 extern BOOLEAN btif_hl_find_avail_mdl_idx(UINT8 app_idx, UINT8 mcl_idx,
    312                                           UINT8 *p_mdl_idx);
    313 extern BOOLEAN btif_hl_find_mcl_idx_using_handle( tBTA_HL_MCL_HANDLE mcl_handle,
    314                                                   UINT8 *p_app_idx, UINT8 *p_mcl_idx);
    315 extern BOOLEAN  btif_hl_save_mdl_cfg(UINT8 app_id, UINT8 item_idx, tBTA_HL_MDL_CFG *p_mdl_cfg);
    316 extern BOOLEAN  btif_hl_delete_mdl_cfg(UINT8 app_id, UINT8 item_idx);
    317 extern void * btif_hl_get_buf(UINT16 size);
    318 extern void btif_hl_free_buf(void **p);
    319 extern BOOLEAN btif_hl_find_mdl_idx_using_handle(tBTA_HL_MDL_HANDLE mdl_handle,
    320                                                  UINT8 *p_app_idx,UINT8 *p_mcl_idx,
    321                                                  UINT8 *p_mdl_idx);
    322 extern void btif_hl_abort_pending_chan_setup(UINT8 app_idx, UINT8 mcl_idx);
    323 extern BOOLEAN btif_hl_proc_pending_op(UINT8 app_idx, UINT8 mcl_idx);
    324 extern BOOLEAN btif_hl_load_mdl_config (UINT8 app_id, UINT8 buffer_size,
    325                                         tBTA_HL_MDL_CFG *p_mdl_buf );
    326 #endif
    327