Allow GattAttributes to have fixed length

Previously the concepts of initLength and lenth were clearly separated.
However, this was at the cost of registering all characteristics in the
SoftDevice as having variable length. Clearly, this is not the desired
behaviour. Therefore, an additional field '_hasVariableLen' is added to the
GattAttribute to address the problem. Also, the GattAttribute and
GattCharacteristic constructors have been modified to take a boolean that
sets '_hasVariableLen'.
This commit is contained in:
Andres Amaya Garcia 2015-11-30 01:40:50 +00:00
parent 7317670ba4
commit 87aeff3474
2 changed files with 21 additions and 14 deletions

View file

@ -37,6 +37,8 @@ public:
* The length in bytes of this attribute's value.
* @param[in] maxLen
* The max length in bytes of this attribute's value.
* @param[in] hasVariableLen
* Whether the attribute's value length changes overtime.
*
* @section EXAMPLE
*
@ -47,25 +49,27 @@ public:
*
* @endcode
*/
GattAttribute(const UUID &uuid, uint8_t *valuePtr = NULL, uint16_t len = 0, uint16_t maxLen = 0) :
_uuid(uuid), _valuePtr(valuePtr), _lenMax(maxLen), _len(len), _handle() {
GattAttribute(const UUID &uuid, uint8_t *valuePtr = NULL, uint16_t len = 0, uint16_t maxLen = 0, bool hasVariableLen = true) :
_uuid(uuid), _valuePtr(valuePtr), _lenMax(maxLen), _len(len), _hasVariableLen(hasVariableLen), _handle() {
/* Empty */
}
public:
Handle_t getHandle(void) const {return _handle; }
const UUID &getUUID(void) const {return _uuid; }
uint16_t getLength(void) const {return _len; }
uint16_t getMaxLength(void) const {return _lenMax; }
uint16_t *getLengthPtr(void) {return &_len; }
void setHandle(Handle_t id) {_handle = id; }
uint8_t *getValuePtr(void) {return _valuePtr; }
Handle_t getHandle(void) const {return _handle; }
const UUID &getUUID(void) const {return _uuid; }
uint16_t getLength(void) const {return _len; }
uint16_t getMaxLength(void) const {return _lenMax; }
uint16_t *getLengthPtr(void) {return &_len; }
void setHandle(Handle_t id) {_handle = id; }
uint8_t *getValuePtr(void) {return _valuePtr; }
bool hasVariableLength(void) const {return _hasVariableLen;}
private:
UUID _uuid; /* Characteristic UUID. */
UUID _uuid; /* Characteristic UUID. */
uint8_t *_valuePtr;
uint16_t _lenMax; /* Maximum length of the value. */
uint16_t _len; /* Current length of the value. */
uint16_t _lenMax; /* Maximum length of the value. */
uint16_t _len; /* Current length of the value. */
bool _hasVariableLen;
Handle_t _handle;
private:

View file

@ -311,6 +311,8 @@ public:
* The length in bytes of this characteristic's value.
* @param[in] maxLen
* The max length in bytes of this characteristic's value.
* @param[in] hasVariableLen
* Whether the attribute's value length changes overtime.
* @param[in] props
* The 8-bit field containing the characteristic's properties.
* @param[in] descriptors
@ -332,8 +334,9 @@ public:
uint16_t maxLen = 0,
uint8_t props = BLE_GATT_CHAR_PROPERTIES_NONE,
GattAttribute *descriptors[] = NULL,
unsigned numDescriptors = 0) :
_valueAttribute(uuid, valuePtr, len, maxLen),
unsigned numDescriptors = 0,
bool hasVariableLen = true) :
_valueAttribute(uuid, valuePtr, len, maxLen, hasVariableLen),
_properties(props),
_requiredSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_OPEN_LINK),
_descriptors(descriptors),