Wang Xinglu / BLE_API

Dependencies:   nRF51822

Dependents:   LinkNode_LIS3DH

Fork of BLE_API by Bluetooth Low Energy

Committer:
rgrover1
Date:
Mon Nov 02 09:09:08 2015 +0000
Revision:
867:b099c28e8e28
Parent:
728:997ba5e7b3b6
Child:
929:918d93d409c1
Synchronized with git rev 2f92904f
Author: Rohit Grover
Release 2.0.0
=============

* Major change to the APIs around stack initialization. BLE::init() is now
meant to only trigger the initialization of the underlying BLE stack. init()
now takes a completion callback as an optional parameter; this callback gets
invoked when initialization completes.

- There's a new type: BLE::InitializationCompleteCallback_t

- There's a new API: BLEInstanceBase::hasInitialized() which transports
need to implement.

- If no init-completion callback is setup, the application can still
determine the status of initialization using BLE::hasInitialized().

!This update may require in a minor change to existing apps!

mbed-classic demos would look something like:

```
main() {
BLE::Instance().init();
while (!BLE::Instance().hasInitialized()) {
/* spin wait */
}

/* rest of the initialization ending in the waitForEvent loop */

}
```

whereas mbedOS demos would look like:

```
void bleInitComplete(BLE &ble, ble_error_t error)
{
WsfTrace("bleInitComplete");

if (error != BLE_ERROR_NONE) {
WsfTrace("initailization failed with error: %u", error);
return;
}

if (ble.getInstanceID() == BLE::DEFAULT_INSTANCE) {
/* use the BLE instance */
}
}

extern "C" void app_start(int argc, char *argv[])
{
BLE::Instance().init(bleInitComplete);
}
```

The Nordic stack initializes right-away, and so existing demos based on Nordic should continue to work.

* There's a new API: BLE::getInstanceID(), which simply returns the ID of an
instance.

* Reduce the memory footprint consumed by a FunctionPointerWithContext to 20
bytes (originally, it was 32 bytes !). Also enforce alignment constraints
of the embedded pointer to member function. This should help with the size
of a GattCharacteristic.

* Add EnvironmentalService.h under services/.

* There have been minor improvements to EddystoneService and EddystoneConfigService.

* We've added a CONTRIBUTING.md to help guide user contributions.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 712:b04b5db36865 1 /* mbed Microcontroller Library
rgrover1 712:b04b5db36865 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 712:b04b5db36865 3 *
rgrover1 712:b04b5db36865 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 712:b04b5db36865 5 * you may not use this file except in compliance with the License.
rgrover1 712:b04b5db36865 6 * You may obtain a copy of the License at
rgrover1 712:b04b5db36865 7 *
rgrover1 712:b04b5db36865 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 712:b04b5db36865 9 *
rgrover1 712:b04b5db36865 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 712:b04b5db36865 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 712:b04b5db36865 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 712:b04b5db36865 13 * See the License for the specific language governing permissions and
rgrover1 712:b04b5db36865 14 * limitations under the License.
rgrover1 712:b04b5db36865 15 */
rgrover1 712:b04b5db36865 16
rgrover1 712:b04b5db36865 17 #include "ble/DiscoveredCharacteristic.h"
rgrover1 712:b04b5db36865 18 #include "ble/GattClient.h"
rgrover1 712:b04b5db36865 19
rgrover1 712:b04b5db36865 20 ble_error_t
rgrover1 712:b04b5db36865 21 DiscoveredCharacteristic::read(uint16_t offset) const
rgrover1 712:b04b5db36865 22 {
rgrover1 712:b04b5db36865 23 if (!props.read()) {
rgrover1 712:b04b5db36865 24 return BLE_ERROR_OPERATION_NOT_PERMITTED;
rgrover1 712:b04b5db36865 25 }
rgrover1 712:b04b5db36865 26
rgrover1 712:b04b5db36865 27 if (!gattc) {
rgrover1 712:b04b5db36865 28 return BLE_ERROR_INVALID_STATE;
rgrover1 712:b04b5db36865 29 }
rgrover1 712:b04b5db36865 30
rgrover1 712:b04b5db36865 31 return gattc->read(connHandle, valueHandle, offset);
rgrover1 712:b04b5db36865 32 }
rgrover1 712:b04b5db36865 33
rgrover1 712:b04b5db36865 34 ble_error_t
rgrover1 712:b04b5db36865 35 DiscoveredCharacteristic::write(uint16_t length, const uint8_t *value) const
rgrover1 712:b04b5db36865 36 {
rgrover1 712:b04b5db36865 37 if (!props.write()) {
rgrover1 712:b04b5db36865 38 return BLE_ERROR_OPERATION_NOT_PERMITTED;
rgrover1 712:b04b5db36865 39 }
rgrover1 712:b04b5db36865 40
rgrover1 712:b04b5db36865 41 if (!gattc) {
rgrover1 712:b04b5db36865 42 return BLE_ERROR_INVALID_STATE;
rgrover1 712:b04b5db36865 43 }
rgrover1 712:b04b5db36865 44
rgrover1 712:b04b5db36865 45 return gattc->write(GattClient::GATT_OP_WRITE_REQ, connHandle, valueHandle, length, value);
rgrover1 712:b04b5db36865 46 }
rgrover1 712:b04b5db36865 47
rgrover1 712:b04b5db36865 48 ble_error_t
rgrover1 712:b04b5db36865 49 DiscoveredCharacteristic::writeWoResponse(uint16_t length, const uint8_t *value) const
rgrover1 712:b04b5db36865 50 {
rgrover1 712:b04b5db36865 51 if (!props.writeWoResp()) {
rgrover1 712:b04b5db36865 52 return BLE_ERROR_OPERATION_NOT_PERMITTED;
rgrover1 712:b04b5db36865 53 }
rgrover1 712:b04b5db36865 54
rgrover1 712:b04b5db36865 55 if (!gattc) {
rgrover1 712:b04b5db36865 56 return BLE_ERROR_INVALID_STATE;
rgrover1 712:b04b5db36865 57 }
rgrover1 712:b04b5db36865 58
rgrover1 712:b04b5db36865 59 return gattc->write(GattClient::GATT_OP_WRITE_CMD, connHandle, valueHandle, length, value);
rgrover1 712:b04b5db36865 60 }
rgrover1 712:b04b5db36865 61
rgrover1 712:b04b5db36865 62 ble_error_t
rgrover1 712:b04b5db36865 63 DiscoveredCharacteristic::discoverDescriptors(DescriptorCallback_t callback, const UUID &matchingUUID) const
rgrover1 712:b04b5db36865 64 {
rgrover1 712:b04b5db36865 65 return BLE_ERROR_NOT_IMPLEMENTED; /* TODO: this needs to be filled in. */
rgrover1 712:b04b5db36865 66 }