LCOV - code coverage report
Current view: top level - zephyr/bluetooth - att.h Hit Total Coverage
Test: new.info Lines: 29 32 90.6 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /** @file
       2             :  *  @brief Attribute Protocol handling.
       3             :  */
       4             : 
       5             : /*
       6             :  * Copyright (c) 2016 Intel Corporation
       7             :  *
       8             :  * SPDX-License-Identifier: Apache-2.0
       9             :  */
      10             : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_
      11             : #define ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_
      12             : 
      13             : /**
      14             :  * @brief Attribute Protocol (ATT)
      15             :  * @defgroup bt_att Attribute Protocol (ATT)
      16             :  * @ingroup bluetooth
      17             :  * @{
      18             :  */
      19             : 
      20             : #include <zephyr/sys/slist.h>
      21             : #include <zephyr/bluetooth/conn.h>
      22             : 
      23             : #ifdef __cplusplus
      24             : extern "C" {
      25             : #endif
      26             : 
      27             : /* Error codes for Error response PDU
      28             :  *
      29             :  * Defined by The Bluetooth Core Specification, Version 5.4, Vol 3, Part F, Section 3.4.1.1
      30             :  */
      31             : /** The ATT operation was successful */
      32           1 : #define BT_ATT_ERR_SUCCESS                      0x00
      33             : /** The attribute handle given was not valid on the server */
      34           1 : #define BT_ATT_ERR_INVALID_HANDLE               0x01
      35             : /** The attribute cannot be read */
      36           1 : #define BT_ATT_ERR_READ_NOT_PERMITTED           0x02
      37             : /** The attribute cannot be written */
      38           1 : #define BT_ATT_ERR_WRITE_NOT_PERMITTED          0x03
      39             : /** The attribute PDU was invalid */
      40           1 : #define BT_ATT_ERR_INVALID_PDU                  0x04
      41             : /** The attribute requires authentication before it can be read or written */
      42           1 : #define BT_ATT_ERR_AUTHENTICATION               0x05
      43             : /** The ATT Server does not support the request received from the client */
      44           1 : #define BT_ATT_ERR_NOT_SUPPORTED                0x06
      45             : /** Offset specified was past the end of the attribute */
      46           1 : #define BT_ATT_ERR_INVALID_OFFSET               0x07
      47             : /** The attribute requires authorization before it can be read or written */
      48           1 : #define BT_ATT_ERR_AUTHORIZATION                0x08
      49             : /** Too many prepare writes have been queued */
      50           1 : #define BT_ATT_ERR_PREPARE_QUEUE_FULL           0x09
      51             : /** No attribute found within the given attribute handle range */
      52           1 : #define BT_ATT_ERR_ATTRIBUTE_NOT_FOUND          0x0a
      53             : /** The attribute cannot be read using the ATT_READ_BLOB_REQ PDU */
      54           1 : #define BT_ATT_ERR_ATTRIBUTE_NOT_LONG           0x0b
      55             : /** The Encryption Key Size used for encrypting this link is too short */
      56           1 : #define BT_ATT_ERR_ENCRYPTION_KEY_SIZE          0x0c
      57             : /** The attribute value length is invalid for the operation */
      58           1 : #define BT_ATT_ERR_INVALID_ATTRIBUTE_LEN        0x0d
      59             : /**
      60             :  * @brief The attribute request that was requested has encountered an error that was unlikely
      61             :  *
      62             :  * The attribute request could therefore not be completed as requested
      63             :  */
      64           1 : #define BT_ATT_ERR_UNLIKELY                     0x0e
      65             : /** The attribute requires encryption before it can be read or written */
      66           1 : #define BT_ATT_ERR_INSUFFICIENT_ENCRYPTION      0x0f
      67             : /**
      68             :  * @brief The attribute type is not a supported grouping attribute
      69             :  *
      70             :  * The attribute type is not a supported grouping attribute as defined by a higher layer
      71             :  * specification.
      72             :  */
      73           1 : #define BT_ATT_ERR_UNSUPPORTED_GROUP_TYPE       0x10
      74             : /** Insufficient Resources to complete the request */
      75           1 : #define BT_ATT_ERR_INSUFFICIENT_RESOURCES       0x11
      76             : /** The server requests the client to rediscover the database */
      77           1 : #define BT_ATT_ERR_DB_OUT_OF_SYNC               0x12
      78             : /** The attribute parameter value was not allowed */
      79           1 : #define BT_ATT_ERR_VALUE_NOT_ALLOWED            0x13
      80             : 
      81             : /* Common Profile Error Codes
      82             :  *
      83             :  * Defined by the Supplement to the Bluetooth Core Specification (CSS), v11, Part B, Section 1.2.
      84             :  */
      85             : /** Write Request Rejected */
      86           1 : #define BT_ATT_ERR_WRITE_REQ_REJECTED           0xfc
      87             : /** Client Characteristic Configuration Descriptor Improperly Configured */
      88           1 : #define BT_ATT_ERR_CCC_IMPROPER_CONF            0xfd
      89             : /** Procedure Already in Progress */
      90           1 : #define BT_ATT_ERR_PROCEDURE_IN_PROGRESS        0xfe
      91             : /** Out of Range */
      92           1 : #define BT_ATT_ERR_OUT_OF_RANGE                 0xff
      93             : 
      94             : /* Version 5.2, Vol 3, Part F, 3.2.9 defines maximum attribute length to 512 */
      95           0 : #define BT_ATT_MAX_ATTRIBUTE_LEN                512
      96             : 
      97             : /* Handle 0x0000 is reserved for future use */
      98           0 : #define BT_ATT_FIRST_ATTRIBUTE_HANDLE           0x0001
      99             : /* 0xffff is defined as the maximum, and thus last, valid attribute handle */
     100           0 : #define BT_ATT_LAST_ATTRIBUTE_HANDLE            0xffff
     101             : 
     102             : /** Converts a ATT error to string.
     103             :  *
     104             :  * The error codes are described in the Bluetooth Core specification,
     105             :  * Vol 3, Part F, Section 3.4.1.1 and in
     106             :  * The Supplement to the Bluetooth Core Specification (CSS), v11,
     107             :  * Part B, Section 1.2.
     108             :  *
     109             :  * The ATT and GATT documentation found in Vol 4, Part F and
     110             :  * Part G describe when the different error codes are used.
     111             :  *
     112             :  * See also the defined BT_ATT_ERR_* macros.
     113             :  *
     114             :  * @return The string representation of the ATT error code.
     115             :  *         If @kconfig{CONFIG_BT_ATT_ERR_TO_STR} is not enabled,
     116             :  *         this just returns the empty string
     117             :  */
     118             : #if defined(CONFIG_BT_ATT_ERR_TO_STR)
     119             : const char *bt_att_err_to_str(uint8_t att_err);
     120             : #else
     121           1 : static inline const char *bt_att_err_to_str(uint8_t att_err)
     122             : {
     123             :         ARG_UNUSED(att_err);
     124             : 
     125             :         return "";
     126             : }
     127             : #endif
     128             : 
     129             : #if defined(CONFIG_BT_EATT)
     130             : #if defined(CONFIG_BT_TESTING)
     131             : 
     132             : int bt_eatt_disconnect_one(struct bt_conn *conn);
     133             : 
     134             : /* Reconfigure all EATT channels on connection */
     135             : int bt_eatt_reconfigure(struct bt_conn *conn, uint16_t mtu);
     136             : 
     137             : #endif /* CONFIG_BT_TESTING */
     138             : 
     139             : /** @brief Connect Enhanced ATT channels
     140             :  *
     141             :  * Sends a series of Credit Based Connection Requests to connect @p num_channels
     142             :  * Enhanced ATT channels. The peer may have limited resources and fewer channels
     143             :  * may be created.
     144             :  *
     145             :  * @param conn The connection to send the request on
     146             :  * @param num_channels The number of Enhanced ATT beares to request.
     147             :  * Must be in the range 1 - @kconfig{CONFIG_BT_EATT_MAX}, inclusive.
     148             :  *
     149             :  * @return 0 in case of success or negative value in case of error.
     150             :  * @retval -EINVAL if @p num_channels is not in the allowed range or @p conn is NULL.
     151             :  * @retval -ENOMEM if less than @p num_channels are allocated.
     152             :  * @retval 0 in case of success
     153             :  */
     154           1 : int bt_eatt_connect(struct bt_conn *conn, size_t num_channels);
     155             : 
     156             : /** @brief Get number of EATT channels connected.
     157             :  *
     158             :  * @param conn The connection to get the number of EATT channels for.
     159             :  *
     160             :  * @return The number of EATT channels connected.
     161             :  * Returns 0 if @p conn is NULL or not connected.
     162             :  */
     163           1 : size_t bt_eatt_count(struct bt_conn *conn);
     164             : 
     165             : #endif /* CONFIG_BT_EATT */
     166             : 
     167             : /** @brief ATT channel option bit field values.
     168             :  * @note @ref BT_ATT_CHAN_OPT_UNENHANCED_ONLY and @ref BT_ATT_CHAN_OPT_ENHANCED_ONLY are mutually
     169             :  * exclusive and both bits may not be set.
     170             :  */
     171           1 : enum bt_att_chan_opt {
     172             :         /** Both Enhanced and Unenhanced channels can be used  */
     173             :         BT_ATT_CHAN_OPT_NONE = 0x0,
     174             :         /** Only Unenhanced channels will be used  */
     175             :         BT_ATT_CHAN_OPT_UNENHANCED_ONLY = BIT(0),
     176             :         /** Only Enhanced channels will be used  */
     177             :         BT_ATT_CHAN_OPT_ENHANCED_ONLY = BIT(1),
     178             : };
     179             : 
     180             : #ifdef __cplusplus
     181             : }
     182             : #endif
     183             : 
     184             : /**
     185             :  * @}
     186             :  */
     187             : 
     188             : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_ATT_H_ */

Generated by: LCOV version 1.14