blob: e13ec1b68129b75fd7b614baef51f1be8825efb5 [file] [log] [blame]
// Copyright (c) 2012 The Chromium 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 "chrome/browser/extensions/api/bluetooth/bluetooth_api_utils.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/common/extensions/api/bluetooth.h"
#include "device/bluetooth/bluetooth_adapter.h"
#include "device/bluetooth/bluetooth_device.h"
namespace bluetooth = extensions::api::bluetooth;
using device::BluetoothDevice;
using bluetooth::VendorIdSource;
namespace {
bool ConvertVendorIDSourceToApi(const BluetoothDevice::VendorIDSource& input,
bluetooth::VendorIdSource* output) {
switch (input) {
case BluetoothDevice::VENDOR_ID_UNKNOWN:
*output = bluetooth::VENDOR_ID_SOURCE_NONE;
return true;
case BluetoothDevice::VENDOR_ID_BLUETOOTH:
*output = bluetooth::VENDOR_ID_SOURCE_BLUETOOTH;
return true;
case BluetoothDevice::VENDOR_ID_USB:
*output = bluetooth::VENDOR_ID_SOURCE_USB;
return true;
default:
NOTREACHED();
return false;
}
}
bool ConvertDeviceTypeToApi(const BluetoothDevice::DeviceType& input,
bluetooth::DeviceType* output) {
switch (input) {
case BluetoothDevice::DEVICE_UNKNOWN:
*output = bluetooth::DEVICE_TYPE_NONE;
return true;
case BluetoothDevice::DEVICE_COMPUTER:
*output = bluetooth::DEVICE_TYPE_COMPUTER;
return true;
case BluetoothDevice::DEVICE_PHONE:
*output = bluetooth::DEVICE_TYPE_PHONE;
return true;
case BluetoothDevice::DEVICE_MODEM:
*output = bluetooth::DEVICE_TYPE_MODEM;
return true;
case BluetoothDevice::DEVICE_AUDIO:
*output = bluetooth::DEVICE_TYPE_AUDIO;
return true;
case BluetoothDevice::DEVICE_CAR_AUDIO:
*output = bluetooth::DEVICE_TYPE_CARAUDIO;
return true;
case BluetoothDevice::DEVICE_VIDEO:
*output = bluetooth::DEVICE_TYPE_VIDEO;
return true;
case BluetoothDevice::DEVICE_PERIPHERAL:
*output = bluetooth::DEVICE_TYPE_PERIPHERAL;
return true;
case BluetoothDevice::DEVICE_JOYSTICK:
*output = bluetooth::DEVICE_TYPE_JOYSTICK;
return true;
case BluetoothDevice::DEVICE_GAMEPAD:
*output = bluetooth::DEVICE_TYPE_GAMEPAD;
return true;
case BluetoothDevice::DEVICE_KEYBOARD:
*output = bluetooth::DEVICE_TYPE_KEYBOARD;
return true;
case BluetoothDevice::DEVICE_MOUSE:
*output = bluetooth::DEVICE_TYPE_MOUSE;
return true;
case BluetoothDevice::DEVICE_TABLET:
*output = bluetooth::DEVICE_TYPE_TABLET;
return true;
case BluetoothDevice::DEVICE_KEYBOARD_MOUSE_COMBO:
*output = bluetooth::DEVICE_TYPE_KEYBOARDMOUSECOMBO;
return true;
default:
return false;
}
}
} // namespace
namespace extensions {
namespace api {
namespace bluetooth {
void BluetoothDeviceToApiDevice(const device::BluetoothDevice& device,
Device* out) {
out->address = device.GetAddress();
out->name.reset(new std::string(base::UTF16ToUTF8(device.GetName())));
out->device_class.reset(new int(device.GetBluetoothClass()));
// Only include the Device ID members when one exists for the device, and
// always include all or none.
if (ConvertVendorIDSourceToApi(device.GetVendorIDSource(),
&(out->vendor_id_source)) &&
out->vendor_id_source != VENDOR_ID_SOURCE_NONE) {
out->vendor_id.reset(new int(device.GetVendorID()));
out->product_id.reset(new int(device.GetProductID()));
out->device_id.reset(new int(device.GetDeviceID()));
}
ConvertDeviceTypeToApi(device.GetDeviceType(), &(out->type));
out->paired.reset(new bool(device.IsPaired()));
out->connected.reset(new bool(device.IsConnected()));
int rssi = device.GetRSSI();
if (rssi != BluetoothDevice::kUnknownPower)
out->rssi.reset(new int(rssi));
if (*out->connected) {
int current_transmit_power = device.GetCurrentHostTransmitPower();
if (current_transmit_power != BluetoothDevice::kUnknownPower)
out->current_host_transmit_power.reset(new int(current_transmit_power));
int maximum_transmit_power = device.GetMaximumHostTransmitPower();
if (maximum_transmit_power != BluetoothDevice::kUnknownPower)
out->maximum_host_transmit_power.reset(new int(maximum_transmit_power));
}
std::vector<std::string>* string_uuids = new std::vector<std::string>();
const device::BluetoothDevice::UUIDList& uuids = device.GetUUIDs();
for (device::BluetoothDevice::UUIDList::const_iterator iter = uuids.begin();
iter != uuids.end(); ++iter)
string_uuids->push_back(iter->canonical_value());
out->uuids.reset(string_uuids);
}
void PopulateAdapterState(const device::BluetoothAdapter& adapter,
AdapterState* out) {
out->discovering = adapter.IsDiscovering();
out->available = adapter.IsPresent();
out->powered = adapter.IsPowered();
out->name = adapter.GetName();
out->address = adapter.GetAddress();
}
} // namespace bluetooth
} // namespace api
} // namespace extensions