Line data Source code
1 1 : /** @file 2 : * @brief Bluetooth byteorder API 3 : */ 4 : 5 : /* 6 : * Copyright (c) 2023 Nordic Semiconductor ASA 7 : * 8 : * SPDX-License-Identifier: Apache-2.0 9 : */ 10 : 11 : #ifndef ZEPHYR_INCLUDE_BLUETOOTH_BYTEORDER_H_ 12 : #define ZEPHYR_INCLUDE_BLUETOOTH_BYTEORDER_H_ 13 : 14 : /** 15 : * @brief Byteorder 16 : * @defgroup bt_byteorder Byteorder 17 : * @ingroup bluetooth 18 : * @{ 19 : */ 20 : 21 : #ifdef __cplusplus 22 : extern "C" { 23 : #endif 24 : 25 : 26 : /** @brief Encode 16-bit value into array values in little-endian format. 27 : * 28 : * Helper macro to encode 16-bit values into comma separated values. 29 : * 30 : * @note @p _v is evaluated 2 times. 31 : * 32 : * @param _v 16-bit integer in host endianness. 33 : * 34 : * @return The comma separated values for the 16-bit value. 35 : */ 36 1 : #define BT_BYTES_LIST_LE16(_v) \ 37 : (((_v) >> 0) & 0xFFU), \ 38 : (((_v) >> 8) & 0xFFU) \ 39 : 40 : /** @brief Encode 24-bit value into array values in little-endian format. 41 : * 42 : * Helper macro to encode 24-bit values into comma separated values. 43 : * 44 : * @note @p _v is evaluated 3 times. 45 : * 46 : * @param _v 24-bit integer in host endianness. 47 : * 48 : * @return The comma separated values for the 24-bit value. 49 : */ 50 1 : #define BT_BYTES_LIST_LE24(_v) \ 51 : BT_BYTES_LIST_LE16(_v), \ 52 : (((_v) >> 16) & 0xFFU) \ 53 : 54 : /** @brief Encode 32-bit value into array values in little-endian format. 55 : * 56 : * Helper macro to encode 32-bit values into comma separated values. 57 : * 58 : * @note @p _v is evaluated 4 times. 59 : * 60 : * @param _v 32-bit integer in host endianness. 61 : * 62 : * @return The comma separated values for the 32-bit value. 63 : */ 64 1 : #define BT_BYTES_LIST_LE32(_v) \ 65 : BT_BYTES_LIST_LE24(_v), \ 66 : (((_v) >> 24) & 0xFFU) \ 67 : 68 : /** @brief Encode 40-bit value into array values in little-endian format. 69 : * 70 : * Helper macro to encode 40-bit values into comma separated values. 71 : * 72 : * @note @p _v is evaluated 5 times. 73 : * 74 : * @param _v 40-bit integer in host endianness. 75 : * 76 : * @return The comma separated values for the 40-bit value. 77 : */ 78 1 : #define BT_BYTES_LIST_LE40(_v) \ 79 : BT_BYTES_LIST_LE24(_v), \ 80 : BT_BYTES_LIST_LE16((_v) >> 24) \ 81 : 82 : /** @brief Encode 48-bit value into array values in little-endian format. 83 : * 84 : * Helper macro to encode 48-bit values into comma separated values. 85 : * 86 : * @note @p _v is evaluated 6 times. 87 : * 88 : * @param _v 48-bit integer in host endianness. 89 : * 90 : * @return The comma separated values for the 48-bit value. 91 : */ 92 1 : #define BT_BYTES_LIST_LE48(_v) \ 93 : BT_BYTES_LIST_LE32(_v), \ 94 : BT_BYTES_LIST_LE16((_v) >> 32) \ 95 : 96 : /** @brief Encode 64-bit value into array values in little-endian format. 97 : * 98 : * Helper macro to encode 64-bit values into comma separated values. 99 : * 100 : * @note @p _v is evaluated 8 times. 101 : * 102 : * @param _v 64-bit integer in host endianness. 103 : * 104 : * @return The comma separated values for the 64-bit value. 105 : */ 106 1 : #define BT_BYTES_LIST_LE64(_v) \ 107 : BT_BYTES_LIST_LE32(_v), \ 108 : BT_BYTES_LIST_LE32((_v) >> 32) \ 109 : 110 : /** @brief Encode 16-bit value into array values in big-endian format. 111 : * 112 : * Helper macro to encode 16-bit values into comma separated values. 113 : * 114 : * @note @p _v is evaluated 2 times. 115 : * 116 : * @param _v 16-bit integer in host endianness. 117 : * 118 : * @return The comma separated values for the 16-bit value. 119 : */ 120 1 : #define BT_BYTES_LIST_BE16(_v) (((_v) >> 8) & 0xFFU), (((_v) >> 0) & 0xFFU) 121 : 122 : /** @brief Encode 24-bit value into array values in big-endian format. 123 : * 124 : * Helper macro to encode 24-bit values into comma separated values. 125 : * 126 : * @note @p _v is evaluated 3 times. 127 : * 128 : * @param _v 24-bit integer in host endianness. 129 : * 130 : * @return The comma separated values for the 24-bit value. 131 : */ 132 1 : #define BT_BYTES_LIST_BE24(_v) (((_v) >> 16) & 0xFFU), BT_BYTES_LIST_BE16(_v) 133 : 134 : /** @brief Encode 32-bit value into array values in big-endian format. 135 : * 136 : * Helper macro to encode 32-bit values into comma separated values. 137 : * 138 : * @note @p _v is evaluated 4 times. 139 : * 140 : * @param _v 32-bit integer in host endianness. 141 : * 142 : * @return The comma separated values for the 32-bit value. 143 : */ 144 1 : #define BT_BYTES_LIST_BE32(_v) (((_v) >> 24) & 0xFFU), BT_BYTES_LIST_BE24(_v) 145 : 146 : /** @brief Encode 40-bit value into array values in big-endian format. 147 : * 148 : * Helper macro to encode 40-bit values into comma separated values. 149 : * 150 : * @note @p _v is evaluated 5 times. 151 : * 152 : * @param _v 40-bit integer in host endianness. 153 : * 154 : * @return The comma separated values for the 40-bit value. 155 : */ 156 1 : #define BT_BYTES_LIST_BE40(_v) BT_BYTES_LIST_BE16((_v) >> 24), BT_BYTES_LIST_BE24(_v) 157 : 158 : /** @brief Encode 48-bit value into array values in big-endian format. 159 : * 160 : * Helper macro to encode 48-bit values into comma separated values. 161 : * 162 : * @note @p _v is evaluated 6 times. 163 : * 164 : * @param _v 48-bit integer in host endianness. 165 : * 166 : * @return The comma separated values for the 48-bit value. 167 : */ 168 1 : #define BT_BYTES_LIST_BE48(_v) BT_BYTES_LIST_BE16((_v) >> 32), BT_BYTES_LIST_BE32(_v) 169 : 170 : /** @brief Encode 64-bit value into array values in big-endian format. 171 : * 172 : * Helper macro to encode 64-bit values into comma separated values. 173 : * 174 : * @note @p _v is evaluated 8 times. 175 : * 176 : * @param _v 64-bit integer in host endianness. 177 : * 178 : * @return The comma separated values for the 64-bit value. 179 : */ 180 1 : #define BT_BYTES_LIST_BE64(_v) BT_BYTES_LIST_BE32((_v) >> 32), BT_BYTES_LIST_BE32(_v) 181 : 182 : /** 183 : * @} 184 : */ 185 : 186 : #ifdef __cplusplus 187 : } 188 : #endif 189 : 190 : #endif /* ZEPHYR_INCLUDE_BLUETOOTH_BYTEORDER_H_ */