blob: ee6000b1fe386e650df457de08e07ef7a0b5683f [file] [log] [blame]
// Copyright 2021 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_MOCK_ACL_DATA_CHANNEL_H_
#define SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_MOCK_ACL_DATA_CHANNEL_H_
#include "src/connectivity/bluetooth/core/bt-host/hci/acl_data_channel.h"
namespace bt::hci::testing {
class MockAclDataChannel final : public AclDataChannel {
public:
MockAclDataChannel() = default;
~MockAclDataChannel() override = default;
using SendPacketsCallback = fit::function<bool(
LinkedList<ACLDataPacket> packets, UniqueChannelId channel_id, PacketPriority priority)>;
void set_send_packets_cb(SendPacketsCallback cb) { send_packets_cb_ = std::move(cb); }
using DropQueuedPacketsCallback = fit::function<void(AclPacketPredicate predicate)>;
void set_drop_queued_packets_cb(DropQueuedPacketsCallback cb) {
drop_queued_packets_cb_ = std::move(cb);
}
using RequestAclPriorityCallback =
fit::function<void(hci::AclPriority priority, hci::ConnectionHandle handle,
fit::callback<void(fit::result<>)> callback)>;
void set_request_acl_priority_cb(RequestAclPriorityCallback cb) {
request_acl_priority_cb_ = std::move(cb);
}
using SetBrEdrAutomaticFlushTimeoutCallback = fit::function<void(
zx::duration, hci::ConnectionHandle, fit::callback<void(fit::result<void, StatusCode>)>)>;
void set_set_bredr_automatic_flush_timeout_cb(SetBrEdrAutomaticFlushTimeoutCallback callback) {
flush_timeout_cb_ = std::move(callback);
}
// AclDataChannel overrides:
void Initialize(const DataBufferInfo& bredr_buffer_info,
const DataBufferInfo& le_buffer_info) override {}
void ShutDown() override {}
void SetDataRxHandler(ACLPacketHandler rx_callback) override {}
bool SendPacket(ACLDataPacketPtr data_packet, UniqueChannelId channel_id,
PacketPriority priority) override {
return false;
}
bool SendPackets(LinkedList<ACLDataPacket> packets, UniqueChannelId channel_id,
PacketPriority priority) override {
if (send_packets_cb_) {
return send_packets_cb_(std::move(packets), channel_id, priority);
}
return true;
}
void RegisterLink(hci::ConnectionHandle handle, Connection::LinkType ll_type) override {}
void UnregisterLink(hci::ConnectionHandle handle) override {}
void DropQueuedPackets(AclPacketPredicate predicate) override {
if (drop_queued_packets_cb_) {
drop_queued_packets_cb_(std::move(predicate));
}
}
void ClearControllerPacketCount(hci::ConnectionHandle handle) override {}
const DataBufferInfo& GetBufferInfo() const override { return bredr_buffer_info_; }
const DataBufferInfo& GetLeBufferInfo() const override { return le_buffer_info_; }
void RequestAclPriority(hci::AclPriority priority, hci::ConnectionHandle handle,
fit::callback<void(fit::result<>)> callback) override {
if (request_acl_priority_cb_) {
request_acl_priority_cb_(priority, handle, std::move(callback));
}
}
void SetBrEdrAutomaticFlushTimeout(
zx::duration flush_timeout, hci::ConnectionHandle handle,
fit::callback<void(fit::result<void, StatusCode>)> callback) override {
if (flush_timeout_cb_) {
flush_timeout_cb_(flush_timeout, handle, std::move(callback));
}
}
private:
DataBufferInfo bredr_buffer_info_;
DataBufferInfo le_buffer_info_;
SendPacketsCallback send_packets_cb_;
DropQueuedPacketsCallback drop_queued_packets_cb_;
RequestAclPriorityCallback request_acl_priority_cb_;
SetBrEdrAutomaticFlushTimeoutCallback flush_timeout_cb_;
};
} // namespace bt::hci::testing
#endif // SRC_CONNECTIVITY_BLUETOOTH_CORE_BT_HOST_HCI_MOCK_ACL_DATA_CHANNEL_H_