1e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// found in the LICENSE file. 4e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 5e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#ifndef CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_MANAGER_CLIENT_H_ 6e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#define CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_MANAGER_CLIENT_H_ 7e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 8e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <map> 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <string> 10e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include <utility> 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 12e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/callback.h" 13e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chromeos/chromeos_export.h" 14e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chromeos/dbus/bluetooth_gatt_manager_client.h" 15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "dbus/object_path.h" 16e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochnamespace chromeos { 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 19e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass FakeBluetoothGattCharacteristicServiceProvider; 20e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass FakeBluetoothGattDescriptorServiceProvider; 21e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass FakeBluetoothGattServiceServiceProvider; 22e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 23e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// FakeBluetoothGattManagerClient simulates the behavior of the Bluetooth 24e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// daemon's GATT manager object and is used both in test cases in place of a 25e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// mock and on the Linux desktop. 26e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass CHROMEOS_EXPORT FakeBluetoothGattManagerClient 27e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch : public BluetoothGattManagerClient { 28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public: 29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattManagerClient(); 30e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual ~FakeBluetoothGattManagerClient(); 31e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // DBusClient override. 33e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void Init(dbus::Bus* bus) OVERRIDE; 34e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // BluetoothGattManagerClient overrides. 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void RegisterService(const dbus::ObjectPath& service_path, 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const Options& options, 38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::Closure& callback, 39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const ErrorCallback& error_callback) OVERRIDE; 40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch virtual void UnregisterService(const dbus::ObjectPath& service_path, 41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::Closure& callback, 42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const ErrorCallback& error_callback) OVERRIDE; 43e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 44e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Register, unregister, and retrieve pointers to service, characteristic, and 45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // descriptor service providers. Automatically called from the service 46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // provider constructor and destructors. 47e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void RegisterServiceServiceProvider( 48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattServiceServiceProvider* provider); 49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void RegisterCharacteristicServiceProvider( 50e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattCharacteristicServiceProvider* provider); 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void RegisterDescriptorServiceProvider( 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattDescriptorServiceProvider* provider); 53e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void UnregisterServiceServiceProvider( 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattServiceServiceProvider* provider); 56e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void UnregisterCharacteristicServiceProvider( 57e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattCharacteristicServiceProvider* provider); 58e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch void UnregisterDescriptorServiceProvider( 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattDescriptorServiceProvider* provider); 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 61e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Return a pointer to the service provider that corresponds to the object 62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // path |object_path| if it exists. 63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattServiceServiceProvider* 64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch GetServiceServiceProvider(const dbus::ObjectPath& object_path) const; 65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattCharacteristicServiceProvider* 66e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch GetCharacteristicServiceProvider( 67e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const dbus::ObjectPath& object_path) const; 68e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch FakeBluetoothGattDescriptorServiceProvider* 69e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch GetDescriptorServiceProvider(const dbus::ObjectPath& object_path) const; 70e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 71e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Returns true, if a GATT service with object path |object_path| was 72e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // registered with the GATT manager using RegisterService. 73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch bool IsServiceRegistered(const dbus::ObjectPath& object_path) const; 74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch private: 76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // Mappings for GATT service, characteristic, and descriptor service 77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // providers. The fake GATT manager stores references to all instances 78e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // created so that they can be obtained by tests. 79e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch typedef std::map< 80e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch dbus::ObjectPath, FakeBluetoothGattCharacteristicServiceProvider*> 81e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch CharacteristicMap; 82e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch typedef std::map< 83e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch dbus::ObjectPath, FakeBluetoothGattDescriptorServiceProvider*> 84e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DescriptorMap; 85e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 86e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // The mapping for services is from object paths to pairs of boolean and 87e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // service provider pointer, where the boolean denotes whether or not the 88e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch // service is already registered. 89e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch typedef std::pair<bool, FakeBluetoothGattServiceServiceProvider*> 90e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ServiceProvider; 91e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch typedef std::map<dbus::ObjectPath, ServiceProvider> ServiceMap; 92e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 93e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch ServiceMap service_map_; 94e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch CharacteristicMap characteristic_map_; 95e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DescriptorMap descriptor_map_; 96e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 97e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch DISALLOW_COPY_AND_ASSIGN(FakeBluetoothGattManagerClient); 98e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}; 99e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 100e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} // namespace chromeos 101e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 102e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#endif // CHROMEOS_DBUS_FAKE_BLUETOOTH_GATT_MANAGER_CLIENT_H_ 103