ref: e888b92b1f2e239223a31e21f0f6bfdc9f2e6a9b
src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef H_BLE_UUID_ #define H_BLE_UUID_ /** * @brief Bluetooth UUID * @defgroup bt_uuid Bluetooth UUID * @ingroup bt_host * @{ */ #include <inttypes.h> #include <stddef.h> #ifdef __cplusplus extern "C" { #endif struct os_mbuf; /** Type of UUID */ enum { /** 16-bit UUID (BT SIG assigned) */ BLE_UUID_TYPE_16 = 16, /** 32-bit UUID (BT SIG assigned) */ BLE_UUID_TYPE_32 = 32, /** 128-bit UUID */ BLE_UUID_TYPE_128 = 128, }; /** Generic UUID type, to be used only as a pointer */ typedef struct { /** Type of the UUID */ uint8_t type; } ble_uuid_t; /** 16-bit UUID */ typedef struct { ble_uuid_t u; uint16_t value; } ble_uuid16_t; /** 32-bit UUID */ typedef struct { ble_uuid_t u; uint32_t value; } ble_uuid32_t; /** 128-bit UUID */ typedef struct { ble_uuid_t u; uint8_t value[16]; } ble_uuid128_t; /** Universal UUID type, to be used for any-UUID static allocation */ typedef union { ble_uuid_t u; ble_uuid16_t u16; ble_uuid32_t u32; ble_uuid128_t u128; } ble_uuid_any_t; #define BLE_UUID16_INIT(uuid16) \ { \ .u.type = BLE_UUID_TYPE_16, \ .value = (uuid16), \ } #define BLE_UUID32_INIT(uuid32) \ { \ .u.type = BLE_UUID_TYPE_32, \ .value = (uuid32), \ } #define BLE_UUID128_INIT(uuid128...) \ { \ .u.type = BLE_UUID_TYPE_128, \ .value = { uuid128 }, \ } #define BLE_UUID16_DECLARE(uuid16) \ ((ble_uuid_t *) (&(ble_uuid16_t) BLE_UUID16_INIT(uuid16))) #define BLE_UUID32_DECLARE(uuid32) \ ((ble_uuid_t *) (&(ble_uuid32_t) BLE_UUID32_INIT(uuid32))) #define BLE_UUID128_DECLARE(uuid128...) \ ((ble_uuid_t *) (&(ble_uuid128_t) BLE_UUID128_INIT(uuid128))) #define BLE_UUID16(u) \ ((ble_uuid16_t *) (u)) #define BLE_UUID32(u) \ ((ble_uuid32_t *) (u)) #define BLE_UUID128(u) \ ((ble_uuid128_t *) (u)) /** Size of buffer needed to store UUID as a string. * Includes trailing \0. */ #define BLE_UUID_STR_LEN (37) /** @brief Constructs a UUID object from a byte array. * * @param uuid On success, this gets populated with the constructed UUID. * @param buf The source buffer to parse. * @param len The size of the buffer, in bytes. * * @return 0 on success, BLE_HS_EINVAL if the source buffer does not contain * a valid UUID. */ int ble_uuid_init_from_buf(ble_uuid_any_t *uuid, const void *buf, size_t len); /** @brief Compares two Bluetooth UUIDs. * * @param uuid1 The first UUID to compare. * @param uuid2 The second UUID to compare. * * @return 0 if the two UUIDs are equal, nonzero if the UUIDs differ. */ int ble_uuid_cmp(const ble_uuid_t *uuid1, const ble_uuid_t *uuid2); /** @brief Copy Bluetooth UUID * * @param dst Destination UUID. * @param src Source UUID. */ void ble_uuid_copy(ble_uuid_any_t *dst, const ble_uuid_t *src); /** @brief Converts the specified UUID to its string representation. * * Example string representations: * o 16-bit: 0x1234 * o 32-bit: 0x12345678 * o 128-bit: 12345678-1234-1234-1234-123456789abc * * @param uuid The source UUID to convert. * @param dst The destination buffer. * * @return A pointer to the supplied destination buffer. */ char *ble_uuid_to_str(const ble_uuid_t *uuid, char *dst); /** @brief Converts the specified 16-bit UUID to a uint16_t. * * @param uuid The source UUID to convert. * * @return The converted integer on success, NULL if the specified UUID is * not 16 bits. */ uint16_t ble_uuid_u16(const ble_uuid_t *uuid); #ifdef __cplusplus } #endif /** * @} */ #endif /* _BLE_HOST_UUID_H */ |