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.
Chrome OS and Linux are supported via BlueZ, see
Initial implementation OWNERS were email@example.com, firstname.lastname@example.org, email@example.com, and firstname.lastname@example.org. They no longer contribute to chromium fulltime. They were responsible for support for Chrome OS Bluetooth features and the Chrome Apps APIs:
Active development in 2015 & 2016 focused on enabling GATT features for:
The API and implementation have many known issues.
The initial API was heavily influenced by BlueZ. Low Energy GATT APIs are not consistent across platforms. Some of the high level abstractions built into
device/bluetooth are difficult for clients. Several TODOs exist in the C++ header files, e.g.
Primarily, the API should be split into fundamental Bluetooth concepts and seperate, optional, high level utility classes.
E.g. receiving advertising packets should be routed directly to clients allowing contents of the individual packet to be inspected. Caching of known devices should not exist in the fundamental API, but be offered as utility classes.
See also the Refactoring meta issue.
The android implementation requires crossing from C++ to Java using 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:
and fakes implemented in:
Fake objects are controlled by