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