High level Bluetooth Low Energy API and radio abstraction layer

Dependencies:   nRF51822

Dependents:   LinkNode_LIS3DH

Fork of BLE_API by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
Rohit Grover
Date:
Fri May 23 15:21:47 2014 +0100
Parent:
45:8a9919adb207
Child:
47:33f605e109a2
Commit message:
simplification of the API used to setup GAP advertising

Changed in this revision

hw/BLEDevice.h Show annotated file Show diff for this revision Revisions of this file
--- a/hw/BLEDevice.h	Fri May 23 15:21:16 2014 +0100
+++ b/hw/BLEDevice.h	Fri May 23 15:21:47 2014 +0100
@@ -55,17 +55,91 @@
     ble_error_t setAdvertisingData(const GapAdvertisingData &ADStructures,
                                    const GapAdvertisingData &scanResponse);
     ble_error_t setAdvertisingData(const GapAdvertisingData &ADStructures);
-    ble_error_t startAdvertising(const GapAdvertisingParams &advParams);
+
+    /**
+     * @param[in] advType
+     *              The GAP advertising mode to use for this device. Valid
+     *              values are defined in AdvertisingType:
+     *
+     *              \par ADV_NON_CONNECTABLE_UNDIRECTED
+     *              All connections to the peripheral device will be refused.
+     *
+     *              \par ADV_CONNECTABLE_DIRECTED
+     *              Only connections from a pre-defined central device will be
+     *              accepted.
+     *
+     *              \par ADV_CONNECTABLE_UNDIRECTED
+     *              Any central device can connect to this peripheral.
+     *
+     *              \par ADV_SCANNABLE_UNDIRECTED
+     *              Any central device can connect to this peripheral, and
+     *              the secondary Scan Response payload will be included or
+     *              available to central devices.
+     *
+     *              \par
+     *              See Bluetooth Core Specification 4.0 (Vol. 3), Part C,
+     *              Section 9.3 and Core Specification 4.0 (Vol. 6), Part B,
+     *              Section 2.3.1 for further information on GAP connection
+     *              modes
+     */
+    void        setAdvertisingType(GapAdvertisingParams::AdvertisingType);
+
+    /**
+     * @param[in] interval
+     *              Advertising interval between 0x0020 and 0x4000 in 0.625ms
+     *              units (20ms to 10.24s).  If using non-connectable mode
+     *              (ADV_NON_CONNECTABLE_UNDIRECTED) this min value is
+     *              0x00A0 (100ms). To reduce the likelihood of collisions, the
+     *              link layer perturbs this interval by a pseudo-random delay
+     *              with a range of 0 ms to 10 ms for each advertising event.
+     *
+     *              \par
+     *              Decreasing this value will allow central devices to detect
+     *              your peripheral faster at the expense of more power being
+     *              used by the radio due to the higher data transmit rate.
+     *
+     *              \par
+     *              This field must be set to 0 if connectionMode is equal
+     *              to ADV_CONNECTABLE_DIRECTED
+     *
+     *              \par
+     *              See Bluetooth Core Specification, Vol 3., Part C,
+     *              Appendix A for suggested advertising intervals.
+     */
+    void        setAdvertisingInterval(uint16_t interval);
+
+    /**
+     * @param[in] timeout
+     *              Advertising timeout between 0x1 and 0x3FFF (1 and 16383)
+     *              in seconds.  Enter 0 to disable the advertising timeout.
+     */
+    void        setAdvertisingTimeout(uint16_t timeout);
+
+    /**
+     * Please refer to the APIs above.
+     */
+    void        setAdvertisingParams(const GapAdvertisingParams &advParams);
+
+    ble_error_t startAdvertising(void);
     ble_error_t stopAdvertising(void);
+
     ble_error_t disconnect(void);
 
 public:
-    BLEDevice() : transport(createBLEDeviceInstance()) {
+    BLEDevice() : transport(createBLEDeviceInstance()), advParams() {
         /* empty */
     }
 
 private:
-    BLEDeviceInstanceBase *transport;
+    BLEDeviceInstanceBase *transport; /* handle to the device specific backend*/
+    GapAdvertisingParams   advParams;
+
+
+    /**
+     * DEPRECATED
+     */
+public:
+    ble_error_t startAdvertising(const GapAdvertisingParams &advParams);
 };
 
 /**
@@ -112,8 +186,28 @@
     return transport->getGap().setAdvertisingData(ADStructures, scanResponse);
 }
 
+inline void
+BLEDevice::setAdvertisingType(GapAdvertisingParams::AdvertisingType advType) {
+    advParams.setAdvertisingType(advType);
+}
+
+inline void
+BLEDevice::setAdvertisingInterval(uint16_t interval) {
+    advParams.setInterval(interval);
+}
+
+inline void
+BLEDevice::setAdvertisingTimeout(uint16_t timeout) {
+    advParams.setTimeout(timeout);
+}
+
+inline void
+BLEDevice::setAdvertisingParams(const GapAdvertisingParams &newAdvParams) {
+    advParams = newAdvParams;
+}
+
 inline ble_error_t
-BLEDevice::startAdvertising(const GapAdvertisingParams &advParams) {
+BLEDevice::startAdvertising(void) {
     return transport->getGap().startAdvertising(advParams);
 }
 
@@ -127,4 +221,10 @@
     return transport->getGap().disconnect();
 }
 
+/* DEPRECATED */
+inline ble_error_t
+BLEDevice::startAdvertising(const GapAdvertisingParams &_advParams) {
+    return transport->getGap().startAdvertising(_advParams);
+}
+
 #endif // ifndef __BLE_DEVICE_H__