Bluedroid use a set of timer function pairs such as btu_start_timer/btu_stop_timer, btu_sys_start_timer/btu_sys_stop_timer for use, in a lack of timer release functions. Thus the timers may be exhausted after some event sequence such as repetition of connection/reconnection with different devices. The maximum timer number used in bluedroid is given by ALARM_CBS_NUM which is 30 for now. This bugfix borrowed some update from bluedroid in Andoroid 7.0, which add timer release functions which promote the recycle of timer resources.
285 lines
8.3 KiB
C
285 lines
8.3 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (C) 1999-2012 Broadcom Corporation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
******************************************************************************/
|
|
|
|
/******************************************************************************
|
|
*
|
|
* this file contains the main Bluetooth Upper Layer definitions. The Broadcom
|
|
* implementations of L2CAP RFCOMM, SDP and the BTIf run as one GKI task. The
|
|
* btu_task switches between them.
|
|
*
|
|
******************************************************************************/
|
|
|
|
#ifndef BTU_H
|
|
#define BTU_H
|
|
|
|
#include "bt_target.h"
|
|
#include "bt_defs.h"
|
|
|
|
// HACK(zachoverflow): temporary dark magic
|
|
#define BTU_POST_TO_TASK_NO_GOOD_HORRIBLE_HACK 0x1700 // didn't look used in bt_types...here goes nothing
|
|
typedef struct {
|
|
void (*callback)(BT_HDR *);
|
|
} post_to_task_hack_t;
|
|
|
|
typedef struct {
|
|
void (*callback)(BT_HDR *);
|
|
BT_HDR *response;
|
|
void *context;
|
|
} command_complete_hack_t;
|
|
|
|
typedef struct {
|
|
void (*callback)(BT_HDR *);
|
|
uint8_t status;
|
|
BT_HDR *command;
|
|
void *context;
|
|
} command_status_hack_t;
|
|
|
|
/* callbacks
|
|
*/
|
|
typedef void (*tBTU_TIMER_CALLBACK)(TIMER_LIST_ENT *p_tle);
|
|
typedef void (*tBTU_EVENT_CALLBACK)(BT_HDR *p_hdr);
|
|
|
|
|
|
/* Define the timer types maintained by BTU
|
|
*/
|
|
#define BTU_TTYPE_BTM_DEV_CTL 1
|
|
#define BTU_TTYPE_L2CAP_LINK 2
|
|
#define BTU_TTYPE_L2CAP_CHNL 3
|
|
#define BTU_TTYPE_L2CAP_HOLD 4
|
|
#define BTU_TTYPE_SDP 5
|
|
#define BTU_TTYPE_BTM_SCO 6
|
|
#define BTU_TTYPE_BTM_ACL 9
|
|
#define BTU_TTYPE_BTM_RMT_NAME 10
|
|
#define BTU_TTYPE_RFCOMM_MFC 11
|
|
#define BTU_TTYPE_RFCOMM_PORT 12
|
|
#define BTU_TTYPE_TCS_L2CAP 13
|
|
#define BTU_TTYPE_TCS_CALL 14
|
|
#define BTU_TTYPE_TCS_WUG 15
|
|
#define BTU_TTYPE_AUTO_SYNC 16
|
|
#define BTU_TTYPE_CTP_RECON 17
|
|
#define BTU_TTYPE_CTP_T100 18
|
|
#define BTU_TTYPE_CTP_GUARD 19
|
|
#define BTU_TTYPE_CTP_DETACH 20
|
|
|
|
#define BTU_TTYPE_SPP_CONN_RETRY 21
|
|
#define BTU_TTYPE_USER_FUNC 22
|
|
|
|
#define BTU_TTYPE_FTP_DISC 25
|
|
#define BTU_TTYPE_OPP_DISC 26
|
|
|
|
#define BTU_TTYPE_CTP_TL_DISCVY 28
|
|
#define BTU_TTYPE_IPFRAG_TIMER 29
|
|
#define BTU_TTYPE_HSP2_AT_CMD_TO 30
|
|
#define BTU_TTYPE_HSP2_REPEAT_RING 31
|
|
|
|
#define BTU_TTYPE_CTP_GW_INIT 32
|
|
#define BTU_TTYPE_CTP_GW_CONN 33
|
|
#define BTU_TTYPE_CTP_GW_IDLE 35
|
|
|
|
#define BTU_TTYPE_ICP_L2CAP 36
|
|
#define BTU_TTYPE_ICP_T100 37
|
|
|
|
#define BTU_TTYPE_HSP2_WAIT_OK 38
|
|
|
|
/* HCRP Timers */
|
|
#define BTU_TTYPE_HCRP_NOTIF_REG 39
|
|
#define BTU_TTYPE_HCRP_PROTO_RSP 40
|
|
#define BTU_TTYPE_HCRP_CR_GRANT 41
|
|
#define BTU_TTYPE_HCRP_CR_CHECK 42
|
|
#define BTU_TTYPE_HCRP_W4_CLOSE 43
|
|
|
|
/* HCRPM Timers */
|
|
#define BTU_TTYPE_HCRPM_NOTIF_REG 44
|
|
#define BTU_TTYPE_HCRPM_NOTIF_KEEP 45
|
|
#define BTU_TTYPE_HCRPM_API_RSP 46
|
|
#define BTU_TTYPE_HCRPM_W4_OPEN 47
|
|
#define BTU_TTYPE_HCRPM_W4_CLOSE 48
|
|
|
|
/* BNEP Timers */
|
|
#define BTU_TTYPE_BNEP 50
|
|
|
|
#define BTU_TTYPE_HSP2_SDP_FAIL_TO 55
|
|
#define BTU_TTYPE_HSP2_SDP_RTRY_TO 56
|
|
|
|
/* BTU internal */
|
|
/* unused 60 */
|
|
|
|
#define BTU_TTYPE_AVDT_CCB_RET 61
|
|
#define BTU_TTYPE_AVDT_CCB_RSP 62
|
|
#define BTU_TTYPE_AVDT_CCB_IDLE 63
|
|
#define BTU_TTYPE_AVDT_SCB_TC 64
|
|
|
|
#define BTU_TTYPE_HID_DEV_REPAGE_TO 65
|
|
#define BTU_TTYPE_HID_HOST_REPAGE_TO 66
|
|
|
|
#define BTU_TTYPE_HSP2_DELAY_CKPD_RCV 67
|
|
|
|
#define BTU_TTYPE_SAP_TO 68
|
|
|
|
/* BPP Timer */
|
|
#define BTU_TTYPE_BPP_REF_CHNL 72
|
|
|
|
/* LP HC idle Timer */
|
|
#define BTU_TTYPE_LP_HC_IDLE_TO 74
|
|
|
|
/* Patch RAM Timer */
|
|
#define BTU_TTYPE_PATCHRAM_TO 75
|
|
|
|
/* eL2CAP Info Request and other proto cmds timer */
|
|
#define BTU_TTYPE_L2CAP_FCR_ACK 78
|
|
#define BTU_TTYPE_L2CAP_INFO 79
|
|
/* L2CAP update connection parameters timer */
|
|
#define BTU_TTYPE_L2CAP_UPDA_CONN_PARAMS 80
|
|
|
|
#define BTU_TTYPE_MCA_CCB_RSP 98
|
|
|
|
/* BTU internal timer for BLE activity */
|
|
#define BTU_TTYPE_BLE_INQUIRY 99
|
|
#define BTU_TTYPE_BLE_GAP_LIM_DISC 100
|
|
#define BTU_TTYPE_ATT_WAIT_FOR_RSP 101
|
|
#define BTU_TTYPE_SMP_PAIRING_CMD 102
|
|
#define BTU_TTYPE_BLE_RANDOM_ADDR 103
|
|
#define BTU_TTYPE_ATT_WAIT_FOR_APP_RSP 104
|
|
#define BTU_TTYPE_ATT_WAIT_FOR_IND_ACK 105
|
|
|
|
#define BTU_TTYPE_BLE_GAP_FAST_ADV 106
|
|
#define BTU_TTYPE_BLE_OBSERVE 107
|
|
|
|
#define BTU_TTYPE_UCD_TO 108
|
|
#define BTU_TTYPE_BLE_SCAN 109
|
|
|
|
|
|
/* This is the inquiry response information held by BTU, and available
|
|
** to applications.
|
|
*/
|
|
typedef struct {
|
|
BD_ADDR remote_bd_addr;
|
|
UINT8 page_scan_rep_mode;
|
|
UINT8 page_scan_per_mode;
|
|
UINT8 page_scan_mode;
|
|
DEV_CLASS dev_class;
|
|
UINT16 clock_offset;
|
|
} tBTU_INQ_INFO;
|
|
|
|
|
|
|
|
#define BTU_MAX_REG_TIMER (2) /* max # timer callbacks which may register */
|
|
#define BTU_MAX_REG_EVENT (6) /* max # event callbacks which may register */
|
|
#define BTU_DEFAULT_DATA_SIZE (0x2a0)
|
|
|
|
#if (BLE_INCLUDED == TRUE)
|
|
#define BTU_DEFAULT_BLE_DATA_SIZE (27)
|
|
#endif
|
|
|
|
/* structure to hold registered timers */
|
|
typedef struct {
|
|
TIMER_LIST_ENT *p_tle; /* timer entry */
|
|
tBTU_TIMER_CALLBACK timer_cb; /* callback triggered when timer expires */
|
|
} tBTU_TIMER_REG;
|
|
|
|
/* structure to hold registered event callbacks */
|
|
typedef struct {
|
|
UINT16 event_range; /* start of event range */
|
|
tBTU_EVENT_CALLBACK event_cb; /* callback triggered when event is in range */
|
|
} tBTU_EVENT_REG;
|
|
|
|
#define NFC_MAX_LOCAL_CTRLS 0
|
|
|
|
/* the index to BTU command queue array */
|
|
#define NFC_CONTROLLER_ID (1)
|
|
#define BTU_MAX_LOCAL_CTRLS (1 + NFC_MAX_LOCAL_CTRLS) /* only BR/EDR */
|
|
|
|
/* Define structure holding BTU variables
|
|
*/
|
|
typedef struct {
|
|
tBTU_TIMER_REG timer_reg[BTU_MAX_REG_TIMER];
|
|
tBTU_EVENT_REG event_reg[BTU_MAX_REG_EVENT];
|
|
|
|
BOOLEAN reset_complete; /* TRUE after first ack from device received */
|
|
UINT8 trace_level; /* Trace level for HCI layer */
|
|
} tBTU_CB;
|
|
|
|
/*
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
*/
|
|
/* Global BTU data */
|
|
#if BTU_DYNAMIC_MEMORY == FALSE
|
|
extern tBTU_CB btu_cb;
|
|
#else
|
|
extern tBTU_CB *btu_cb_ptr;
|
|
#define btu_cb (*btu_cb_ptr)
|
|
#endif
|
|
|
|
extern const BD_ADDR BT_BD_ANY;
|
|
|
|
/* Functions provided by btu_task.c
|
|
************************************
|
|
*/
|
|
void btu_start_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
|
|
void btu_stop_timer (TIMER_LIST_ENT *p_tle);
|
|
void btu_free_timer (TIMER_LIST_ENT *p_tle);
|
|
void btu_start_timer_oneshot(TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
|
|
void btu_stop_timer_oneshot(TIMER_LIST_ENT *p_tle);
|
|
|
|
void btu_uipc_rx_cback(BT_HDR *p_msg);
|
|
|
|
/*
|
|
** Quick Timer
|
|
*/
|
|
#if defined(QUICK_TIMER_TICKS_PER_SEC) && (QUICK_TIMER_TICKS_PER_SEC > 0)
|
|
void btu_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
|
|
void btu_stop_quick_timer (TIMER_LIST_ENT *p_tle);
|
|
void btu_free_quick_timer (TIMER_LIST_ENT *p_tle);
|
|
void btu_process_quick_timer_evt (void);
|
|
#endif
|
|
|
|
#if (defined(HCILP_INCLUDED) && HCILP_INCLUDED == TRUE)
|
|
void btu_check_bt_sleep (void);
|
|
#endif
|
|
|
|
/* Functions provided by btu_hcif.c
|
|
************************************
|
|
*/
|
|
void btu_hcif_process_event (UINT8 controller_id, BT_HDR *p_buf);
|
|
void btu_hcif_send_cmd (UINT8 controller_id, BT_HDR *p_msg);
|
|
void btu_hcif_send_host_rdy_for_data(void);
|
|
void btu_hcif_cmd_timeout (UINT8 controller_id);
|
|
|
|
/* Functions provided by btu_core.c
|
|
************************************
|
|
*/
|
|
void btu_init_core(void);
|
|
void btu_free_core(void);
|
|
|
|
void BTU_StartUp(void);
|
|
void BTU_ShutDown(void);
|
|
|
|
void btu_task_start_up(void);
|
|
void btu_task_shut_down(void);
|
|
|
|
UINT16 BTU_BleAclPktSize(void);
|
|
|
|
/*
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
*/
|
|
|
|
#endif
|