// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "device/bluetooth/bluetooth_classic_win_fake.h"
#include "base/check_op.h"
#include "base/notreached.h"
#include "base/strings/string_util.h"
namespace device {
namespace win {
BluetoothClassicWrapperFake::BluetoothClassicWrapperFake()
: last_error_(ERROR_SUCCESS) {}
BluetoothClassicWrapperFake::~BluetoothClassicWrapperFake() {}
HBLUETOOTH_RADIO_FIND BluetoothClassicWrapperFake::FindFirstRadio(
const BLUETOOTH_FIND_RADIO_PARAMS* params) {
if (simulated_radios_) {
last_error_ = ERROR_SUCCESS;
return (PVOID)simulated_radios_.get();
}
last_error_ = ERROR_NO_MORE_ITEMS;
return NULL;
}
DWORD BluetoothClassicWrapperFake::GetRadioInfo(
PBLUETOOTH_RADIO_INFO out_radio_info) {
if (simulated_radios_) {
*out_radio_info = simulated_radios_->radio_info;
last_error_ = ERROR_SUCCESS;
return last_error_;
}
last_error_ = ERROR_INVALID_HANDLE;
return last_error_;
}
BOOL BluetoothClassicWrapperFake::FindRadioClose(HBLUETOOTH_RADIO_FIND handle) {
DCHECK_EQ(handle, (PVOID)simulated_radios_.get());
return TRUE;
}
BOOL BluetoothClassicWrapperFake::IsConnectable() {
if (simulated_radios_) {
last_error_ = ERROR_SUCCESS;
return simulated_radios_->is_connectable;
}
last_error_ = ERROR_INVALID_HANDLE;
return FALSE;
}
HBLUETOOTH_DEVICE_FIND BluetoothClassicWrapperFake::FindFirstDevice(
const BLUETOOTH_DEVICE_SEARCH_PARAMS* params,
BLUETOOTH_DEVICE_INFO* out_device_info) {
last_error_ = ERROR_NO_MORE_ITEMS;
return NULL;
}
BOOL BluetoothClassicWrapperFake::FindNextDevice(
HBLUETOOTH_DEVICE_FIND handle,
BLUETOOTH_DEVICE_INFO* out_device_info) {
NOTIMPLEMENTED();
return TRUE;
}
BOOL BluetoothClassicWrapperFake::FindDeviceClose(
HBLUETOOTH_DEVICE_FIND handle) {
return TRUE;
}
BOOL BluetoothClassicWrapperFake::EnableDiscovery(BOOL is_enable) {
return TRUE;
}
BOOL BluetoothClassicWrapperFake::EnableIncomingConnections(BOOL is_enable) {
return TRUE;
}
DWORD BluetoothClassicWrapperFake::LastError() {
return last_error_;
}
bool BluetoothClassicWrapperFake::HasHandle() {
return bool(simulated_radios_);
}
BluetoothRadio* BluetoothClassicWrapperFake::SimulateARadio(
std::u16string name,
BLUETOOTH_ADDRESS address) {
BluetoothRadio* radio = new BluetoothRadio();
radio->is_connectable = true; // set it connectable by default.
size_t length =
((name.size() > BLUETOOTH_MAX_NAME_SIZE) ? BLUETOOTH_MAX_NAME_SIZE
: name.size());
wcsncpy(radio->radio_info.szName, base::as_wcstr(name), length);
radio->radio_info.address = address;
simulated_radios_.reset(radio);
return radio;
}
} // namespace device
} // namespace win