1 // Copyright 2014 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 #include "chromeos/dbus/fake_bluetooth_gatt_manager_client.h" 6 7 #include "base/logging.h" 8 #include "chromeos/dbus/fake_bluetooth_gatt_characteristic_service_provider.h" 9 #include "chromeos/dbus/fake_bluetooth_gatt_descriptor_service_provider.h" 10 #include "chromeos/dbus/fake_bluetooth_gatt_service_service_provider.h" 11 #include "third_party/cros_system_api/dbus/service_constants.h" 12 13 namespace chromeos { 14 15 FakeBluetoothGattManagerClient::FakeBluetoothGattManagerClient() { 16 } 17 18 FakeBluetoothGattManagerClient::~FakeBluetoothGattManagerClient() { 19 } 20 21 // DBusClient override. 22 void FakeBluetoothGattManagerClient::Init(dbus::Bus* bus) { 23 } 24 25 // BluetoothGattManagerClient overrides. 26 void FakeBluetoothGattManagerClient::RegisterService( 27 const dbus::ObjectPath& service_path, 28 const Options& options, 29 const base::Closure& callback, 30 const ErrorCallback& error_callback) { 31 VLOG(1) << "Register GATT service: " << service_path.value(); 32 33 // If a service provider wasn't created before, return error. 34 ServiceMap::iterator iter = service_map_.find(service_path); 35 if (iter == service_map_.end()) { 36 error_callback.Run(bluetooth_gatt_manager::kErrorInvalidArguments, 37 "GATT service doesn't exist: " + service_path.value()); 38 return; 39 } 40 41 // Check to see if this GATT service was already registered. 42 ServiceProvider* provider = &iter->second; 43 if (provider->first) { 44 error_callback.Run( 45 bluetooth_gatt_manager::kErrorAlreadyExists, 46 "GATT service already registered: " + service_path.value()); 47 return; 48 } 49 50 // Success! 51 provider->first = true; 52 callback.Run(); 53 } 54 55 void FakeBluetoothGattManagerClient::UnregisterService( 56 const dbus::ObjectPath& service_path, 57 const base::Closure& callback, 58 const ErrorCallback& error_callback) { 59 VLOG(1) << "Unregister GATT service: " << service_path.value(); 60 61 // If a service provider wasn't created before, return error. 62 ServiceMap::iterator iter = service_map_.find(service_path); 63 if (iter == service_map_.end()) { 64 error_callback.Run(bluetooth_gatt_manager::kErrorInvalidArguments, 65 "GATT service doesn't exist: " + service_path.value()); 66 return; 67 } 68 69 // Return error if the GATT service wasn't registered before. 70 ServiceProvider* provider = &iter->second; 71 if (!provider->first) { 72 error_callback.Run( 73 bluetooth_gatt_manager::kErrorDoesNotExist, 74 "GATT service not registered: " + service_path.value()); 75 return; 76 } 77 78 // Success! 79 provider->first = false; 80 callback.Run(); 81 } 82 83 void FakeBluetoothGattManagerClient::RegisterServiceServiceProvider( 84 FakeBluetoothGattServiceServiceProvider* provider) { 85 // Ignore, if a service provider is already registered for the object path. 86 ServiceMap::iterator iter = service_map_.find(provider->object_path()); 87 if (iter != service_map_.end()) { 88 VLOG(1) << "GATT service service provider already registered for " 89 << "object path: " << provider->object_path().value(); 90 return; 91 } 92 service_map_[provider->object_path()] = std::make_pair(false, provider); 93 } 94 95 void FakeBluetoothGattManagerClient::RegisterCharacteristicServiceProvider( 96 FakeBluetoothGattCharacteristicServiceProvider* provider) { 97 // Ignore, if a service provider is already registered for the object path. 98 CharacteristicMap::iterator iter = 99 characteristic_map_.find(provider->object_path()); 100 if (iter != characteristic_map_.end()) { 101 VLOG(1) << "GATT characteristic service provider already registered for " 102 << "object path: " << provider->object_path().value(); 103 return; 104 } 105 characteristic_map_[provider->object_path()] = provider; 106 } 107 108 void FakeBluetoothGattManagerClient::RegisterDescriptorServiceProvider( 109 FakeBluetoothGattDescriptorServiceProvider* provider) { 110 // Ignore, if a service provider is already registered for the object path. 111 DescriptorMap::iterator iter = 112 descriptor_map_.find(provider->object_path()); 113 if (iter != descriptor_map_.end()) { 114 VLOG(1) << "GATT descriptor service provider already registered for " 115 << "object path: " << provider->object_path().value(); 116 return; 117 } 118 descriptor_map_[provider->object_path()] = provider; 119 } 120 121 void FakeBluetoothGattManagerClient::UnregisterServiceServiceProvider( 122 FakeBluetoothGattServiceServiceProvider* provider) { 123 ServiceMap::iterator iter = 124 service_map_.find(provider->object_path()); 125 if (iter != service_map_.end() && iter->second.second == provider) 126 service_map_.erase(iter); 127 } 128 129 void FakeBluetoothGattManagerClient::UnregisterCharacteristicServiceProvider( 130 FakeBluetoothGattCharacteristicServiceProvider* provider) { 131 characteristic_map_.erase(provider->object_path()); 132 } 133 134 void FakeBluetoothGattManagerClient::UnregisterDescriptorServiceProvider( 135 FakeBluetoothGattDescriptorServiceProvider* provider) { 136 descriptor_map_.erase(provider->object_path()); 137 } 138 139 FakeBluetoothGattServiceServiceProvider* 140 FakeBluetoothGattManagerClient::GetServiceServiceProvider( 141 const dbus::ObjectPath& object_path) const { 142 ServiceMap::const_iterator iter = service_map_.find(object_path); 143 if (iter == service_map_.end()) 144 return NULL; 145 return iter->second.second; 146 } 147 148 FakeBluetoothGattCharacteristicServiceProvider* 149 FakeBluetoothGattManagerClient::GetCharacteristicServiceProvider( 150 const dbus::ObjectPath& object_path) const { 151 CharacteristicMap::const_iterator iter = 152 characteristic_map_.find(object_path); 153 if (iter == characteristic_map_.end()) 154 return NULL; 155 return iter->second; 156 } 157 158 FakeBluetoothGattDescriptorServiceProvider* 159 FakeBluetoothGattManagerClient::GetDescriptorServiceProvider( 160 const dbus::ObjectPath& object_path) const { 161 DescriptorMap::const_iterator iter = descriptor_map_.find(object_path); 162 if (iter == descriptor_map_.end()) 163 return NULL; 164 return iter->second; 165 } 166 167 bool FakeBluetoothGattManagerClient::IsServiceRegistered( 168 const dbus::ObjectPath& object_path) const { 169 ServiceMap::const_iterator iter = service_map_.find(object_path); 170 if (iter == service_map_.end()) 171 return false; 172 return iter->second.first; 173 } 174 175 } // namespace chromeos 176