Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 748d6207 authored by Andre Eisenbach's avatar Andre Eisenbach Committed by Matthew Xie
Browse files

Parse LMP features to enable LE support

Only send LE commands if the local Bluetooth radio supports LE.
Improved remote feature parsing by reading extended features. Before
this change, only the first page of the features was parsed.
bug 8332905

Change-Id: I0b90771dcfc453efea157f463b9df006e0178609
parent fdbc8756
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ static BOOLEAN bta_dm_check_av(UINT16 event);
#if (BTM_BUSY_LEVEL_CHANGE_INCLUDED == TRUE)
static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data);
#else
static void bta_dm_acl_change_cback (BD_ADDR p_bda, DEV_CLASS p_dc, BD_NAME p_bdn, BD_FEATURES features, BOOLEAN is_new);
static void bta_dm_acl_change_cback (BD_ADDR p_bda, DEV_CLASS p_dc, BD_NAME p_bdn, UINT8 *features, BOOLEAN is_new);
#endif
static void bta_dm_policy_cback(tBTA_SYS_CONN_STATUS status, UINT8 id, UINT8 app_id, BD_ADDR peer_addr);

@@ -3230,7 +3230,7 @@ static void bta_dm_bl_change_cback (tBTM_BL_EVENT_DATA *p_data)
**
*******************************************************************************/
static void bta_dm_acl_change_cback (BD_ADDR p_bda, DEV_CLASS p_dc, BD_NAME p_bdn,
                                     BD_FEATURES features, BOOLEAN is_new)
                                     UINT8 *features, BOOLEAN is_new)
{

    tBTA_DM_ACL_CHANGE * p_msg;
@@ -4072,8 +4072,12 @@ static void bta_dm_set_eir (char *local_name)

    UINT8_TO_STREAM(p, local_name_len + 1);
    UINT8_TO_STREAM(p, data_type);

    if (local_name != NULL)
    {
        memcpy(p, local_name, local_name_len);
        p += local_name_len;
    }
    free_eir_length -= local_name_len + 2;

#if (BTA_EIR_CANNED_UUID_LIST == TRUE)
+14 −5
Original line number Diff line number Diff line
@@ -350,11 +350,20 @@ tBTA_STATUS BTA_DmVendorSpecificCommand (UINT16 opcode, UINT8 param_len,
        {
            p_msg->hdr.event = BTA_DM_API_VENDOR_SPECIFIC_COMMAND_EVT;
            p_msg->opcode = opcode;
            p_msg->param_len = param_len;
            p_msg->p_param_buf = (UINT8 *)(p_msg + 1);
            p_msg->p_cback = p_cback;

            if (p_param_buf && param_len)
            {
                memcpy (p_msg->p_param_buf, p_param_buf, param_len);
                p_msg->param_len = param_len;
            }
            else
            {
                p_msg->param_len = 0;
                p_msg->p_param_buf = NULL;

            }

            bta_sys_sendmsg(p_msg);
        }
@@ -726,7 +735,7 @@ void BTA_DmAddDevice(BD_ADDR bd_addr, DEV_CLASS dev_class, LINK_KEY link_key,
        }

        memset (p_msg->bd_name, 0, BD_NAME_LEN);
        memset (p_msg->features, 0, BD_FEATURES_LEN);
        memset (p_msg->features, 0, sizeof (p_msg->features));

        bta_sys_sendmsg(p_msg);
    }
@@ -776,7 +785,7 @@ tBTA_STATUS BTA_DmRemoveDevice(BD_ADDR bd_addr)
**
*******************************************************************************/
void BTA_DmAddDevWithName (BD_ADDR bd_addr, DEV_CLASS dev_class,
                                      BD_NAME bd_name, BD_FEATURES features,
                                      BD_NAME bd_name, UINT8 *features,
                                      LINK_KEY link_key, tBTA_SERVICE_MASK trusted_mask,
                                      BOOLEAN is_trusted, UINT8 key_type, tBTA_IO_CAP io_cap)
{
@@ -810,7 +819,7 @@ void BTA_DmAddDevWithName (BD_ADDR bd_addr, DEV_CLASS dev_class,
            memcpy(p_msg->bd_name, bd_name, BD_NAME_LEN);

        if (features)
            memcpy(p_msg->features, features, BD_FEATURES_LEN);
            memcpy(p_msg->features, features, sizeof(p_msg->features));

        bta_sys_sendmsg(p_msg);
    }
+1 −1
Original line number Diff line number Diff line
@@ -398,7 +398,7 @@ typedef struct
    BOOLEAN             link_key_known;
    BOOLEAN             dc_known;
    BD_NAME             bd_name;
    BD_FEATURES         features;
    UINT8               features[BTA_FEATURE_BYTES_PER_PAGE * (BTA_EXT_FEATURES_PAGE_MAX + 1)];
} tBTA_DM_API_ADD_DEVICE;

/* data type for BTA_DM_API_REMOVE_ACL_EVT */
+10 −1
Original line number Diff line number Diff line
@@ -434,6 +434,7 @@ typedef UINT8 tBTA_DM_BLE_SCAN_COND_OP;
#define BTA_DM_BLE_PF_MANU_DATA            BTM_BLE_PF_MANU_DATA
#define BTA_DM_BLE_PF_SRVC_DATA            BTM_BLE_PF_SRVC_DATA
#define BTA_DM_BLE_PF_TYPE_MAX             BTM_BLE_PF_TYPE_MAX
#define BTA_DM_BLE_PF_TYPE_ALL             BTM_BLE_PF_TYPE_ALL
typedef UINT8   tBTA_DM_BLE_PF_COND_TYPE;

typedef struct
@@ -996,6 +997,10 @@ typedef tSDP_DISCOVERY_DB tBTA_DISCOVERY_DB;
#define         BTA_DI_NUM_MAX       3
#endif

/* Device features mask definitions */
#define BTA_FEATURE_BYTES_PER_PAGE  BTM_FEATURE_BYTES_PER_PAGE
#define BTA_EXT_FEATURES_PAGE_MAX   BTM_EXT_FEATURES_PAGE_MAX

/*****************************************************************************
**  External Function Declarations
*****************************************************************************/
@@ -1354,9 +1359,13 @@ BTA_API extern void BTA_DmAddDevice(BD_ADDR bd_addr, DEV_CLASS dev_class,
**
** Returns          void
**
** Note:            features points to the remote device features array.
**                  The array size is
**                  BTA_FEATURE_BYTES_PER_PAGE * (BTA_EXT_FEATURES_PAGE_MAX + 1)
**
*******************************************************************************/
BTA_API extern void BTA_DmAddDevWithName (BD_ADDR bd_addr, DEV_CLASS dev_class,
                                      BD_NAME bd_name, BD_FEATURES features,
                                      BD_NAME bd_name, UINT8 *features,
                                      LINK_KEY link_key, tBTA_SERVICE_MASK trusted_mask,
                                      BOOLEAN is_trusted, UINT8 key_type, tBTA_IO_CAP io_cap);

+360 −128

File changed.

Preview size limit exceeded, changes collapsed.

Loading