Architecture of mbed BLE solution
For most developers, one of Bluetooth Smart’s biggest challenges is the complexity of the stack’s underlying controller and APIs. mbed created BLE_API to abstract these details. Using the API means that applications can take advantage of the high-level constructs and interfaces offered by BLE_API while remaining compatible with all supported underlying Bluetooth Smart platforms. This makes for portable programs, easily moved from one supported platform to another. By using BLE_API, developers also implicitly benefit from all the low-power optimizations offered by the hardware.
BLE_API, Bridges and Stacks¶
A Bluetooth Smart application is composed of BLE_API, bridge software, and controller-specific Bluetooth stack:
- BLE_API is a very thin and lightweight layer of C++ interfaces and abstractions allowing users to develop portable applications for Bluetooth Smart.
- The bridge software is specific to each vendor’s platform. It provides the instantiations for the interfaces offered by BLE_API, and helps drive the underlying controller and Bluetooth stack.
- The Bluetooth stack implements the Bluetooth protocol, and is specific to the controller.
BLE_API is developed on Github and mirrored on mbed.org.
Inside BLE_API¶
BLE_API offers building blocks to help construct applications. These fall into two broad categories: interfaces under 'public/' to express BLE constructs such as GAP, GATT, Service, Characteristics, etc, and classes under 'services/' to offer reference implementations for many of the commonly used GATT profiles. The code under 'services/' isn't essential, but offers a useful reference and a good starting point for prototyping. Code under 'common/' encapsulates headers that need to be shared between the public interfaces and underlying bridge code.
We expect to keep adding reference implementations for the standard GATT profiles under 'services/'.
Sample mbed BLE Apps¶
We have examples of the BLE apps, along with documentation: http://developer.mbed.org/teams/Bluetooth-Low-Energy/code/.