root/chromeos/dbus/fake_bluetooth_gatt_manager_client.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. Init
  2. RegisterService
  3. UnregisterService
  4. RegisterServiceServiceProvider
  5. RegisterCharacteristicServiceProvider
  6. RegisterDescriptorServiceProvider
  7. UnregisterServiceServiceProvider
  8. UnregisterCharacteristicServiceProvider
  9. UnregisterDescriptorServiceProvider
  10. GetServiceServiceProvider
  11. GetCharacteristicServiceProvider
  12. GetDescriptorServiceProvider
  13. IsServiceRegistered

// 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.

#include "chromeos/dbus/fake_bluetooth_gatt_manager_client.h"

#include "base/logging.h"
#include "chromeos/dbus/fake_bluetooth_gatt_characteristic_service_provider.h"
#include "chromeos/dbus/fake_bluetooth_gatt_descriptor_service_provider.h"
#include "chromeos/dbus/fake_bluetooth_gatt_service_service_provider.h"
#include "third_party/cros_system_api/dbus/service_constants.h"

namespace chromeos {

FakeBluetoothGattManagerClient::FakeBluetoothGattManagerClient() {
}

FakeBluetoothGattManagerClient::~FakeBluetoothGattManagerClient() {
}

// DBusClient override.
void FakeBluetoothGattManagerClient::Init(dbus::Bus* bus) {
}

// BluetoothGattManagerClient overrides.
void FakeBluetoothGattManagerClient::RegisterService(
    const dbus::ObjectPath& service_path,
    const Options& options,
    const base::Closure& callback,
    const ErrorCallback& error_callback) {
  VLOG(1) << "Register GATT service: " << service_path.value();

  // If a service provider wasn't created before, return error.
  ServiceMap::iterator iter = service_map_.find(service_path);
  if (iter == service_map_.end()) {
    error_callback.Run(bluetooth_gatt_manager::kErrorInvalidArguments,
                       "GATT service doesn't exist: " + service_path.value());
    return;
  }

  // Check to see if this GATT service was already registered.
  ServiceProvider* provider = &iter->second;
  if (provider->first) {
    error_callback.Run(
        bluetooth_gatt_manager::kErrorAlreadyExists,
        "GATT service already registered: " + service_path.value());
    return;
  }

  // Success!
  provider->first = true;
  callback.Run();
}

void FakeBluetoothGattManagerClient::UnregisterService(
    const dbus::ObjectPath& service_path,
    const base::Closure& callback,
    const ErrorCallback& error_callback) {
  VLOG(1) << "Unregister GATT service: " << service_path.value();

  // If a service provider wasn't created before, return error.
  ServiceMap::iterator iter = service_map_.find(service_path);
  if (iter == service_map_.end()) {
    error_callback.Run(bluetooth_gatt_manager::kErrorInvalidArguments,
                       "GATT service doesn't exist: " + service_path.value());
    return;
  }

  // Return error if the GATT service wasn't registered before.
  ServiceProvider* provider = &iter->second;
  if (!provider->first) {
    error_callback.Run(
        bluetooth_gatt_manager::kErrorDoesNotExist,
        "GATT service not registered: " + service_path.value());
    return;
  }

  // Success!
  provider->first = false;
  callback.Run();
}

void FakeBluetoothGattManagerClient::RegisterServiceServiceProvider(
    FakeBluetoothGattServiceServiceProvider* provider) {
  // Ignore, if a service provider is already registered for the object path.
  ServiceMap::iterator iter = service_map_.find(provider->object_path());
  if (iter != service_map_.end()) {
    VLOG(1) << "GATT service service provider already registered for "
            << "object path: " << provider->object_path().value();
    return;
  }
  service_map_[provider->object_path()] = std::make_pair(false, provider);
}

void FakeBluetoothGattManagerClient::RegisterCharacteristicServiceProvider(
    FakeBluetoothGattCharacteristicServiceProvider* provider) {
  // Ignore, if a service provider is already registered for the object path.
  CharacteristicMap::iterator iter =
      characteristic_map_.find(provider->object_path());
  if (iter != characteristic_map_.end()) {
    VLOG(1) << "GATT characteristic service provider already registered for "
            << "object path: " << provider->object_path().value();
    return;
  }
  characteristic_map_[provider->object_path()] = provider;
}

void FakeBluetoothGattManagerClient::RegisterDescriptorServiceProvider(
    FakeBluetoothGattDescriptorServiceProvider* provider) {
  // Ignore, if a service provider is already registered for the object path.
  DescriptorMap::iterator iter =
      descriptor_map_.find(provider->object_path());
  if (iter != descriptor_map_.end()) {
    VLOG(1) << "GATT descriptor service provider already registered for "
            << "object path: " << provider->object_path().value();
    return;
  }
  descriptor_map_[provider->object_path()] = provider;
}

void FakeBluetoothGattManagerClient::UnregisterServiceServiceProvider(
    FakeBluetoothGattServiceServiceProvider* provider) {
  ServiceMap::iterator iter =
      service_map_.find(provider->object_path());
  if (iter != service_map_.end() && iter->second.second == provider)
    service_map_.erase(iter);
}

void FakeBluetoothGattManagerClient::UnregisterCharacteristicServiceProvider(
    FakeBluetoothGattCharacteristicServiceProvider* provider) {
  characteristic_map_.erase(provider->object_path());
}

void FakeBluetoothGattManagerClient::UnregisterDescriptorServiceProvider(
    FakeBluetoothGattDescriptorServiceProvider* provider) {
  descriptor_map_.erase(provider->object_path());
}

FakeBluetoothGattServiceServiceProvider*
FakeBluetoothGattManagerClient::GetServiceServiceProvider(
    const dbus::ObjectPath& object_path) const {
  ServiceMap::const_iterator iter = service_map_.find(object_path);
  if (iter == service_map_.end())
    return NULL;
  return iter->second.second;
}

FakeBluetoothGattCharacteristicServiceProvider*
FakeBluetoothGattManagerClient::GetCharacteristicServiceProvider(
        const dbus::ObjectPath& object_path) const {
  CharacteristicMap::const_iterator iter =
      characteristic_map_.find(object_path);
  if (iter == characteristic_map_.end())
    return NULL;
  return iter->second;
}

FakeBluetoothGattDescriptorServiceProvider*
FakeBluetoothGattManagerClient::GetDescriptorServiceProvider(
    const dbus::ObjectPath& object_path) const {
  DescriptorMap::const_iterator iter = descriptor_map_.find(object_path);
  if (iter == descriptor_map_.end())
    return NULL;
  return iter->second;
}

bool FakeBluetoothGattManagerClient::IsServiceRegistered(
    const dbus::ObjectPath& object_path) const {
  ServiceMap::const_iterator iter = service_map_.find(object_path);
  if (iter == service_map_.end())
    return false;
  return iter->second.first;
}

}  // namespace chromeos

/* [<][>][^][v][top][bottom][index][help] */