| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_CONNECTION_PARAMETERS_H_ |
| #define SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_CONNECTION_PARAMETERS_H_ |
| |
| #include <cstdint> |
| #include <string> |
| |
| #include "src/lib/fxl/strings/string_printf.h" |
| |
| namespace bt::hci { |
| |
| // All LE connection parameters in this file are given in terms of a |
| // "multiplier" that to controller uses to calculate actual duration values. |
| // The exact value calculations and ranges depend on the context in which these |
| // values are used (e.g. see LECreateConnectionCommandParams in hci.h). |
| // |
| // See the specification section referenced above each LEConnectionParameters |
| // getter below. See hci_constants.h for min/max allowed ranges for each |
| // parameter. |
| |
| // Connection parameters for a LE connection. Used to represent parameters in |
| // active use by the link layer for a particular logical link. |
| class LEConnectionParameters final { |
| public: |
| LEConnectionParameters(uint16_t interval, uint16_t latency, uint16_t supervision_timeout); |
| |
| // Default constructor initializes all values to 0. This is intended for cases |
| // that require default initialization, e.g. when this structure is used |
| // inside a container that default initializes its contents. |
| LEConnectionParameters(); |
| |
| // The connection interval indicates the frequency of link layer connection |
| // events over which data channel PDUs can be transmitted. See Core Spec v5.0, |
| // Vol 6, Part B, Section 4.5.1 for more information on the link layer |
| // connection events. |
| uint16_t interval() const { return interval_; } |
| |
| // The maximum allowed connection latency. See Core Spec v5.0, Vol 6, Part |
| // B, Section 4.5.2. |
| uint16_t latency() const { return latency_; } |
| |
| // This defines the maximum time between two received data packet PDUs |
| // before the connection is considered lost. See Core Spec v5.0, Vol 6, Part |
| // B, Section 4.5.2. This value is in centiseconds and must be within |
| // the range 100 ms - 32 s (10 cs - 3200 cs). |
| uint16_t supervision_timeout() const { return supervision_timeout_; } |
| |
| // Equality operator |
| bool operator==(const LEConnectionParameters& other) const; |
| |
| std::string ToString() const; |
| |
| private: |
| uint16_t interval_; |
| uint16_t latency_; |
| uint16_t supervision_timeout_; |
| }; |
| |
| // Preferred connection parameters for LE connection. Used to represent |
| // parameters that act as a hint to the controller. This is used for: |
| // |
| // * initiating a new connection as a master |
| // * to represent a slave's preferred connection parameters |
| class LEPreferredConnectionParameters final { |
| public: |
| LEPreferredConnectionParameters(uint16_t min_interval, uint16_t max_interval, |
| uint16_t max_latency, uint16_t supervision_timeout); |
| |
| // Default constructor initializes all values to 0. This is intended for cases |
| // that require default initialization, e.g. when this structure is used |
| // inside a container that default initializes its contents. |
| LEPreferredConnectionParameters(); |
| |
| // See LEConnectionParameters for a description of these fields. See |
| // hci_constants.h for the allowed ranges for these values. |
| uint16_t min_interval() const { return min_interval_; } |
| uint16_t max_interval() const { return max_interval_; } |
| uint16_t max_latency() const { return max_latency_; } |
| uint16_t supervision_timeout() const { return supervision_timeout_; } |
| |
| // Equality operator |
| bool operator==(const LEPreferredConnectionParameters& other) const; |
| |
| private: |
| uint16_t min_interval_; |
| uint16_t max_interval_; |
| uint16_t max_latency_; |
| uint16_t supervision_timeout_; |
| }; |
| |
| } // namespace bt::hci |
| |
| #endif // SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_CONNECTION_PARAMETERS_H_ |