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'.master
parent
7317670ba4
commit
87aeff3474
|
@ -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:
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Reference in New Issue