195489c19Sopenharmony_ci/*
295489c19Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd.
395489c19Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
495489c19Sopenharmony_ci * you may not use this file except in compliance with the License.
595489c19Sopenharmony_ci * You may obtain a copy of the License at
695489c19Sopenharmony_ci *
795489c19Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
895489c19Sopenharmony_ci *
995489c19Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1095489c19Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1195489c19Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1295489c19Sopenharmony_ci * See the License for the specific language governing permissions and
1395489c19Sopenharmony_ci * limitations under the License.
1495489c19Sopenharmony_ci */
1595489c19Sopenharmony_ci
1695489c19Sopenharmony_ci/**
1795489c19Sopenharmony_ci * @addtogroup Bluetooth
1895489c19Sopenharmony_ci * @{
1995489c19Sopenharmony_ci *
2095489c19Sopenharmony_ci * @brief Defines uuid for framework.
2195489c19Sopenharmony_ci *
2295489c19Sopenharmony_ci * @since 6
2395489c19Sopenharmony_ci */
2495489c19Sopenharmony_ci
2595489c19Sopenharmony_ci/**
2695489c19Sopenharmony_ci * @file uuid.h
2795489c19Sopenharmony_ci *
2895489c19Sopenharmony_ci * @brief framework uuid interface.
2995489c19Sopenharmony_ci *
3095489c19Sopenharmony_ci * @since 6
3195489c19Sopenharmony_ci */
3295489c19Sopenharmony_ci
3395489c19Sopenharmony_ci#ifndef DUMMY_UUID_H
3495489c19Sopenharmony_ci#define DUMMY_UUID_H
3595489c19Sopenharmony_ci
3695489c19Sopenharmony_ci#include "sys/time.h"
3795489c19Sopenharmony_ci#include <string>
3895489c19Sopenharmony_ci#include <array>
3995489c19Sopenharmony_ci#include <ctime>
4095489c19Sopenharmony_ci#include <regex>
4195489c19Sopenharmony_ci
4295489c19Sopenharmony_cinamespace OHOS {
4395489c19Sopenharmony_cinamespace Bluetooth {
4495489c19Sopenharmony_ci
4595489c19Sopenharmony_ci/**
4695489c19Sopenharmony_ci * @brief This class provides framework uuid.
4795489c19Sopenharmony_ci *
4895489c19Sopenharmony_ci * @since 6
4995489c19Sopenharmony_ci */
5095489c19Sopenharmony_ciclass UUID {
5195489c19Sopenharmony_cipublic:
5295489c19Sopenharmony_ci    //128 bits uuid length
5395489c19Sopenharmony_ci    const static int UUID128_BYTES_LEN = 16;
5495489c19Sopenharmony_ci
5595489c19Sopenharmony_ci    /**
5695489c19Sopenharmony_ci     * @brief A constructor used to create an <b>UUID</b> instance.
5795489c19Sopenharmony_ci     *
5895489c19Sopenharmony_ci     * @since 6
5995489c19Sopenharmony_ci     */
6095489c19Sopenharmony_ci    UUID(){};
6195489c19Sopenharmony_ci
6295489c19Sopenharmony_ci    /**
6395489c19Sopenharmony_ci     * @brief A destructor used to delete the <b>UUID</b> instance.
6495489c19Sopenharmony_ci     *
6595489c19Sopenharmony_ci     * @since 6
6695489c19Sopenharmony_ci     */
6795489c19Sopenharmony_ci    ~UUID(){};
6895489c19Sopenharmony_ci
6995489c19Sopenharmony_ci    /**
7095489c19Sopenharmony_ci     * @brief A constructor used to create an <b>UUID</b> instance. Constructor a new UUID using most significant 64
7195489c19Sopenharmony_ci     * bits and least significant 64 bits.
7295489c19Sopenharmony_ci     *
7395489c19Sopenharmony_ci     * @param[in] mostSigBits  : The most significant 64 bits of UUID.
7495489c19Sopenharmony_ci     * @param[in] leastSigBits : The least significant 64 bits of UUID.
7595489c19Sopenharmony_ci     * @since 6
7695489c19Sopenharmony_ci     */
7795489c19Sopenharmony_ci    UUID(const long mostSigBits, const long leastSigBits);
7895489c19Sopenharmony_ci
7995489c19Sopenharmony_ci    /**
8095489c19Sopenharmony_ci     * @brief A constructor used to create an <b>UUID</b> instance. Constructor a new UUID from string.
8195489c19Sopenharmony_ci     *
8295489c19Sopenharmony_ci     * @param[in] name : The value of string to create UUID.
8395489c19Sopenharmony_ci     *      for example : "00000000-0000-1000-8000-00805F9B34FB"
8495489c19Sopenharmony_ci     * @return Returns a specified UUID.
8595489c19Sopenharmony_ci     * @since 6
8695489c19Sopenharmony_ci     */
8795489c19Sopenharmony_ci    static UUID FromString(const std::string &name);
8895489c19Sopenharmony_ci
8995489c19Sopenharmony_ci    /**
9095489c19Sopenharmony_ci     * @brief A constructor used to create an <b>UUID</b> instance. Constructor a new random UUID.
9195489c19Sopenharmony_ci     *
9295489c19Sopenharmony_ci     * @return Returns a random UUID.
9395489c19Sopenharmony_ci     * @since 6
9495489c19Sopenharmony_ci     */
9595489c19Sopenharmony_ci    static UUID RandomUUID();
9695489c19Sopenharmony_ci
9795489c19Sopenharmony_ci    /**
9895489c19Sopenharmony_ci     * @brief Convert UUID to string.
9995489c19Sopenharmony_ci     *
10095489c19Sopenharmony_ci     * @return Returns a String object representing this UUID.
10195489c19Sopenharmony_ci     * @since 6
10295489c19Sopenharmony_ci     */
10395489c19Sopenharmony_ci    std::string ToString() const;
10495489c19Sopenharmony_ci
10595489c19Sopenharmony_ci    /**
10695489c19Sopenharmony_ci     * @brief Compares this UUID with the specified UUID.
10795489c19Sopenharmony_ci     *
10895489c19Sopenharmony_ci     * @param[in] val : UUID which this UUID is to be compared.
10995489c19Sopenharmony_ci     * @return Returns <b> <0 </b> if this UUID is less than compared UUID;
11095489c19Sopenharmony_ci     *         returns <b> =0 </b> if this UUID is equal to compared UUID;
11195489c19Sopenharmony_ci     *         returns <b> >0 </b> if this UUID is greater than compared UUID.
11295489c19Sopenharmony_ci     * @since 6
11395489c19Sopenharmony_ci     */
11495489c19Sopenharmony_ci    int CompareTo(const UUID &val) const;
11595489c19Sopenharmony_ci
11695489c19Sopenharmony_ci    /**
11795489c19Sopenharmony_ci     * @brief Compares this object to the specified object.
11895489c19Sopenharmony_ci     *
11995489c19Sopenharmony_ci     * @param[in] val : UUID which this UUID is to be compared.
12095489c19Sopenharmony_ci     * @return Returns <b>true</b> if this UUID is the same as compared UUID;
12195489c19Sopenharmony_ci     *         returns <b>false</b> if this UUID is not the same as compared UUID.
12295489c19Sopenharmony_ci     * @since 6
12395489c19Sopenharmony_ci     */
12495489c19Sopenharmony_ci    bool Equals(const UUID &val) const;
12595489c19Sopenharmony_ci
12695489c19Sopenharmony_ci    /**
12795489c19Sopenharmony_ci     * @brief Returns the least significant 64 bits of this UUID's 128 bit value.
12895489c19Sopenharmony_ci     *
12995489c19Sopenharmony_ci     * @return Retruns the least significant 64 bits of this UUID's 128 bit value.
13095489c19Sopenharmony_ci     * @since 6
13195489c19Sopenharmony_ci     */
13295489c19Sopenharmony_ci    uint64_t GetLeastSignificantBits() const;
13395489c19Sopenharmony_ci
13495489c19Sopenharmony_ci    /**
13595489c19Sopenharmony_ci     * @brief Returns the most significant 64 bits of this UUID's 128 bit value.
13695489c19Sopenharmony_ci     *
13795489c19Sopenharmony_ci     * @return Returns the most significant 64 bits of this UUID's 128 bit value.
13895489c19Sopenharmony_ci     * @since 6
13995489c19Sopenharmony_ci     */
14095489c19Sopenharmony_ci    uint64_t GetMostSignificantBits() const;
14195489c19Sopenharmony_ci
14295489c19Sopenharmony_ci    /**
14395489c19Sopenharmony_ci     * @brief Constructor a new UUID from uint8_t array.
14495489c19Sopenharmony_ci     *
14595489c19Sopenharmony_ci     * @param[in] name : The 128 bits value for a UUID.
14695489c19Sopenharmony_ci     * @return Returns a specified UUID.
14795489c19Sopenharmony_ci     * @since 6
14895489c19Sopenharmony_ci     */
14995489c19Sopenharmony_ci    static UUID ConvertFrom128Bits(const std::array<uint8_t, UUID128_BYTES_LEN> &name);
15095489c19Sopenharmony_ci
15195489c19Sopenharmony_ci    /**
15295489c19Sopenharmony_ci     * @brief Returns uint8_t array from UUID.
15395489c19Sopenharmony_ci     *
15495489c19Sopenharmony_ci     * @return returns a specified array.
15595489c19Sopenharmony_ci     * @since 6
15695489c19Sopenharmony_ci     */
15795489c19Sopenharmony_ci    std::array<uint8_t, UUID128_BYTES_LEN> ConvertTo128Bits() const;
15895489c19Sopenharmony_ci
15995489c19Sopenharmony_ci    /**
16095489c19Sopenharmony_ci     * @brief Compare two UUID whether are same or not.
16195489c19Sopenharmony_ci     *
16295489c19Sopenharmony_ci     * @param rhs Compared UUID instance.
16395489c19Sopenharmony_ci     * @return Returns <b>true</b> if this UUID is the same as compared UUID;
16495489c19Sopenharmony_ci     *         returns <b>false</b> if this UUID is not the same as compared UUID.
16595489c19Sopenharmony_ci     */
16695489c19Sopenharmony_ci    bool operator==(const UUID &rhs) const;
16795489c19Sopenharmony_ci
16895489c19Sopenharmony_ci    /**
16995489c19Sopenharmony_ci     * @brief In order to use the object key in the map object, overload the operator <.
17095489c19Sopenharmony_ci     * @param[in] uuid : UUID object.
17195489c19Sopenharmony_ci     * @return @c bool : If the object uuid is the same, return true, otherwise return false.
17295489c19Sopenharmony_ci     */
17395489c19Sopenharmony_ci    bool operator<(const UUID &uuid) const;
17495489c19Sopenharmony_ci
17595489c19Sopenharmony_ciprivate:
17695489c19Sopenharmony_ci    std::array<uint8_t, UUID128_BYTES_LEN> uuid_ = {0x00};
17795489c19Sopenharmony_ci};
17895489c19Sopenharmony_ci
17995489c19Sopenharmony_ci/**
18095489c19Sopenharmony_ci * @brief This class provides framework ParcelUuid.
18195489c19Sopenharmony_ci *
18295489c19Sopenharmony_ci * @since 6
18395489c19Sopenharmony_ci */
18495489c19Sopenharmony_ciusing ParcelUuid = UUID;
18595489c19Sopenharmony_ci
18695489c19Sopenharmony_cibool IsValidUuid(std::string uuid);
18795489c19Sopenharmony_ci
18895489c19Sopenharmony_ci} // namespace Bluetooth
18995489c19Sopenharmony_ci} // namespace OHOS
19095489c19Sopenharmony_ci
19195489c19Sopenharmony_ci#endif  //DUMMY_UUID_H