// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_ #define DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_ #include <cstddef> #include <memory> #include <vector> #include "base/values.h" #include "device/bluetooth/bluetooth_export.h" namespace bluez { // This class contains a Bluetooth service attribute. A service attribute is // defined by the following fields, // type: This is the type of the attribute. Along with being any of the // fixed types, an attribute can also be of type sequence, which means // that it contains an array of other attributes. // size: This is the size of the attribute. This can be variable for each type. // For example, a UUID can have the sizes, 2, 4 or 16 bytes. // value: This is the raw value of the attribute. For example, for a UUID, it // will be the string representation of the UUID. For a sequence, it // will be an array of other attributes. class DEVICE_BLUETOOTH_EXPORT BluetoothServiceAttributeValueBlueZ { public: enum Type { NULLTYPE = 0, UINT, INT, UUID, STRING, BOOL, SEQUENCE, URL }; using Sequence = std::vector<BluetoothServiceAttributeValueBlueZ>; BluetoothServiceAttributeValueBlueZ(); BluetoothServiceAttributeValueBlueZ(Type type, size_t size, std::unique_ptr<base::Value> value); explicit BluetoothServiceAttributeValueBlueZ( std::unique_ptr<Sequence> sequence); BluetoothServiceAttributeValueBlueZ( const BluetoothServiceAttributeValueBlueZ& attribute); BluetoothServiceAttributeValueBlueZ& operator=( const BluetoothServiceAttributeValueBlueZ& attribute); ~BluetoothServiceAttributeValueBlueZ(); Type type() const { return type_; } size_t size() const { return size_; } const Sequence& sequence() const { return *sequence_.get(); } const base::Value& value() const { return *value_.get(); } private: Type type_; size_t size_; std::unique_ptr<base::Value> value_; std::unique_ptr<Sequence> sequence_; }; } // namespace bluez #endif // DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_