| Index: device/bluetooth/README.md
|
| diff --git a/device/bluetooth/README.md b/device/bluetooth/README.md
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..cda6f1ddd0aa54fe31dad29e18c2834bd3e023c3
|
| --- /dev/null
|
| +++ b/device/bluetooth/README.md
|
| @@ -0,0 +1,128 @@
|
| +Bluetooth
|
| +=========
|
| +
|
| +`device/bluetooth` abstracts
|
| +[Bluetooth Classic](https://en.wikipedia.org/wiki/Bluetooth) and
|
| +[Low Energy](https://en.wikipedia.org/wiki/Bluetooth_low_energy) features
|
| +across multiple platforms.
|
| +
|
| +Classic and Low Energy based profiles differ substantially. Platform
|
| +implementations may support only one or the other, even though several classes
|
| +have interfaces for both, e.g. `BluetoothAdapter` & `BluetoothDevice`.
|
| +
|
| + | | Classic | Low Energy |
|
| + |----------|:-------:|:-----------:|
|
| + | Android | no | in progress |
|
| + | ChromeOS | yes | yes |
|
| + | Linux | yes | yes |
|
| + | Mac OSX | yes | in progress |
|
| + | Windows | some | in progress |
|
| +
|
| +ChromeOS and Linux are supported via BlueZ, see `*_bluez` files.
|
| +
|
| +
|
| +--------------------------------------------------------------------------------
|
| +Maintainer History
|
| +--------------------------------------------------------------------------------
|
| +
|
| +Initial implementation OWNERS were youngki@chromium.org, keybuk@chromium.org,
|
| +armansito@chromium.org, and rpaquay@chromium.org. They no longer contribute to
|
| +chromium fulltime. They were responsible for support for ChromeOS Bluetooth
|
| +features and the Chrome Apps APIs:
|
| +
|
| +* [bluetooth](https://developer.chrome.com/apps/bluetooth)
|
| +* [bluetoothLowEnergy](https://developer.chrome.com/apps/bluetoothLowEnergy)
|
| +* [bluetoothSocket](https://developer.chrome.com/apps/bluetoothSocket)
|
| +
|
| +Active development in 2015 & 2016 is focused on enabling GATT features for:
|
| +
|
| +* [Web Bluetooth](https://crbug.com/419413)
|
| +
|
| +Known future work is tracked in the
|
| +[Refactoring meta issue](https://crbug.com/580406).
|
| +
|
| +--------------------------------------------------------------------------------
|
| +Testing
|
| +--------------------------------------------------------------------------------
|
| +
|
| +Implementation of the Bluetooth component is tested via unittests. Client code
|
| +uses Mock Bluetooth objects:
|
| +
|
| +
|
| +### Cross Platform Unit Tests
|
| +
|
| +New feature development uses cross platform unit tests. This reduces test code
|
| +redundancy and produces consistency across all implementations.
|
| +
|
| +Unit tests operate at the public `device/bluetooth` API layer and the
|
| +`BluetoothTest` fixture controls fake operating system behavior as close to the
|
| +platfom as possible. The resulting test coverage spans the cross platform API,
|
| +common implementation, and platform specific implementation as close to
|
| +operating system APIs as possible.
|
| +
|
| +`test/bluetooth_test.h` defines the cross platform test fixture
|
| +`BluetoothTestBase`. Platform implementations provide subclasses, such as
|
| +`test/bluetooth_test_android.h` and typedef to the name `BluetoothTest`.
|
| +
|
| +[More testing information](https://docs.google.com/document/d/1mBipxn1sJu6jMqP0RQZpkYXC1o601bzLCpCxwTA2yGA/edit?usp=sharing)
|
| +
|
| +### Legacy Platform Specific Unit Tests
|
| +
|
| +Early code (Classic on most platforms, and Low Energy on BlueZ) was tested with
|
| +platform specific unit tests, e.g. `bluetooth_bluez_unittest.cc` &
|
| +`bluetooth_adapter_win_unittest.cc`. The BlueZ style has platform specific
|
| +methods to create fake devices and the public API is used to interact with them.
|
| +
|
| +Maintenance of these earlier implementation featuress should update tests in
|
| +place. Long term these tests should be [refactored into cross platform
|
| +tests](https://crbug.com/580403).
|
| +
|
| +
|
| +### Mock Bluetooth Objects
|
| +
|
| +`test/mock_bluetooth_*` files provide GoogleMock based fake objects for use in
|
| +client code.
|
| +
|
| +
|
| +### ChromeOS Blueooth Controller Tests
|
| +
|
| +Bluetooth controller system tests generating radio signals are run and managed
|
| +by the ChromeOS team. See:
|
| +https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/server/site_tests/
|
| +https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/server/cros/bluetooth/
|
| +https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/client/cros/bluetooth/
|
| +
|
| +
|
| +--------------------------------------------------------------------------------
|
| +Android
|
| +--------------------------------------------------------------------------------
|
| +
|
| +The android implementation requires crossing from C++ to Java using
|
| +[__JNI__](https://www.chromium.org/developers/design-documents/android-jni).
|
| +
|
| +Object ownership is rooted in the C++ classes, starting with the Adapter, which
|
| +owns Devices, Services, etc. Java counter parts interface with the Android
|
| +Bluetooth objects. E.g.
|
| +
|
| +For testing, the Android objects are __wrapped__ in:
|
| +`android/java/src/org/chromium/device/bluetooth/Wrappers.java`. <br>
|
| +and __fakes__ implemented in:
|
| +`test/android/java/src/org/chromium/device/bluetooth/Fakes.java`.
|
| +
|
| +Thus:
|
| +
|
| +* `bluetooth_adapter_android.h` owns:
|
| + * `android/.../ChromeBluetoothAdapter.java` uses:
|
| + * `android/.../Wrappers.java`: `BluetoothAdapterWrapper`
|
| + * Which under test is a `FakeBluetoothAdapter`
|
| + * `bluetooth_device_android.h` owns:
|
| + * `android/.../ChromeBluetoothDevice.java` uses:
|
| + * `android/.../Wrappers.java`: `BluetoothDeviceWrapper`
|
| + * Which under test is a `FakeBluetoothDevice`
|
| + * `bluetooth_gatt_service_android.h` owns:
|
| + * `android/.../ChromeBluetoothService.java` uses:
|
| + * `android/.../Wrappers.java`: `BluetoothServiceWrapper`
|
| + * Which under test is a `FakeBluetoothService`
|
| + * ... and so on for characteristics and descriptors.
|
| +
|
| +Fake objects are controlled by `bluetooth_test_android.cc`.
|
|
|