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

Commit 5016fae1 authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Fix how LE connection parameters are set after connecting

This patch fixes bug introduced in commit
e5d56f55
which would cause unnecessary connection parameter update requests
to be send. It should be sent immediately after connecting only.

Bug: 32563079
Bug: 28435172
Change-Id: Ibd9301a990f12a94e8043b9c29a480f068251ba8
parent f9dbfb6a
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);
}

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