| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/proximity_auth/proximity_monitor_impl.h" | 5 #include "components/proximity_auth/proximity_monitor_impl.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 const int kPollingTimeoutMs = 250; | 25 const int kPollingTimeoutMs = 250; |
| 26 | 26 |
| 27 // The RSSI threshold below which we consider the remote device to not be in | 27 // The RSSI threshold below which we consider the remote device to not be in |
| 28 // proximity. | 28 // proximity. |
| 29 const int kRssiThreshold = -5; | 29 const int kRssiThreshold = -5; |
| 30 | 30 |
| 31 // The weight of the most recent RSSI sample. | 31 // The weight of the most recent RSSI sample. |
| 32 const double kRssiSampleWeight = 0.3; | 32 const double kRssiSampleWeight = 0.3; |
| 33 | 33 |
| 34 ProximityMonitorImpl::ProximityMonitorImpl(const RemoteDevice& remote_device, | 34 ProximityMonitorImpl::ProximityMonitorImpl(const RemoteDevice& remote_device, |
| 35 scoped_ptr<base::TickClock> clock, | 35 scoped_ptr<base::TickClock> clock) |
| 36 ProximityMonitorObserver* observer) | |
| 37 : remote_device_(remote_device), | 36 : remote_device_(remote_device), |
| 38 observer_(observer), | |
| 39 strategy_(Strategy::NONE), | 37 strategy_(Strategy::NONE), |
| 40 remote_device_is_in_proximity_(false), | 38 remote_device_is_in_proximity_(false), |
| 41 is_active_(false), | 39 is_active_(false), |
| 42 clock_(clock.Pass()), | 40 clock_(clock.Pass()), |
| 43 polling_weak_ptr_factory_(this), | 41 polling_weak_ptr_factory_(this), |
| 44 weak_ptr_factory_(this) { | 42 weak_ptr_factory_(this) { |
| 45 if (device::BluetoothAdapterFactory::IsBluetoothAdapterAvailable()) { | 43 if (device::BluetoothAdapterFactory::IsBluetoothAdapterAvailable()) { |
| 46 device::BluetoothAdapterFactory::GetAdapter( | 44 device::BluetoothAdapterFactory::GetAdapter( |
| 47 base::Bind(&ProximityMonitorImpl::OnAdapterInitialized, | 45 base::Bind(&ProximityMonitorImpl::OnAdapterInitialized, |
| 48 weak_ptr_factory_.GetWeakPtr())); | 46 weak_ptr_factory_.GetWeakPtr())); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 std::string remote_device_model = metrics::kUnknownDeviceModel; | 103 std::string remote_device_model = metrics::kUnknownDeviceModel; |
| 106 if (remote_device_.name != remote_device_.bluetooth_address) | 104 if (remote_device_.name != remote_device_.bluetooth_address) |
| 107 remote_device_model = remote_device_.name; | 105 remote_device_model = remote_device_.name; |
| 108 | 106 |
| 109 metrics::RecordAuthProximityRollingRssi(round(rssi_rolling_average)); | 107 metrics::RecordAuthProximityRollingRssi(round(rssi_rolling_average)); |
| 110 metrics::RecordAuthProximityTransmitPowerDelta(last_transmit_power_delta); | 108 metrics::RecordAuthProximityTransmitPowerDelta(last_transmit_power_delta); |
| 111 metrics::RecordAuthProximityTimeSinceLastZeroRssi(time_since_last_zero_rssi); | 109 metrics::RecordAuthProximityTimeSinceLastZeroRssi(time_since_last_zero_rssi); |
| 112 metrics::RecordAuthProximityRemoteDeviceModelHash(remote_device_model); | 110 metrics::RecordAuthProximityRemoteDeviceModelHash(remote_device_model); |
| 113 } | 111 } |
| 114 | 112 |
| 113 void ProximityMonitorImpl::AddObserver(ProximityMonitorObserver* observer) { |
| 114 observers_.AddObserver(observer); |
| 115 } |
| 116 |
| 117 void ProximityMonitorImpl::RemoveObserver(ProximityMonitorObserver* observer) { |
| 118 observers_.RemoveObserver(observer); |
| 119 } |
| 120 |
| 115 void ProximityMonitorImpl::SetStrategy(Strategy strategy) { | 121 void ProximityMonitorImpl::SetStrategy(Strategy strategy) { |
| 116 if (strategy_ == strategy) | 122 if (strategy_ == strategy) |
| 117 return; | 123 return; |
| 118 strategy_ = strategy; | 124 strategy_ = strategy; |
| 119 CheckForProximityStateChange(); | 125 CheckForProximityStateChange(); |
| 120 UpdatePollingState(); | 126 UpdatePollingState(); |
| 121 } | 127 } |
| 122 | 128 |
| 123 ProximityMonitorImpl::TransmitPowerReading::TransmitPowerReading( | 129 ProximityMonitorImpl::TransmitPowerReading::TransmitPowerReading( |
| 124 int transmit_power, | 130 int transmit_power, |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 << connection_info.rssi << " " | 211 << connection_info.rssi << " " |
| 206 << connection_info.transmit_power << " " | 212 << connection_info.transmit_power << " " |
| 207 << connection_info.max_transmit_power; | 213 << connection_info.max_transmit_power; |
| 208 rssi_rolling_average_.reset(); | 214 rssi_rolling_average_.reset(); |
| 209 last_transmit_power_reading_.reset(); | 215 last_transmit_power_reading_.reset(); |
| 210 CheckForProximityStateChange(); | 216 CheckForProximityStateChange(); |
| 211 } | 217 } |
| 212 } | 218 } |
| 213 | 219 |
| 214 void ProximityMonitorImpl::ClearProximityState() { | 220 void ProximityMonitorImpl::ClearProximityState() { |
| 215 if (is_active_ && remote_device_is_in_proximity_) | 221 if (is_active_ && remote_device_is_in_proximity_) { |
| 216 observer_->OnProximityStateChanged(); | 222 FOR_EACH_OBSERVER(ProximityMonitorObserver, observers_, |
| 223 OnProximityStateChanged()); |
| 224 } |
| 217 | 225 |
| 218 remote_device_is_in_proximity_ = false; | 226 remote_device_is_in_proximity_ = false; |
| 219 rssi_rolling_average_.reset(); | 227 rssi_rolling_average_.reset(); |
| 220 last_transmit_power_reading_.reset(); | 228 last_transmit_power_reading_.reset(); |
| 221 last_zero_rssi_timestamp_.reset(); | 229 last_zero_rssi_timestamp_.reset(); |
| 222 } | 230 } |
| 223 | 231 |
| 224 void ProximityMonitorImpl::AddSample( | 232 void ProximityMonitorImpl::AddSample( |
| 225 const BluetoothDevice::ConnectionInfo& connection_info) { | 233 const BluetoothDevice::ConnectionInfo& connection_info) { |
| 226 double weight = kRssiSampleWeight; | 234 double weight = kRssiSampleWeight; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 256 case Strategy::CHECK_TRANSMIT_POWER: | 264 case Strategy::CHECK_TRANSMIT_POWER: |
| 257 is_now_in_proximity = (last_transmit_power_reading_ && | 265 is_now_in_proximity = (last_transmit_power_reading_ && |
| 258 last_transmit_power_reading_->IsInProximity()); | 266 last_transmit_power_reading_->IsInProximity()); |
| 259 break; | 267 break; |
| 260 } | 268 } |
| 261 | 269 |
| 262 if (remote_device_is_in_proximity_ != is_now_in_proximity) { | 270 if (remote_device_is_in_proximity_ != is_now_in_proximity) { |
| 263 PA_LOG(INFO) << "[Proximity] Updated proximity state: " | 271 PA_LOG(INFO) << "[Proximity] Updated proximity state: " |
| 264 << (is_now_in_proximity ? "proximate" : "distant"); | 272 << (is_now_in_proximity ? "proximate" : "distant"); |
| 265 remote_device_is_in_proximity_ = is_now_in_proximity; | 273 remote_device_is_in_proximity_ = is_now_in_proximity; |
| 266 observer_->OnProximityStateChanged(); | 274 FOR_EACH_OBSERVER(ProximityMonitorObserver, observers_, |
| 275 OnProximityStateChanged()); |
| 267 } | 276 } |
| 268 } | 277 } |
| 269 | 278 |
| 270 } // namespace proximity_auth | 279 } // namespace proximity_auth |
| OLD | NEW |