L2CAP: Remove UCD related flags
* L2CAP UCD (Unicast Connectionless Data) is no longer enabled on the
stack
* L2CAP_UCD_INCLUDED is always FALSE, the TRUE case should be removed
* As result, L2CAP_UCD_MTU, L2CAP_UCD_IDLE_TIMEOUT, and
L2CAP_UCD_CH_PRIORITY need to be removed as well
Bug: 66244184
Test: build
Change-Id: Ieee8b3a547653efa3a34a0810c415ba4c32f1be7
diff --git a/system/include/bt_target.h b/system/include/bt_target.h
index eadfc92..8f502f6 100644
--- a/system/include/bt_target.h
+++ b/system/include/bt_target.h
@@ -585,26 +585,6 @@
#define L2CAP_HCI_FLOW_CONTROL_DEBUG TRUE
#endif
-/* Unicast Connectionless Data */
-#ifndef L2CAP_UCD_INCLUDED
-#define L2CAP_UCD_INCLUDED FALSE
-#endif
-
-/* Unicast Connectionless Data MTU */
-#ifndef L2CAP_UCD_MTU
-#define L2CAP_UCD_MTU L2CAP_MTU_SIZE
-#endif
-
-/* Unicast Connectionless Data Idle Timeout */
-#ifndef L2CAP_UCD_IDLE_TIMEOUT
-#define L2CAP_UCD_IDLE_TIMEOUT 2
-#endif
-
-/* Unicast Connectionless Data Idle Timeout */
-#ifndef L2CAP_UCD_CH_PRIORITY
-#define L2CAP_UCD_CH_PRIORITY L2CAP_CHNL_PRIORITY_MEDIUM
-#endif
-
/* Used for features using fixed channels; set to zero if no fixed channels
* supported (BLE, etc.) */
/* Excluding L2CAP signaling channel and UCD */
diff --git a/system/stack/Android.bp b/system/stack/Android.bp
index e7a294f..5b63527 100644
--- a/system/stack/Android.bp
+++ b/system/stack/Android.bp
@@ -122,7 +122,6 @@
"l2cap/l2c_fcr.cc",
"l2cap/l2c_link.cc",
"l2cap/l2c_main.cc",
- "l2cap/l2c_ucd.cc",
"l2cap/l2c_utils.cc",
"l2cap/l2cap_client.cc",
"mcap/mca_api.cc",
diff --git a/system/stack/btm/btm_int_types.h b/system/stack/btm/btm_int_types.h
index c633cf0..c46cebc 100644
--- a/system/stack/btm/btm_int_types.h
+++ b/system/stack/btm/btm_int_types.h
@@ -417,10 +417,6 @@
uint16_t psm; /* L2CAP PSM value */
uint16_t security_flags; /* Bitmap of required security features */
uint8_t service_id; /* Passed in authorization callback */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- uint16_t
- ucd_security_flags; /* Bitmap of required security features for UCD */
-#endif
#if BTM_SEC_SERVICE_NAME_LEN > 0
uint8_t orig_service_name[BTM_SEC_SERVICE_NAME_LEN + 1];
uint8_t term_service_name[BTM_SEC_SERVICE_NAME_LEN + 1];
@@ -538,10 +534,6 @@
uint8_t sec_state; /* Operating state */
bool is_originator; /* true if device is originating connection */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- bool is_ucd; /* true if device is sending or receiving UCD */
- /* if incoming security failed, received UCD will be discarded */
-#endif
bool role_master; /* true if current mode is master */
uint16_t security_required; /* Security required for connection */
bool link_key_not_sent; /* link key notification has not been sent waiting for
@@ -746,26 +738,10 @@
tBTM_BLE_SEC_ACT sec_act;
} tBTM_SEC_QUEUE_ENTRY;
-#if (L2CAP_UCD_INCLUDED == TRUE)
-
-#define CONN_ORIENT_TERM 0x00 /* incoming connection oriented */
-#define CONN_ORIENT_ORIG 0x01 /* outgoing connection oriented */
-#define CONNLESS_TERM 0x02 /* incoming connectionless */
-#define CONNLESS_ORIG 0x03 /* outgoing connectionless */
-#define CONNECTION_TYPE_ORIG_MASK 0x01 /* mask for direction */
-#define CONNECTION_TYPE_CONNLESS_MASK \
- 0x02 /* mask for connectionless or not \
- */
-typedef uint8_t CONNECTION_TYPE;
-
-#else
-
#define CONN_ORIENT_TERM false
#define CONN_ORIENT_ORIG true
typedef bool CONNECTION_TYPE;
-#endif /* (L2CAP_UCD_INCLUDED == TRUE) */
-
/* Define a structure to hold all the BTM data
*/
diff --git a/system/stack/btm/btm_sec.cc b/system/stack/btm/btm_sec.cc
index f8fd8ba..9d7be29 100644
--- a/system/stack/btm/btm_sec.cc
+++ b/system/stack/btm/btm_sec.cc
@@ -454,20 +454,8 @@
bool BTM_SetSecurityLevel(bool is_originator, const char* p_name,
uint8_t service_id, uint16_t sec_level, uint16_t psm,
uint32_t mx_proto_id, uint32_t mx_chan_id) {
-#if (L2CAP_UCD_INCLUDED == TRUE)
- CONNECTION_TYPE conn_type;
-
- if (is_originator)
- conn_type = CONN_ORIENT_ORIG;
- else
- conn_type = CONN_ORIENT_TERM;
-
- return (btm_sec_set_security_level(conn_type, p_name, service_id, sec_level,
- psm, mx_proto_id, mx_chan_id));
-#else
return (btm_sec_set_security_level(is_originator, p_name, service_id,
sec_level, psm, mx_proto_id, mx_chan_id));
-#endif
}
/*******************************************************************************
@@ -500,22 +488,7 @@
uint16_t first_unused_record = BTM_NO_AVAIL_SEC_SERVICES;
bool record_allocated = false;
bool is_originator;
-#if (L2CAP_UCD_INCLUDED == TRUE)
- bool is_ucd;
-
- if (conn_type & CONNECTION_TYPE_ORIG_MASK)
- is_originator = true;
- else
- is_originator = false;
-
- if (conn_type & CONNECTION_TYPE_CONNLESS_MASK) {
- is_ucd = true;
- } else {
- is_ucd = false;
- }
-#else
is_originator = conn_type;
-#endif
BTM_TRACE_API("%s : sec: 0x%x", __func__, sec_level);
@@ -577,14 +550,6 @@
BTM_SEC_SERVICE_NAME_LEN + 1);
#endif
/* clear out the old setting, just in case it exists */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (is_ucd) {
- p_srec->ucd_security_flags &= ~(
- BTM_SEC_OUT_AUTHORIZE | BTM_SEC_OUT_ENCRYPT |
- BTM_SEC_OUT_AUTHENTICATE | BTM_SEC_OUT_MITM | BTM_SEC_FORCE_MASTER |
- BTM_SEC_ATTEMPT_MASTER | BTM_SEC_FORCE_SLAVE | BTM_SEC_ATTEMPT_SLAVE);
- } else
-#endif
{
p_srec->security_flags &= ~(
BTM_SEC_OUT_AUTHORIZE | BTM_SEC_OUT_ENCRYPT |
@@ -610,12 +575,7 @@
/* outgoing connections usually set the security level right before
* the connection is initiated.
* set it to be the outgoing service */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (is_ucd == false)
-#endif
- {
btm_cb.p_out_serv = p_srec;
- }
} else {
p_srec->term_mx_chan_id = mx_chan_id;
#if BTM_SEC_SERVICE_NAME_LEN > 0
@@ -623,15 +583,6 @@
BTM_SEC_SERVICE_NAME_LEN + 1);
#endif
/* clear out the old setting, just in case it exists */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (is_ucd) {
- p_srec->ucd_security_flags &=
- ~(BTM_SEC_IN_AUTHORIZE | BTM_SEC_IN_ENCRYPT |
- BTM_SEC_IN_AUTHENTICATE | BTM_SEC_IN_MITM | BTM_SEC_FORCE_MASTER |
- BTM_SEC_ATTEMPT_MASTER | BTM_SEC_FORCE_SLAVE |
- BTM_SEC_ATTEMPT_SLAVE | BTM_SEC_IN_MIN_16_DIGIT_PIN);
- } else
-#endif
{
p_srec->security_flags &=
~(BTM_SEC_IN_AUTHORIZE | BTM_SEC_IN_ENCRYPT |
@@ -655,28 +606,6 @@
if (sec_level & BTM_SEC_IN_ENCRYPT) sec_level |= BTM_SEC_IN_AUTHENTICATE;
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (is_ucd) {
- p_srec->security_flags |= (uint16_t)(BTM_SEC_IN_USE);
- p_srec->ucd_security_flags |= (uint16_t)(sec_level | BTM_SEC_IN_USE);
- } else {
- p_srec->security_flags |= (uint16_t)(sec_level | BTM_SEC_IN_USE);
- }
-
- BTM_TRACE_API(
- "BTM_SEC_REG[%d]: id %d, conn_type 0x%x, psm 0x%04x, proto_id %d, "
- "chan_id %d",
- index, service_id, conn_type, psm, mx_proto_id, mx_chan_id);
-
- BTM_TRACE_API(
- " : security_flags: 0x%04x, ucd_security_flags: 0x%04x",
- p_srec->security_flags, p_srec->ucd_security_flags);
-
-#if BTM_SEC_SERVICE_NAME_LEN > 0
- BTM_TRACE_API(" : service name [%s] (up to %d chars saved)",
- p_name, BTM_SEC_SERVICE_NAME_LEN);
-#endif
-#else
p_srec->security_flags |= (uint16_t)(sec_level | BTM_SEC_IN_USE);
BTM_TRACE_API(
@@ -688,7 +617,6 @@
" : sec: 0x%x, service name [%s] (up to %d chars saved)",
p_srec->security_flags, p_name, BTM_SEC_SERVICE_NAME_LEN);
#endif
-#endif
return (record_allocated);
}
@@ -723,9 +651,6 @@
(!service_id || (service_id == p_srec->service_id))) {
BTM_TRACE_API("BTM_SEC_CLR[%d]: id %d", i, service_id);
p_srec->security_flags = 0;
-#if (L2CAP_UCD_INCLUDED == TRUE)
- p_srec->ucd_security_flags = 0;
-#endif
num_freed++;
}
}
@@ -2010,20 +1935,10 @@
BT_TRANSPORT_BR_EDR; /* should check PSM range in LE connection oriented
L2CAP connection */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (conn_type & CONNECTION_TYPE_ORIG_MASK)
- is_originator = true;
- else
- is_originator = false;
-
- BTM_TRACE_DEBUG("%s() conn_type: 0x%x, 0x%x", __func__, conn_type,
- p_ref_data);
-#else
is_originator = conn_type;
BTM_TRACE_DEBUG("%s() is_originator:%d, 0x%x", __func__, is_originator,
p_ref_data);
-#endif
/* Find or get oldest record */
p_dev_rec = btm_find_or_alloc_dev(bd_addr);
@@ -2047,68 +1962,11 @@
(*p_callback)(&bd_addr, transport, p_ref_data, BTM_SUCCESS_NO_SECURITY);
return (BTM_SUCCESS);
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (conn_type & CONNECTION_TYPE_CONNLESS_MASK) {
- if (btm_cb.security_mode == BTM_SEC_MODE_SC) {
- security_required = btm_sec_set_serv_level4_flags(
- p_serv_rec->ucd_security_flags, is_originator);
- } else {
- security_required = p_serv_rec->ucd_security_flags;
- }
-
- rc = BTM_CMD_STARTED;
- if (is_originator) {
- if (((security_required & BTM_SEC_OUT_FLAGS) == 0) ||
- ((((security_required & BTM_SEC_OUT_FLAGS) ==
- BTM_SEC_OUT_AUTHENTICATE) &&
- (p_dev_rec->sec_flags & BTM_SEC_AUTHENTICATED))) ||
- ((((security_required & BTM_SEC_OUT_FLAGS) ==
- (BTM_SEC_OUT_AUTHENTICATE | BTM_SEC_OUT_ENCRYPT)) &&
- (p_dev_rec->sec_flags & BTM_SEC_ENCRYPTED))) ||
- ((((security_required & BTM_SEC_OUT_FLAGS) == BTM_SEC_OUT_FLAGS) &&
- (p_dev_rec->sec_flags & BTM_SEC_AUTHORIZED)))) {
- rc = BTM_SUCCESS;
- }
- } else {
- if (((security_required & BTM_SEC_IN_FLAGS) == 0) ||
- ((((security_required & BTM_SEC_IN_FLAGS) ==
- BTM_SEC_IN_AUTHENTICATE) &&
- (p_dev_rec->sec_flags & BTM_SEC_AUTHENTICATED))) ||
- ((((security_required & BTM_SEC_IN_FLAGS) ==
- (BTM_SEC_IN_AUTHENTICATE | BTM_SEC_IN_ENCRYPT)) &&
- (p_dev_rec->sec_flags & BTM_SEC_ENCRYPTED))) ||
- ((((security_required & BTM_SEC_IN_FLAGS) == BTM_SEC_IN_FLAGS) &&
- (p_dev_rec->sec_flags & BTM_SEC_AUTHORIZED)))) {
- // Check for 16 digits (or MITM)
- if (((security_required & BTM_SEC_IN_MIN_16_DIGIT_PIN) == 0) ||
- (((security_required & BTM_SEC_IN_MIN_16_DIGIT_PIN) ==
- BTM_SEC_IN_MIN_16_DIGIT_PIN) &&
- btm_dev_16_digit_authenticated(p_dev_rec))) {
- rc = BTM_SUCCESS;
- }
- }
- }
-
- if ((rc == BTM_SUCCESS) && (security_required & BTM_SEC_MODE4_LEVEL4) &&
- (p_dev_rec->link_key_type != BTM_LKEY_TYPE_AUTH_COMB_P_256)) {
- rc = BTM_CMD_STARTED;
- }
-
- if (rc == BTM_SUCCESS) {
- if (p_callback)
- (*p_callback)(&bd_addr, transport, (void*)p_ref_data, BTM_SUCCESS);
-
- return (BTM_SUCCESS);
- }
- } else
-#endif
- {
- if (btm_cb.security_mode == BTM_SEC_MODE_SC) {
- security_required = btm_sec_set_serv_level4_flags(
- p_serv_rec->security_flags, is_originator);
- } else {
- security_required = p_serv_rec->security_flags;
- }
+ if (btm_cb.security_mode == BTM_SEC_MODE_SC) {
+ security_required = btm_sec_set_serv_level4_flags(
+ p_serv_rec->security_flags, is_originator);
+ } else {
+ security_required = p_serv_rec->security_flags;
}
BTM_TRACE_DEBUG(
@@ -2258,22 +2116,9 @@
p_dev_rec->p_ref_data = p_ref_data;
p_dev_rec->is_originator = is_originator;
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (conn_type & CONNECTION_TYPE_CONNLESS_MASK)
- p_dev_rec->is_ucd = true;
- else
- p_dev_rec->is_ucd = false;
-#endif
-
/* If there are multiple service records used through the same PSM */
/* leave security decision for the multiplexor on the top */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (((btm_sec_find_next_serv(p_serv_rec)) != NULL) &&
- (!(conn_type & CONNECTION_TYPE_CONNLESS_MASK))) /* if not UCD */
-#else
- if ((btm_sec_find_next_serv(p_serv_rec)) != NULL)
-#endif
- {
+ if ((btm_sec_find_next_serv(p_serv_rec)) != NULL) {
BTM_TRACE_DEBUG("no next_serv sm4:0x%x, chk:%d", p_dev_rec->sm4,
chk_acp_auth_done);
if (!BTM_SEC_IS_SM4(p_dev_rec->sm4)) {
@@ -5173,12 +5018,6 @@
* authenticated connections, hence we cannot distinguish here.
*/
-#if (L2CAP_UCD_INCLUDED == TRUE)
- /* if incoming UCD packet, discard it */
- if (!p_dev_rec->is_originator && (p_dev_rec->is_ucd == true))
- return (BTM_FAILED_ON_SECURITY);
-#endif
-
BTM_TRACE_EVENT("Security Manager: Start authentication");
/*
@@ -5213,11 +5052,6 @@
(!p_dev_rec->is_originator &&
(p_dev_rec->security_required & BTM_SEC_IN_ENCRYPT))) &&
(p_dev_rec->hci_handle != BTM_SEC_INVALID_HANDLE)) {
-#if (L2CAP_UCD_INCLUDED == TRUE)
- /* if incoming UCD packet, discard it */
- if (!p_dev_rec->is_originator && (p_dev_rec->is_ucd == true))
- return (BTM_FAILED_ON_SECURITY);
-#endif
BTM_TRACE_EVENT("Security Manager: Start encryption");
@@ -5414,17 +5248,7 @@
uint16_t psm) {
tBTM_SEC_SERV_REC* p_serv_rec = &btm_cb.sec_serv_rec[0];
int i;
- bool is_originator;
-
-#if (L2CAP_UCD_INCLUDED == TRUE)
-
- if (conn_type & CONNECTION_TYPE_ORIG_MASK)
- is_originator = true;
- else
- is_originator = false;
-#else
- is_originator = conn_type;
-#endif
+ bool is_originator = conn_type;
if (is_originator && btm_cb.p_out_serv && btm_cb.p_out_serv->psm == psm) {
/* If this is outgoing connection and the PSM matches p_out_serv,
diff --git a/system/stack/l2cap/l2c_csm.cc b/system/stack/l2cap/l2c_csm.cc
index 847fecf..4edc298 100644
--- a/system/stack/l2cap/l2c_csm.cc
+++ b/system/stack/l2cap/l2c_csm.cc
@@ -138,16 +138,6 @@
return;
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (local_cid == L2CAP_CONNECTIONLESS_CID) {
- /* check if this event can be processed by UCD */
- if (l2c_ucd_process_event(p_ccb, event, p_data)) {
- /* The event is processed by UCD state machine */
- return;
- }
- }
-#endif
-
disconnect_ind = p_ccb->p_rcb->api.pL2CA_DisconnectInd_Cb;
connect_cfm = p_ccb->p_rcb->api.pL2CA_ConnectCfm_Cb;
@@ -195,22 +185,21 @@
true, &l2c_link_sec_comp2, p_ccb);
} else {
/* Cancel sniff mode if needed */
- {
- tBTM_PM_PWR_MD settings;
- memset((void*)&settings, 0, sizeof(settings));
- settings.mode = BTM_PM_MD_ACTIVE;
+ tBTM_PM_PWR_MD settings;
+ memset((void*)&settings, 0, sizeof(settings));
+ settings.mode = BTM_PM_MD_ACTIVE;
- BTM_SetPowerMode(BTM_PM_SET_ONLY_ID, p_ccb->p_lcb->remote_bd_addr,
- &settings);
- }
+ BTM_SetPowerMode(BTM_PM_SET_ONLY_ID, p_ccb->p_lcb->remote_bd_addr,
+ &settings);
/* If sec access does not result in started SEC_COM or COMP_NEG are
* already processed */
if (btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr,
p_ccb->p_rcb->psm, p_ccb->p_lcb->handle,
true, &l2c_link_sec_comp,
- p_ccb) == BTM_CMD_STARTED)
+ p_ccb) == BTM_CMD_STARTED) {
p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP;
+ }
}
break;
@@ -318,16 +307,6 @@
L2CAP_TRACE_EVENT("L2CAP - LCID: 0x%04x st: ORIG_W4_SEC_COMP evt: %s",
p_ccb->local_cid, l2c_csm_get_event_name(event));
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (local_cid == L2CAP_CONNECTIONLESS_CID) {
- /* check if this event can be processed by UCD */
- if (l2c_ucd_process_event(p_ccb, event, p_data)) {
- /* The event is processed by UCD state machine */
- return;
- }
- }
-#endif
-
switch (event) {
case L2CEVT_LP_DISCONNECT_IND: /* Link was disconnected */
L2CAP_TRACE_API(
@@ -418,16 +397,6 @@
L2CAP_TRACE_EVENT("L2CAP - LCID: 0x%04x st: TERM_W4_SEC_COMP evt: %s",
p_ccb->local_cid, l2c_csm_get_event_name(event));
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (p_ccb->local_cid == L2CAP_CONNECTIONLESS_CID) {
- /* check if this event can be processed by UCD */
- if (l2c_ucd_process_event(p_ccb, event, p_data)) {
- /* The event is processed by UCD state machine */
- return;
- }
- }
-#endif
-
switch (event) {
case L2CEVT_LP_DISCONNECT_IND: /* Link was disconnected */
/* Tell security manager to abort */
@@ -1014,16 +983,6 @@
L2CAP_TRACE_EVENT("L2CAP - LCID: 0x%04x st: OPEN evt: %s", p_ccb->local_cid,
l2c_csm_get_event_name(event));
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (local_cid == L2CAP_CONNECTIONLESS_CID) {
- /* check if this event can be processed by UCD */
- if (l2c_ucd_process_event(p_ccb, event, p_data)) {
- /* The event is processed by UCD state machine */
- return;
- }
- }
-#endif
-
switch (event) {
case L2CEVT_LP_DISCONNECT_IND: /* Link was disconnected */
L2CAP_TRACE_API(
diff --git a/system/stack/l2cap/l2c_int.h b/system/stack/l2cap/l2c_int.h
index 14eb1e5..97e5a28 100644
--- a/system/stack/l2cap/l2c_int.h
+++ b/system/stack/l2cap/l2c_int.h
@@ -224,31 +224,11 @@
#endif
} tL2C_FCRB;
-/* Define a registration control block. Every application (e.g. RFCOMM, SDP,
- * TCS etc) that registers with L2CAP is assigned one of these.
-*/
-#if (L2CAP_UCD_INCLUDED == TRUE)
-#define L2C_UCD_RCB_ID 0x00
-#define L2C_UCD_STATE_UNUSED 0x00
-#define L2C_UCD_STATE_W4_DATA 0x01
-#define L2C_UCD_STATE_W4_RECEPTION 0x02
-#define L2C_UCD_STATE_W4_MTU 0x04
-
-typedef struct {
- uint8_t state;
- tL2CAP_UCD_CB_INFO cb_info;
-} tL2C_UCD_REG;
-#endif
-
typedef struct {
bool in_use;
uint16_t psm;
uint16_t real_psm; /* This may be a dummy RCB for an o/b connection but */
/* this is the real PSM that we need to connect to */
-#if (L2CAP_UCD_INCLUDED == TRUE)
- tL2C_UCD_REG ucd;
-#endif
-
tL2CAP_APPL_INFO api;
} tL2C_RCB;
@@ -340,7 +320,7 @@
bool is_flushable; /* true if channel is flushable */
#endif
-#if (L2CAP_NUM_FIXED_CHNLS > 0 || L2CAP_UCD_INCLUDED == TRUE)
+#if (L2CAP_NUM_FIXED_CHNLS > 0)
uint16_t fixed_chnl_idle_tout; /* Idle timeout to use for the fixed channel */
#endif
uint16_t tx_data_len;
@@ -415,13 +395,6 @@
list_t* link_xmit_data_q; /* Link transmit data buffer queue */
uint8_t peer_chnl_mask[L2CAP_FIXED_CHNL_ARRAY_SIZE];
-#if (L2CAP_UCD_INCLUDED == TRUE)
- uint16_t ucd_mtu; /* peer MTU on UCD */
- fixed_queue_t*
- ucd_out_sec_pending_q; /* Security pending outgoing UCD packet */
- fixed_queue_t*
- ucd_in_sec_pending_q; /* Security pending incoming UCD packet */
-#endif
BT_HDR* p_hcit_rcv_acl; /* Current HCIT ACL buf being rcvd */
uint16_t idle_timeout_sv; /* Save current Idle timeout */
@@ -667,23 +640,6 @@
extern void l2cu_process_fixed_chnl_resp(tL2C_LCB* p_lcb);
extern bool l2cu_is_ccb_active(tL2C_CCB* p_ccb);
-/* Functions provided by l2c_ucd.cc
- ***********************************
-*/
-#if (L2CAP_UCD_INCLUDED == TRUE)
-void l2c_ucd_delete_sec_pending_q(tL2C_LCB* p_lcb);
-void l2c_ucd_enqueue_pending_out_sec_q(tL2C_CCB* p_ccb, void* p_data);
-bool l2c_ucd_check_pending_info_req(tL2C_CCB* p_ccb);
-bool l2c_ucd_check_pending_out_sec_q(tL2C_CCB* p_ccb);
-void l2c_ucd_send_pending_out_sec_q(tL2C_CCB* p_ccb);
-void l2c_ucd_discard_pending_out_sec_q(tL2C_CCB* p_ccb);
-bool l2c_ucd_check_pending_in_sec_q(tL2C_CCB* p_ccb);
-void l2c_ucd_send_pending_in_sec_q(tL2C_CCB* p_ccb);
-void l2c_ucd_discard_pending_in_sec_q(tL2C_CCB* p_ccb);
-bool l2c_ucd_check_rx_pkts(tL2C_LCB* p_lcb, BT_HDR* p_msg);
-bool l2c_ucd_process_event(tL2C_CCB* p_ccb, uint16_t event, void* p_data);
-#endif
-
/* Functions provided for Broadcom Aware
***************************************
*/
diff --git a/system/stack/l2cap/l2c_main.cc b/system/stack/l2cap/l2c_main.cc
index 83d1737..34fa94d 100644
--- a/system/stack/l2cap/l2c_main.cc
+++ b/system/stack/l2cap/l2c_main.cc
@@ -175,14 +175,7 @@
/* process_connectionless_data (p_lcb); */
STREAM_TO_UINT16(psm, p);
L2CAP_TRACE_DEBUG("GOT CONNECTIONLESS DATA PSM:%d", psm);
-
-#if (L2CAP_UCD_INCLUDED == TRUE)
- /* if it is not broadcast, check UCD registration */
- if (l2c_ucd_check_rx_pkts(p_lcb, p_msg)) {
- /* nothing to do */
- } else
-#endif
- osi_free(p_msg);
+ osi_free(p_msg);
} else if (rcv_cid == L2CAP_BLE_SIGNALLING_CID) {
l2cble_process_sig_cmd(p_lcb, p, l2cap_len);
osi_free(p_msg);
@@ -684,14 +677,6 @@
l2cu_process_fixed_chnl_resp(p_lcb);
}
#endif
-#if (L2CAP_UCD_INCLUDED == TRUE)
- else if (info_type == L2CAP_CONNLESS_MTU_INFO_TYPE) {
- if (result == L2CAP_INFO_RESP_RESULT_SUCCESS) {
- STREAM_TO_UINT16(p_lcb->ucd_mtu, p);
- }
- }
-#endif
-
ci.status = HCI_SUCCESS;
ci.bd_addr = p_lcb->remote_bd_addr;
for (p_ccb = p_lcb->ccb_queue.p_first_ccb; p_ccb;
diff --git a/system/stack/l2cap/l2c_ucd.cc b/system/stack/l2cap/l2c_ucd.cc
deleted file mode 100644
index 2216368..0000000
--- a/system/stack/l2cap/l2c_ucd.cc
+++ /dev/null
@@ -1,1110 +0,0 @@
-/******************************************************************************
- *
- * 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 L2CAP UCD code
- *
- ******************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "bt_common.h"
-#include "bt_types.h"
-#include "btm_api.h"
-#include "btm_int.h"
-#include "btu.h"
-#include "hcidefs.h"
-#include "hcimsgs.h"
-#include "l2c_int.h"
-#include "l2cdefs.h"
-
-#if (L2CAP_UCD_INCLUDED == TRUE)
-
-static bool l2c_ucd_connect(const RawAddress& rem_bda);
-
-/*******************************************************************************
- *
- * Function l2c_ucd_discover_cback
- *
- * Description UCD Discover callback
- *
- * Returns void
- *
- ******************************************************************************/
-static void l2c_ucd_discover_cback(const RawAddress& rem_bda, uint8_t info_type,
- uint32_t data) {
- tL2C_RCB* p_rcb = &l2cb.rcb_pool[0];
- uint16_t xx;
-
- L2CAP_TRACE_DEBUG("L2CAP - l2c_ucd_discover_cback");
-
- for (xx = 0; xx < MAX_L2CAP_CLIENTS; xx++, p_rcb++) {
- if (p_rcb->in_use) {
- /* if this application is waiting UCD reception info */
- if ((info_type == L2CAP_UCD_INFO_TYPE_RECEPTION) &&
- (p_rcb->ucd.state & L2C_UCD_STATE_W4_RECEPTION)) {
- p_rcb->ucd.cb_info.pL2CA_UCD_Discover_Cb(rem_bda, info_type, data);
- p_rcb->ucd.state &= ~(L2C_UCD_STATE_W4_RECEPTION);
- }
-
- /* if this application is waiting UCD MTU info */
- if ((info_type == L2CAP_UCD_INFO_TYPE_MTU) &&
- (p_rcb->ucd.state & L2C_UCD_STATE_W4_MTU)) {
- p_rcb->ucd.cb_info.pL2CA_UCD_Discover_Cb(rem_bda, info_type, data);
- p_rcb->ucd.state &= ~(L2C_UCD_STATE_W4_MTU);
- }
- }
- }
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_data_ind_cback
- *
- * Description UCD Data callback
- *
- * Returns void
- *
- ******************************************************************************/
-static void l2c_ucd_data_ind_cback(const RawAddress& rem_bda, BT_HDR* p_buf) {
- uint8_t* p;
- uint16_t psm;
- tL2C_RCB* p_rcb;
-
- L2CAP_TRACE_DEBUG("L2CAP - l2c_ucd_data_ind_cback");
-
- p = (uint8_t*)(p_buf + 1) + p_buf->offset;
- STREAM_TO_UINT16(psm, p)
-
- p_buf->offset += L2CAP_UCD_OVERHEAD;
- p_buf->len -= L2CAP_UCD_OVERHEAD;
-
- p_rcb = l2cu_find_rcb_by_psm(psm);
- if (p_rcb == NULL) {
- L2CAP_TRACE_ERROR("L2CAP - no RCB for l2c_ucd_data_ind_cback, PSM: 0x%04x",
- psm);
- osi_free(p_buf);
- } else {
- p_rcb->ucd.cb_info.pL2CA_UCD_Data_Cb(rem_bda, p_buf);
- }
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_congestion_status_cback
- *
- * Description UCD Congestion Status callback
- *
- * Returns void
- *
- ******************************************************************************/
-static void l2c_ucd_congestion_status_cback(const RawAddress& rem_bda,
- bool is_congested) {
- tL2C_RCB* p_rcb = &l2cb.rcb_pool[0];
- uint16_t xx;
-
- L2CAP_TRACE_DEBUG("L2CAP - l2c_ucd_congestion_status_cback");
-
- for (xx = 0; xx < MAX_L2CAP_CLIENTS; xx++, p_rcb++) {
- if ((p_rcb->in_use) && (p_rcb->ucd.state != L2C_UCD_STATE_UNUSED)) {
- if (p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb) {
- L2CAP_TRACE_DEBUG(
- "L2CAP - Calling UCDCongestionStatus_Cb (%d), PSM=0x%04x, BDA: "
- "%08x%04x,",
- is_congested, p_rcb->psm, (rem_bda[0] << 24) + (rem_bda[1] << 16) +
- (rem_bda[2] << 8) + rem_bda[3],
- (rem_bda[4] << 8) + rem_bda[5]);
-
- p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb(rem_bda,
- is_congested);
- }
- }
- }
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_disconnect_ind_cback
- *
- * Description UCD disconnect callback (Prevent to access null pointer)
- *
- * Returns void
- *
- ******************************************************************************/
-static void l2c_ucd_disconnect_ind_cback(uint16_t cid, bool result) {
- /* do nothing */
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_config_ind_cback
- *
- * Description UCD config callback (This prevent to access null pointer)
- *
- * Returns void
- *
- ******************************************************************************/
-static void l2c_ucd_config_ind_cback(uint16_t cid, tL2CAP_CFG_INFO* p_cfg) {
- /* do nothing */
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_config_cfm_cback
- *
- * Description UCD config callback (This prevent to access null pointer)
- *
- * Returns void
- *
- ******************************************************************************/
-static void l2c_ucd_config_cfm_cback(uint16_t cid, tL2CAP_CFG_INFO* p_cfg) {
- /* do nothing */
-}
-
-/*******************************************************************************
- *
- * Function L2CA_UcdRegister
- *
- * Description Register PSM on UCD.
- *
- * Parameters: tL2CAP_UCD_CB_INFO
- *
- * Return value: true if successs
- *
- ******************************************************************************/
-bool L2CA_UcdRegister(uint16_t psm, tL2CAP_UCD_CB_INFO* p_cb_info) {
- tL2C_RCB* p_rcb;
-
- L2CAP_TRACE_API("L2CA_UcdRegister() PSM: 0x%04x", psm);
-
- if ((!p_cb_info->pL2CA_UCD_Discover_Cb) || (!p_cb_info->pL2CA_UCD_Data_Cb)) {
- L2CAP_TRACE_ERROR("L2CAP - no callback registering PSM(0x%04x) on UCD",
- psm);
- return (false);
- }
-
- p_rcb = l2cu_find_rcb_by_psm(psm);
- if (p_rcb == NULL) {
- L2CAP_TRACE_ERROR("L2CAP - no RCB for L2CA_UcdRegister, PSM: 0x%04x", psm);
- return (false);
- }
-
- p_rcb->ucd.state = L2C_UCD_STATE_W4_DATA;
- p_rcb->ucd.cb_info = *p_cb_info;
-
- /* check if master rcb is created for UCD */
- p_rcb = l2cu_find_rcb_by_psm(L2C_UCD_RCB_ID);
- if (p_rcb == NULL) {
- p_rcb = l2cu_allocate_rcb(L2C_UCD_RCB_ID);
- if (p_rcb == NULL) {
- L2CAP_TRACE_ERROR("L2CAP - no RCB available for L2CA_UcdRegister");
- return (false);
- } else {
- /* these callback functions will forward data to each UCD application */
- p_rcb->ucd.cb_info.pL2CA_UCD_Discover_Cb = l2c_ucd_discover_cback;
- p_rcb->ucd.cb_info.pL2CA_UCD_Data_Cb = l2c_ucd_data_ind_cback;
- p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb =
- l2c_ucd_congestion_status_cback;
-
- memset(&p_rcb->api, 0, sizeof(tL2CAP_APPL_INFO));
- p_rcb->api.pL2CA_DisconnectInd_Cb = l2c_ucd_disconnect_ind_cback;
-
- /* This will make L2CAP check UCD congestion callback */
- p_rcb->api.pL2CA_CongestionStatus_Cb = NULL;
-
- /* do nothing but prevent crash */
- p_rcb->api.pL2CA_ConfigInd_Cb = l2c_ucd_config_ind_cback;
- p_rcb->api.pL2CA_ConfigCfm_Cb = l2c_ucd_config_cfm_cback;
- }
- }
-
- return (true);
-}
-
-/*******************************************************************************
- *
- * Function L2CA_UcdDeregister
- *
- * Description Deregister PSM on UCD.
- *
- * Parameters: PSM
- *
- * Return value: true if successs
- *
- ******************************************************************************/
-bool L2CA_UcdDeregister(uint16_t psm) {
- tL2C_CCB* p_ccb;
- tL2C_RCB* p_rcb;
- uint16_t xx;
-
- L2CAP_TRACE_API("L2CA_UcdDeregister() PSM: 0x%04x", psm);
-
- p_rcb = l2cu_find_rcb_by_psm(psm);
- if (p_rcb == NULL) {
- L2CAP_TRACE_ERROR("L2CAP - no RCB for L2CA_UcdDeregister, PSM: 0x%04x",
- psm);
- return (false);
- }
-
- p_rcb->ucd.state = L2C_UCD_STATE_UNUSED;
-
- /* check this was the last UCD registration */
- p_rcb = &l2cb.rcb_pool[0];
-
- for (xx = 0; xx < MAX_L2CAP_CLIENTS; xx++, p_rcb++) {
- if ((p_rcb->in_use) && (p_rcb->ucd.state != L2C_UCD_STATE_UNUSED))
- return (true);
- }
-
- /* delete master rcb for UCD */
- p_rcb = l2cu_find_rcb_by_psm(L2C_UCD_RCB_ID);
- if (p_rcb != NULL) {
- l2cu_release_rcb(p_rcb);
- }
-
- /* delete CCB for UCD */
- p_ccb = l2cb.ccb_pool;
- for (xx = 0; xx < MAX_L2CAP_CHANNELS; xx++) {
- if ((p_ccb->in_use) && (p_ccb->local_cid == L2CAP_CONNECTIONLESS_CID)) {
- l2cu_release_ccb(p_ccb);
- }
- p_ccb++;
- }
-
- return (true);
-}
-
-/*******************************************************************************
- *
- * Function L2CA_UcdDiscover
- *
- * Description Discover UCD of remote device.
- *
- * Parameters: PSM
- * BD_ADDR of remote device
- * info_type : L2CAP_UCD_INFO_TYPE_RECEPTION
- * L2CAP_UCD_INFO_TYPE_MTU
- *
- *
- * Return value: true if successs
- *
- ******************************************************************************/
-bool L2CA_UcdDiscover(uint16_t psm, const RawAddress& rem_bda,
- uint8_t info_type) {
- tL2C_LCB* p_lcb;
- tL2C_CCB* p_ccb;
- tL2C_RCB* p_rcb;
-
- L2CAP_TRACE_API(
- "L2CA_UcdDiscover() PSM: 0x%04x BDA: %08x%04x, InfoType=0x%02x", psm,
- (rem_bda[0] << 24) + (rem_bda[1] << 16) + (rem_bda[2] << 8) + rem_bda[3],
- (rem_bda[4] << 8) + rem_bda[5], info_type);
-
- /* Fail if the PSM is not registered */
- if (((p_rcb = l2cu_find_rcb_by_psm(psm)) == NULL) ||
- (p_rcb->ucd.state == L2C_UCD_STATE_UNUSED)) {
- L2CAP_TRACE_WARNING("L2CAP - no RCB for L2CA_UcdDiscover, PSM: 0x%04x",
- psm);
- return (false);
- }
-
- /* First, see if we already have a link to the remote */
- /* then find the channel control block for UCD. */
- if (((p_lcb = l2cu_find_lcb_by_bd_addr(rem_bda, BT_TRANSPORT_BR_EDR)) ==
- NULL) ||
- ((p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID)) ==
- NULL)) {
- if (l2c_ucd_connect(rem_bda) == false) {
- return (false);
- }
- }
-
- /* set waiting flags in rcb */
-
- if (info_type & L2CAP_UCD_INFO_TYPE_RECEPTION)
- p_rcb->ucd.state |= L2C_UCD_STATE_W4_RECEPTION;
-
- if (info_type & L2CAP_UCD_INFO_TYPE_MTU)
- p_rcb->ucd.state |= L2C_UCD_STATE_W4_MTU;
-
- /* if link is already established */
- if ((p_lcb) && (p_lcb->link_state == LST_CONNECTED)) {
- if (!p_ccb) {
- p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID);
- }
- l2c_ucd_check_pending_info_req(p_ccb);
- }
- return (true);
-}
-
-/*******************************************************************************
- *
- * Function L2CA_UcdDataWrite
- *
- * Description Send UCD to remote device
- *
- * Parameters: PSM
- * BD Address of remote
- * Pointer to buffer of type BT_HDR
- * flags : L2CAP_FLUSHABLE_CH_BASED
- * L2CAP_FLUSHABLE_PKT
- * L2CAP_NON_FLUSHABLE_PKT
- *
- * Return value L2CAP_DW_SUCCESS, if data accepted
- * L2CAP_DW_FAILED, if error
- *
- ******************************************************************************/
-uint16_t L2CA_UcdDataWrite(uint16_t psm, const RawAddress& rem_bda,
- BT_HDR* p_buf, uint16_t flags) {
- tL2C_LCB* p_lcb;
- tL2C_CCB* p_ccb;
- tL2C_RCB* p_rcb;
- uint8_t* p;
-
- L2CAP_TRACE_API(
- "L2CA_UcdDataWrite() PSM: 0x%04x BDA: %08x%04x", psm,
- (rem_bda[0] << 24) + (rem_bda[1] << 16) + (rem_bda[2] << 8) + rem_bda[3],
- (rem_bda[4] << 8) + rem_bda[5]);
-
- /* Fail if the PSM is not registered */
- if (((p_rcb = l2cu_find_rcb_by_psm(psm)) == NULL) ||
- (p_rcb->ucd.state == L2C_UCD_STATE_UNUSED)) {
- L2CAP_TRACE_WARNING("L2CAP - no RCB for L2CA_UcdDataWrite, PSM: 0x%04x",
- psm);
- osi_free(p_buf);
- return (L2CAP_DW_FAILED);
- }
-
- /* First, see if we already have a link to the remote */
- /* then find the channel control block for UCD */
- if (((p_lcb = l2cu_find_lcb_by_bd_addr(rem_bda, BT_TRANSPORT_BR_EDR)) ==
- NULL) ||
- ((p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID)) ==
- NULL)) {
- if (l2c_ucd_connect(rem_bda) == false) {
- osi_free(p_buf);
- return (L2CAP_DW_FAILED);
- }
-
- /* If we still don't have lcb and ccb after connect attempt, then can't
- * proceed */
- if (((p_lcb = l2cu_find_lcb_by_bd_addr(rem_bda, BT_TRANSPORT_BR_EDR)) ==
- NULL) ||
- ((p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID)) ==
- NULL)) {
- osi_free(p_buf);
- return (L2CAP_DW_FAILED);
- }
- }
-
- /* write PSM */
- p_buf->offset -= L2CAP_UCD_OVERHEAD;
- p_buf->len += L2CAP_UCD_OVERHEAD;
- p = (uint8_t*)(p_buf + 1) + p_buf->offset;
-
- UINT16_TO_STREAM(p, psm);
-
- /* UCD MTU check */
- if ((p_lcb->ucd_mtu) && (p_buf->len > p_lcb->ucd_mtu)) {
- L2CAP_TRACE_WARNING(
- "L2CAP - Handle: 0x%04x UCD bigger than peer's UCD mtu size cannot be "
- "sent",
- p_lcb->handle);
- osi_free(p_buf);
- return (L2CAP_DW_FAILED);
- }
-
- /* If already congested, do not accept any more packets */
- if (p_ccb->cong_sent) {
- L2CAP_TRACE_ERROR(
- "L2CAP - Handle: 0x%04x UCD cannot be sent, already congested count: "
- "%u buff_quota: %u",
- p_lcb->handle, (fixed_queue_length(p_ccb->xmit_hold_q) +
- fixed_queue_length(p_lcb->ucd_out_sec_pending_q)),
- p_ccb->buff_quota);
-
- osi_free(p_buf);
- return (L2CAP_DW_FAILED);
- }
-
- /* channel based, packet based flushable or non-flushable */
- p_buf->layer_specific = flags;
-
- l2c_csm_execute(p_ccb, L2CEVT_L2CA_DATA_WRITE, p_buf);
-
- if (p_ccb->cong_sent)
- return (L2CAP_DW_CONGESTED);
- else
- return (L2CAP_DW_SUCCESS);
-}
-
-/*******************************************************************************
- *
- * Function L2CA_UcdSetIdleTimeout
- *
- * Description Set UCD Idle timeout.
- *
- * Parameters: BD Addr
- * Timeout in second
- *
- * Return value: true if successs
- *
- ******************************************************************************/
-bool L2CA_UcdSetIdleTimeout(const RawAddress& rem_bda, uint16_t timeout) {
- tL2C_LCB* p_lcb;
- tL2C_CCB* p_ccb;
-
- L2CAP_TRACE_API(
- "L2CA_UcdSetIdleTimeout() Timeout: 0x%04x BDA: %08x%04x", timeout,
- (rem_bda[0] << 24) + (rem_bda[1] << 16) + (rem_bda[2] << 8) + rem_bda[3],
- (rem_bda[4] << 8) + rem_bda[5]);
-
- /* First, see if we already have a link to the remote */
- /* then find the channel control block. */
- if (((p_lcb = l2cu_find_lcb_by_bd_addr(rem_bda, BT_TRANSPORT_BR_EDR)) ==
- NULL) ||
- ((p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID)) ==
- NULL)) {
- L2CAP_TRACE_WARNING("L2CAP - no UCD channel");
- return (false);
- } else {
- p_ccb->fixed_chnl_idle_tout = timeout;
- return (true);
- }
-}
-
-/*******************************************************************************
- *
- * Function L2CA_UCDSetTxPriority
- *
- * Description Sets the transmission priority for a connectionless channel.
- *
- * Returns true if a valid channel, else false
- *
- ******************************************************************************/
-bool L2CA_UCDSetTxPriority(const RawAddress& rem_bda,
- tL2CAP_CHNL_PRIORITY priority) {
- tL2C_LCB* p_lcb;
- tL2C_CCB* p_ccb;
-
- L2CAP_TRACE_API(
- "L2CA_UCDSetTxPriority() priority: 0x%02x BDA: %08x%04x", priority,
- (rem_bda[0] << 24) + (rem_bda[1] << 16) + (rem_bda[2] << 8) + rem_bda[3],
- (rem_bda[4] << 8) + rem_bda[5]);
-
- p_lcb = l2cu_find_lcb_by_bd_addr(rem_bda, BT_TRANSPORT_BR_EDR);
- if (p_lcb == NULL) {
- L2CAP_TRACE_WARNING("L2CAP - no LCB for L2CA_UCDSetTxPriority");
- return (false);
- }
-
- /* Find the channel control block */
- p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID);
- if (p_ccb == NULL) {
- L2CAP_TRACE_WARNING("L2CAP - no CCB for L2CA_UCDSetTxPriority");
- return (false);
- }
-
- /* it will update the order of CCB in LCB by priority and update round robin
- * service variables */
- l2cu_change_pri_ccb(p_ccb, priority);
-
- return (true);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_connect
- *
- * Description Connect UCD to remote device.
- *
- * Parameters: BD_ADDR of remote device
- *
- * Return value: true if successs
- *
- ******************************************************************************/
-static bool l2c_ucd_connect(const RawAddress& rem_bda) {
- tL2C_LCB* p_lcb;
- tL2C_CCB* p_ccb;
- tL2C_RCB* p_rcb;
-
- L2CAP_TRACE_DEBUG(
- "l2c_ucd_connect() BDA: %08x%04x",
- (rem_bda[0] << 24) + (rem_bda[1] << 16) + (rem_bda[2] << 8) + rem_bda[3],
- (rem_bda[4] << 8) + rem_bda[5]);
-
- /* Fail if we have not established communications with the controller */
- if (!BTM_IsDeviceUp()) {
- L2CAP_TRACE_WARNING("l2c_ucd_connect - BTU not ready");
- return (false);
- }
-
- /* First, see if we already have a link to the remote */
- p_lcb = l2cu_find_lcb_by_bd_addr(rem_bda, BT_TRANSPORT_BR_EDR);
- if (p_lcb == NULL) {
- /* No link. Get an LCB and start link establishment */
- if (((p_lcb = l2cu_allocate_lcb(rem_bda, false, BT_TRANSPORT_BR_EDR)) ==
- NULL) ||
- (l2cu_create_conn(p_lcb, BT_TRANSPORT_BR_EDR) == false)) {
- L2CAP_TRACE_WARNING("L2CAP - conn not started l2c_ucd_connect");
- return (false);
- }
- } else if (p_lcb->info_rx_bits & (1 << L2CAP_EXTENDED_FEATURES_INFO_TYPE)) {
- if (!(p_lcb->peer_ext_fea & L2CAP_EXTFEA_UCD_RECEPTION)) {
- L2CAP_TRACE_WARNING(
- "L2CAP - UCD is not supported by peer, l2c_ucd_connect");
- return (false);
- }
- }
-
- /* Find the channel control block. */
- p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID);
- if (p_ccb == NULL) {
- /* Allocate a channel control block */
- p_ccb = l2cu_allocate_ccb(p_lcb, 0);
- if (p_ccb == NULL) {
- L2CAP_TRACE_WARNING("L2CAP - no CCB for l2c_ucd_connect");
- return (false);
- } else {
- /* Set CID for the connection */
- p_ccb->local_cid = L2CAP_CONNECTIONLESS_CID;
- p_ccb->remote_cid = L2CAP_CONNECTIONLESS_CID;
-
- /* Set the default idle timeout value to use */
- p_ccb->fixed_chnl_idle_tout = L2CAP_UCD_IDLE_TIMEOUT;
-
- /* Set the default channel priority value to use */
- l2cu_change_pri_ccb(p_ccb, L2CAP_UCD_CH_PRIORITY);
-
- p_rcb = l2cu_find_rcb_by_psm(L2C_UCD_RCB_ID);
- if (p_rcb == NULL) {
- L2CAP_TRACE_WARNING("L2CAP - no UCD registered, l2c_ucd_connect");
- return (false);
- }
- /* Save UCD registration info */
- p_ccb->p_rcb = p_rcb;
-
- /* There is no configuration, so if the link is up, the channel is up */
- if (p_lcb->link_state == LST_CONNECTED) {
- p_ccb->chnl_state = CST_OPEN;
- }
- }
- }
-
- return (true);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_delete_sec_pending_q
- *
- * Description discard all of UCD packets in security pending queue
- *
- * Returns None
- *
- ******************************************************************************/
-void l2c_ucd_delete_sec_pending_q(tL2C_LCB* p_lcb) {
- /* clean up any security pending UCD */
- while (!fixed_queue_is_empty(p_lcb->ucd_out_sec_pending_q))
- osi_free(fixed_queue_try_dequeue(p_lcb->ucd_out_sec_pending_q));
- fixed_queue_free(p_lcb->ucd_out_sec_pending_q, NULL);
- p_lcb->ucd_out_sec_pending_q = NULL;
-
- while (!fixed_queue_is_empty(p_lcb->ucd_in_sec_pending_q))
- osi_free(fixed_queue_try_dequeue(p_lcb->ucd_in_sec_pending_q));
- fixed_queue_free(p_lcb->ucd_in_sec_pending_q);
- p_lcb->ucd_in_sec_pending_q = NULL;
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_check_pending_info_req
- *
- * Description check if any application is waiting for UCD information
- *
- * Return true if any pending UCD info request
- *
- ******************************************************************************/
-bool l2c_ucd_check_pending_info_req(tL2C_CCB* p_ccb) {
- tL2C_RCB* p_rcb = &l2cb.rcb_pool[0];
- uint16_t xx;
- bool pending = false;
-
- if (p_ccb == NULL) {
- L2CAP_TRACE_ERROR("L2CAP - NULL p_ccb in l2c_ucd_check_pending_info_req");
- return (false);
- }
-
- for (xx = 0; xx < MAX_L2CAP_CLIENTS; xx++, p_rcb++) {
- if (p_rcb->in_use) {
- /* if application is waiting UCD reception info */
- if (p_rcb->ucd.state & L2C_UCD_STATE_W4_RECEPTION) {
- /* if this information is available */
- if (p_ccb->p_lcb->info_rx_bits &
- (1 << L2CAP_EXTENDED_FEATURES_INFO_TYPE)) {
- if (!(p_ccb->p_lcb->peer_ext_fea & L2CAP_EXTFEA_UCD_RECEPTION)) {
- L2CAP_TRACE_WARNING(
- "L2CAP - UCD is not supported by peer, "
- "l2c_ucd_check_pending_info_req");
-
- l2c_ucd_delete_sec_pending_q(p_ccb->p_lcb);
- l2cu_release_ccb(p_ccb);
- }
-
- p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Discover_Cb(
- p_ccb->p_lcb->remote_bd_addr, L2CAP_UCD_INFO_TYPE_RECEPTION,
- p_ccb->p_lcb->peer_ext_fea & L2CAP_EXTFEA_UCD_RECEPTION);
- } else {
- pending = true;
- if (p_ccb->p_lcb->w4_info_rsp == false) {
- l2cu_send_peer_info_req(p_ccb->p_lcb,
- L2CAP_EXTENDED_FEATURES_INFO_TYPE);
- }
- }
- }
-
- /* if application is waiting for UCD MTU */
- if (p_rcb->ucd.state & L2C_UCD_STATE_W4_MTU) {
- /* if this information is available */
- if (p_ccb->p_lcb->info_rx_bits & (1 << L2CAP_CONNLESS_MTU_INFO_TYPE)) {
- p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Discover_Cb(
- p_ccb->p_lcb->remote_bd_addr, L2CAP_UCD_INFO_TYPE_MTU,
- p_ccb->p_lcb->ucd_mtu);
- } else {
- pending = true;
- if (p_ccb->p_lcb->w4_info_rsp == false) {
- l2cu_send_peer_info_req(p_ccb->p_lcb, L2CAP_CONNLESS_MTU_INFO_TYPE);
- }
- }
- }
- }
- }
- return (pending);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_enqueue_pending_out_sec_q
- *
- * Description enqueue outgoing UCD packet into security pending queue
- * and check congestion
- *
- * Return None
- *
- ******************************************************************************/
-void l2c_ucd_enqueue_pending_out_sec_q(tL2C_CCB* p_ccb, void* p_data) {
- fixed_queue_enqueue(p_ccb->p_lcb->ucd_out_sec_pending_q, p_data);
- l2cu_check_channel_congestion(p_ccb);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_check_pending_out_sec_q
- *
- * Description check outgoing security
- *
- * Return true if any UCD packet for security
- *
- ******************************************************************************/
-bool l2c_ucd_check_pending_out_sec_q(tL2C_CCB* p_ccb) {
- BT_HDR* p_buf =
- (BT_HDR*)fixed_queue_try_peek_first(p_ccb->p_lcb->ucd_out_sec_pending_q);
-
- if (p_buf != NULL) {
- uint16_t psm;
- uint8_t* p = (uint8_t*)(p_buf + 1) + p_buf->offset;
-
- STREAM_TO_UINT16(psm, p)
-
- p_ccb->chnl_state = CST_ORIG_W4_SEC_COMP;
- btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr, psm,
- p_ccb->p_lcb->handle, CONNLESS_ORIG,
- &l2c_link_sec_comp, p_ccb);
-
- return (true);
- }
- return (false);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_send_pending_out_sec_q
- *
- * Description dequeue UCD packet from security pending queue and
- * enqueue it into CCB
- *
- * Return None
- *
- ******************************************************************************/
-void l2c_ucd_send_pending_out_sec_q(tL2C_CCB* p_ccb) {
- BT_HDR* p_buf =
- (BT_HDR*)fixed_queue_try_dequeue(p_ccb->p_lcb->ucd_out_sec_pending_q);
-
- if (p_buf != NULL) {
- l2c_enqueue_peer_data(p_ccb, (BT_HDR*)p_buf);
- l2c_link_check_send_pkts(p_ccb->p_lcb, NULL, NULL);
- }
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_discard_pending_out_sec_q
- *
- * Description dequeue UCD packet from security pending queue and
- * discard it.
- *
- * Return None
- *
- ******************************************************************************/
-void l2c_ucd_discard_pending_out_sec_q(tL2C_CCB* p_ccb) {
- BT_HDR* p_buf =
- (BT_HDR*)fixed_queue_try_dequeue(p_ccb->p_lcb->ucd_out_sec_pending_q);
-
- /* we may need to report to application */
- osi_free(p_buf);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_check_pending_in_sec_q
- *
- * Description check incoming security
- *
- * Return true if any UCD packet for security
- *
- ******************************************************************************/
-bool l2c_ucd_check_pending_in_sec_q(tL2C_CCB* p_ccb) {
- BT_HDR* p_buf =
- (BT_HDR*)fixed_queue_try_dequeue(p_ccb->p_lcb->ucd_in_sec_pending_q);
-
- if (p_buf != NULL) {
- uint16_t psm;
- uint8_t* p = (uint8_t*)(p_buf + 1) + p_buf->offset;
- STREAM_TO_UINT16(psm, p)
-
- p_ccb->chnl_state = CST_TERM_W4_SEC_COMP;
- btm_sec_l2cap_access_req(p_ccb->p_lcb->remote_bd_addr, psm,
- p_ccb->p_lcb->handle, CONNLESS_TERM,
- &l2c_link_sec_comp, p_ccb);
-
- return (true);
- }
- return (false);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_send_pending_in_sec_q
- *
- * Description dequeue UCD packet from security pending queue and
- * send it to application
- *
- * Return None
- *
- ******************************************************************************/
-void l2c_ucd_send_pending_in_sec_q(tL2C_CCB* p_ccb) {
- BT_HDR* p_buf =
- (BT_HDR*)fixed_queue_try_dequeue(p_ccb->p_lcb->ucd_in_sec_pending_q)
-
- if (p_buf != NULL) {
- p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Data_Cb(p_ccb->p_lcb->remote_bd_addr,
- (BT_HDR*)p_buf);
- }
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_discard_pending_in_sec_q
- *
- * Description dequeue UCD packet from security pending queue and
- * discard it.
- *
- * Return None
- *
- ******************************************************************************/
-void l2c_ucd_discard_pending_in_sec_q(tL2C_CCB* p_ccb) {
- BT_HDR* p_buf =
- (BT_HDR*)fixed_queue_try_dequeue(p_ccb->p_lcb->ucd_in_sec_pending_q);
- osi_free(p_buf);
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_check_rx_pkts
- *
- * Description Check if UCD reception is registered.
- * Process received UCD packet if application is expecting.
- *
- * Return true if UCD reception is registered
- *
- ******************************************************************************/
-bool l2c_ucd_check_rx_pkts(tL2C_LCB* p_lcb, BT_HDR* p_msg) {
- tL2C_CCB* p_ccb;
- tL2C_RCB* p_rcb;
-
- if (((p_ccb = l2cu_find_ccb_by_cid(p_lcb, L2CAP_CONNECTIONLESS_CID)) !=
- NULL) ||
- ((p_rcb = l2cu_find_rcb_by_psm(L2C_UCD_RCB_ID)) != NULL)) {
- if (p_ccb == NULL) {
- /* Allocate a channel control block */
- p_ccb = l2cu_allocate_ccb(p_lcb, 0);
- if (p_ccb == NULL) {
- L2CAP_TRACE_WARNING("L2CAP - no CCB for UCD reception");
- osi_free(p_msg);
- return true;
- } else {
- /* Set CID for the connection */
- p_ccb->local_cid = L2CAP_CONNECTIONLESS_CID;
- p_ccb->remote_cid = L2CAP_CONNECTIONLESS_CID;
-
- /* Set the default idle timeout value to use */
- p_ccb->fixed_chnl_idle_tout = L2CAP_UCD_IDLE_TIMEOUT;
-
- /* Set the default channel priority value to use */
- l2cu_change_pri_ccb(p_ccb, L2CAP_UCD_CH_PRIORITY);
-
- /* Save registration info */
- p_ccb->p_rcb = p_rcb;
-
- p_ccb->chnl_state = CST_OPEN;
- }
- }
- l2c_csm_execute(p_ccb, L2CEVT_L2CAP_DATA, p_msg);
- return true;
- } else
- return false;
-}
-
-/*******************************************************************************
- *
- * Function l2c_ucd_process_event
- *
- * Description This is called from main state machine when LCID is
- * connectionless. Process the event if it is for UCD.
- *
- * Return true if the event is consumed by UCD
- * false if the event needs to be processed by the main state
- * machine
- *
- ******************************************************************************/
-bool l2c_ucd_process_event(tL2C_CCB* p_ccb, uint16_t event, void* p_data) {
- /* if the event is not processed by this function, this variable will be set
- * to false */
- bool done = true;
-
- switch (p_ccb->chnl_state) {
- case CST_CLOSED:
- switch (event) {
- case L2CEVT_LP_CONNECT_CFM: /* Link came up */
- /* check if waiting for UCD info */
- if (!l2c_ucd_check_pending_info_req(p_ccb)) {
- /* check if any outgoing UCD packet is waiting security check */
- if (!l2c_ucd_check_pending_out_sec_q(p_ccb)) {
- p_ccb->chnl_state = CST_OPEN;
- }
- }
- break;
-
- case L2CEVT_L2CAP_DATA: /* Peer data packet rcvd */
- fixed_queue_enqueue(p_ccb->p_lcb->ucd_in_sec_pending_q, p_data);
- break;
-
- case L2CEVT_L2CA_DATA_WRITE: /* Upper layer data to send */
- l2c_ucd_enqueue_pending_out_sec_q(p_ccb, p_data);
- break;
-
- case L2CEVT_L2CAP_INFO_RSP:
- /* check if waiting for UCD info */
- if (!l2c_ucd_check_pending_info_req(p_ccb)) {
- /* check if any outgoing UCD packet is waiting security check */
- if (!l2c_ucd_check_pending_out_sec_q(p_ccb)) {
- p_ccb->chnl_state = CST_OPEN;
- }
- }
- break;
-
- default:
- done = false; /* main state machine continues to process event */
- break;
- }
- break;
-
- case CST_ORIG_W4_SEC_COMP:
- switch (event) {
- case L2CEVT_SEC_RE_SEND_CMD: /* BTM has enough info to proceed */
- /* check if any outgoing UCD packet is waiting security check */
- if (!l2c_ucd_check_pending_out_sec_q(p_ccb)) {
- p_ccb->chnl_state = CST_OPEN;
- }
- break;
-
- case L2CEVT_SEC_COMP: /* Security completed success */
- p_ccb->chnl_state = CST_OPEN;
- l2c_ucd_send_pending_out_sec_q(p_ccb);
-
- if (!fixed_queue_is_empty(p_ccb->p_lcb->ucd_out_sec_pending_q)) {
- /* start a timer to send next UCD packet in OPEN state */
- /* it will prevent stack overflow */
- alarm_set_on_mloop(p_ccb->l2c_ccb_timer, 0, l2c_ccb_timer_timeout,
- p_ccb);
- } else {
- /* start a timer for idle timeout of UCD */
- period_ms_t timeout_ms = p_ccb->fixed_chnl_idle_tout * 1000;
- alarm_set_on_mloop(p_ccb->l2c_ccb_timer, timeout_ms,
- l2c_ccb_timer_timeout, p_ccb);
- }
- break;
-
- case L2CEVT_SEC_COMP_NEG:
- p_ccb->chnl_state = CST_OPEN;
- l2c_ucd_discard_pending_out_sec_q(p_ccb);
-
- /* start a timer for idle timeout of UCD */
- period_ms_t timeout_ms = p_ccb->fixed_chnl_idle_tout * 1000;
- alarm_set_on_mloop(p_ccb->l2c_ccb_timer, timeout_ms,
- l2c_ccb_timer_timeout, p_ccb);
- break;
-
- case L2CEVT_L2CA_DATA_WRITE: /* Upper layer data to send */
- l2c_ucd_enqueue_pending_out_sec_q(p_ccb, p_data);
- break;
-
- case L2CEVT_L2CAP_DATA: /* Peer data packet rcvd */
- fixed_queue_enqueue(p_ccb->p_lcb->ucd_in_sec_pending_q, p_data);
- break;
-
- case L2CEVT_L2CAP_INFO_RSP:
- /* check if waiting for UCD info */
- l2c_ucd_check_pending_info_req(p_ccb);
- break;
-
- default:
- done = false; /* main state machine continues to process event */
- break;
- }
- break;
-
- case CST_TERM_W4_SEC_COMP:
- switch (event) {
- case L2CEVT_SEC_COMP:
- p_ccb->chnl_state = CST_OPEN;
- l2c_ucd_send_pending_in_sec_q(p_ccb);
-
- if (!fixed_queue_is_empty(p_ccb->p_lcb->ucd_in_sec_pending_q)) {
- /* start a timer to check next UCD packet in OPEN state */
- /* it will prevent stack overflow */
- alarm_set_on_mloop(p_ccb->l2c_ccb_timer, 0, l2c_ccb_timer_timeout,
- p_ccb);
- } else {
- /* start a timer for idle timeout of UCD */
- period_ms_t timeout_ms = p_ccb->fixed_chnl_idle_tout * 1000;
- alarm_set_on_mloop(p_ccb->l2c_ccb_timer, timeout_ms,
- l2c_ccb_timer_timeout, p_ccb);
- }
- break;
-
- case L2CEVT_SEC_COMP_NEG:
- if (((tL2C_CONN_INFO*)p_data)->status == BTM_DELAY_CHECK) {
- done = false;
- break;
- }
- p_ccb->chnl_state = CST_OPEN;
- l2c_ucd_discard_pending_in_sec_q(p_ccb);
-
- /* start a timer for idle timeout of UCD */
- period_ms_t timeout_ms = p_ccb->fixed_chnl_idle_tout * 1000;
- alarm_set_on_mloop(p_ccb->l2c_ccb_timer, timeout_ms,
- l2c_ccb_timer_timeout, p_ccb);
- break;
-
- case L2CEVT_L2CA_DATA_WRITE: /* Upper layer data to send */
- l2c_ucd_enqueue_pending_out_sec_q(p_ccb, p_data);
- break;
-
- case L2CEVT_L2CAP_DATA: /* Peer data packet rcvd */
- fixed_queue_enqueue(p_ccb->p_lcb->ucd_in_sec_pending_q, p_data);
- break;
-
- case L2CEVT_SEC_RE_SEND_CMD: /* BTM has enough info to proceed */
- /* check if any incoming UCD packet is waiting security check */
- if (!l2c_ucd_check_pending_in_sec_q(p_ccb)) {
- p_ccb->chnl_state = CST_OPEN;
- }
- break;
-
- case L2CEVT_L2CAP_INFO_RSP:
- /* check if waiting for UCD info */
- l2c_ucd_check_pending_info_req(p_ccb);
- break;
-
- default:
- done = false; /* main state machine continues to process event */
- break;
- }
- break;
-
- case CST_OPEN:
- switch (event) {
- case L2CEVT_L2CAP_DATA: /* Peer data packet rcvd */
- /* stop idle timer of UCD */
- alarm_cancel(p_ccb->l2c_ccb_timer);
-
- fixed_queue_enqueue(p_ccb->p_lcb->ucd_in_sec_pending_q, p_data);
- l2c_ucd_check_pending_in_sec_q(p_ccb);
- break;
-
- case L2CEVT_L2CA_DATA_WRITE: /* Upper layer data to send */
- /* stop idle timer of UCD */
- alarm_cancel(p_ccb->l2c_ccb_timer);
-
- l2c_ucd_enqueue_pending_out_sec_q(p_ccb, p_data);
-
- /* success changes state, failure stays in current state */
- l2c_ucd_check_pending_out_sec_q(p_ccb);
- break;
-
- case L2CEVT_TIMEOUT:
- /* check if any UCD packet is waiting security check */
- if ((!l2c_ucd_check_pending_in_sec_q(p_ccb)) &&
- (!l2c_ucd_check_pending_out_sec_q(p_ccb))) {
- l2cu_release_ccb(p_ccb);
- }
- break;
-
- case L2CEVT_L2CAP_INFO_RSP:
- /* check if waiting for UCD info */
- l2c_ucd_check_pending_info_req(p_ccb);
- break;
-
- default:
- done = false; /* main state machine continues to process event */
- break;
- }
- break;
-
- default:
- done = false; /* main state machine continues to process event */
- break;
- }
-
- return done;
-}
-#endif /* (L2CAP_UCD_INCLUDED == TRUE) */
diff --git a/system/stack/l2cap/l2c_utils.cc b/system/stack/l2cap/l2c_utils.cc
index f07f4e3..e77dade 100644
--- a/system/stack/l2cap/l2c_utils.cc
+++ b/system/stack/l2cap/l2c_utils.cc
@@ -98,10 +98,6 @@
l2cb.num_links_active++;
l2c_link_adjust_allocation();
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- p_lcb->ucd_out_sec_pending_q = fixed_queue_new(SIZE_MAX);
- p_lcb->ucd_in_sec_pending_q = fixed_queue_new(SIZE_MAX);
-#endif
p_lcb->link_xmit_data_q = list_new(NULL);
return (p_lcb);
}
@@ -205,11 +201,6 @@
p_lcb->link_xmit_data_q = NULL;
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- /* clean up any security pending UCD */
- l2c_ucd_delete_sec_pending_q(p_lcb);
-#endif
-
/* Re-adjust flow control windows make sure it does not go negative */
if (p_lcb->transport == BT_TRANSPORT_LE) {
if (l2cb.num_ble_links_active >= 1) l2cb.num_ble_links_active--;
@@ -1162,7 +1153,7 @@
#endif
} else if (info_type == L2CAP_CONNLESS_MTU_INFO_TYPE) {
UINT16_TO_STREAM(p, L2CAP_INFO_RESP_RESULT_SUCCESS);
- UINT16_TO_STREAM(p, L2CAP_UCD_MTU);
+ UINT16_TO_STREAM(p, L2CAP_MTU_SIZE);
} else {
UINT16_TO_STREAM(
p, L2CAP_INFO_RESP_RESULT_NOT_SUPPORTED); /* 'not supported' */
@@ -1604,11 +1595,7 @@
l2c_fcr_cleanup(p_ccb);
/* Channel may not be assigned to any LCB if it was just pre-reserved */
- if ((p_lcb) && ((p_ccb->local_cid >= L2CAP_BASE_APPL_CID)
-#if (L2CAP_UCD_INCLUDED == TRUE)
- || (p_ccb->local_cid == L2CAP_CONNECTIONLESS_CID)
-#endif
- )) {
+ if ((p_lcb) && ((p_ccb->local_cid >= L2CAP_BASE_APPL_CID))) {
l2cu_dequeue_ccb(p_ccb);
/* Delink the CCB from the LCB */
@@ -1691,9 +1678,6 @@
if (!p_rcb->in_use) {
p_rcb->in_use = true;
p_rcb->psm = psm;
-#if (L2CAP_UCD_INCLUDED == TRUE)
- p_rcb->ucd.state = L2C_UCD_STATE_UNUSED;
-#endif
return (p_rcb);
}
}
@@ -1720,9 +1704,6 @@
if (!p_rcb->in_use) {
p_rcb->in_use = true;
p_rcb->psm = psm;
-#if (L2CAP_UCD_INCLUDED == TRUE)
- p_rcb->ucd.state = L2C_UCD_STATE_UNUSED;
-#endif
return (p_rcb);
}
}
@@ -3060,10 +3041,6 @@
******************************************************************************/
tL2C_CCB* l2cu_find_ccb_by_cid(tL2C_LCB* p_lcb, uint16_t local_cid) {
tL2C_CCB* p_ccb = NULL;
-#if (L2CAP_UCD_INCLUDED == TRUE)
- uint8_t xx;
-#endif
-
if (local_cid >= L2CAP_BASE_APPL_CID) {
/* find the associated CCB by "index" */
local_cid -= L2CAP_BASE_APPL_CID;
@@ -3081,21 +3058,6 @@
p_ccb = NULL;
}
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- else {
- /* searching fixed channel */
- p_ccb = l2cb.ccb_pool;
- for (xx = 0; xx < MAX_L2CAP_CHANNELS; xx++) {
- if ((p_ccb->local_cid == local_cid) && (p_ccb->in_use) &&
- (p_lcb == p_ccb->p_lcb))
- break;
- else
- p_ccb++;
- }
- if (xx >= MAX_L2CAP_CHANNELS) return NULL;
- }
-#endif
-
return (p_ccb);
}
@@ -3421,11 +3383,6 @@
void l2cu_check_channel_congestion(tL2C_CCB* p_ccb) {
size_t q_count = fixed_queue_length(p_ccb->xmit_hold_q);
-#if (L2CAP_UCD_INCLUDED == TRUE)
- if (p_ccb->local_cid == L2CAP_CONNECTIONLESS_CID) {
- q_count += fixed_queue_length(p_ccb->p_lcb->ucd_out_sec_pending_q);
- }
-#endif
/* If the CCB queue limit is subject to a quota, check for congestion */
/* if this channel has outgoing traffic */
if (p_ccb->buff_quota != 0) {
@@ -3446,19 +3403,6 @@
false);
l2cb.is_cong_cback_context = false;
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- else if (p_ccb->p_rcb && p_ccb->local_cid == L2CAP_CONNECTIONLESS_CID) {
- if (p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb) {
- L2CAP_TRACE_DEBUG(
- "L2CAP - Calling UCD CongestionStatus_Cb (false), "
- "SecPendingQ:%u,XmitQ:%u,Quota:%u",
- fixed_queue_length(p_ccb->p_lcb->ucd_out_sec_pending_q),
- fixed_queue_length(p_ccb->xmit_hold_q), p_ccb->buff_quota);
- p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb(
- p_ccb->p_lcb->remote_bd_addr, false);
- }
- }
-#endif
#if (L2CAP_NUM_FIXED_CHNLS > 0)
else {
uint8_t xx;
@@ -3487,19 +3431,6 @@
(*p_ccb->p_rcb->api.pL2CA_CongestionStatus_Cb)(p_ccb->local_cid,
true);
}
-#if (L2CAP_UCD_INCLUDED == TRUE)
- else if (p_ccb->p_rcb && p_ccb->local_cid == L2CAP_CONNECTIONLESS_CID) {
- if (p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb) {
- L2CAP_TRACE_DEBUG(
- "L2CAP - Calling UCD CongestionStatus_Cb (true), "
- "SecPendingQ:%u,XmitQ:%u,Quota:%u",
- fixed_queue_length(p_ccb->p_lcb->ucd_out_sec_pending_q),
- fixed_queue_length(p_ccb->xmit_hold_q), p_ccb->buff_quota);
- p_ccb->p_rcb->ucd.cb_info.pL2CA_UCD_Congestion_Status_Cb(
- p_ccb->p_lcb->remote_bd_addr, true);
- }
- }
-#endif
#if (L2CAP_NUM_FIXED_CHNLS > 0)
else {
uint8_t xx;