summaryrefslogtreecommitdiff
path: root/src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h')
-rw-r--r--src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h b/src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h
new file mode 100644
index 00000000..d3576c59
--- /dev/null
+++ b/src/libs/mynewt-nimble/nimble/host/include/host/ble_uuid.h
@@ -0,0 +1,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 */