blob: c7e405fd71ed9fa732473c45e45d3e4714192bb6 [file] [log] [blame]
// Copyright 2018 The Fuchsia 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 SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_LOCAL_ADDRESS_DELEGATE_H_
#define SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_LOCAL_ADDRESS_DELEGATE_H_
#include <lib/fit/function.h>
#include <optional>
#include "src/connectivity/bluetooth/core/bt-host/common/device_address.h"
#include "src/connectivity/bluetooth/core/bt-host/common/uint128.h"
namespace bt {
namespace hci {
// Delegate interface for obtaining the host-maintained local address and
// identity information for the system.
class LocalAddressDelegate {
public:
virtual ~LocalAddressDelegate() = default;
// Returns the currently assigned IRK, if any.
virtual std::optional<UInt128> irk() const = 0;
// Returns the identity address.
virtual DeviceAddress identity_address() const = 0;
// Asynchronously returns the local LE controller address used by all LE link
// layer procedures with the exception of 5.0 advertising sets. These include:
// - Legacy and extended scan requests;
// - Legacy and extended connection initiation;
// - Legacy advertising.
//
// There are two kinds of address that can be returned by this function:
// - A public device address (BD_ADDR) shared with the BR/EDR transport and
// typically factory-assigned.
// - A random device address that has been assigned to the controller by the
// host using the HCI_LE_Set_Random_Address command.
//
// This method runs |callback| when the procedure ends. |callback| may run
// synchronously or asynchronously.
using AddressCallback = fit::function<void(const DeviceAddress&)>;
virtual void EnsureLocalAddress(AddressCallback callback) = 0;
};
// Interface to be implemented by all objects that are interested in and/or can
// prevent the configuration of a local private address.
class LocalAddressClient {
public:
virtual ~LocalAddressClient() = default;
// Returns true if the procedures managed by this client do not currently
// prevent the reconfiguration of the controller LE random address.
virtual bool AllowsRandomAddressChange() const = 0;
};
} // namespace hci
} // namespace bt
#endif // SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_LOCAL_ADDRESS_DELEGATE_H_