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