// 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 "device/bluetooth/bluetooth_device.h" #include "base/utf_string_conversions.h" #include "grit/generated_resources.h" #include "ui/base/l10n/l10n_util.h" namespace device { BluetoothDevice::BluetoothDevice() : bluetooth_class_(0), visible_(false), bonded_(false), connected_(false) { } BluetoothDevice::~BluetoothDevice() { } const std::string& BluetoothDevice::address() const { return address_; } string16 BluetoothDevice::GetName() const { if (!name_.empty()) { return UTF8ToUTF16(name_); } else { return GetAddressWithLocalizedDeviceTypeName(); } } string16 BluetoothDevice::GetAddressWithLocalizedDeviceTypeName() const { string16 address = UTF8ToUTF16(address_); BluetoothDevice::DeviceType device_type = GetDeviceType(); switch (device_type) { case DEVICE_COMPUTER: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_COMPUTER, address); case DEVICE_PHONE: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_PHONE, address); case DEVICE_MODEM: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MODEM, address); case DEVICE_AUDIO: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_AUDIO, address); case DEVICE_CAR_AUDIO: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_CAR_AUDIO, address); case DEVICE_VIDEO: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_VIDEO, address); case DEVICE_JOYSTICK: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_JOYSTICK, address); case DEVICE_GAMEPAD: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_GAMEPAD, address); case DEVICE_KEYBOARD: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_KEYBOARD, address); case DEVICE_MOUSE: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MOUSE, address); case DEVICE_TABLET: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_TABLET, address); case DEVICE_KEYBOARD_MOUSE_COMBO: return l10n_util::GetStringFUTF16( IDS_BLUETOOTH_DEVICE_KEYBOARD_MOUSE_COMBO, address); default: return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_UNKNOWN, address); } } BluetoothDevice::DeviceType BluetoothDevice::GetDeviceType() const { // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm switch ((bluetooth_class_ & 0x1f00) >> 8) { case 0x01: // Computer major device class. return DEVICE_COMPUTER; case 0x02: // Phone major device class. switch ((bluetooth_class_ & 0xfc) >> 2) { case 0x01: case 0x02: case 0x03: // Cellular, cordless and smart phones. return DEVICE_PHONE; case 0x04: case 0x05: // Modems: wired or voice gateway and common ISDN access. return DEVICE_MODEM; } break; case 0x04: // Audio major device class. switch ((bluetooth_class_ & 0xfc) >> 2) { case 0x08: // Car audio. return DEVICE_CAR_AUDIO; case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: case 0x010: // Video devices. return DEVICE_VIDEO; default: return DEVICE_AUDIO; } break; case 0x05: // Peripheral major device class. switch ((bluetooth_class_ & 0xc0) >> 6) { case 0x00: // "Not a keyboard or pointing device." switch ((bluetooth_class_ & 0x01e) >> 2) { case 0x01: // Joystick. return DEVICE_JOYSTICK; case 0x02: // Gamepad. return DEVICE_GAMEPAD; default: return DEVICE_PERIPHERAL; } break; case 0x01: // Keyboard. return DEVICE_KEYBOARD; case 0x02: // Pointing device. switch ((bluetooth_class_ & 0x01e) >> 2) { case 0x05: // Digitizer tablet. return DEVICE_TABLET; default: // Mouse. return DEVICE_MOUSE; } break; case 0x03: // Combo device. return DEVICE_KEYBOARD_MOUSE_COMBO; } break; } return DEVICE_UNKNOWN; } bool BluetoothDevice::IsVisible() const { return visible_; } bool BluetoothDevice::IsBonded() const { return bonded_; } bool BluetoothDevice::IsConnected() const { return connected_; } } // namespace device