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