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

Commit e140ec32 authored by Jakub Pawlowski's avatar Jakub Pawlowski Committed by android-build-merger
Browse files

Merge "Fix how LE connection parameters are set after connecting"

am: 946e591a

Change-Id: Ic311d18eaf8c0916dc92458b3a3d72545d0473b7
parents 0f06465c 946e591a
Loading
Loading
Loading
Loading
+40 −1
Original line number Diff line number Diff line
@@ -886,6 +886,43 @@ void BTM_SetDefaultLinkPolicy (uint16_t settings)
    btsnd_hcic_write_def_policy_set(settings);
}


void btm_use_preferred_conn_params(BD_ADDR bda) {
    tL2C_LCB *p_lcb = l2cu_find_lcb_by_bd_addr (bda, BT_TRANSPORT_LE);
    tBTM_SEC_DEV_REC    *p_dev_rec = btm_find_or_alloc_dev (bda);

    /* If there are any preferred connection parameters, set them now */
    if ( (p_dev_rec->conn_params.min_conn_int     >= BTM_BLE_CONN_INT_MIN ) &&
         (p_dev_rec->conn_params.min_conn_int     <= BTM_BLE_CONN_INT_MAX ) &&
         (p_dev_rec->conn_params.max_conn_int     >= BTM_BLE_CONN_INT_MIN ) &&
         (p_dev_rec->conn_params.max_conn_int     <= BTM_BLE_CONN_INT_MAX ) &&
         (p_dev_rec->conn_params.slave_latency    <= BTM_BLE_CONN_LATENCY_MAX ) &&
         (p_dev_rec->conn_params.supervision_tout >= BTM_BLE_CONN_SUP_TOUT_MIN) &&
         (p_dev_rec->conn_params.supervision_tout <= BTM_BLE_CONN_SUP_TOUT_MAX) &&
         ((p_lcb->min_interval < p_dev_rec->conn_params.min_conn_int &&
          p_dev_rec->conn_params.min_conn_int != BTM_BLE_CONN_PARAM_UNDEF) ||
          (p_lcb->min_interval > p_dev_rec->conn_params.max_conn_int) ||
          (p_lcb->latency > p_dev_rec->conn_params.slave_latency) ||
          (p_lcb->timeout > p_dev_rec->conn_params.supervision_tout)))
    {
        BTM_TRACE_DEBUG ("%s: HANDLE=%d min_conn_int=%d max_conn_int=%d slave_latency=%d supervision_tout=%d", __func__,
                            p_lcb->handle, p_dev_rec->conn_params.min_conn_int, p_dev_rec->conn_params.max_conn_int,
                            p_dev_rec->conn_params.slave_latency, p_dev_rec->conn_params.supervision_tout);

        p_lcb->min_interval =  p_dev_rec->conn_params.min_conn_int;
        p_lcb->max_interval = p_dev_rec->conn_params.max_conn_int;
        p_lcb->timeout      = p_dev_rec->conn_params.supervision_tout;
        p_lcb->latency      = p_dev_rec->conn_params.slave_latency;

        btsnd_hcic_ble_upd_ll_conn_params (p_lcb->handle,
                                           p_dev_rec->conn_params.min_conn_int,
                                           p_dev_rec->conn_params.max_conn_int,
                                           p_dev_rec->conn_params.slave_latency,
                                           p_dev_rec->conn_params.supervision_tout,
                                           0, 0);
    }
}

/*******************************************************************************
**
** Function         btm_read_remote_version_complete
@@ -920,8 +957,10 @@ void btm_read_remote_version_complete (uint8_t *p)
            }

#if (BLE_INCLUDED == TRUE)
            if (p_acl_cb->transport == BT_TRANSPORT_LE)
            if (p_acl_cb->transport == BT_TRANSPORT_LE) {
                l2cble_notify_le_connection (p_acl_cb->remote_addr);
                btm_use_preferred_conn_params(p_acl_cb->remote_addr);
            }
#endif  // (defined(BLE_INCLUDED) && (BLE_INCLUDED == true))
            break;
        }
+0 −38
Original line number Diff line number Diff line
@@ -231,42 +231,6 @@ uint16_t L2CA_GetDisconnectReason (BD_ADDR remote_bda, tBT_TRANSPORT transport)
    return reason;
}

void l2cble_use_preferred_conn_params(BD_ADDR bda) {
    tL2C_LCB *p_lcb = l2cu_find_lcb_by_bd_addr (bda, BT_TRANSPORT_LE);
    tBTM_SEC_DEV_REC    *p_dev_rec = btm_find_or_alloc_dev (bda);

    /* If there are any preferred connection parameters, set them now */
    if ( (p_dev_rec->conn_params.min_conn_int     >= BTM_BLE_CONN_INT_MIN ) &&
         (p_dev_rec->conn_params.min_conn_int     <= BTM_BLE_CONN_INT_MAX ) &&
         (p_dev_rec->conn_params.max_conn_int     >= BTM_BLE_CONN_INT_MIN ) &&
         (p_dev_rec->conn_params.max_conn_int     <= BTM_BLE_CONN_INT_MAX ) &&
         (p_dev_rec->conn_params.slave_latency    <= BTM_BLE_CONN_LATENCY_MAX ) &&
         (p_dev_rec->conn_params.supervision_tout >= BTM_BLE_CONN_SUP_TOUT_MIN) &&
         (p_dev_rec->conn_params.supervision_tout <= BTM_BLE_CONN_SUP_TOUT_MAX) &&
         ((p_lcb->min_interval < p_dev_rec->conn_params.min_conn_int &&
          p_dev_rec->conn_params.min_conn_int != BTM_BLE_CONN_PARAM_UNDEF) ||
          (p_lcb->min_interval > p_dev_rec->conn_params.max_conn_int) ||
          (p_lcb->latency > p_dev_rec->conn_params.slave_latency) ||
          (p_lcb->timeout > p_dev_rec->conn_params.supervision_tout)))
    {
        L2CAP_TRACE_DEBUG ("%s: HANDLE=%d min_conn_int=%d max_conn_int=%d slave_latency=%d supervision_tout=%d", __func__,
                            p_lcb->handle, p_dev_rec->conn_params.min_conn_int, p_dev_rec->conn_params.max_conn_int,
                            p_dev_rec->conn_params.slave_latency, p_dev_rec->conn_params.supervision_tout);

        p_lcb->min_interval = p_dev_rec->conn_params.min_conn_int;
        p_lcb->max_interval = p_dev_rec->conn_params.max_conn_int;
        p_lcb->timeout      = p_dev_rec->conn_params.supervision_tout;
        p_lcb->latency      = p_dev_rec->conn_params.slave_latency;

        btsnd_hcic_ble_upd_ll_conn_params (p_lcb->handle,
                                           p_dev_rec->conn_params.min_conn_int,
                                           p_dev_rec->conn_params.max_conn_int,
                                           p_dev_rec->conn_params.slave_latency,
                                           p_dev_rec->conn_params.supervision_tout,
                                           0, 0);
    }
}

/*******************************************************************************
**
** Function l2cble_notify_le_connection
@@ -299,8 +263,6 @@ void l2cble_notify_le_connection (BD_ADDR bda)
                l2c_csm_execute (p_ccb, L2CEVT_LP_CONNECT_CFM, NULL);
        }
    }

    l2cble_use_preferred_conn_params(bda);
}

/*******************************************************************************