Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: device/bluetooth/bluetooth_device.cc

Issue 2394473005: Move enum BluetoothDevice::DeviceType out of BluetoothDevice class. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « device/bluetooth/bluetooth_device.h ('k') | device/bluetooth/bluez/bluetooth_bluez_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/bluetooth/bluetooth_device.h" 5 #include "device/bluetooth/bluetooth_device.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 10
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 base::Optional<std::string> name = GetName(); 94 base::Optional<std::string> name = GetName();
95 if (name && HasGraphicCharacter(name.value())) { 95 if (name && HasGraphicCharacter(name.value())) {
96 return base::UTF8ToUTF16(name.value()); 96 return base::UTF8ToUTF16(name.value());
97 } else { 97 } else {
98 return GetAddressWithLocalizedDeviceTypeName(); 98 return GetAddressWithLocalizedDeviceTypeName();
99 } 99 }
100 } 100 }
101 101
102 base::string16 BluetoothDevice::GetAddressWithLocalizedDeviceTypeName() const { 102 base::string16 BluetoothDevice::GetAddressWithLocalizedDeviceTypeName() const {
103 base::string16 address_utf16 = base::UTF8ToUTF16(GetAddress()); 103 base::string16 address_utf16 = base::UTF8ToUTF16(GetAddress());
104 BluetoothDevice::DeviceType device_type = GetDeviceType(); 104 BluetoothDeviceType device_type = GetDeviceType();
105 switch (device_type) { 105 switch (device_type) {
106 case DEVICE_COMPUTER: 106 case BluetoothDeviceType::COMPUTER:
107 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_COMPUTER, 107 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_COMPUTER,
108 address_utf16); 108 address_utf16);
109 case DEVICE_PHONE: 109 case BluetoothDeviceType::PHONE:
110 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_PHONE, 110 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_PHONE,
111 address_utf16); 111 address_utf16);
112 case DEVICE_MODEM: 112 case BluetoothDeviceType::MODEM:
113 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MODEM, 113 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MODEM,
114 address_utf16); 114 address_utf16);
115 case DEVICE_AUDIO: 115 case BluetoothDeviceType::AUDIO:
116 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_AUDIO, 116 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_AUDIO,
117 address_utf16); 117 address_utf16);
118 case DEVICE_CAR_AUDIO: 118 case BluetoothDeviceType::CAR_AUDIO:
119 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_CAR_AUDIO, 119 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_CAR_AUDIO,
120 address_utf16); 120 address_utf16);
121 case DEVICE_VIDEO: 121 case BluetoothDeviceType::VIDEO:
122 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_VIDEO, 122 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_VIDEO,
123 address_utf16); 123 address_utf16);
124 case DEVICE_JOYSTICK: 124 case BluetoothDeviceType::JOYSTICK:
125 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_JOYSTICK, 125 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_JOYSTICK,
126 address_utf16); 126 address_utf16);
127 case DEVICE_GAMEPAD: 127 case BluetoothDeviceType::GAMEPAD:
128 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_GAMEPAD, 128 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_GAMEPAD,
129 address_utf16); 129 address_utf16);
130 case DEVICE_KEYBOARD: 130 case BluetoothDeviceType::KEYBOARD:
131 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_KEYBOARD, 131 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_KEYBOARD,
132 address_utf16); 132 address_utf16);
133 case DEVICE_MOUSE: 133 case BluetoothDeviceType::MOUSE:
134 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MOUSE, 134 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_MOUSE,
135 address_utf16); 135 address_utf16);
136 case DEVICE_TABLET: 136 case BluetoothDeviceType::TABLET:
137 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_TABLET, 137 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_TABLET,
138 address_utf16); 138 address_utf16);
139 case DEVICE_KEYBOARD_MOUSE_COMBO: 139 case BluetoothDeviceType::KEYBOARD_MOUSE_COMBO:
140 return l10n_util::GetStringFUTF16( 140 return l10n_util::GetStringFUTF16(
141 IDS_BLUETOOTH_DEVICE_KEYBOARD_MOUSE_COMBO, address_utf16); 141 IDS_BLUETOOTH_DEVICE_KEYBOARD_MOUSE_COMBO, address_utf16);
142 default: 142 default:
143 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_UNKNOWN, 143 return l10n_util::GetStringFUTF16(IDS_BLUETOOTH_DEVICE_UNKNOWN,
144 address_utf16); 144 address_utf16);
145 } 145 }
146 } 146 }
147 147
148 BluetoothDevice::DeviceType BluetoothDevice::GetDeviceType() const { 148 BluetoothDeviceType BluetoothDevice::GetDeviceType() const {
149 // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm 149 // https://www.bluetooth.org/Technical/AssignedNumbers/baseband.htm
150 uint32_t bluetooth_class = GetBluetoothClass(); 150 uint32_t bluetooth_class = GetBluetoothClass();
151 switch ((bluetooth_class & 0x1f00) >> 8) { 151 switch ((bluetooth_class & 0x1f00) >> 8) {
152 case 0x01: 152 case 0x01:
153 // Computer major device class. 153 // Computer major device class.
154 return DEVICE_COMPUTER; 154 return BluetoothDeviceType::COMPUTER;
155 case 0x02: 155 case 0x02:
156 // Phone major device class. 156 // Phone major device class.
157 switch ((bluetooth_class & 0xfc) >> 2) { 157 switch ((bluetooth_class & 0xfc) >> 2) {
158 case 0x01: 158 case 0x01:
159 case 0x02: 159 case 0x02:
160 case 0x03: 160 case 0x03:
161 // Cellular, cordless and smart phones. 161 // Cellular, cordless and smart phones.
162 return DEVICE_PHONE; 162 return BluetoothDeviceType::PHONE;
163 case 0x04: 163 case 0x04:
164 case 0x05: 164 case 0x05:
165 // Modems: wired or voice gateway and common ISDN access. 165 // Modems: wired or voice gateway and common ISDN access.
166 return DEVICE_MODEM; 166 return BluetoothDeviceType::MODEM;
167 } 167 }
168 break; 168 break;
169 case 0x04: 169 case 0x04:
170 // Audio major device class. 170 // Audio major device class.
171 switch ((bluetooth_class & 0xfc) >> 2) { 171 switch ((bluetooth_class & 0xfc) >> 2) {
172 case 0x08: 172 case 0x08:
173 // Car audio. 173 // Car audio.
174 return DEVICE_CAR_AUDIO; 174 return BluetoothDeviceType::CAR_AUDIO;
175 case 0x0b: 175 case 0x0b:
176 case 0x0c: 176 case 0x0c:
177 case 0x0d: 177 case 0x0d:
178 case 0x0e: 178 case 0x0e:
179 case 0x0f: 179 case 0x0f:
180 case 0x010: 180 case 0x010:
181 // Video devices. 181 // Video devices.
182 return DEVICE_VIDEO; 182 return BluetoothDeviceType::VIDEO;
183 default: 183 default:
184 return DEVICE_AUDIO; 184 return BluetoothDeviceType::AUDIO;
185 } 185 }
186 break; 186 break;
187 case 0x05: 187 case 0x05:
188 // Peripheral major device class. 188 // Peripheral major device class.
189 switch ((bluetooth_class & 0xc0) >> 6) { 189 switch ((bluetooth_class & 0xc0) >> 6) {
190 case 0x00: 190 case 0x00:
191 // "Not a keyboard or pointing device." 191 // "Not a keyboard or pointing device."
192 switch ((bluetooth_class & 0x01e) >> 2) { 192 switch ((bluetooth_class & 0x01e) >> 2) {
193 case 0x01: 193 case 0x01:
194 // Joystick. 194 // Joystick.
195 return DEVICE_JOYSTICK; 195 return BluetoothDeviceType::JOYSTICK;
196 case 0x02: 196 case 0x02:
197 // Gamepad. 197 // Gamepad.
198 return DEVICE_GAMEPAD; 198 return BluetoothDeviceType::GAMEPAD;
199 default: 199 default:
200 return DEVICE_PERIPHERAL; 200 return BluetoothDeviceType::PERIPHERAL;
201 } 201 }
202 break; 202 break;
203 case 0x01: 203 case 0x01:
204 // Keyboard. 204 // Keyboard.
205 return DEVICE_KEYBOARD; 205 return BluetoothDeviceType::KEYBOARD;
206 case 0x02: 206 case 0x02:
207 // Pointing device. 207 // Pointing device.
208 switch ((bluetooth_class & 0x01e) >> 2) { 208 switch ((bluetooth_class & 0x01e) >> 2) {
209 case 0x05: 209 case 0x05:
210 // Digitizer tablet. 210 // Digitizer tablet.
211 return DEVICE_TABLET; 211 return BluetoothDeviceType::TABLET;
212 default: 212 default:
213 // Mouse. 213 // Mouse.
214 return DEVICE_MOUSE; 214 return BluetoothDeviceType::MOUSE;
215 } 215 }
216 break; 216 break;
217 case 0x03: 217 case 0x03:
218 // Combo device. 218 // Combo device.
219 return DEVICE_KEYBOARD_MOUSE_COMBO; 219 return BluetoothDeviceType::KEYBOARD_MOUSE_COMBO;
220 } 220 }
221 break; 221 break;
222 } 222 }
223 223
224 // Some bluetooth devices, e.g., Microsoft Universal Foldable Keyboard, 224 // Some bluetooth devices, e.g., Microsoft Universal Foldable Keyboard,
225 // do not expose its bluetooth class. Use its appearance as a work-around. 225 // do not expose its bluetooth class. Use its appearance as a work-around.
226 // https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicVi ewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml 226 // https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicVi ewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
227 uint16_t appearance = GetAppearance(); 227 uint16_t appearance = GetAppearance();
228 // appearance: 10-bit category and 6-bit sub-category 228 // appearance: 10-bit category and 6-bit sub-category
229 switch ((appearance & 0xffc0) >> 6) { 229 switch ((appearance & 0xffc0) >> 6) {
230 case 0x01: 230 case 0x01:
231 // Generic phone 231 // Generic phone
232 return DEVICE_PHONE; 232 return BluetoothDeviceType::PHONE;
233 case 0x02: 233 case 0x02:
234 // Generic computer 234 // Generic computer
235 return DEVICE_COMPUTER; 235 return BluetoothDeviceType::COMPUTER;
236 case 0x0f: 236 case 0x0f:
237 // HID subtype 237 // HID subtype
238 switch (appearance & 0x3f) { 238 switch (appearance & 0x3f) {
239 case 0x01: 239 case 0x01:
240 // Keyboard. 240 // Keyboard.
241 return DEVICE_KEYBOARD; 241 return BluetoothDeviceType::KEYBOARD;
242 case 0x02: 242 case 0x02:
243 // Mouse 243 // Mouse
244 return DEVICE_MOUSE; 244 return BluetoothDeviceType::MOUSE;
245 case 0x03: 245 case 0x03:
246 // Joystick 246 // Joystick
247 return DEVICE_JOYSTICK; 247 return BluetoothDeviceType::JOYSTICK;
248 case 0x04: 248 case 0x04:
249 // Gamepad 249 // Gamepad
250 return DEVICE_GAMEPAD; 250 return BluetoothDeviceType::GAMEPAD;
251 case 0x05: 251 case 0x05:
252 // Digitizer tablet 252 // Digitizer tablet
253 return DEVICE_TABLET; 253 return BluetoothDeviceType::TABLET;
254 } 254 }
255 } 255 }
256 256
257 return DEVICE_UNKNOWN; 257 return BluetoothDeviceType::UNKNOWN;
258 } 258 }
259 259
260 bool BluetoothDevice::IsPairable() const { 260 bool BluetoothDevice::IsPairable() const {
261 DeviceType type = GetDeviceType(); 261 BluetoothDeviceType type = GetDeviceType();
262 262
263 // Get the vendor part of the address: "00:11:22" for "00:11:22:33:44:55" 263 // Get the vendor part of the address: "00:11:22" for "00:11:22:33:44:55"
264 std::string vendor = GetAddress().substr(0, 8); 264 std::string vendor = GetAddress().substr(0, 8);
265 265
266 // Verbatim "Bluetooth Mouse", model 96674 266 // Verbatim "Bluetooth Mouse", model 96674
267 if (type == DEVICE_MOUSE && vendor == "00:12:A1") 267 if (type == BluetoothDeviceType::MOUSE && vendor == "00:12:A1")
268 return false; 268 return false;
269 // Microsoft "Microsoft Bluetooth Notebook Mouse 5000", model X807028-001 269 // Microsoft "Microsoft Bluetooth Notebook Mouse 5000", model X807028-001
270 if (type == DEVICE_MOUSE && vendor == "7C:ED:8D") 270 if (type == BluetoothDeviceType::MOUSE && vendor == "7C:ED:8D")
271 return false; 271 return false;
272 // Sony PlayStation Dualshock3 272 // Sony PlayStation Dualshock3
273 if (IsTrustable()) 273 if (IsTrustable())
274 return false; 274 return false;
275 275
276 // TODO: Move this database into a config file. 276 // TODO: Move this database into a config file.
277 277
278 return true; 278 return true;
279 } 279 }
280 280
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 if (power < INT8_MIN) { 488 if (power < INT8_MIN) {
489 return INT8_MIN; 489 return INT8_MIN;
490 } 490 }
491 if (power > INT8_MAX) { 491 if (power > INT8_MAX) {
492 return INT8_MAX; 492 return INT8_MAX;
493 } 493 }
494 return static_cast<int8_t>(power); 494 return static_cast<int8_t>(power);
495 } 495 }
496 496
497 } // namespace device 497 } // namespace device
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_device.h ('k') | device/bluetooth/bluez/bluetooth_bluez_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698