Home | History | Annotate | Download | only in bluez
      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 
     45   Type type() const { return type_; }
     46   size_t size() const { return size_; }
     47   const Sequence& sequence() const { return *sequence_.get(); }
     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