1/****************************************************************************** 2 * 3 * Copyright (C) 2003-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/****************************************************************************** 20 * 21 * This file contains compile-time configurable constants for the device 22 * manager. 23 * 24 ******************************************************************************/ 25 26#include <stddef.h> 27#include "bt_target.h" 28#include "bta_sys.h" 29#include "bta_api.h" 30#include "bta_dm_int.h" 31#include "bta_jv_api.h" 32 33#ifndef BTA_DM_LINK_POLICY_SETTINGS 34#define BTA_DM_LINK_POLICY_SETTINGS (HCI_ENABLE_MASTER_SLAVE_SWITCH | HCI_ENABLE_HOLD_MODE | HCI_ENABLE_SNIFF_MODE | HCI_ENABLE_PARK_MODE) 35#endif 36 37/* page timeout in 625uS */ 38#ifndef BTA_DM_PAGE_TIMEOUT 39#define BTA_DM_PAGE_TIMEOUT 8192 40#endif 41 42/* link supervision timeout in 625uS (5 secs) */ 43#ifndef BTA_DM_LINK_TIMEOUT 44#define BTA_DM_LINK_TIMEOUT 8000 45#endif 46 47/* TRUE to avoid scatternet when av is streaming (be the master) */ 48#ifndef BTA_DM_AVOID_SCATTER_A2DP 49#define BTA_DM_AVOID_SCATTER_A2DP TRUE 50#endif 51 52/* For Insight, PM cfg lookup tables are runtime configurable (to allow tweaking of params for power consumption measurements) */ 53#ifndef BTE_SIM_APP 54#define tBTA_DM_PM_TYPE_QUALIFIER const 55#else 56#define tBTA_DM_PM_TYPE_QUALIFIER 57#endif 58 59 60const tBTA_DM_CFG bta_dm_cfg = 61{ 62 /* mobile phone COD */ 63 BTA_DM_COD, 64 /* link policy settings */ 65 BTA_DM_LINK_POLICY_SETTINGS, 66 /* page timeout in 625uS */ 67 BTA_DM_PAGE_TIMEOUT, 68 /* link supervision timeout in 625uS*/ 69 BTA_DM_LINK_TIMEOUT, 70 /* TRUE to avoid scatternet when av is streaming (be the master) */ 71 BTA_DM_AVOID_SCATTER_A2DP 72}; 73 74#ifndef BTA_DM_SCATTERNET 75/* By default, allow partial scatternet */ 76#define BTA_DM_SCATTERNET BTA_DM_PARTIAL_SCATTERNET 77#endif 78 79#ifndef BTA_HH_ROLE 80/* By default, do not specify HH role (backward compatibility) */ 81#define BTA_HH_ROLE BTA_ANY_ROLE 82#endif 83 84#ifndef BTA_AV_ROLE 85/* By default, AV role (backward BTA_MASTER_ROLE_PREF) */ 86#define BTA_AV_ROLE BTA_MASTER_ROLE_PREF 87#endif 88 89#define BTA_DM_NUM_RM_ENTRY 4 90 91/* appids for PAN used by insight sample application 92 these have to be same as defined in btui_int.h */ 93#define BTUI_PAN_ID_PANU 0 94#define BTUI_PAN_ID_NAP 1 95#define BTUI_PAN_ID_GN 2 96 97/* First element is always for SYS: 98 app_id = # of entries table, cfg is 99 device scatternet support */ 100const tBTA_DM_RM bta_dm_rm_cfg[] = 101{ 102 {BTA_ID_SYS, BTA_DM_NUM_RM_ENTRY, BTA_DM_SCATTERNET}, 103 {BTA_ID_PAN, BTUI_PAN_ID_NAP, BTA_MASTER_ROLE_ONLY}, 104 {BTA_ID_PAN, BTUI_PAN_ID_GN, BTA_MASTER_ROLE_ONLY}, 105 {BTA_ID_HH, BTA_ALL_APP_ID, BTA_HH_ROLE}, 106 {BTA_ID_AV, BTA_ALL_APP_ID, BTA_AV_ROLE} 107}; 108 109 110tBTA_DM_CFG *p_bta_dm_cfg = (tBTA_DM_CFG *)&bta_dm_cfg; 111 112tBTA_DM_RM *p_bta_dm_rm_cfg = (tBTA_DM_RM *)&bta_dm_rm_cfg; 113 114#if BLE_INCLUDED == TRUE 115# define BTA_DM_NUM_PM_ENTRY 23 /* number of entries in bta_dm_pm_cfg except the first */ 116# define BTA_DM_NUM_PM_SPEC 15 /* number of entries in bta_dm_pm_spec */ 117#else 118# define BTA_DM_NUM_PM_ENTRY 21 /* number of entries in bta_dm_pm_cfg except the first */ 119# define BTA_DM_NUM_PM_SPEC 13 /* number of entries in bta_dm_pm_spec */ 120#endif 121 122tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_CFG bta_dm_pm_cfg[BTA_DM_NUM_PM_ENTRY + 1] = 123{ 124 {BTA_ID_SYS, BTA_DM_NUM_PM_ENTRY, 0}, /* reserved: specifies length of this table. */ 125 {BTA_ID_AG, BTA_ALL_APP_ID, 0}, /* ag uses first spec table for app id 0 */ 126 {BTA_ID_CT, 1, 1}, /* ct (BTA_ID_CT,APP ID=1) spec table */ 127 {BTA_ID_CG, BTA_ALL_APP_ID, 1}, /* cg resue ct spec table */ 128 {BTA_ID_DG, BTA_ALL_APP_ID, 2}, /* dg spec table */ 129 {BTA_ID_AV, BTA_ALL_APP_ID, 4}, /* av spec table */ 130 {BTA_ID_AVK, BTA_ALL_APP_ID, 12}, /* avk spec table */ 131 {BTA_ID_FTC, BTA_ALL_APP_ID, 6}, /* ftc spec table */ 132 {BTA_ID_FTS, BTA_ALL_APP_ID, 7}, /* fts spec table */ 133 {BTA_ID_HD, BTA_ALL_APP_ID, 3}, /* hd spec table */ 134 {BTA_ID_HH, BTA_ALL_APP_ID, 5}, /* hh spec table */ 135 {BTA_ID_PBC, BTA_ALL_APP_ID, 2}, /* reuse dg spec table */ 136 {BTA_ID_PBS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 137 {BTA_ID_OPC, BTA_ALL_APP_ID, 6}, /* reuse ftc spec table */ 138 {BTA_ID_OPS, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 139 {BTA_ID_MSE, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 140 {BTA_ID_JV, BTA_JV_PM_ID_1, 6}, /* app BTA_JV_PM_ID_1, reuse ftc spec table */ 141 {BTA_ID_JV, BTA_ALL_APP_ID, 7}, /* reuse fts spec table */ 142 {BTA_ID_HL, BTA_ALL_APP_ID, 8}, /* reuse fts spec table */ 143 {BTA_ID_PAN, BTUI_PAN_ID_PANU, 9}, /* PANU spec table */ 144 {BTA_ID_PAN, BTUI_PAN_ID_NAP, 10}, /* NAP spec table */ 145 {BTA_ID_HS, BTA_ALL_APP_ID, 11} /* HS spec table */ 146#if BLE_INCLUDED == TRUE 147 ,{BTA_ID_GATTC, BTA_ALL_APP_ID, 13} /* gattc spec table */ 148 ,{BTA_ID_GATTS, BTA_ALL_APP_ID, 14} /* gatts spec table */ 149#endif 150}; 151 152tBTA_DM_PM_TYPE_QUALIFIER tBTA_DM_PM_SPEC bta_dm_pm_spec[BTA_DM_NUM_PM_SPEC] = 153{ 154 /* AG : 0 */ 155 { 156 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 157#if (BTM_SSR_INCLUDED == TRUE) 158 (BTA_DM_PM_SSR2), /* the SSR entry */ 159#endif 160 { 161 {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 162 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 163 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 164 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 165 {{BTA_DM_PM_SNIFF_SCO_OPEN_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ 166 {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ 167 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 168 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 169 {{BTA_DM_PM_RETRY, 7000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 170 } 171 }, 172 173 /* CT, CG : 1 */ 174 { 175 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 176#if (BTM_SSR_INCLUDED == TRUE) 177 (BTA_DM_PM_SSR2), /* the SSR entry */ 178#endif 179 { 180 {{BTA_DM_PM_PARK, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open park */ 181 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 182 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 183 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 184 {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open sniff */ 185 {{BTA_DM_PM_PARK, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close park */ 186 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 187 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 188 {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 189 } 190 }, 191 192 /* DG, PBC : 2 */ 193 { 194 (BTA_DM_PM_ACTIVE), /* no power saving mode allowed */ 195#if (BTM_SSR_INCLUDED == TRUE) 196 (BTA_DM_PM_SSR2), /* the SSR entry */ 197#endif 198 { 199 {{BTA_DM_PM_SNIFF, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 200 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 201 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 202 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 203 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 204 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 205 {{BTA_DM_PM_SNIFF, 1000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 206 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 207 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 208 } 209 }, 210 211 /* HD : 3 */ 212 { 213 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 214#if (BTM_SSR_INCLUDED == TRUE) 215 (BTA_DM_PM_SSR3), /* the SSR entry */ 216#endif 217 { 218 {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 219 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 220 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 221 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 222 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 223 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 224 {{BTA_DM_PM_SNIFF_HD_IDLE_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 225 {{BTA_DM_PM_SNIFF_HD_ACTIVE_IDX, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 226 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 227 } 228 }, 229 230 /* AV : 4 */ 231 { 232 (BTA_DM_PM_SNIFF), /* allow sniff */ 233#if (BTM_SSR_INCLUDED == TRUE) 234 (BTA_DM_PM_SSR2), /* the SSR entry */ 235#endif 236 { 237 {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 238 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 239 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 240 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 241 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 242 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 243 {{BTA_DM_PM_SNIFF_A2DP_IDX, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 244 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 245 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 246 } 247 }, 248 249 /* HH : 5 */ 250 { 251 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 252#if (BTM_SSR_INCLUDED == TRUE) 253 (BTA_DM_PM_SSR1), /* the SSR entry */ 254#endif 255 { 256 {{BTA_DM_PM_SNIFF_HH_OPEN_IDX, BTA_DM_PM_HH_OPEN_DELAY},{BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 257 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 258 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 259 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 260 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 261 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close, used for HH suspend */ 262 {{BTA_DM_PM_SNIFF_HH_IDLE_IDX, BTA_DM_PM_HH_IDLE_DELAY}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 263 {{BTA_DM_PM_SNIFF_HH_ACTIVE_IDX, BTA_DM_PM_HH_ACTIVE_DELAY}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 264 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 265 } 266 }, 267 268 /* FTC, OPC, JV : 6 */ 269 { 270 (BTA_DM_PM_SNIFF), /* allow sniff */ 271#if (BTM_SSR_INCLUDED == TRUE) 272 (BTA_DM_PM_SSR2), /* the SSR entry */ 273#endif 274 { 275 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 276 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 277 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 278 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 279 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 280 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 281 {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 282 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 283 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 284 } 285 }, 286 287 /* FTS, PBS, OPS, MSE, BTA_JV_PM_ID_1 : 7 */ 288 { 289 (BTA_DM_PM_SNIFF), /* allow sniff */ 290#if (BTM_SSR_INCLUDED == TRUE) 291 (BTA_DM_PM_SSR2), /* the SSR entry */ 292#endif 293 { 294 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 295 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 296 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 297 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 298 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 299 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 300 {{BTA_DM_PM_SNIFF_A2DP_IDX, BTA_FTS_OPS_IDLE_TO_SNIFF_DELAY_MS}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 301 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 302 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 303 } 304 }, 305 306 /* HL : 8 */ 307 { 308 (BTA_DM_PM_SNIFF), /* allow sniff */ 309#if (BTM_SSR_INCLUDED == TRUE) 310 (BTA_DM_PM_SSR2), /* the SSR entry */ 311#endif 312 { 313 {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 314 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 315 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 316 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 317 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ 318 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ 319 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 320 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 321 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 322 } 323 }, 324 325 /* PANU : 9 */ 326 { 327 (BTA_DM_PM_SNIFF), /* allow sniff */ 328#if (BTM_SSR_INCLUDED == TRUE) 329 (BTA_DM_PM_SSR2), /* the SSR entry */ 330#endif 331 { 332 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 333 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 334 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 335 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 336 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 337 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 338 {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 339 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 340 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 341 } 342 }, 343 344 /* NAP : 10 */ 345 { 346 (BTA_DM_PM_SNIFF), /* allow sniff */ 347#if (BTM_SSR_INCLUDED == TRUE) 348 (BTA_DM_PM_SSR2), /* the SSR entry */ 349#endif 350 { 351 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 352 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 353 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 354 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 355 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 356 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 357 {{BTA_DM_PM_SNIFF_A2DP_IDX, 5000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 358 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 359 360 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 361 } 362 }, 363 364 /* HS : 11 */ 365 { 366 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 367#if (BTM_SSR_INCLUDED == TRUE) 368 (BTA_DM_PM_SSR2), /* the SSR entry */ 369#endif 370 { 371 {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 372 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 373 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 374 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 375 {{BTA_DM_PM_SNIFF3, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open, active */ 376 {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close sniff */ 377 {{BTA_DM_PM_SNIFF, 7000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 378 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 379 {{BTA_DM_PM_RETRY, 7000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 380 } 381 }, 382 383 /* AVK : 12 */ 384 { 385 (BTA_DM_PM_SNIFF), /* allow sniff */ 386#if (BTM_SSR_INCLUDED == TRUE) 387 (BTA_DM_PM_SSR2), /* the SSR entry */ 388#endif 389 { 390 {{BTA_DM_PM_SNIFF, 3000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open sniff */ 391 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 392 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 393 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 394 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 395 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 396 {{BTA_DM_PM_SNIFF4, 3000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 397 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 398 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 399 } 400 } 401 402#if BLE_INCLUDED == TRUE 403 /* GATTC : 13 */ 404 ,{ 405 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 406#if (BTM_SSR_INCLUDED == TRUE) 407 (BTA_DM_PM_SSR2), /* the SSR entry */ 408#endif 409 { 410 {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 411 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 412 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 413 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 414 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 415 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 416 {{BTA_DM_PM_SNIFF_A2DP_IDX, 10000}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 417 {{BTA_DM_PM_ACTIVE, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 418#if (AMP_INCLUDED == TRUE) 419 {{BTA_DM_PM_NO_ACTION, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ 420#endif 421 {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 422 } 423 } 424 /* GATTS : 14 */ 425 ,{ 426 (BTA_DM_PM_SNIFF | BTA_DM_PM_PARK), /* allow park & sniff */ 427#if (BTM_SSR_INCLUDED == TRUE) 428 (BTA_DM_PM_SSR2), /* the SSR entry */ 429#endif 430 { 431 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn open active */ 432 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* conn close */ 433 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app open */ 434 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* app close */ 435 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco open */ 436 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* sco close */ 437 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* idle */ 438 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* busy */ 439#if (AMP_INCLUDED == TRUE) 440 {{BTA_DM_PM_NO_PREF, 0}, {BTA_DM_PM_NO_ACTION, 0}}, /* amp */ 441#endif 442 {{BTA_DM_PM_RETRY, 5000}, {BTA_DM_PM_NO_ACTION, 0}} /* mode change retry */ 443 } 444 } 445 446#endif 447 448#ifdef BTE_SIM_APP /* For Insight builds only */ 449 /* Entries at the end of the pm_spec table are user-defined (runtime configurable), 450 for power consumption experiments. 451 Insight finds the first user-defined entry by looking for the first BTA_DM_PM_NO_PREF. 452 The number of user_defined specs is defined by BTA_SWRAP_UD_PM_SPEC_COUNT */ 453 , 454 {BTA_DM_PM_NO_PREF}, /* pm_spec USER_DEFINED_0 */ 455 {BTA_DM_PM_NO_PREF} /* pm_spec USER_DEFINED_1 */ 456#endif /* BTE_SIM_APP */ 457}; 458 459/* Please refer to the SNIFF table definitions in bta_api.h. 460 * 461 * Adding to or Modifying the Table 462 * Additional sniff parameter entries can be added for BTA_DM_PM_SNIFF5 - BTA_DM_PM_SNIFF7. 463 * Overrides of additional table entries can be specified in bdroid_buildcfg.h. If additional 464 * sniff parameter entries are added or an override of an existing entry is specified in 465 * bdroid_buildcfg.h then the BTA_DM_PM_*_IDX defines in bta_api.h will need to be match the new 466 * ordering. 467 * 468 * Table Ordering 469 * Sniff Table entries must be ordered from highest latency (biggest interval) to lowest latency. 470 * If there is a conflict among the connected services the setting with the lowest latency will 471 * be selected. 472 */ 473tBTA_DM_PM_TYPE_QUALIFIER tBTM_PM_PWR_MD bta_dm_pm_md[] = 474{ 475/* 476 * More sniff parameter entries can be added for 477 * BTA_DM_PM_SNIFF3 - BTA_DM_PM_SNIFF7, if needed. When entries are added or 478 * removed, BTA_DM_PM_PARK_IDX needs to be updated to reflect the actual index 479 * BTA_DM_PM_PARK_IDX is defined in bta_api.h and can be override by the 480 * bdroid_buildcfg.h settings. 481 * The SNIFF table entries must be in the order from highest latency (biggest 482 * interval) to lowest latency. If there's a conflict among the connected 483 * services, the setting with lowest latency wins. 484 */ 485/* sniff modes: max interval, min interval, attempt, timeout */ 486 {BTA_DM_PM_SNIFF_MAX, BTA_DM_PM_SNIFF_MIN, BTA_DM_PM_SNIFF_ATTEMPT, BTA_DM_PM_SNIFF_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF - A2DP */ 487 {BTA_DM_PM_SNIFF1_MAX, BTA_DM_PM_SNIFF1_MIN, BTA_DM_PM_SNIFF1_ATTEMPT, BTA_DM_PM_SNIFF1_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF1 */ 488 {BTA_DM_PM_SNIFF2_MAX, BTA_DM_PM_SNIFF2_MIN, BTA_DM_PM_SNIFF2_ATTEMPT, BTA_DM_PM_SNIFF2_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF2- HD idle */ 489 {BTA_DM_PM_SNIFF3_MAX, BTA_DM_PM_SNIFF3_MIN, BTA_DM_PM_SNIFF3_ATTEMPT, BTA_DM_PM_SNIFF3_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF3- SCO open */ 490 {BTA_DM_PM_SNIFF4_MAX, BTA_DM_PM_SNIFF4_MIN, BTA_DM_PM_SNIFF4_ATTEMPT, BTA_DM_PM_SNIFF4_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF4- HD active */ 491 {BTA_DM_PM_SNIFF5_MAX, BTA_DM_PM_SNIFF5_MIN, BTA_DM_PM_SNIFF5_ATTEMPT, BTA_DM_PM_SNIFF5_TIMEOUT, BTM_PM_MD_SNIFF}, /* for BTA_DM_PM_SNIFF5- HD active */ 492 {BTA_DM_PM_PARK_MAX, BTA_DM_PM_PARK_MIN, BTA_DM_PM_PARK_ATTEMPT, BTA_DM_PM_PARK_TIMEOUT, BTM_PM_MD_PARK} 493 494#ifdef BTE_SIM_APP /* For Insight builds only */ 495 /* Entries at the end of the bta_dm_pm_md table are user-defined (runtime configurable), 496 for power consumption experiments. 497 Insight finds the first user-defined entry by looking for the first 'max=0'. 498 The number of user_defined specs is defined by BTA_SWRAP_UD_PM_DM_COUNT */ 499 , 500 {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_0 */ 501 {0}, /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_0 */ 502 503 {0}, /* CONN_OPEN/SCO_CLOSE power mode settings for pm_spec USER_DEFINED_1 */ 504 {0} /* SCO_OPEN power mode settings for pm_spec USER_DEFINED_1 */ 505#endif /* BTE_SIM_APP */ 506}; 507 508/* 0=max_lat -> no SSR */ 509/* the smaller of the SSR max latency wins. 510 * the entries in this table must be from highest latency (biggest interval) to lowest latency */ 511#if (BTM_SSR_INCLUDED == TRUE) 512tBTA_DM_SSR_SPEC bta_dm_ssr_spec[] = 513{ 514 /*max_lat, min_rmt_to, min_loc_to*/ 515 {0, 0, 0}, /* BTA_DM_PM_SSR0 - do not use SSR */ 516 {0, 0, 2}, /* BTA_DM_PM_SSR1 - HH, can NOT share entry with any other profile, 517 seting default max latency and min remote timeout as 0, 518 and always read individual device preference from HH module */ 519 {1200, 2, 2}, /* BTA_DM_PM_SSR2 - others (as long as sniff is allowed)*/ 520 {360, 160, 2} /* BTA_DM_PM_SSR3 - HD */ 521}; 522 523tBTA_DM_SSR_SPEC *p_bta_dm_ssr_spec = (tBTA_DM_SSR_SPEC *)&bta_dm_ssr_spec; 524#endif 525 526tBTA_DM_PM_CFG *p_bta_dm_pm_cfg = (tBTA_DM_PM_CFG *)&bta_dm_pm_cfg; 527tBTA_DM_PM_SPEC *p_bta_dm_pm_spec = (tBTA_DM_PM_SPEC *)&bta_dm_pm_spec; 528tBTM_PM_PWR_MD *p_bta_dm_pm_md = (tBTM_PM_PWR_MD *)&bta_dm_pm_md; 529 530/* The performance impact of EIR packet size 531** 532** When BTM_EIR_DEFAULT_FEC_REQUIRED is TRUE, 533** 1 to 17 bytes, DM1 is used and most robust. 534** 18 to 121 bytes, DM3 is used but impacts inquiry scan time with large number 535** of devices.(almost double with 150 users) 536** 122 to 224 bytes, DM5 is used but cause quite big performance loss even with 537** small number of users. so it is not recommended. 538** 225 to 240 bytes, DH5 is used without FEC but it not recommended. 539** (same reason of DM5) 540** 541** When BTM_EIR_DEFAULT_FEC_REQUIRED is FALSE, 542** 1 to 27 bytes, DH1 is used but only robust at short range. 543** 28 to 183 bytes, DH3 is used but only robust at short range and impacts inquiry 544** scan time with large number of devices. 545** 184 to 240 bytes, DH5 is used but it not recommended. 546*/ 547 548#if (BTA_EIR_CANNED_UUID_LIST == TRUE) 549 /* for example */ 550const UINT8 bta_dm_eir_uuid16_list[] = { 0x08, 0x11, /* Headset */ 551 0x1E, 0x11, /* Handsfree */ 552 0x0E, 0x11, /* AV Remote Control */ 553 0x0B, 0x11, /* Audio Sink */ 554}; 555#endif // BTA_EIR_CANNED_UUID_LIST 556 557/* Extended Inquiry Response */ 558const tBTA_DM_EIR_CONF bta_dm_eir_cfg = 559{ 560 50, /* minimum length of local name when it is shortened */ 561 /* if length of local name is longer than this and EIR has not enough */ 562 /* room for all UUID list then local name is shortened to this length */ 563#if (BTA_EIR_CANNED_UUID_LIST == TRUE) 564 8, 565 (UINT8 *)bta_dm_eir_uuid16_list, 566#else // BTA_EIR_CANNED_UUID_LIST 567 { /* mask of UUID list in EIR */ 568 0xFFFFFFFF, /* LSB is the first UUID of the first 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ 569 0xFFFFFFFF /* LSB is the first UUID of the next 32 UUIDs in BTM_EIR_UUID_LKUP_TBL */ 570 /* BTM_EIR_UUID_LKUP_TBL can be overrided */ 571 }, 572#endif // BTA_EIR_CANNED_UUID_LIST 573 NULL, /* Inquiry TX power */ 574 0, /* length of flags in bytes */ 575 NULL, /* flags for EIR */ 576 0, /* length of manufacturer specific in bytes */ 577 NULL, /* manufacturer specific */ 578 0, /* length of additional data in bytes */ 579 NULL /* additional data */ 580}; 581tBTA_DM_EIR_CONF *p_bta_dm_eir_cfg = (tBTA_DM_EIR_CONF*)&bta_dm_eir_cfg; 582