195489c19Sopenharmony_ci/* 295489c19Sopenharmony_ci * Copyright (C) 2021-2022 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#ifndef GATT_DATA_H 1795489c19Sopenharmony_ci#define GATT_DATA_H 1895489c19Sopenharmony_ci 1995489c19Sopenharmony_ci#include <cstring> 2095489c19Sopenharmony_ci#include <memory> 2195489c19Sopenharmony_ci#include <vector> 2295489c19Sopenharmony_ci#include "bt_def.h" 2395489c19Sopenharmony_ci#include "bt_uuid.h" 2495489c19Sopenharmony_ci#include "cstdint" 2595489c19Sopenharmony_ci#include "raw_address.h" 2695489c19Sopenharmony_ci#include "type_traits" 2795489c19Sopenharmony_ci 2895489c19Sopenharmony_ci 2995489c19Sopenharmony_cinamespace OHOS { 3095489c19Sopenharmony_cinamespace bluetooth { 3195489c19Sopenharmony_cistruct Descriptor { 3295489c19Sopenharmony_ci Descriptor() : handle_(0), permissions_(0), value_(nullptr), length_(0), uuid_() {} 3395489c19Sopenharmony_ci 3495489c19Sopenharmony_ci Descriptor(const Uuid& uuid, const int permissions) 3595489c19Sopenharmony_ci : handle_(0), permissions_(permissions), value_(nullptr), length_(0), uuid_(uuid) 3695489c19Sopenharmony_ci { 3795489c19Sopenharmony_ci } 3895489c19Sopenharmony_ci 3995489c19Sopenharmony_ci Descriptor(uint16_t handle, const Uuid& uuid, int permissions) 4095489c19Sopenharmony_ci : handle_(handle), permissions_(permissions), value_(nullptr), length_(0), uuid_(uuid) 4195489c19Sopenharmony_ci { 4295489c19Sopenharmony_ci } 4395489c19Sopenharmony_ci 4495489c19Sopenharmony_ci Descriptor(const Uuid &uuid, uint16_t handle, int permissions, const uint8_t *value, size_t length); 4595489c19Sopenharmony_ci 4695489c19Sopenharmony_ci Descriptor(const Descriptor &src); 4795489c19Sopenharmony_ci 4895489c19Sopenharmony_ci Descriptor(Descriptor&& src) 4995489c19Sopenharmony_ci : handle_(src.handle_), permissions_(src.permissions_), value_(std::move(src.value_)), length_(src.length_), 5095489c19Sopenharmony_ci uuid_(src.uuid_) 5195489c19Sopenharmony_ci { 5295489c19Sopenharmony_ci src.value_ = nullptr; 5395489c19Sopenharmony_ci src.length_ = 0; 5495489c19Sopenharmony_ci } 5595489c19Sopenharmony_ci 5695489c19Sopenharmony_ci explicit Descriptor(uint16_t handle) : handle_(handle), permissions_(0), value_(nullptr), length_(0), uuid_() {} 5795489c19Sopenharmony_ci 5895489c19Sopenharmony_ci Descriptor(uint16_t handle, const uint8_t *value, size_t length); 5995489c19Sopenharmony_ci 6095489c19Sopenharmony_ci ~Descriptor() {} 6195489c19Sopenharmony_ci 6295489c19Sopenharmony_ci Descriptor &operator=(const Descriptor &src) = delete; 6395489c19Sopenharmony_ci Descriptor &operator=(Descriptor &&src) = delete; 6495489c19Sopenharmony_ci 6595489c19Sopenharmony_ci uint16_t handle_; 6695489c19Sopenharmony_ci int permissions_; 6795489c19Sopenharmony_ci std::unique_ptr<uint8_t[]> value_; 6895489c19Sopenharmony_ci size_t length_; 6995489c19Sopenharmony_ci Uuid uuid_; 7095489c19Sopenharmony_ci}; 7195489c19Sopenharmony_ci 7295489c19Sopenharmony_cistruct Characteristic { 7395489c19Sopenharmony_ci Characteristic() 7495489c19Sopenharmony_ci : handle_(0), endHandle_(0), valueHandle_(0), properties_(0), 7595489c19Sopenharmony_ci permissions_(0), value_(nullptr), length_(0), uuid_(), descriptors_() {} 7695489c19Sopenharmony_ci 7795489c19Sopenharmony_ci Characteristic(const Uuid& uuid, uint16_t handle, int properties) 7895489c19Sopenharmony_ci : handle_(handle), endHandle_(0), valueHandle_(handle + 1), properties_(properties), permissions_(0), 7995489c19Sopenharmony_ci value_(nullptr), length_(0), uuid_(uuid), descriptors_() 8095489c19Sopenharmony_ci { 8195489c19Sopenharmony_ci } 8295489c19Sopenharmony_ci 8395489c19Sopenharmony_ci Characteristic( 8495489c19Sopenharmony_ci const Uuid &uuid, uint16_t handle, int properties, int permissions, const uint8_t *value, size_t length); 8595489c19Sopenharmony_ci 8695489c19Sopenharmony_ci Characteristic(uint16_t handle, const uint8_t *value, size_t length); 8795489c19Sopenharmony_ci 8895489c19Sopenharmony_ci void SetValue(const uint8_t *value, size_t length); 8995489c19Sopenharmony_ci 9095489c19Sopenharmony_ci explicit Characteristic(uint16_t handle) 9195489c19Sopenharmony_ci : handle_(handle), endHandle_(0), valueHandle_(handle + 1), properties_(0), permissions_(0), 9295489c19Sopenharmony_ci value_(nullptr), length_(0), uuid_(), descriptors_() {} 9395489c19Sopenharmony_ci 9495489c19Sopenharmony_ci Characteristic(uint16_t handle, uint16_t endHandle) 9595489c19Sopenharmony_ci : handle_(handle), endHandle_(endHandle), valueHandle_(handle + 1), properties_(0), permissions_(0), 9695489c19Sopenharmony_ci value_(nullptr), length_(0), uuid_(), descriptors_() 9795489c19Sopenharmony_ci { 9895489c19Sopenharmony_ci } 9995489c19Sopenharmony_ci 10095489c19Sopenharmony_ci ~Characteristic() {} 10195489c19Sopenharmony_ci 10295489c19Sopenharmony_ci Characteristic(const Characteristic &src); 10395489c19Sopenharmony_ci 10495489c19Sopenharmony_ci Characteristic(Characteristic&& src) 10595489c19Sopenharmony_ci : handle_(src.handle_), endHandle_(src.endHandle_), valueHandle_(src.handle_ + 1), 10695489c19Sopenharmony_ci properties_(src.properties_), permissions_(src.permissions_), value_(std::move(src.value_)), 10795489c19Sopenharmony_ci length_(src.length_), uuid_(src.uuid_), descriptors_(std::move(src.descriptors_)) 10895489c19Sopenharmony_ci { 10995489c19Sopenharmony_ci src.value_ = nullptr; 11095489c19Sopenharmony_ci src.length_ = 0; 11195489c19Sopenharmony_ci } 11295489c19Sopenharmony_ci 11395489c19Sopenharmony_ci Characteristic &operator=(const Characteristic &src) = delete; 11495489c19Sopenharmony_ci Characteristic &operator=(Characteristic &&src) = delete; 11595489c19Sopenharmony_ci 11695489c19Sopenharmony_ci uint16_t handle_; 11795489c19Sopenharmony_ci uint16_t endHandle_; 11895489c19Sopenharmony_ci uint16_t valueHandle_; 11995489c19Sopenharmony_ci int properties_; 12095489c19Sopenharmony_ci int permissions_; 12195489c19Sopenharmony_ci std::unique_ptr<uint8_t[]> value_; 12295489c19Sopenharmony_ci size_t length_; 12395489c19Sopenharmony_ci Uuid uuid_; 12495489c19Sopenharmony_ci std::vector<Descriptor> descriptors_; 12595489c19Sopenharmony_ci}; 12695489c19Sopenharmony_ci 12795489c19Sopenharmony_cistruct Service { 12895489c19Sopenharmony_ci Service() 12995489c19Sopenharmony_ci :isPrimary_(false), handle_(0), startHandle_(0), endHandle_(0), uuid_(), includeServices_(), characteristics_() 13095489c19Sopenharmony_ci { 13195489c19Sopenharmony_ci } 13295489c19Sopenharmony_ci 13395489c19Sopenharmony_ci Service(const Uuid& uuid, uint16_t handle, uint16_t starthandle, uint16_t endHandle) 13495489c19Sopenharmony_ci : isPrimary_(true), handle_(handle), startHandle_(starthandle), endHandle_(endHandle), uuid_(uuid), 13595489c19Sopenharmony_ci includeServices_(), characteristics_() 13695489c19Sopenharmony_ci { 13795489c19Sopenharmony_ci } 13895489c19Sopenharmony_ci 13995489c19Sopenharmony_ci explicit Service(uint16_t handle) 14095489c19Sopenharmony_ci : isPrimary_(false), handle_(handle), startHandle_(handle), endHandle_(0), uuid_(), includeServices_(), 14195489c19Sopenharmony_ci characteristics_() 14295489c19Sopenharmony_ci { 14395489c19Sopenharmony_ci } 14495489c19Sopenharmony_ci 14595489c19Sopenharmony_ci Service(uint16_t handle, uint16_t endHandle) 14695489c19Sopenharmony_ci : isPrimary_(false), handle_(handle), startHandle_(handle), endHandle_(endHandle), uuid_(), includeServices_(), 14795489c19Sopenharmony_ci characteristics_() 14895489c19Sopenharmony_ci { 14995489c19Sopenharmony_ci } 15095489c19Sopenharmony_ci 15195489c19Sopenharmony_ci Service(const Service&) = default; 15295489c19Sopenharmony_ci Service(Service&&) = default; 15395489c19Sopenharmony_ci 15495489c19Sopenharmony_ci Service &operator=(const Service &src) = delete; 15595489c19Sopenharmony_ci Service &operator=(Service &&src) = delete; 15695489c19Sopenharmony_ci 15795489c19Sopenharmony_ci bool isPrimary_; 15895489c19Sopenharmony_ci uint16_t handle_; 15995489c19Sopenharmony_ci uint16_t startHandle_; 16095489c19Sopenharmony_ci uint16_t endHandle_; 16195489c19Sopenharmony_ci Uuid uuid_; 16295489c19Sopenharmony_ci std::vector<Service> includeServices_; 16395489c19Sopenharmony_ci std::vector<Characteristic> characteristics_; 16495489c19Sopenharmony_ci}; 16595489c19Sopenharmony_ci 16695489c19Sopenharmony_cistruct GattDevice { 16795489c19Sopenharmony_ci GattDevice() : isEncryption_(false), transport_(0), addressType_(0), connectState_(0), addr_() {} 16895489c19Sopenharmony_ci GattDevice(const RawAddress &addr, uint8_t type, uint8_t transport); 16995489c19Sopenharmony_ci 17095489c19Sopenharmony_ci GattDevice(const RawAddress &addr, uint8_t type, uint8_t transport, int state); 17195489c19Sopenharmony_ci 17295489c19Sopenharmony_ci GattDevice(const RawAddress &addr, uint8_t transport); 17395489c19Sopenharmony_ci 17495489c19Sopenharmony_ci bool isEncryption_ = false; 17595489c19Sopenharmony_ci uint8_t role_ = GATT_ROLE_INVALID; 17695489c19Sopenharmony_ci uint8_t transport_ = 0; 17795489c19Sopenharmony_ci uint8_t addressType_ = 0; 17895489c19Sopenharmony_ci int connectState_ = 0; 17995489c19Sopenharmony_ci RawAddress addr_ = {}; 18095489c19Sopenharmony_ci 18195489c19Sopenharmony_ci bool operator==(const GattDevice& rhs) const 18295489c19Sopenharmony_ci { 18395489c19Sopenharmony_ci return ((addr_ == rhs.addr_) && (transport_ == rhs.transport_)); 18495489c19Sopenharmony_ci } 18595489c19Sopenharmony_ci 18695489c19Sopenharmony_ci bool operator<(const GattDevice& rhs) const 18795489c19Sopenharmony_ci { 18895489c19Sopenharmony_ci return ((addr_ < rhs.addr_) && (transport_ == rhs.transport_)); 18995489c19Sopenharmony_ci } 19095489c19Sopenharmony_ci}; 19195489c19Sopenharmony_ci} // namespace bluetooth 19295489c19Sopenharmony_ci} // namespace OHOS 19395489c19Sopenharmony_ci#endif // GATT_DATA_H 194