blob: 36adc3bb4b694eef439fada0f56c3bbec9a612ab [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.
#include <ddk/debug.h>
#include <ddk/device.h>
#include <ddk/driver.h>
#include <ddk/protocol/bt/hci.h>
#include <ddk/protocol/test.h>
#include <fbl/unique_ptr.h>
#include <lib/async-loop/cpp/loop.h>
#include <zircon/compiler.h>
#include <zircon/syscalls.h>
#include <zircon/types.h>
#include "garnet/drivers/bluetooth/lib/testing/fake_controller.h"
namespace bthci_fake {
enum class Channel {
ACL,
COMMAND,
SNOOP,
};
class Device {
public:
Device(zx_device_t* device);
zx_status_t Bind();
void Unbind();
void Release();
zx_status_t Ioctl(uint32_t op, const void* in_buf, size_t in_len,
void* out_buf, size_t out_len, size_t* out_actual);
zx_status_t GetProtocol(uint32_t proto_id, void* out_proto);
zx_status_t OpenChan(Channel chan_type, zx_handle_t* chan);
private:
async::Loop loop_ __TA_GUARDED(device_lock_);
fbl::RefPtr<btlib::testing::FakeController> fake_device_
__TA_GUARDED(device_lock_);
std::mutex device_lock_;
zx_device_t* parent_;
zx_device_t* zxdev_;
};
} // namespace bthci_fake