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

Commit 946e591a authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

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

parents ecdea713 5016fae1
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);
}

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