Skip to content

Commit d898f17

Browse files
committed
BLECharacteristic allow user set buffer
1 parent 0ab39ca commit d898f17

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

libraries/Bluefruit52Lib/src/BLECharacteristic.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ void BLECharacteristic::_init(void)
5353
_attr_meta.read_perm = _attr_meta.write_perm = BLE_SECMODE_OPEN;
5454
_attr_meta.vlen = 1;
5555
_attr_meta.vloc = BLE_GATTS_VLOC_STACK;
56+
_userbuf = NULL;
5657

5758
_handles.value_handle = BLE_GATT_HANDLE_INVALID;
5859
_handles.user_desc_handle = BLE_GATT_HANDLE_INVALID;
@@ -133,6 +134,14 @@ void BLECharacteristic::setFixedLen(uint16_t fixed_len)
133134
}
134135
}
135136

137+
// Use application buffer instead of SD stack buffer
138+
void BLECharacteristic::setBuffer(void* buf, uint16_t bufsize)
139+
{
140+
_max_len = bufsize;
141+
_userbuf = buf;
142+
_attr_meta.vloc = buf ? BLE_GATTS_VLOC_USER : BLE_GATTS_VLOC_STACK;
143+
}
144+
136145
void BLECharacteristic::setPermission(BleSecurityMode read_perm, BleSecurityMode write_perm)
137146
{
138147
memcpy(&_attr_meta.read_perm , &read_perm, 1);
@@ -270,7 +279,7 @@ err_t BLECharacteristic::begin(void)
270279
.init_len = (_attr_meta.vlen == 1) ? (uint16_t) 0 : _max_len,
271280
.init_offs = 0,
272281
.max_len = _max_len,
273-
.p_value = NULL
282+
.p_value = _userbuf
274283
};
275284

276285
VERIFY_STATUS( sd_ble_gatts_characteristic_add(BLE_GATT_HANDLE_INVALID, &char_md, &attr_char_value, &_handles) );

libraries/Bluefruit52Lib/src/BLECharacteristic.h

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class BLECharacteristic
9898
void setPermission(BleSecurityMode read_perm, BleSecurityMode write_perm);
9999
void setMaxLen(uint16_t max_len);
100100
void setFixedLen(uint16_t fixed_len);
101+
void setBuffer(void* buf, uint16_t bufsize);
101102

102103
/*------------- Descriptors -------------*/
103104
void setUserDescriptor(const char* descriptor); // aka user descriptor
@@ -182,17 +183,12 @@ class BLECharacteristic
182183
virtual void _eventHandler(ble_evt_t* event);
183184

184185
protected:
185-
struct ATTR_PACKED {
186-
uint8_t write : 1;
187-
uint8_t cccd_write : 1;
188-
uint8_t read_authorize : 1;
189-
uint8_t write_authorize : 1;
190-
} _use_ada_cb;
191-
192186
bool _is_temp;
193187
uint16_t _max_len;
194188
BLEService* _service; // pointer to parent's service
195189

190+
void* _userbuf;
191+
196192
/*------------- Descriptors -------------*/
197193
const char* _usr_descriptor;
198194
struct ATTR_PACKED {
@@ -212,11 +208,18 @@ class BLECharacteristic
212208
}_long_wr;
213209

214210
/*------------- Callback pointers -------------*/
215-
read_authorize_cb_t _rd_authorize_cb;
216-
write_authorize_cb_t _wr_authorize_cb;
211+
struct ATTR_PACKED {
212+
uint8_t write : 1;
213+
uint8_t cccd_write : 1;
214+
uint8_t read_authorize : 1;
215+
uint8_t write_authorize : 1;
216+
} _use_ada_cb;
217+
218+
read_authorize_cb_t _rd_authorize_cb;
219+
write_authorize_cb_t _wr_authorize_cb;
217220

218-
write_cb_t _wr_cb;
219-
write_cccd_cb_t _cccd_wr_cb;
221+
write_cb_t _wr_cb;
222+
write_cccd_cb_t _cccd_wr_cb;
220223

221224
/*------------- Internal Functions -------------*/
222225
void _init(void);

0 commit comments

Comments
 (0)