Andrew Fox / BLE_API

Fork of BLE_API by Bluetooth Low Energy

Committer:
rgrover1
Date:
Thu Jul 02 09:06:11 2015 +0100
Revision:
716:11b41f651697
Parent:
710:b2e1a2660ec2
Child:
717:3129b149a6b2
Synchronized with git rev d80fec88
Author: Rohit Grover
Release 0.4.0
=============

This is a major release which introduces the GATT Client functionality. It
also aligns BLE_API with builds using our new package manager: yotta
(https://github.com/armmbed/yotta).

Many APIs have seen some redesign. We encourage our users to pay attention to
the changes and migrate appropriately over time. We've also taken care to
ensure that existing code continues to work the same way. There's more
documentation in the form of comment headers for APIs to explain proper usage;
in many cases comment headers suggest alternative use of APIs.

Enhancements
~~~~~~~~~~~~

* Introduce GattClient. This includes functionality for service-discovery,
connections, and attribute-reads and writes. You'll find a demo program for
LEDBlinker on the mbed.org Bluetooth team page to use the new APIs. Some of
the GATT client functionality hasn't been implemented yet, but the APIs have
been added.

* Most APIs in the abstract base classes like Gap and GattServer return
BLE_ERROR_NOT_IMPLEMENTED. Previously many APIs were pure-virtual, which did
not permit partial ports to compile.

* We've added a new abstract base class for SecurityManager. All security
related APIs have been moved into that.

* BLEDevice has been renamed as BLE. A deprecated alias for BLEDevice is
available to support existing code.

* There has been a major cleanup of APIs under BLE. APIs have now been
categorized as belonging to Gap, GattServer, GattClient, or SecurityManager.
There are accessors to get references for Gap, GattServer, GattClient, and
SecurityManager. A former call to ble.setAddress(...) is now expected to be
achieved with ble.gap().setAddress(...).

* We've cleaned up our APIs, and this has resulted in dropping some APIs like
BLE::reset().

* We've also dropped GattServer::initializeGattDatabase(). THis was added at
some point to support controllers where a commit point was needed to
indicate when the application had finished constructing the GATT database.
This API would get called internally before Gap::startAdvertising(). We now
expect the underlying port to do the equivalent of initializeGattDatabase()
implicitly upon Gap::startAdvertising().

* The callback for BLE.onTimeout() now receives a TimeoutSource_t to indicate
the cause of the timeout. This is perhaps the only breaking API change. We
expect it to have very little disruptive effect.

* We've added a version of Gap::disconnect() which takes a connection handle.
The previous API (which did not take a connection handle) has been
deprecated; it will still work for situations where there's only a single
active connection. We hold on to that API to allow existing code to migrate
to the new API.

Bugfixes
~~~~~~~~

* None.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 710:b2e1a2660ec2 1 /* mbed Microcontroller Library
rgrover1 710:b2e1a2660ec2 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 710:b2e1a2660ec2 3 *
rgrover1 710:b2e1a2660ec2 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 710:b2e1a2660ec2 5 * you may not use this file except in compliance with the License.
rgrover1 710:b2e1a2660ec2 6 * You may obtain a copy of the License at
rgrover1 710:b2e1a2660ec2 7 *
rgrover1 710:b2e1a2660ec2 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 710:b2e1a2660ec2 9 *
rgrover1 710:b2e1a2660ec2 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 710:b2e1a2660ec2 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 710:b2e1a2660ec2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 710:b2e1a2660ec2 13 * See the License for the specific language governing permissions and
rgrover1 710:b2e1a2660ec2 14 * limitations under the License.
rgrover1 710:b2e1a2660ec2 15 */
rgrover1 710:b2e1a2660ec2 16
rgrover1 710:b2e1a2660ec2 17 #ifndef __BLE_COMMON_H__
rgrover1 710:b2e1a2660ec2 18 #define __BLE_COMMON_H__
rgrover1 710:b2e1a2660ec2 19
rgrover1 710:b2e1a2660ec2 20 #ifdef __cplusplus
rgrover1 710:b2e1a2660ec2 21 extern "C" {
rgrover1 710:b2e1a2660ec2 22 #endif
rgrover1 710:b2e1a2660ec2 23
rgrover1 710:b2e1a2660ec2 24
rgrover1 710:b2e1a2660ec2 25 /** @defgroup BLE_UUID_VALUES Assigned Values for BLE UUIDs
rgrover1 710:b2e1a2660ec2 26 * @{ */
rgrover1 710:b2e1a2660ec2 27 /* Generic UUIDs, applicable to all services */
rgrover1 710:b2e1a2660ec2 28 enum {
rgrover1 710:b2e1a2660ec2 29 BLE_UUID_UNKNOWN = 0x0000, /**< Reserved UUID. */
rgrover1 710:b2e1a2660ec2 30 BLE_UUID_SERVICE_PRIMARY = 0x2800, /**< Primary Service. */
rgrover1 710:b2e1a2660ec2 31 BLE_UUID_SERVICE_SECONDARY = 0x2801, /**< Secondary Service. */
rgrover1 710:b2e1a2660ec2 32 BLE_UUID_SERVICE_INCLUDE = 0x2802, /**< Include. */
rgrover1 710:b2e1a2660ec2 33 BLE_UUID_CHARACTERISTIC = 0x2803, /**< Characteristic. */
rgrover1 710:b2e1a2660ec2 34 BLE_UUID_DESCRIPTOR_CHAR_EXT_PROP = 0x2900, /**< Characteristic Extended Properties Descriptor. */
rgrover1 710:b2e1a2660ec2 35 BLE_UUID_DESCRIPTOR_CHAR_USER_DESC = 0x2901, /**< Characteristic User Description Descriptor. */
rgrover1 710:b2e1a2660ec2 36 BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG = 0x2902, /**< Client Characteristic Configuration Descriptor. */
rgrover1 710:b2e1a2660ec2 37 BLE_UUID_DESCRIPTOR_SERVER_CHAR_CONFIG = 0x2903, /**< Server Characteristic Configuration Descriptor. */
rgrover1 710:b2e1a2660ec2 38 BLE_UUID_DESCRIPTOR_CHAR_PRESENTATION_FORMAT = 0x2904, /**< Characteristic Presentation Format Descriptor. */
rgrover1 710:b2e1a2660ec2 39 BLE_UUID_DESCRIPTOR_CHAR_AGGREGATE_FORMAT = 0x2905, /**< Characteristic Aggregate Format Descriptor. */
rgrover1 710:b2e1a2660ec2 40
rgrover1 710:b2e1a2660ec2 41 /* GATT specific UUIDs */
rgrover1 710:b2e1a2660ec2 42 BLE_UUID_GATT = 0x1801, /**< Generic Attribute Profile. */
rgrover1 710:b2e1a2660ec2 43 BLE_UUID_GATT_CHARACTERISTIC_SERVICE_CHANGED = 0x2A05, /**< Service Changed Characteristic. */
rgrover1 710:b2e1a2660ec2 44
rgrover1 710:b2e1a2660ec2 45 /* GAP specific UUIDs */
rgrover1 710:b2e1a2660ec2 46 BLE_UUID_GAP = 0x1800, /**< Generic Access Profile. */
rgrover1 710:b2e1a2660ec2 47 BLE_UUID_GAP_CHARACTERISTIC_DEVICE_NAME = 0x2A00, /**< Device Name Characteristic. */
rgrover1 710:b2e1a2660ec2 48 BLE_UUID_GAP_CHARACTERISTIC_APPEARANCE = 0x2A01, /**< Appearance Characteristic. */
rgrover1 710:b2e1a2660ec2 49 BLE_UUID_GAP_CHARACTERISTIC_PPF = 0x2A02, /**< Peripheral Privacy Flag Characteristic. */
rgrover1 710:b2e1a2660ec2 50 BLE_UUID_GAP_CHARACTERISTIC_RECONN_ADDR = 0x2A03, /**< Reconnection Address Characteristic. */
rgrover1 710:b2e1a2660ec2 51 BLE_UUID_GAP_CHARACTERISTIC_PPCP = 0x2A04, /**< Peripheral Preferred Connection Parameters Characteristic. */
rgrover1 710:b2e1a2660ec2 52 };
rgrover1 710:b2e1a2660ec2 53 /** @} */
rgrover1 710:b2e1a2660ec2 54
rgrover1 710:b2e1a2660ec2 55 /** @defgroup BLE_APPEARANCES Bluetooth Appearance values
rgrover1 710:b2e1a2660ec2 56 * @note Retrieved from http://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.appearance.xml
rgrover1 710:b2e1a2660ec2 57 * @{ */
rgrover1 710:b2e1a2660ec2 58 enum {
rgrover1 710:b2e1a2660ec2 59 BLE_APPEARANCE_UNKNOWN = 0, /**< Unknown. */
rgrover1 710:b2e1a2660ec2 60 BLE_APPEARANCE_GENERIC_PHONE = 64, /**< Generic Phone. */
rgrover1 710:b2e1a2660ec2 61 BLE_APPEARANCE_GENERIC_COMPUTER = 128, /**< Generic Computer. */
rgrover1 710:b2e1a2660ec2 62 BLE_APPEARANCE_GENERIC_WATCH = 192, /**< Generic Watch. */
rgrover1 710:b2e1a2660ec2 63 BLE_APPEARANCE_WATCH_SPORTS_WATCH = 193, /**< Watch: Sports Watch. */
rgrover1 710:b2e1a2660ec2 64 BLE_APPEARANCE_GENERIC_CLOCK = 256, /**< Generic Clock. */
rgrover1 710:b2e1a2660ec2 65 BLE_APPEARANCE_GENERIC_DISPLAY = 320, /**< Generic Display. */
rgrover1 710:b2e1a2660ec2 66 BLE_APPEARANCE_GENERIC_REMOTE_CONTROL = 384, /**< Generic Remote Control. */
rgrover1 710:b2e1a2660ec2 67 BLE_APPEARANCE_GENERIC_EYE_GLASSES = 448, /**< Generic Eye-glasses. */
rgrover1 710:b2e1a2660ec2 68 BLE_APPEARANCE_GENERIC_TAG = 512, /**< Generic Tag. */
rgrover1 710:b2e1a2660ec2 69 BLE_APPEARANCE_GENERIC_KEYRING = 576, /**< Generic Keyring. */
rgrover1 710:b2e1a2660ec2 70 BLE_APPEARANCE_GENERIC_MEDIA_PLAYER = 640, /**< Generic Media Player. */
rgrover1 710:b2e1a2660ec2 71 BLE_APPEARANCE_GENERIC_BARCODE_SCANNER = 704, /**< Generic Barcode Scanner. */
rgrover1 710:b2e1a2660ec2 72 BLE_APPEARANCE_GENERIC_THERMOMETER = 768, /**< Generic Thermometer. */
rgrover1 710:b2e1a2660ec2 73 BLE_APPEARANCE_THERMOMETER_EAR = 769, /**< Thermometer: Ear. */
rgrover1 710:b2e1a2660ec2 74 BLE_APPEARANCE_GENERIC_HEART_RATE_SENSOR = 832, /**< Generic Heart rate Sensor. */
rgrover1 710:b2e1a2660ec2 75 BLE_APPEARANCE_HEART_RATE_SENSOR_HEART_RATE_BELT = 833, /**< Heart Rate Sensor: Heart Rate Belt. */
rgrover1 710:b2e1a2660ec2 76 BLE_APPEARANCE_GENERIC_BLOOD_PRESSURE = 896, /**< Generic Blood Pressure. */
rgrover1 710:b2e1a2660ec2 77 BLE_APPEARANCE_BLOOD_PRESSURE_ARM = 897, /**< Blood Pressure: Arm. */
rgrover1 710:b2e1a2660ec2 78 BLE_APPEARANCE_BLOOD_PRESSURE_WRIST = 898, /**< Blood Pressure: Wrist. */
rgrover1 710:b2e1a2660ec2 79 BLE_APPEARANCE_GENERIC_HID = 960, /**< Human Interface Device (HID). */
rgrover1 710:b2e1a2660ec2 80 BLE_APPEARANCE_HID_KEYBOARD = 961, /**< Keyboard (HID Subtype). */
rgrover1 710:b2e1a2660ec2 81 BLE_APPEARANCE_HID_MOUSE = 962, /**< Mouse (HID Subtype). */
rgrover1 710:b2e1a2660ec2 82 BLE_APPEARANCE_HID_JOYSTICK = 963, /**< Joystiq (HID Subtype). */
rgrover1 710:b2e1a2660ec2 83 BLE_APPEARANCE_HID_GAMEPAD = 964, /**< Gamepad (HID Subtype). */
rgrover1 710:b2e1a2660ec2 84 BLE_APPEARANCE_HID_DIGITIZERSUBTYPE = 965, /**< Digitizer Tablet (HID Subtype). */
rgrover1 710:b2e1a2660ec2 85 BLE_APPEARANCE_HID_CARD_READER = 966, /**< Card Reader (HID Subtype). */
rgrover1 710:b2e1a2660ec2 86 BLE_APPEARANCE_HID_DIGITAL_PEN = 967, /**< Digital Pen (HID Subtype). */
rgrover1 710:b2e1a2660ec2 87 BLE_APPEARANCE_HID_BARCODE = 968, /**< Barcode Scanner (HID Subtype). */
rgrover1 710:b2e1a2660ec2 88 BLE_APPEARANCE_GENERIC_GLUCOSE_METER = 1024, /**< Generic Glucose Meter. */
rgrover1 710:b2e1a2660ec2 89 BLE_APPEARANCE_GENERIC_RUNNING_WALKING_SENSOR = 1088, /**< Generic Running Walking Sensor. */
rgrover1 710:b2e1a2660ec2 90 BLE_APPEARANCE_RUNNING_WALKING_SENSOR_IN_SHOE = 1089, /**< Running Walking Sensor: In-Shoe. */
rgrover1 710:b2e1a2660ec2 91 BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_SHOE = 1090, /**< Running Walking Sensor: On-Shoe. */
rgrover1 710:b2e1a2660ec2 92 BLE_APPEARANCE_RUNNING_WALKING_SENSOR_ON_HIP = 1091, /**< Running Walking Sensor: On-Hip. */
rgrover1 710:b2e1a2660ec2 93 BLE_APPEARANCE_GENERIC_CYCLING = 1152, /**< Generic Cycling. */
rgrover1 710:b2e1a2660ec2 94 BLE_APPEARANCE_CYCLING_CYCLING_COMPUTER = 1153, /**< Cycling: Cycling Computer. */
rgrover1 710:b2e1a2660ec2 95 BLE_APPEARANCE_CYCLING_SPEED_SENSOR = 1154, /**< Cycling: Speed Sensor. */
rgrover1 710:b2e1a2660ec2 96 BLE_APPEARANCE_CYCLING_CADENCE_SENSOR = 1155, /**< Cycling: Cadence Sensor. */
rgrover1 710:b2e1a2660ec2 97 BLE_APPEARANCE_CYCLING_POWER_SENSOR = 1156, /**< Cycling: Power Sensor. */
rgrover1 710:b2e1a2660ec2 98 BLE_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR = 1157, /**< Cycling: Speed and Cadence Sensor. */
rgrover1 710:b2e1a2660ec2 99 BLE_APPEARANCE_GENERIC_PULSE_OXIMETER = 3136, /**< Generic Pulse Oximeter. */
rgrover1 710:b2e1a2660ec2 100 BLE_APPEARANCE_PULSE_OXIMETER_FINGERTIP = 3137, /**< Fingertip (Pulse Oximeter subtype). */
rgrover1 710:b2e1a2660ec2 101 BLE_APPEARANCE_PULSE_OXIMETER_WRIST_WORN = 3138, /**< Wrist Worn(Pulse Oximeter subtype). */
rgrover1 710:b2e1a2660ec2 102 BLE_APPEARANCE_GENERIC_WEIGHT_SCALE = 3200, /**< Generic Weight Scale. */
rgrover1 710:b2e1a2660ec2 103 BLE_APPEARANCE_GENERIC_OUTDOOR_SPORTS_ACT = 5184, /**< Generic Outdoor Sports Activity. */
rgrover1 710:b2e1a2660ec2 104 BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_DISP = 5185, /**< Location Display Device (Outdoor Sports Activity subtype). */
rgrover1 710:b2e1a2660ec2 105 BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_DISP = 5186, /**< Location and Navigation Display Device (Outdoor Sports Activity subtype). */
rgrover1 710:b2e1a2660ec2 106 BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_POD = 5187, /**< Location Pod (Outdoor Sports Activity subtype). */
rgrover1 710:b2e1a2660ec2 107 BLE_APPEARANCE_OUTDOOR_SPORTS_ACT_LOC_AND_NAV_POD = 5188, /**< Location and Navigation Pod (Outdoor Sports Activity subtype). */
rgrover1 710:b2e1a2660ec2 108 };
rgrover1 710:b2e1a2660ec2 109 /** @} */
rgrover1 710:b2e1a2660ec2 110
rgrover1 710:b2e1a2660ec2 111 /**************************************************************************/
rgrover1 710:b2e1a2660ec2 112 /*!
rgrover1 710:b2e1a2660ec2 113 \brief Error codes for the BLE API
rgrover1 710:b2e1a2660ec2 114 */
rgrover1 710:b2e1a2660ec2 115 /**************************************************************************/
rgrover1 710:b2e1a2660ec2 116 enum ble_error_t {
rgrover1 710:b2e1a2660ec2 117 BLE_ERROR_NONE = 0, /**< No error */
rgrover1 710:b2e1a2660ec2 118 BLE_ERROR_BUFFER_OVERFLOW = 1, /**< The requested action would cause a buffer overflow and has been aborted */
rgrover1 710:b2e1a2660ec2 119 BLE_ERROR_NOT_IMPLEMENTED = 2, /**< Requested a feature that isn't yet implement or isn't supported by the target HW */
rgrover1 710:b2e1a2660ec2 120 BLE_ERROR_PARAM_OUT_OF_RANGE = 3, /**< One of the supplied parameters is outside the valid range */
rgrover1 710:b2e1a2660ec2 121 BLE_ERROR_INVALID_PARAM = 4, /**< One of the supplied parameters is invalid */
rgrover1 710:b2e1a2660ec2 122 BLE_STACK_BUSY = 5, /**< The stack is busy */
rgrover1 710:b2e1a2660ec2 123 BLE_ERROR_INVALID_STATE = 6, /**< Invalid state. */
rgrover1 710:b2e1a2660ec2 124 BLE_ERROR_NO_MEM = 7, /**< Out of Memory */
rgrover1 710:b2e1a2660ec2 125 BLE_ERROR_OPERATION_NOT_PERMITTED = 8,
rgrover1 710:b2e1a2660ec2 126 BLE_ERROR_UNSPECIFIED = 9, /**< Unknown error. */
rgrover1 710:b2e1a2660ec2 127 };
rgrover1 710:b2e1a2660ec2 128
rgrover1 710:b2e1a2660ec2 129 #ifdef __cplusplus
rgrover1 710:b2e1a2660ec2 130 }
rgrover1 710:b2e1a2660ec2 131 #endif
rgrover1 710:b2e1a2660ec2 132
rgrover1 710:b2e1a2660ec2 133 #endif // ifndef __BLE_COMMON_H__