diff options
Diffstat (limited to 'stack/btm/btm_ble_int.h')
-rw-r--r-- | stack/btm/btm_ble_int.h | 90 |
1 files changed, 79 insertions, 11 deletions
diff --git a/stack/btm/btm_ble_int.h b/stack/btm/btm_ble_int.h index 7a0550767..f3cb77135 100644 --- a/stack/btm/btm_ble_int.h +++ b/stack/btm/btm_ble_int.h @@ -61,9 +61,17 @@ #define BTM_BLE_GAP_DISC_SCAN_INT 18 /* Interval(scan_int) = 11.25 ms= 0x0010 * 0.625 ms */ #define BTM_BLE_GAP_DISC_SCAN_WIN 18 /* scan_window = 11.25 ms= 0x0010 * 0.625 ms */ #define BTM_BLE_GAP_ADV_INT 512 /* Tgap(gen_disc) = 1.28 s= 512 * 0.625 ms */ -#define BTM_BLE_GAP_LIM_TOUT 30 /* Tgap(lim_timeout) = 30.72 s max, round down to 30 */ +#define BTM_BLE_GAP_LIM_TOUT 180 /* Tgap(lim_timeout) = 180s max */ +#define BTM_BLE_GAP_ADV_FAST_INT_1 48 /* TGAP(adv_fast_interval1) = 30(used) ~ 60 ms = 48 *0.625 */ +#define BTM_BLE_GAP_ADV_FAST_INT_2 160 /* TGAP(adv_fast_interval2) = 100(used) ~ 150 ms = 160 * 0.625 ms */ +#define BTM_BLE_GAP_ADV_SLOW_INT 2048 /* Tgap(adv_slow_interval) = 1.28 s= 512 * 0.625 ms */ +#define BTM_BLE_GAP_ADV_DIR_MAX_INT 800 /* Tgap(dir_conn_adv_int_max) = 500 ms = 800 * 0.625 ms */ +#define BTM_BLE_GAP_ADV_DIR_MIN_INT 400 /* Tgap(dir_conn_adv_int_min) = 250 ms = 400 * 0.625 ms */ + +#define BTM_BLE_GAP_FAST_ADV_TOUT 30 + #define BTM_BLE_SEC_REQ_ACT_NONE 0 #define BTM_BLE_SEC_REQ_ACT_ENCRYPT 1 /* encrypt the link using current key or key refresh */ #define BTM_BLE_SEC_REQ_ACT_PAIR 2 @@ -75,6 +83,16 @@ typedef UINT8 tBTM_BLE_SEC_REQ_ACT; #define BLE_RESOLVE_ADDR_MASK 0xc0 /* bit 6, and bit7 */ #define BTM_BLE_IS_RESOLVE_BDA(x) ((x[0] & BLE_RESOLVE_ADDR_MASK) == BLE_RESOLVE_ADDR_MSB) +/* LE scan activity bit mask, continue with LE inquiry bits */ +#define BTM_LE_SELECT_CONN_ACTIVE 0x40 /* selection connection is in progress */ +#define BTM_LE_OBSERVE_ACTIVE 0x80 /* observe is in progress */ + +/* BLE scan activity mask checking */ +#define BTM_BLE_IS_SCAN_ACTIVE(x) ((x) & BTM_BLE_SCAN_ACTIVE_MASK) +#define BTM_BLE_IS_INQ_ACTIVE(x) ((x) & BTM_BLE_INQUIRY_MASK) +#define BTM_BLE_IS_OBS_ACTIVE(x) ((x) & BTM_LE_OBSERVE_ACTIVE) +#define BTM_BLE_IS_SEL_CONN_ACTIVE(x) ((x) & BTM_LE_SELECT_CONN_ACTIVE) + typedef struct { UINT16 data_mask; @@ -103,11 +121,6 @@ typedef struct UINT16 discoverable_mode; UINT16 connectable_mode; - UINT16 br_edr_supported_flag; /* combined BR EDR discoverable and connectable mode */ - /* only meaningful when it is zero. This means - BR EDR is not supported*/ - UINT8 proc_mode; /* current procedure mode : inquiry or discovery */ - UINT16 scan_window; UINT16 scan_interval; UINT8 scan_type; /* current scan type: active or passive */ @@ -121,6 +134,8 @@ typedef struct UINT8 adv_mode; tBLE_BD_ADDR direct_bda; BOOLEAN directed_conn; + BOOLEAN fast_adv_on; + TIMER_LIST_ENT fast_adv_timer; UINT8 adv_len; UINT8 adv_data_cache[BTM_BLE_CACHE_ADV_DATA_MAX]; @@ -148,8 +163,8 @@ typedef void (tBTM_BLE_ADDR_CBACK) (BD_ADDR_PTR static_random, void *p); /* random address management control block */ typedef struct { - tBLE_ADDR_TYPE own_addr_type; /* local device LE address type */ - BD_ADDR private_addr; + tBLE_ADDR_TYPE own_addr_type; /* local device LE address type */ + BD_ADDR private_addr; BD_ADDR random_bda; BOOLEAN busy; UINT16 index; @@ -198,6 +213,37 @@ typedef struct void *p_param; }tBTM_BLE_CONN_REQ; +/* LE state request */ +#define BTM_BLE_STATE_INVALID 0 +#define BTM_BLE_STATE_CONN_ADV 1 +#define BTM_BLE_STATE_INIT 2 +#define BTM_BLE_STATE_MASTER 3 +#define BTM_BLE_STATE_SLAVE 4 +#define BTM_BLE_STATE_LO_DUTY_DIR_ADV 5 +#define BTM_BLE_STATE_HI_DUTY_DIR_ADV 6 +#define BTM_BLE_STATE_NON_CONN_ADV 7 +#define BTM_BLE_STATE_PASSIVE_SCAN 8 +#define BTM_BLE_STATE_ACTIVE_SCAN 9 +#define BTM_BLE_STATE_SCAN_ADV 10 +#define BTM_BLE_STATE_MAX 11 +typedef UINT8 tBTM_BLE_STATE; + +#define BTM_BLE_STATE_CONN_ADV_BIT 0x0001 +#define BTM_BLE_STATE_INIT_BIT 0x0002 +#define BTM_BLE_STATE_MASTER_BIT 0x0004 +#define BTM_BLE_STATE_SLAVE_BIT 0x0008 +#define BTM_BLE_STATE_LO_DUTY_DIR_ADV_BIT 0x0010 +#define BTM_BLE_STATE_HI_DUTY_DIR_ADV_BIT 0x0020 +#define BTM_BLE_STATE_NON_CONN_ADV_BIT 0x0040 +#define BTM_BLE_STATE_PASSIVE_SCAN_BIT 0x0080 +#define BTM_BLE_STATE_ACTIVE_SCAN_BIT 0x0100 +#define BTM_BLE_STATE_SCAN_ADV_BIT 0x0200 +typedef UINT16 tBTM_BLE_STATE_MASK; + +#define BTM_BLE_STATE_ALL_MASK 0x03ff +#define BTM_BLE_STATE_ALL_ADV_MASK (BTM_BLE_STATE_CONN_ADV_BIT|BTM_BLE_STATE_LO_DUTY_DIR_ADV_BIT|BTM_BLE_STATE_HI_DUTY_DIR_ADV_BIT|BTM_BLE_STATE_SCAN_ADV_BIT) +#define BTM_BLE_STATE_ALL_SCAN_MASK (BTM_BLE_STATE_PASSIVE_SCAN_BIT|BTM_BLE_STATE_ACTIVE_SCAN_BIT) +#define BTM_BLE_STATE_ALL_CONN_MASK (BTM_BLE_STATE_MASTER_BIT|BTM_BLE_STATE_SLAVE_BIT) typedef struct { @@ -210,11 +256,18 @@ typedef struct */ typedef struct { + UINT8 scan_activity; /* LE scan activity mask */ + /***************************************************** ** BLE Inquiry *****************************************************/ tBTM_BLE_INQ_CB inq_var; + /* observer callback and timer */ + tBTM_INQ_RESULTS_CB *p_obs_results_cb; + tBTM_CMPL_CB *p_obs_cmpl_cb; + TIMER_LIST_ENT obs_timer_ent; + /* background connection procedure cb value */ tBTM_BLE_CONN_TYPE bg_conn_type; UINT16 scan_int; @@ -236,12 +289,18 @@ typedef struct tBTM_LE_RANDOM_CB addr_mgnt_cb; BOOLEAN enabled; +#if BLE_PRIVACY_SPT == TRUE + BOOLEAN privacy; /* privacy enabled or disabled */ +#endif tBTM_BLE_WL_OP wl_op_q[BTM_BLE_MAX_BG_CONN_DEV_NUM]; #ifdef BTM_BLE_PC_ADV_TEST_MODE tBTM_BLE_SCAN_REQ_CBACK *p_scan_req_cback; #endif + /* current BLE link state */ + tBTM_BLE_STATE_MASK cur_states; /* bit mask of tBTM_BLE_STATE */ + } tBTM_BLE_CB; #ifdef __cplusplus @@ -259,15 +318,20 @@ extern tBTM_STATUS btm_ble_set_connectability(UINT16 combined_mode); extern tBTM_STATUS btm_ble_start_inquiry (UINT8 mode, UINT8 duration); extern void btm_ble_dir_adv_tout(void); -extern void btm_ble_stop_scan(void); -extern void btm_ble_att_db_init(void); +extern void btm_ble_stop_scan(); +extern void btm_ble_stop_inquiry(void); extern void btm_ble_init (void); extern void btm_ble_connected (UINT8 *bda, UINT16 handle, UINT8 enc_mode, UINT8 role, tBLE_ADDR_TYPE addr_type, BOOLEAN addr_matched); extern void btm_ble_read_remote_features_complete(UINT8 *p); extern void btm_ble_write_adv_enable_complete(UINT8 * p); extern void btm_ble_conn_complete(UINT8 *p, UINT16 evt_len); +extern void btm_read_ble_local_supported_states_complete(UINT8 *p, UINT16 evt_len); extern tBTM_BLE_CONN_ST btm_ble_get_conn_st(void); extern void btm_ble_set_conn_st(tBTM_BLE_CONN_ST new_st); +extern tBTM_STATUS btm_ble_start_adv(void); +extern tBTM_STATUS btm_ble_stop_adv(void); +extern tBTM_STATUS btm_ble_start_scan (UINT8 filter_enb); + /* LE security function from btm_sec.c */ @@ -277,7 +341,7 @@ extern void btm_ble_ltk_request_reply(BD_ADDR bda, BOOLEAN use_stk, BT_OCTET16 extern UINT8 btm_proc_smp_cback(tSMP_EVT event, BD_ADDR bd_addr, tSMP_EVT_DATA *p_data); extern tBTM_STATUS btm_ble_set_encryption (BD_ADDR bd_addr, void *p_ref_data, UINT8 link_role); extern void btm_ble_ltk_request(UINT16 handle, UINT8 rand[8], UINT16 ediv); -extern BOOLEAN btm_ble_start_encrypt(BD_ADDR bda, BOOLEAN use_stk, BT_OCTET16 stk); +extern tBTM_STATUS btm_ble_start_encrypt(BD_ADDR bda, BOOLEAN use_stk, BT_OCTET16 stk); extern void btm_ble_link_encrypted(BD_ADDR bd_addr, UINT8 encr_enable); #endif @@ -312,6 +376,7 @@ extern BOOLEAN btm_ble_renew_bg_conn_params(BOOLEAN add, BD_ADDR bd_addr); extern UINT8 btm_ble_count_unconn_dev_in_whitelist(void); extern void btm_write_dir_conn_wl(BD_ADDR target_addr); extern void btm_ble_update_mode_operation(UINT8 link_role, BD_ADDR bda, BOOLEAN conn_ccancel); +extern BOOLEAN btm_execute_wl_dev_operation(void); /* direct connection utility */ extern BOOLEAN btm_send_pending_direct_conn(void); @@ -322,6 +387,9 @@ extern void btm_gen_resolvable_private_addr (void); extern void btm_gen_non_resolvable_private_addr (tBTM_BLE_ADDR_CBACK *p_cback, void *p); extern void btm_ble_resolve_random_addr(BD_ADDR random_bda, tBTM_BLE_RESOLVE_CBACK * p_cback, void *p); extern void btm_ble_update_reconnect_address(BD_ADDR bd_addr); +extern BOOLEAN btm_ble_topology_check(tBTM_BLE_STATE_MASK request); +extern BOOLEAN btm_ble_clear_topology_mask(tBTM_BLE_STATE_MASK request_state); +extern BOOLEAN btm_ble_set_topology_mask(tBTM_BLE_STATE_MASK request_state); #if BTM_BLE_CONFORMANCE_TESTING == TRUE BT_API extern void btm_ble_set_no_disc_if_pair_fail (BOOLEAN disble_disc); |