blob: bcb72df51497ca8b8fc0f722d29c4ebc87749da8 [file] [log] [blame]
// 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_LOCAL_GATT_SERVICE_BLUEZ_H_
#define DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_LOCAL_GATT_SERVICE_BLUEZ_H_
#include <string>
#include <vector>
#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "device/bluetooth/bluetooth_local_gatt_service.h"
#include "device/bluetooth/bluetooth_uuid.h"
#include "device/bluetooth/bluez/bluetooth_gatt_service_bluez.h"
#include "device/bluetooth/bluez/bluetooth_local_gatt_characteristic_bluez.h"
namespace bluez {
class BluetoothAdapterBlueZ;
class BluetoothLocalGattCharacteristicBlueZ;
// The BluetoothLocalGattServiceBlueZ class implements BluetootGattService
// for local GATT services for platforms that use BlueZ.
class BluetoothLocalGattServiceBlueZ
: public BluetoothGattServiceBlueZ,
public device::BluetoothLocalGattService {
public:
BluetoothLocalGattServiceBlueZ(
BluetoothAdapterBlueZ* adapter,
const device::BluetoothUUID& uuid,
bool is_primary,
device::BluetoothLocalGattService::Delegate* delegate);
~BluetoothLocalGattServiceBlueZ() override;
// device::BluetoothGattService overrides.
device::BluetoothUUID GetUUID() const override;
bool IsPrimary() const override;
// device::BluetoothLocalGattService overrides.
void Register(const base::Closure& callback,
const ErrorCallback& error_callback) override;
void Unregister(const base::Closure& callback,
const ErrorCallback& error_callback) override;
bool IsRegistered() override;
void Delete() override;
device::BluetoothLocalGattCharacteristic* GetCharacteristic(
const std::string& identifier) override;
const std::map<dbus::ObjectPath,
std::unique_ptr<BluetoothLocalGattCharacteristicBlueZ>>&
GetCharacteristics() const;
Delegate* GetDelegate() const { return delegate_; }
static dbus::ObjectPath AddGuidToObjectPath(const std::string& path);
private:
friend class BluetoothLocalGattCharacteristicBlueZ;
// Needs access to weak_ptr_factory_.
friend class device::BluetoothLocalGattService;
// Called by dbus:: on unsuccessful completion of a request to register a
// local service.
void OnRegistrationError(const ErrorCallback& error_callback,
const std::string& error_name,
const std::string& error_message);
void AddCharacteristic(
std::unique_ptr<BluetoothLocalGattCharacteristicBlueZ> characteristic);
// UUID of this service.
device::BluetoothUUID uuid_;
// If this service is primary.
bool is_primary_;
// Delegate to receive read/write requests for attribute values contained
// in this service.
device::BluetoothLocalGattService::Delegate* delegate_;
// Characteristics contained by this service.
std::map<dbus::ObjectPath,
std::unique_ptr<BluetoothLocalGattCharacteristicBlueZ>>
characteristics_;
// Note: This should remain the last member so it'll be destroyed and
// invalidate its weak pointers before any other members are destroyed.
base::WeakPtrFactory<BluetoothLocalGattServiceBlueZ> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(BluetoothLocalGattServiceBlueZ);
};
} // namespace bluez
#endif // DEVICE_BLUETOOTH_BLUEZ_BLUETOOTH_LOCAL_GATT_SERVICE_BLUEZ_H_