chromium/device/bluetooth/bluetooth_classic_win_fake.cc

// 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