1 // Copyright 2016 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_ 6 #define DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_ 7 8 #include <cstddef> 9 #include <memory> 10 #include <vector> 11 12 #include "base/values.h" 13 #include "device/bluetooth/bluetooth_export.h" 14 15 namespace bluez { 16 17 // This class contains a Bluetooth service attribute. A service attribute is 18 // defined by the following fields, 19 // type: This is the type of the attribute. Along with being any of the 20 // fixed types, an attribute can also be of type sequence, which means 21 // that it contains an array of other attributes. 22 // size: This is the size of the attribute. This can be variable for each type. 23 // For example, a UUID can have the sizes, 2, 4 or 16 bytes. 24 // value: This is the raw value of the attribute. For example, for a UUID, it 25 // will be the string representation of the UUID. For a sequence, it 26 // will be an array of other attributes. 27 class DEVICE_BLUETOOTH_EXPORT BluetoothServiceAttributeValueBlueZ { 28 public: 29 enum Type { NULLTYPE = 0, UINT, INT, UUID, STRING, BOOL, SEQUENCE, URL }; 30 31 using Sequence = std::vector<BluetoothServiceAttributeValueBlueZ>; 32 33 BluetoothServiceAttributeValueBlueZ(); 34 BluetoothServiceAttributeValueBlueZ(Type type, 35 size_t size, 36 std::unique_ptr<base::Value> value); 37 explicit BluetoothServiceAttributeValueBlueZ( 38 std::unique_ptr<Sequence> sequence); 39 BluetoothServiceAttributeValueBlueZ( 40 const BluetoothServiceAttributeValueBlueZ& attribute); 41 BluetoothServiceAttributeValueBlueZ& operator=( 42 const BluetoothServiceAttributeValueBlueZ& attribute); 43 ~BluetoothServiceAttributeValueBlueZ(); 44 type()45 Type type() const { return type_; } size()46 size_t size() const { return size_; } sequence()47 const Sequence& sequence() const { return *sequence_.get(); } value()48 const base::Value& value() const { return *value_.get(); } 49 50 private: 51 Type type_; 52 size_t size_; 53 std::unique_ptr<base::Value> value_; 54 std::unique_ptr<Sequence> sequence_; 55 }; 56 57 } // namespace bluez 58 59 #endif // DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_SERVICE_ATTRIBUTE_VALUE_BLUEZ_H_ 60