Cefn Hoile / nRF51822

Dependencies:   nrf51-sdk

Dependents:   microbit-dal

Fork of nRF51822 by Lancaster University

Committer:
rgrover1
Date:
Mon Jul 06 10:13:27 2015 +0100
Revision:
371:8f7d2137727a
Parent:
176:03a9fc49c21e
Synchronized with git rev 2716309c
Author: Rohit Grover
Release 0.4.0
=============

This is a major release which introduces the GATT Client functionality. It
aligns with release 0.4.0 of BLE_API.

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.

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

* 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().

* 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
Rohit Grover 22:c6ee8136847e 1 /* mbed Microcontroller Library
Rohit Grover 22:c6ee8136847e 2 * Copyright (c) 2006-2013 ARM Limited
Rohit Grover 22:c6ee8136847e 3 *
Rohit Grover 22:c6ee8136847e 4 * Licensed under the Apache License, Version 2.0 (the "License");
Rohit Grover 22:c6ee8136847e 5 * you may not use this file except in compliance with the License.
Rohit Grover 22:c6ee8136847e 6 * You may obtain a copy of the License at
Rohit Grover 22:c6ee8136847e 7 *
Rohit Grover 22:c6ee8136847e 8 * http://www.apache.org/licenses/LICENSE-2.0
Rohit Grover 22:c6ee8136847e 9 *
Rohit Grover 22:c6ee8136847e 10 * Unless required by applicable law or agreed to in writing, software
Rohit Grover 22:c6ee8136847e 11 * distributed under the License is distributed on an "AS IS" BASIS,
Rohit Grover 22:c6ee8136847e 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Rohit Grover 22:c6ee8136847e 13 * See the License for the specific language governing permissions and
Rohit Grover 22:c6ee8136847e 14 * limitations under the License.
Rohit Grover 22:c6ee8136847e 15 */
Rohit Grover 22:c6ee8136847e 16 #include "common/common.h"
Rohit Grover 22:c6ee8136847e 17
Rohit Grover 22:c6ee8136847e 18 #include "ble_gap.h"
Rohit Grover 22:c6ee8136847e 19 #include "ble_conn_params.h"
Rohit Grover 22:c6ee8136847e 20
Rohit Grover 22:c6ee8136847e 21 static inline uint32_t msec_to_1_25msec(uint32_t interval_ms) ATTR_ALWAYS_INLINE ATTR_CONST;
Rohit Grover 56:a1071b629aa3 22 #if SDK_CONN_PARAMS_MODULE_ENABLE
Rohit Grover 22:c6ee8136847e 23 static void error_callback(uint32_t nrf_error);
Rohit Grover 56:a1071b629aa3 24 #endif // SDK_CONN_PARAMS_MODULE_ENABLE
Rohit Grover 22:c6ee8136847e 25
Rohit Grover 22:c6ee8136847e 26 /**************************************************************************/
Rohit Grover 22:c6ee8136847e 27 /*!
Rohit Grover 22:c6ee8136847e 28 @brief Initialise GAP in the underlying SoftDevice
Rohit Grover 22:c6ee8136847e 29
Rohit Grover 22:c6ee8136847e 30 @returns
Rohit Grover 22:c6ee8136847e 31 */
Rohit Grover 22:c6ee8136847e 32 /**************************************************************************/
Rohit Grover 22:c6ee8136847e 33 error_t btle_gap_init(void)
Rohit Grover 22:c6ee8136847e 34 {
Rohit Grover 22:c6ee8136847e 35 ble_gap_conn_params_t gap_conn_params = {0};
Rohit Grover 22:c6ee8136847e 36
Rohit Grover 42:120a96d10f90 37 gap_conn_params.min_conn_interval = msec_to_1_25msec(CFG_GAP_CONNECTION_MIN_INTERVAL_MS); // in 1.25ms units
Rohit Grover 42:120a96d10f90 38 gap_conn_params.max_conn_interval = msec_to_1_25msec(CFG_GAP_CONNECTION_MAX_INTERVAL_MS); // in 1.25ms unit
Rohit Grover 22:c6ee8136847e 39 gap_conn_params.slave_latency = CFG_GAP_CONNECTION_SLAVE_LATENCY;
Rohit Grover 42:120a96d10f90 40 gap_conn_params.conn_sup_timeout = CFG_GAP_CONNECTION_SUPERVISION_TIMEOUT_MS / 10; // in 10ms unit
Rohit Grover 22:c6ee8136847e 41
Rohit Grover 22:c6ee8136847e 42 ble_gap_conn_sec_mode_t sec_mode;
Rohit Grover 22:c6ee8136847e 43 BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); // no security is needed
Rohit Grover 22:c6ee8136847e 44
Rohit Grover 42:120a96d10f90 45 ASSERT_STATUS( sd_ble_gap_device_name_set(&sec_mode, (const uint8_t *) CFG_GAP_LOCAL_NAME, strlen(CFG_GAP_LOCAL_NAME)));
Rohit Grover 22:c6ee8136847e 46 ASSERT_STATUS( sd_ble_gap_appearance_set(CFG_GAP_APPEARANCE));
Rohit Grover 22:c6ee8136847e 47 ASSERT_STATUS( sd_ble_gap_ppcp_set(&gap_conn_params));
Rohit Grover 22:c6ee8136847e 48 ASSERT_STATUS( sd_ble_gap_tx_power_set(CFG_BLE_TX_POWER_LEVEL));
Rohit Grover 22:c6ee8136847e 49
Rohit Grover 56:a1071b629aa3 50 /**
Rohit Grover 56:a1071b629aa3 51 * Call to conn_params_init() is not necessary; and so is disabled by default.
Rohit Grover 56:a1071b629aa3 52 * This API should be exposed to the user to be invoked when necessary.
Rohit Grover 56:a1071b629aa3 53 */
Rohit Grover 56:a1071b629aa3 54 #if SDK_CONN_PARAMS_MODULE_ENABLE
Rohit Grover 22:c6ee8136847e 55 /* Connection Parameters */
Rohit Grover 22:c6ee8136847e 56 enum {
Rohit Grover 22:c6ee8136847e 57 FIRST_UPDATE_DELAY = APP_TIMER_TICKS(5000, CFG_TIMER_PRESCALER),
Rohit Grover 22:c6ee8136847e 58 NEXT_UPDATE_DELAY = APP_TIMER_TICKS(5000, CFG_TIMER_PRESCALER),
Rohit Grover 22:c6ee8136847e 59 MAX_UPDATE_COUNT = 3
Rohit Grover 22:c6ee8136847e 60 };
Rohit Grover 22:c6ee8136847e 61
Rohit Grover 22:c6ee8136847e 62 ble_conn_params_init_t cp_init = {0};
Rohit Grover 22:c6ee8136847e 63
Rohit Grover 22:c6ee8136847e 64 cp_init.p_conn_params = NULL;
Rohit Grover 22:c6ee8136847e 65 cp_init.first_conn_params_update_delay = FIRST_UPDATE_DELAY;
Rohit Grover 22:c6ee8136847e 66 cp_init.next_conn_params_update_delay = NEXT_UPDATE_DELAY;
Rohit Grover 22:c6ee8136847e 67 cp_init.max_conn_params_update_count = MAX_UPDATE_COUNT;
Rohit Grover 22:c6ee8136847e 68 cp_init.start_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID;
Rohit Grover 22:c6ee8136847e 69 cp_init.disconnect_on_fail = true;
Rohit Grover 22:c6ee8136847e 70 cp_init.evt_handler = NULL;
Rohit Grover 22:c6ee8136847e 71 cp_init.error_handler = error_callback;
Rohit Grover 22:c6ee8136847e 72
Rohit Grover 22:c6ee8136847e 73 ASSERT_STATUS ( ble_conn_params_init(&cp_init));
Rohit Grover 56:a1071b629aa3 74 #endif // SDK_CONN_PARAMS_MODULE_ENABLE
Rohit Grover 22:c6ee8136847e 75
Rohit Grover 22:c6ee8136847e 76 return ERROR_NONE;
Rohit Grover 22:c6ee8136847e 77 }
Rohit Grover 22:c6ee8136847e 78
Rohit Grover 22:c6ee8136847e 79 /**************************************************************************/
Rohit Grover 22:c6ee8136847e 80 /*!
Rohit Grover 22:c6ee8136847e 81 @brief Converts msecs to an integer representing 1.25ms units
Rohit Grover 22:c6ee8136847e 82
Rohit Grover 22:c6ee8136847e 83 @param[in] ms
Rohit Grover 22:c6ee8136847e 84 The number of milliseconds to conver to 1.25ms units
Rohit Grover 22:c6ee8136847e 85
Rohit Grover 22:c6ee8136847e 86 @returns The number of 1.25ms units in the supplied number of ms
Rohit Grover 22:c6ee8136847e 87 */
Rohit Grover 22:c6ee8136847e 88 /**************************************************************************/
Rohit Grover 22:c6ee8136847e 89 static inline uint32_t msec_to_1_25msec(uint32_t interval_ms)
Rohit Grover 22:c6ee8136847e 90 {
Rohit Grover 22:c6ee8136847e 91 return (interval_ms * 4) / 5;
Rohit Grover 22:c6ee8136847e 92 }
Rohit Grover 22:c6ee8136847e 93
Rohit Grover 56:a1071b629aa3 94 #if SDK_CONN_PARAMS_MODULE_ENABLE
Rohit Grover 22:c6ee8136847e 95 static void error_callback(uint32_t nrf_error)
Rohit Grover 22:c6ee8136847e 96 {
Rohit Grover 22:c6ee8136847e 97 ASSERT_STATUS_RET_VOID( nrf_error );
Rohit Grover 22:c6ee8136847e 98 }
rgrover1 176:03a9fc49c21e 99 #endif // SDK_CONN_PARAMS_MODULE_ENABLE