Updated
Fork of BLE_API by
ble/GattAttribute.h@996:14aeadec4695, 2015-12-02 (annotated)
- Committer:
- rgrover1
- Date:
- Wed Dec 02 10:29:44 2015 +0000
- Revision:
- 996:14aeadec4695
- Parent:
- 993:4d62b7967c11
- Child:
- 1006:76ae9bbf173f
Synchronized with git rev db1ff945
Author: Andres Amaya Garcia
Separate the concept of minlen and len in GattChar
In previous versions of BLE_API the GattCharacteristic initLen parameter is
named minLen as well. When the characteristic is committed to the SoftDevice
the value of initial length is also used as the minimum length of the
characteristic value. Furthermore, the test (max_length == min_length) is used
to determine whether the characteristic value has variable length. This is
slightly confusing and also causes problems if the user wishes to use a
characteristic with variable length but the initial lenght is equal to max
length.
To solve this problem the characteristic is now always committed to the
SoftDevice as variable. Furthermore, the API only maintains the current lenght
and the max length i.e. the field initialLen in the GattAttribute is removed.
Finally, the constructor for the GattCharacteristic was modified to reflect
these changes.
*NOTES:*
* This change requires updates to ble-nrf51822.
* Ideally we would like the characteristics to be declared as 'variable' only
when necessary, but this requires changing the signature of the
GattCharacteristic and GattAttribute constructures. Therefore, it will be part
of a separate pull request.
Who changed what in which revision?
User | Revision | Line number | New 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 __GATT_ATTRIBUTE_H__ |
rgrover1 | 710:b2e1a2660ec2 | 18 | #define __GATT_ATTRIBUTE_H__ |
rgrover1 | 710:b2e1a2660ec2 | 19 | |
rgrover1 | 710:b2e1a2660ec2 | 20 | #include "UUID.h" |
rgrover1 | 710:b2e1a2660ec2 | 21 | |
rgrover1 | 710:b2e1a2660ec2 | 22 | class GattAttribute { |
rgrover1 | 710:b2e1a2660ec2 | 23 | public: |
rgrover1 | 710:b2e1a2660ec2 | 24 | typedef uint16_t Handle_t; |
rgrover1 | 710:b2e1a2660ec2 | 25 | static const Handle_t INVALID_HANDLE = 0x0000; |
rgrover1 | 710:b2e1a2660ec2 | 26 | |
rgrover1 | 710:b2e1a2660ec2 | 27 | public: |
rgrover1 | 710:b2e1a2660ec2 | 28 | /** |
rgrover1 | 710:b2e1a2660ec2 | 29 | * @brief Creates a new GattAttribute using the specified |
rgrover1 | 993:4d62b7967c11 | 30 | * UUID, value length, and inital value. |
rgrover1 | 710:b2e1a2660ec2 | 31 | * |
rgrover1 | 710:b2e1a2660ec2 | 32 | * @param[in] uuid |
rgrover1 | 993:4d62b7967c11 | 33 | * The UUID to use for this attribute. |
rgrover1 | 710:b2e1a2660ec2 | 34 | * @param[in] valuePtr |
rgrover1 | 710:b2e1a2660ec2 | 35 | * The memory holding the initial value. |
rgrover1 | 996:14aeadec4695 | 36 | * @param[in] len |
rgrover1 | 996:14aeadec4695 | 37 | * The length in bytes of this attribute's value. |
rgrover1 | 710:b2e1a2660ec2 | 38 | * @param[in] maxLen |
rgrover1 | 993:4d62b7967c11 | 39 | * The max length in bytes of this attribute's value. |
rgrover1 | 710:b2e1a2660ec2 | 40 | * |
rgrover1 | 710:b2e1a2660ec2 | 41 | * @section EXAMPLE |
rgrover1 | 710:b2e1a2660ec2 | 42 | * |
rgrover1 | 710:b2e1a2660ec2 | 43 | * @code |
rgrover1 | 710:b2e1a2660ec2 | 44 | * |
rgrover1 | 710:b2e1a2660ec2 | 45 | * // UUID = 0x2A19, Min length 2, Max len = 2 |
rgrover1 | 710:b2e1a2660ec2 | 46 | * GattAttribute attr = GattAttribute(0x2A19, &someValue, 2, 2); |
rgrover1 | 710:b2e1a2660ec2 | 47 | * |
rgrover1 | 710:b2e1a2660ec2 | 48 | * @endcode |
rgrover1 | 710:b2e1a2660ec2 | 49 | */ |
rgrover1 | 996:14aeadec4695 | 50 | GattAttribute(const UUID &uuid, uint8_t *valuePtr = NULL, uint16_t len = 0, uint16_t maxLen = 0) : |
rgrover1 | 996:14aeadec4695 | 51 | _uuid(uuid), _valuePtr(valuePtr), _lenMax(maxLen), _len(len), _handle() { |
rgrover1 | 993:4d62b7967c11 | 52 | /* Empty */ |
rgrover1 | 710:b2e1a2660ec2 | 53 | } |
rgrover1 | 710:b2e1a2660ec2 | 54 | |
rgrover1 | 710:b2e1a2660ec2 | 55 | public: |
rgrover1 | 710:b2e1a2660ec2 | 56 | Handle_t getHandle(void) const {return _handle; } |
rgrover1 | 710:b2e1a2660ec2 | 57 | const UUID &getUUID(void) const {return _uuid; } |
rgrover1 | 710:b2e1a2660ec2 | 58 | uint16_t getLength(void) const {return _len; } |
rgrover1 | 710:b2e1a2660ec2 | 59 | uint16_t getMaxLength(void) const {return _lenMax; } |
rgrover1 | 710:b2e1a2660ec2 | 60 | uint16_t *getLengthPtr(void) {return &_len; } |
rgrover1 | 710:b2e1a2660ec2 | 61 | void setHandle(Handle_t id) {_handle = id; } |
rgrover1 | 710:b2e1a2660ec2 | 62 | uint8_t *getValuePtr(void) {return _valuePtr; } |
rgrover1 | 710:b2e1a2660ec2 | 63 | |
rgrover1 | 710:b2e1a2660ec2 | 64 | private: |
rgrover1 | 993:4d62b7967c11 | 65 | UUID _uuid; /* Characteristic UUID. */ |
rgrover1 | 710:b2e1a2660ec2 | 66 | uint8_t *_valuePtr; |
rgrover1 | 993:4d62b7967c11 | 67 | uint16_t _lenMax; /* Maximum length of the value. */ |
rgrover1 | 993:4d62b7967c11 | 68 | uint16_t _len; /* Current length of the value. */ |
rgrover1 | 710:b2e1a2660ec2 | 69 | Handle_t _handle; |
rgrover1 | 710:b2e1a2660ec2 | 70 | |
rgrover1 | 710:b2e1a2660ec2 | 71 | private: |
rgrover1 | 993:4d62b7967c11 | 72 | /* Disallow copy and assignment. */ |
rgrover1 | 710:b2e1a2660ec2 | 73 | GattAttribute(const GattAttribute &); |
rgrover1 | 710:b2e1a2660ec2 | 74 | GattAttribute& operator=(const GattAttribute &); |
rgrover1 | 710:b2e1a2660ec2 | 75 | }; |
rgrover1 | 710:b2e1a2660ec2 | 76 | |
rgrover1 | 710:b2e1a2660ec2 | 77 | #endif // ifndef __GATT_ATTRIBUTE_H__ |