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