// Copyright 2014 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_BLUETOOTH_GATT_SERVICE_H_ #define DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_ #include #include "base/callback_forward.h" #include "device/bluetooth/bluetooth_export.h" #include "device/bluetooth/public/cpp/bluetooth_uuid.h" namespace device { // BluetoothGattService represents a local or remote GATT service. A GATT // service is hosted by a peripheral and represents a collection of data in // the form of GATT characteristics and a set of included GATT services if this // service is what is called "a primary service". class DEVICE_BLUETOOTH_EXPORT BluetoothGattService { public: // Interacting with Characteristics and Descriptors can produce // this set of errors. // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. This enum should be kept in sync // with the BluetoothGattServiceGattErrorCode enum in // src/tools/metrics/histograms/enums.xml. enum GattErrorCode { GATT_ERROR_UNKNOWN = 0, GATT_ERROR_FAILED = 1, GATT_ERROR_IN_PROGRESS = 2, GATT_ERROR_INVALID_LENGTH = 3, GATT_ERROR_NOT_PERMITTED = 4, GATT_ERROR_NOT_AUTHORIZED = 5, GATT_ERROR_NOT_PAIRED = 6, GATT_ERROR_NOT_SUPPORTED = 7, kMaxValue = GATT_ERROR_NOT_SUPPORTED, }; // The ErrorCallback is used by methods to asynchronously report errors. using ErrorCallback = base::OnceCallback; // Identifier used to uniquely identify a GATT service object. This is // different from the service UUID: while multiple services with the same UUID // can exist on a Bluetooth device, the identifier returned from this method // is unique among all services on the adapter. The contents of the identifier // are platform specific. virtual std::string GetIdentifier() const = 0; // The Bluetooth-specific UUID of the service. virtual BluetoothUUID GetUUID() const = 0; // Indicates whether the type of this service is primary or secondary. A // primary service describes the primary function of the peripheral that // hosts it, while a secondary service only makes sense in the presence of a // primary service. A primary service may include other primary or secondary // services. virtual bool IsPrimary() const = 0; BluetoothGattService(const BluetoothGattService&) = delete; BluetoothGattService& operator=(const BluetoothGattService&) = delete; virtual ~BluetoothGattService(); protected: BluetoothGattService(); }; } // namespace device #endif // DEVICE_BLUETOOTH_BLUETOOTH_GATT_SERVICE_H_