Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: LinkNode_SimpleChatwithSerial
Fork of BLE_API by
Revision 890:f3144091ae19, committed 2015-11-26
- Comitter:
- rgrover1
- Date:
- Thu Nov 26 12:52:00 2015 +0000
- Parent:
- 889:958c04685226
- Child:
- 891:96514cb1c4c1
- Commit message:
- Synchronized with git rev 216f73bc
Author: Irit Arkin
New version
Based on the main repo's master version, with edits to the API.
Changed in this revision
--- a/CONTRIBUTING.md Thu Nov 26 12:52:00 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -# Hello! -We are an open source project of [ARM mbed](www.mbed.com). Contributions via [pull request](https://github.com/armmbed/yotta/pulls), and [bug reports](https://github.com/armmbed/yotta/issues) are welcome! - -Please submit your pull request to the 'develop' branch of this module. Commits to develop will merge into master at the time of the next release. - -# Contributor agreement -For your pull request to be accepted, we will need you to agree to our [contributor agreement](http://developer.mbed.org/contributor_agreement/) to give us the necessary rights to use and distribute your contributions. (To click through the agreement create an account on mbed.com and log in.) \ No newline at end of file
--- a/ble/BLEInstanceBase.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/BLEInstanceBase.h Thu Nov 26 12:52:00 2015 +0000
@@ -18,8 +18,6 @@
#define __BLE_DEVICE_INSTANCE_BASE__
#include "Gap.h"
-#include "ble/SecurityManager.h"
-#include "ble/BLE.h"
/* forward declarations */
class GattServer;
@@ -32,19 +30,17 @@
class BLEInstanceBase
{
public:
- virtual ble_error_t init(BLE::InstanceID_t instanceID,
- FunctionPointerWithContext<BLE::InitializationCompleteCallbackContext *> initCallback) = 0;
- virtual bool hasInitialized(void) const = 0;
- virtual ble_error_t shutdown(void) = 0;
- virtual const char * getVersion(void) = 0;
- virtual Gap& getGap() = 0;
- virtual const Gap& getGap() const = 0;
- virtual GattServer& getGattServer() = 0;
- virtual const GattServer& getGattServer() const = 0;
- virtual GattClient& getGattClient() = 0;
- virtual SecurityManager& getSecurityManager() = 0;
+ virtual ble_error_t init(void) = 0;
+ virtual ble_error_t shutdown(void) = 0;
+ virtual const char *getVersion(void) = 0;
+ virtual Gap& getGap() = 0;
+ virtual const Gap& getGap() const = 0;
+ virtual GattServer& getGattServer() = 0;
+ virtual const GattServer& getGattServer() const = 0;
+ virtual GattClient& getGattClient() = 0;
+ virtual SecurityManager& getSecurityManager() = 0;
virtual const SecurityManager& getSecurityManager() const = 0;
- virtual void waitForEvent(void) = 0;
+ virtual void waitForEvent(void) = 0;
};
/**
--- a/ble/FunctionPointerWithContext.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/FunctionPointerWithContext.h Thu Nov 26 12:52:00 2015 +0000
@@ -19,6 +19,7 @@
#include <string.h>
+
/** A class for storing and calling a pointer to a static or member void function
* which takes a context.
*/
@@ -33,7 +34,7 @@
* @param function The void static function to attach (default is none)
*/
FunctionPointerWithContext(void (*function)(ContextType context) = NULL) :
- _function(NULL), _caller(NULL), _next(NULL) {
+ _function(NULL), _object(NULL), _member(), _membercaller(NULL), _next(NULL) {
attach(function);
}
@@ -44,7 +45,7 @@
*/
template<typename T>
FunctionPointerWithContext(T *object, void (T::*member)(ContextType context)) :
- _memberFunctionAndPointer(), _caller(NULL), _next(NULL) {
+ _function(NULL), _object(NULL), _member(), _membercaller(NULL), _next(NULL) {
attach(object, member);
}
@@ -54,7 +55,6 @@
*/
void attach(void (*function)(ContextType context) = NULL) {
_function = function;
- _caller = functioncaller;
}
/** Attach a member function
@@ -64,9 +64,9 @@
*/
template<typename T>
void attach(T *object, void (T::*member)(ContextType context)) {
- _memberFunctionAndPointer._object = static_cast<void *>(object);
- memcpy(_memberFunctionAndPointer._memberFunction, (char*) &member, sizeof(member));
- _caller = &FunctionPointerWithContext::membercaller<T>;
+ _object = static_cast<void *>(object);
+ memcpy(_member, (char *)&member, sizeof(member));
+ _membercaller = &FunctionPointerWithContext::membercaller<T>;
}
/** Call the attached static or member function; and if there are chained
@@ -74,7 +74,11 @@
* @Note: all chained callbacks stack up; so hopefully there won't be too
* many FunctionPointers in a chain. */
void call(ContextType context) {
- _caller(this, context);
+ if (_function) {
+ _function(context);
+ } else if (_object && _membercaller) {
+ _membercaller(_object, _member, context);
+ }
/* Propagate the call to next in the chain. */
if (_next) {
@@ -103,49 +107,19 @@
private:
template<typename T>
- static void membercaller(pFunctionPointerWithContext_t self, ContextType context) {
- if (self->_memberFunctionAndPointer._object) {
- T *o = static_cast<T *>(self->_memberFunctionAndPointer._object);
- void (T::*m)(ContextType);
- memcpy((char*) &m, self->_memberFunctionAndPointer._memberFunction, sizeof(m));
- (o->*m)(context);
- }
- }
-
- static void functioncaller(pFunctionPointerWithContext_t self, ContextType context) {
- if (self->_function) {
- self->_function(context);
- }
+ static void membercaller(void *object, char *member, ContextType context) {
+ T *o = static_cast<T *>(object);
+ void (T::*m)(ContextType);
+ memcpy((char *)&m, member, sizeof(m));
+ (o->*m)(context);
}
- struct MemberFunctionAndPtr {
- /*
- * forward declaration of a class and a member function to this class.
- * Because the compiler doesn't know anything about the forwarded member
- * function, it will always use the biggest size and the biggest alignment
- * that a member function can take for objects of type UndefinedMemberFunction.
- */
- class UndefinedClass;
- typedef void (UndefinedClass::*UndefinedMemberFunction)(ContextType);
-
- void* _object;
- union {
- char _memberFunction[sizeof(UndefinedMemberFunction)];
- UndefinedMemberFunction _alignment;
- };
- };
-
- union {
- pvoidfcontext_t _function; /**< static function pointer - NULL if none attached */
- /**
- * object this pointer and pointer to member -
- * _memberFunctionAndPointer._object will be NULL if none attached
- */
- MemberFunctionAndPtr _memberFunctionAndPointer;
- };
-
- void (*_caller)(FunctionPointerWithContext*, ContextType);
-
+ void (*_function)(ContextType context); /**< static function pointer - NULL if none attached */
+ void *_object; /**< object this pointer - NULL if none attached */
+ char _member[16]; /**< raw member function pointer storage - converted back by
+ * registered _membercaller */
+ void (*_membercaller)(void *, char *, ContextType); /**< registered membercaller function to convert back and call
+ * _member on _object passing the context. */
pFunctionPointerWithContext_t _next; /**< Optional link to make a chain out of functionPointers; this
* allows chaining function pointers without requiring
* external memory to manage the chain. Also refer to
--- a/ble/Gap.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/Gap.h Thu Nov 26 12:52:00 2015 +0000
@@ -867,8 +867,8 @@
}
private:
- virtual ble_error_t setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse) = 0;
- virtual ble_error_t startAdvertising(const GapAdvertisingParams &) = 0;
+ virtual ble_error_t setAdvertisingData(const GapAdvertisingData &, const GapAdvertisingData &) = 0;
+ virtual ble_error_t startAdvertising(const GapAdvertisingParams &) = 0;
public:
/**
--- a/ble/GattCharacteristic.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/GattCharacteristic.h Thu Nov 26 12:52:00 2015 +0000
@@ -57,7 +57,6 @@
UUID_HEART_RATE_MEASUREMENT_CHAR = 0x2A37,
UUID_HID_CONTROL_POINT_CHAR = 0x2A4C,
UUID_HID_INFORMATION_CHAR = 0x2A4A,
- UUID_HUMIDITY_CHAR = 0x2A6F,
UUID_IEEE_REGULATORY_CERTIFICATION_DATA_LIST_CHAR = 0x2A2A,
UUID_INTERMEDIATE_CUFF_PRESSURE_CHAR = 0x2A36,
UUID_INTERMEDIATE_TEMPERATURE_CHAR = 0x2A1E,
@@ -68,7 +67,6 @@
UUID_UNREAD_ALERT_CHAR = 0x2A45,
UUID_NEW_ALERT_CHAR = 0x2A46,
UUID_PNP_ID_CHAR = 0x2A50,
- UUID_PRESSURE_CHAR = 0x2A6D,
UUID_PROTOCOL_MODE_CHAR = 0x2A4E,
UUID_RECORD_ACCESS_CONTROL_POINT_CHAR = 0x2A52,
UUID_REFERENCE_TIME_INFORMATION_CHAR = 0x2A14,
@@ -83,7 +81,6 @@
UUID_SUPPORTED_NEW_ALERT_CATEGORY_CHAR = 0x2A47,
UUID_SUPPORTED_UNREAD_ALERT_CATEGORY_CHAR = 0x2A48,
UUID_SYSTEM_ID_CHAR = 0x2A23,
- UUID_TEMPERATURE_CHAR = 0x2A6E,
UUID_TEMPERATURE_MEASUREMENT_CHAR = 0x2A1C,
UUID_TEMPERATURE_TYPE_CHAR = 0x2A1D,
UUID_TIME_ACCURACY_CHAR = 0x2A12,
@@ -96,7 +93,7 @@
UUID_CSC_FEATURE_CHAR = 0x2A5C,
UUID_CSC_MEASUREMENT_CHAR = 0x2A5B,
UUID_RSC_FEATURE_CHAR = 0x2A54,
- UUID_RSC_MEASUREMENT_CHAR = 0x2A53
+ UUID_RSC_MEASUREMENT_CHAR = 0x2A53,
};
/**************************************************************************/
--- a/ble/GattService.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/GattService.h Thu Nov 26 12:52:00 2015 +0000
@@ -29,7 +29,6 @@
UUID_CURRENT_TIME_SERVICE = 0x1805,
UUID_CYCLING_SPEED_AND_CADENCE = 0x1816,
UUID_DEVICE_INFORMATION_SERVICE = 0x180A,
- UUID_ENVIRONMENTAL_SERVICE = 0x181A,
UUID_GLUCOSE_SERVICE = 0x1808,
UUID_HEALTH_THERMOMETER_SERVICE = 0x1809,
UUID_HEART_RATE_SERVICE = 0x180D,
--- a/ble/UUID.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/UUID.h Thu Nov 26 12:52:00 2015 +0000
@@ -74,7 +74,7 @@
*
* @note we don't yet support 32-bit shortened UUIDs.
*/
- UUID(ShortUUIDBytes_t _shortUUID) : type(UUID_TYPE_SHORT), baseUUID(), shortUUID(_shortUUID) {
+ UUID(ShortUUIDBytes_t shortUUID) : type(UUID_TYPE_SHORT), baseUUID(), shortUUID(shortUUID) {
/* empty */
}
--- a/ble/blecommon.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/blecommon.h Thu Nov 26 12:52:00 2015 +0000
@@ -114,18 +114,16 @@
*/
/**************************************************************************/
enum ble_error_t {
- BLE_ERROR_NONE = 0, /**< No error */
- BLE_ERROR_BUFFER_OVERFLOW = 1, /**< The requested action would cause a buffer overflow and has been aborted */
- BLE_ERROR_NOT_IMPLEMENTED = 2, /**< Requested a feature that isn't yet implement or isn't supported by the target HW */
- BLE_ERROR_PARAM_OUT_OF_RANGE = 3, /**< One of the supplied parameters is outside the valid range */
- BLE_ERROR_INVALID_PARAM = 4, /**< One of the supplied parameters is invalid */
- BLE_STACK_BUSY = 5, /**< The stack is busy */
- BLE_ERROR_INVALID_STATE = 6, /**< Invalid state. */
- BLE_ERROR_NO_MEM = 7, /**< Out of Memory */
- BLE_ERROR_OPERATION_NOT_PERMITTED = 8,
- BLE_ERROR_INITIALIZATION_INCOMPLETE = 9,
- BLE_ERROR_ALREADY_INITIALIZED = 10,
- BLE_ERROR_UNSPECIFIED = 11, /**< Unknown error. */
+ BLE_ERROR_NONE = 0, /**< No error */
+ BLE_ERROR_BUFFER_OVERFLOW = 1, /**< The requested action would cause a buffer overflow and has been aborted */
+ BLE_ERROR_NOT_IMPLEMENTED = 2, /**< Requested a feature that isn't yet implement or isn't supported by the target HW */
+ BLE_ERROR_PARAM_OUT_OF_RANGE = 3, /**< One of the supplied parameters is outside the valid range */
+ BLE_ERROR_INVALID_PARAM = 4, /**< One of the supplied parameters is invalid */
+ BLE_STACK_BUSY = 5, /**< The stack is busy */
+ BLE_ERROR_INVALID_STATE = 6, /**< Invalid state. */
+ BLE_ERROR_NO_MEM = 7, /**< Out of Memory */
+ BLE_ERROR_OPERATION_NOT_PERMITTED = 8,
+ BLE_ERROR_UNSPECIFIED = 9, /**< Unknown error. */
};
/** @brief Default MTU size. */
--- a/ble/services/EddystoneConfigService.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/services/EddystoneConfigService.h Thu Nov 26 12:52:00 2015 +0000
@@ -215,7 +215,7 @@
DBG("Setting Default TLM Data, version = %d, advPeriodInMind= %f", tlmVersionIn, advPeriodInSec);
defaultTlmVersion = tlmVersionIn;
TlmBatteryVoltage = 0;
- TlmBeaconTemp = 0x8000;
+ TlmBeaconTemp = 0;
TlmPduCount = 0;
TlmTimeSinceBoot = 0;
defaultTlmAdvPeriod = advPeriodInSec;
@@ -285,7 +285,7 @@
ble.setTxPower(radioPowerLevels[params.txPowerMode]);
ble.setDeviceName(reinterpret_cast<const uint8_t *>(&DEVICE_NAME));
ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
- ble.setAdvertisingInterval(ADVERTISING_INTERVAL_MSEC);
+ ble.setAdvertisingInterval(GapAdvertisingParams::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(ADVERTISING_INTERVAL_MSEC));
}
/*
@@ -306,7 +306,7 @@
eddyServ.setTLMFrameData(params.tlmVersion, params.tlmBeaconPeriod);
}
if (params.uriEnabled) {
- eddyServ.setURLFrameEncodedData(params.advPowerLevels[params.txPowerMode], (const char *) params.uriData, params.uriDataLength, params.uriBeaconPeriod);
+ eddyServ.setURLFrameData(params.advPowerLevels[params.txPowerMode], (const char *) params.uriData, params.uriBeaconPeriod);
}
if (params.uidEnabled) {
eddyServ.setUIDFrameData(params.advPowerLevels[params.txPowerMode],
@@ -340,7 +340,7 @@
} else if (handle == uriDataChar.getValueHandle()) {
params.uriDataLength = writeParams->len;
memset(params.uriData, 0x00, URI_DATA_MAX); // clear URI string
- memcpy(params.uriData, writeParams->data, writeParams->len); // set URI string
+ memcpy(params.uriData, writeParams->data, params.uriDataLength); // set URI string
params.uriEnabled = true;
INFO("URI = %s, URILen = %d", writeParams->data, writeParams->len);
} else if (handle == flagsChar.getValueHandle()) {
@@ -389,7 +389,7 @@
params.flags = 0x10;
memcpy(params.advPowerLevels, defaultAdvPowerLevels, sizeof(PowerLevels_t));
params.txPowerMode = TX_POWER_MODE_LOW;
- params.beaconPeriod = (uint16_t) defaultUriAdvPeriod * 1000;
+ params.beaconPeriod = 1000;
// TLM Frame
params.tlmVersion = defaultTlmVersion;
--- a/ble/services/EddystoneService.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/services/EddystoneService.h Thu Nov 26 12:52:00 2015 +0000
@@ -101,9 +101,9 @@
void setUIDFrameData(int8_t power,
UIDNamespaceID_t namespaceID,
UIDInstanceID_t instanceID,
- float uidAdvPeriodIn,
+ uint32_t uidAdvPeriodIn,
uint16_t RFU = 0x0000) {
- if (0.0f == uidAdvPeriodIn) {
+ if (0 == uidAdvPeriodIn) {
uidIsSet = false;
return;
}
@@ -170,45 +170,21 @@
* @param[in] urlAdvPeriodIn How long to advertise the URL frame (measured in # of adv periods)
* @return false on success, true on failure.
*/
- bool setURLFrameData(int8_t power, const char *urlIn, float urlAdvPeriodIn) {
- if (0.0f == urlAdvPeriodIn) {
+ bool setURLFrameData(int8_t power, const char *urlIn, uint32_t urlAdvPeriodIn) {
+ if (0 == urlAdvPeriodIn) {
urlIsSet = false;
return false;
}
+ defaultUrlPower = power;
encodeURL(urlIn, defaultUriData, defaultUriDataLength); // encode URL to URL Formatting
if (defaultUriDataLength > URI_DATA_MAX) {
return true; // error, URL is too big
}
- defaultUrlPower = power;
urlAdvPeriod = urlAdvPeriodIn;
urlIsSet = true;
return false;
}
- /**
- * Set Eddystone URL Frame information.
- * @param[in] power TX Power in dB measured at 0 meters from the device.
- * @param[in] encodedUrlIn Encoded URL
- * @param[in] encodedUrlInLength Length of the encoded URL
- * @param[in] urlAdvPeriodIn How long to advertise the URL frame (measured in # of adv periods)
- * @return false on success, true on failure.
- */
- bool setURLFrameEncodedData(int8_t power, const char *encodedUrlIn, uint8_t encodedUrlInLength, float urlAdvPeriodIn) {
- if (0.0f == urlAdvPeriodIn) {
- urlIsSet = false;
- return false;
- }
- memcpy(defaultUriData, encodedUrlIn, encodedUrlInLength);
- if (defaultUriDataLength > URI_DATA_MAX) {
- return true; // error, URL is too big
- }
- defaultUrlPower = power;
- defaultUriDataLength = encodedUrlInLength;
- urlAdvPeriod = urlAdvPeriodIn;
- urlIsSet = true;
- return false;
- }
-
/*
* Construct URL frame from private variables
* @param[in/out] Data pointer to array to store constructed frame in
@@ -235,12 +211,12 @@
*
*/
void setTLMFrameData(uint8_t version = 0,
- float advPeriod = 60.0f,
+ uint32_t advPeriod = 60,
uint16_t batteryVoltage = 0,
- uint16_t beaconTemp = 0x8000,
+ uint16_t beaconTemp = 0,
uint32_t pduCount = 0,
uint32_t timeSinceBoot = 0) {
- if (0.0f == advPeriod) {
+ if (0 == advPeriod) {
tlmIsSet = false;
return;
}
@@ -260,10 +236,6 @@
* @return number of bytes used. negative number indicates error message.
*/
int constructTLMFrame(uint8_t *Data, uint8_t maxSize) {
- uint32_t now = timeSinceBootTimer.read_ms();
- TlmTimeSinceBoot += (now - lastBootTimerRead) / 100;
- lastBootTimerRead = now;
-
int index = 0;
Data[index++] = FRAME_TYPE_TLM; // Eddystone frame type = Telemetry
Data[index++] = TlmVersion; // TLM Version Number
@@ -320,6 +292,14 @@
}
/*
+ * callback function, called every 0.1s, incriments the TimeSinceBoot field in the TLM frame
+ * @return nothing
+ */
+ void tsbCallback(void) {
+ TlmTimeSinceBoot++;
+ }
+
+ /*
* Update advertising data
* @return true on success, false on failure
*/
@@ -507,7 +487,7 @@
// Initialize Frame transition, start with URL to pass eddystone validator app on first try
if (urlIsSet) {
frameIndex = url;
- urlTicker.attach(this, &EddystoneService::urlCallback, (float) advPeriodus / 1000.0f);
+ urlTicker.attach(this, &EddystoneService::urlCallback, urlAdvPeriod);
DBG("attached urlCallback every %d seconds", urlAdvPeriod);
}
if (uidIsSet) {
@@ -520,8 +500,7 @@
// Make double sure the PDUCount and TimeSinceBoot fields are set to zero at reset
updateTlmPduCount(0);
updateTlmTimeSinceBoot(0);
- lastBootTimerRead = 0;
- timeSinceBootTimer.start();
+ timeSinceBootTick.attach(this, &EddystoneService::tsbCallback, 0.1); // incriment the TimeSinceBoot ticker every 0.1s
tlmTicker.attach(this, &EddystoneService::tlmCallback, TlmAdvPeriod);
DBG("attached tlmCallback every %d seconds", TlmAdvPeriod);
}
@@ -540,8 +519,7 @@
BLEDevice &ble;
uint16_t advPeriodus;
uint8_t txPower;
- Timer timeSinceBootTimer;
- volatile uint32_t lastBootTimerRead;
+ Ticker timeSinceBootTick; // counter that counts time since boot
volatile bool advLock;
volatile FrameTypes frameIndex;
Timeout stopAdv;
@@ -552,7 +530,7 @@
UriData_t defaultUriData;
int8_t defaultUrlPower;
bool urlIsSet; // flag that enables / disable URI Frames
- float urlAdvPeriod; // how long the url frame will be advertised for
+ uint32_t urlAdvPeriod; // how long the url frame will be advertised for
Ticker urlTicker;
// UID Frame Variables
@@ -561,7 +539,7 @@
int8_t defaultUidPower;
uint16_t uidRFU;
bool uidIsSet; // flag that enables / disable UID Frames
- float uidAdvPeriod; // how long the uid frame will be advertised for
+ uint32_t uidAdvPeriod; // how long the uid frame will be advertised for
Ticker uidTicker;
// TLM Frame Variables
@@ -571,7 +549,7 @@
volatile uint32_t TlmPduCount;
volatile uint32_t TlmTimeSinceBoot;
bool tlmIsSet; // flag that enables / disables TLM frames
- float TlmAdvPeriod; // number of minutes between adv frames
+ uint32_t TlmAdvPeriod; // number of minutes between adv frames
Ticker tlmTicker;
public:
--- a/ble/services/EnvironmentalService.h Thu Nov 26 12:52:00 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,106 +0,0 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2006-2013 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __BLE_ENVIRONMENTAL_SERVICE_H__
-#define __BLE_ENVIRONMENTAL_SERVICE_H__
-
-#include "ble/BLE.h"
-
-/**
-* @class EnvironmentalService
-* @brief BLE Environmental Service. This service provides the location of the thermometer and the temperature. <br>
-* Service: https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.environmental_sensing.xml <br>
-* Temperature: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.temperature.xml <br>
-* Humidity: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.humidity.xml <br>
-* Pressure: https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.pressure.xml
-*/
-class EnvironmentalService {
-public:
- typedef int16_t TemperatureType_t;
- typedef uint16_t HumidityType_t;
- typedef uint32_t PressureType_t;
-
- /**
- * @brief EnvironmentalService constructor.
- * @param ble Reference to BLE device.
- * @param temperature_en Enable this characteristic.
- * @param humidity_en Enable this characteristic.
- * @param pressure_en Enable this characteristic.
- */
- EnvironmentalService(BLE& _ble) :
- ble(_ble),
- temperatureCharacteristic(GattCharacteristic::UUID_TEMPERATURE_CHAR, &temperature),
- humidityCharacteristic(GattCharacteristic::UUID_HUMIDITY_CHAR, &humidity),
- pressureCharacteristic(GattCharacteristic::UUID_PRESSURE_CHAR, &pressure)
- {
- static bool serviceAdded = false; /* We should only ever need to add the information service once. */
- if (serviceAdded) {
- return;
- }
-
- GattCharacteristic *charTable[] = { &humidityCharacteristic,
- &pressureCharacteristic,
- &temperatureCharacteristic };
-
- GattService environmentalService(GattService::UUID_ENVIRONMENTAL_SERVICE, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
-
- ble.gattServer().addService(environmentalService);
- serviceAdded = true;
- }
-
- /**
- * @brief Update humidity characteristic.
- * @param newHumidityVal New humidity measurement.
- */
- void updateHumidity(HumidityType_t newHumidityVal)
- {
- humidity = (HumidityType_t) (newHumidityVal * 100);
- ble.gattServer().write(humidityCharacteristic.getValueHandle(), (uint8_t *) &humidity, sizeof(HumidityType_t));
- }
-
- /**
- * @brief Update pressure characteristic.
- * @param newPressureVal New pressure measurement.
- */
- void updatePressure(PressureType_t newPressureVal)
- {
- pressure = (PressureType_t) (newPressureVal * 10);
- ble.gattServer().write(pressureCharacteristic.getValueHandle(), (uint8_t *) &pressure, sizeof(PressureType_t));
- }
-
- /**
- * @brief Update temperature characteristic.
- * @param newTemperatureVal New temperature measurement.
- */
- void updateTemperature(float newTemperatureVal)
- {
- temperature = (TemperatureType_t) (newTemperatureVal * 100);
- ble.gattServer().write(temperatureCharacteristic.getValueHandle(), (uint8_t *) &temperature, sizeof(TemperatureType_t));
- }
-
-private:
- BLE& ble;
-
- TemperatureType_t temperature;
- HumidityType_t humidity;
- PressureType_t pressure;
-
- ReadOnlyGattCharacteristic<TemperatureType_t> temperatureCharacteristic;
- ReadOnlyGattCharacteristic<HumidityType_t> humidityCharacteristic;
- ReadOnlyGattCharacteristic<PressureType_t> pressureCharacteristic;
-};
-
-#endif /* #ifndef __BLE_ENVIRONMENTAL_SERVICE_H__*/
\ No newline at end of file
--- a/ble/services/HealthThermometerService.h Thu Nov 26 12:52:00 2015 +0000 +++ b/ble/services/HealthThermometerService.h Thu Nov 26 12:52:00 2015 +0000 @@ -17,7 +17,7 @@ #ifndef __BLE_HEALTH_THERMOMETER_SERVICE_H__ #define __BLE_HEALTH_THERMOMETER_SERVICE_H__ -#include "ble/BLE.h" +#include "BLE.h" /** * @class HealthThermometerService
--- a/ble/services/LinkLossService.h Thu Nov 26 12:52:00 2015 +0000
+++ b/ble/services/LinkLossService.h Thu Nov 26 12:52:00 2015 +0000
@@ -17,7 +17,7 @@
#ifndef __BLE_LINK_LOSS_SERVICE_H__
#define __BLE_LINK_LOSS_SERVICE_H__
-#include "ble/Gap.h"
+#include "Gap.h"
/**
* @class LinkLossService
@@ -52,11 +52,11 @@
GattCharacteristic *charTable[] = {&alertLevelChar};
GattService linkLossService(GattService::UUID_LINK_LOSS_SERVICE, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
- ble.gattServer().addService(linkLossService);
+ ble.addService(linkLossService);
serviceAdded = true;
- ble.gap().onDisconnection(this, &LinkLossService::onDisconnectionFilter);
- ble.gattServer().onDataWritten(this, &LinkLossService::onDataWritten);
+ ble.addToDisconnectionCallChain(this, &LinkLossService::onDisconnectionFilter);
+ ble.onDataWritten(this, &LinkLossService::onDataWritten);
}
/**
@@ -86,7 +86,7 @@
}
}
- void onDisconnectionFilter(const Gap::DisconnectionCallbackParams_t *params) {
+ void onDisconnectionFilter(void) {
if (alertLevel != NO_ALERT) {
callback(alertLevel);
}
--- a/ble/services/UARTService.h Thu Nov 26 12:52:00 2015 +0000 +++ b/ble/services/UARTService.h Thu Nov 26 12:52:00 2015 +0000 @@ -17,13 +17,8 @@ #ifndef __BLE_UART_SERVICE_H__ #define __BLE_UART_SERVICE_H__ -#ifdef YOTTA_CFG_MBED_OS -#include "mbed-drivers/mbed.h" -#include "mbed-drivers/Stream.h" -#else #include "mbed.h" #include "Stream.h" -#endif #include "ble/UUID.h" #include "ble/BLE.h"
--- a/ble/services/URIBeaconConfigService.h Thu Nov 26 12:52:00 2015 +0000 +++ b/ble/services/URIBeaconConfigService.h Thu Nov 26 12:52:00 2015 +0000 @@ -18,12 +18,7 @@ #define SERVICES_URIBEACONCONFIGSERVICE_H_ #include "ble/BLE.h" - -#ifdef YOTTA_CFG_MBED_OS -#include "mbed-drivers/mbed.h" -#else #include "mbed.h" -#endif extern const uint8_t UUID_URI_BEACON_SERVICE[UUID::LENGTH_OF_LONG_UUID]; extern const uint8_t UUID_LOCK_STATE_CHAR[UUID::LENGTH_OF_LONG_UUID];
--- a/module.json Thu Nov 26 12:52:00 2015 +0000
+++ b/module.json Thu Nov 26 12:52:00 2015 +0000
@@ -1,16 +1,14 @@
{
"name": "ble",
- "version": "2.0.4",
+ "version": "0.4.8",
"description": "The BLE module offers a high level abstraction for using Bluetooth Low Energy on multiple platforms.",
"keywords": [
"Bluetooth",
- "BLE",
- "mbed",
- "mbed-official"
+ "BLE"
],
"author": "Rohit Grover",
"repository": {
- "url": "https://github.com/ARMmbed/ble.git",
+ "url": "git@github.com:ARMmbed/ble.git",
"type": "git"
},
"homepage": "http://mbed.org/ble",
@@ -22,14 +20,8 @@
],
"dependencies": {},
"targetDependencies": {
- "st-ble-shield": {
- "x-nucleo-idb0xa1": "ARMmbed/ble-x-nucleo-idb0xa1"
- },
"nrf51822": {
- "ble-nrf51822": "^2.0.0"
- },
- "cordio": {
- "ble-wicentric": "~0.0.4"
+ "ble-nrf51822": "~0.4.7"
},
"mbed-classic": {
"mbed-classic": "~0.0.1"
--- a/source/BLE.cpp Thu Nov 26 12:52:00 2015 +0000
+++ b/source/BLE.cpp Thu Nov 26 12:52:00 2015 +0000
@@ -15,16 +15,15 @@
*/
#include "ble/BLE.h"
-#include "ble/BLEInstanceBase.h"
#if defined(TARGET_OTA_ENABLED)
#include "ble/services/DFUService.h"
#endif
ble_error_t
-BLE::initImplementation(FunctionPointerWithContext<InitializationCompleteCallbackContext *> callback)
+BLE::init()
{
- ble_error_t err = transport->init(instanceID, callback);
+ ble_error_t err = transport->init();
if (err != BLE_ERROR_NONE) {
return err;
}
@@ -106,7 +105,7 @@
return badSingleton;
}
-BLE::BLE(InstanceID_t instanceIDIn) : instanceID(instanceIDIn), transport()
+BLE::BLE(InstanceID_t instanceID) : transport()
{
static BLEInstanceBase *transportInstances[NUM_INSTANCES];
@@ -118,113 +117,4 @@
} else {
transport = NULL;
}
-}
-
-bool BLE::hasInitialized(void) const
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->hasInitialized();
-}
-
-ble_error_t BLE::shutdown(void)
-{
- clearAdvertisingPayload();
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->shutdown();
-}
-
-const char *BLE::getVersion(void)
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getVersion();
-}
-
-const Gap &BLE::gap() const
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getGap();
-}
-
-Gap &BLE::gap()
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getGap();
-}
-
-const GattServer& BLE::gattServer() const
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getGattServer();
-}
-
-GattServer& BLE::gattServer()
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getGattServer();
-}
-
-const GattClient& BLE::gattClient() const
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getGattClient();
-}
-
-GattClient& BLE::gattClient()
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getGattClient();
-}
-
-const SecurityManager& BLE::securityManager() const
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getSecurityManager();
-}
-
-SecurityManager& BLE::securityManager()
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- return transport->getSecurityManager();
-}
-
-void BLE::waitForEvent(void)
-{
- if (!transport) {
- error("bad handle to underlying transport");
- }
-
- transport->waitForEvent();
}
\ No newline at end of file
