Skip to content

Commit 8a167ad

Browse files
facchinmpolldo
authored andcommitted
Overload writeValue to allow forced write without response
When a characteristic is declared (Write | WriteWithoutResponse) the code always creates a request and expects a response. By setting withResponse=false the user can bypass the request and write a responseless command. Reworks and supersedes arduino-libraries#72
1 parent 840501e commit 8a167ad

File tree

4 files changed

+33
-33
lines changed

4 files changed

+33
-33
lines changed

Diff for: src/BLECharacteristic.cpp

+18-18
Original file line numberDiff line numberDiff line change
@@ -234,65 +234,65 @@ int BLECharacteristic::readValue(int32_t& value)
234234
return readValue((uint8_t*)&value, sizeof(value));
235235
}
236236

237-
int BLECharacteristic::writeValue(const uint8_t value[], int length)
237+
int BLECharacteristic::writeValue(const uint8_t value[], int length, bool withResponse)
238238
{
239239
if (_local) {
240240
return _local->writeValue(value, length);
241241
}
242242

243243
if (_remote) {
244-
return _remote->writeValue(value, length);
244+
return _remote->writeValue(value, length, withResponse);
245245
}
246246

247247
return 0;
248248
}
249249

250-
int BLECharacteristic::writeValue(const void* value, int length)
250+
int BLECharacteristic::writeValue(const void* value, int length, bool withResponse)
251251
{
252-
return writeValue((const uint8_t*)value, length);
252+
return writeValue((const uint8_t*)value, length, withResponse);
253253
}
254254

255-
int BLECharacteristic::writeValue(const char* value)
255+
int BLECharacteristic::writeValue(const char* value, bool withResponse)
256256
{
257257
if (_local) {
258258
return _local->writeValue(value);
259259
}
260260

261261
if (_remote) {
262-
return _remote->writeValue(value);
262+
return _remote->writeValue(value, withResponse);
263263
}
264264

265265
return 0;
266266
}
267267

268-
int BLECharacteristic::writeValue(uint8_t value)
268+
int BLECharacteristic::writeValue(uint8_t value, bool withResponse)
269269
{
270-
return writeValue((uint8_t*)&value, sizeof(value));
270+
return writeValue((uint8_t*)&value, sizeof(value), withResponse);
271271
}
272272

273-
int BLECharacteristic::writeValue(int8_t value)
273+
int BLECharacteristic::writeValue(int8_t value, bool withResponse)
274274
{
275-
return writeValue((uint8_t*)&value, sizeof(value));
275+
return writeValue((uint8_t*)&value, sizeof(value), withResponse);
276276
}
277277

278-
int BLECharacteristic::writeValue(uint16_t value)
278+
int BLECharacteristic::writeValue(uint16_t value, bool withResponse)
279279
{
280-
return writeValue((uint8_t*)&value, sizeof(value));
280+
return writeValue((uint8_t*)&value, sizeof(value), withResponse);
281281
}
282282

283-
int BLECharacteristic::writeValue(int16_t value)
283+
int BLECharacteristic::writeValue(int16_t value, bool withResponse)
284284
{
285-
return writeValue((uint8_t*)&value, sizeof(value));
285+
return writeValue((uint8_t*)&value, sizeof(value), withResponse);
286286
}
287287

288-
int BLECharacteristic::writeValue(uint32_t value)
288+
int BLECharacteristic::writeValue(uint32_t value, bool withResponse)
289289
{
290-
return writeValue((uint8_t*)&value, sizeof(value));
290+
return writeValue((uint8_t*)&value, sizeof(value), withResponse);
291291
}
292292

293-
int BLECharacteristic::writeValue(int32_t value)
293+
int BLECharacteristic::writeValue(int32_t value, bool withResponse)
294294
{
295-
return writeValue((uint8_t*)&value, sizeof(value));
295+
return writeValue((uint8_t*)&value, sizeof(value), withResponse);
296296
}
297297

298298
int BLECharacteristic::broadcast()

Diff for: src/BLECharacteristic.h

+9-9
Original file line numberDiff line numberDiff line change
@@ -68,15 +68,15 @@ class BLECharacteristic {
6868
int readValue(uint32_t& value);
6969
int readValue(int32_t& value);
7070

71-
int writeValue(const uint8_t value[], int length);
72-
int writeValue(const void* value, int length);
73-
int writeValue(const char* value);
74-
int writeValue(uint8_t value);
75-
int writeValue(int8_t value);
76-
int writeValue(uint16_t value);
77-
int writeValue(int16_t value);
78-
int writeValue(uint32_t value);
79-
int writeValue(int32_t value);
71+
int writeValue(const uint8_t value[], int length, bool withResponse = true);
72+
int writeValue(const void* value, int length, bool withResponse = true);
73+
int writeValue(const char* value, bool withResponse = true);
74+
int writeValue(uint8_t value, bool withResponse = true);
75+
int writeValue(int8_t value, bool withResponse = true);
76+
int writeValue(uint16_t value, bool withResponse = true);
77+
int writeValue(int16_t value, bool withResponse = true);
78+
int writeValue(uint32_t value, bool withResponse = true);
79+
int writeValue(int32_t value, bool withResponse = true);
8080

8181
// deprecated, use writeValue(...)
8282
int setValue(const uint8_t value[], int length) { return writeValue(value, length); }

Diff for: src/remote/BLERemoteCharacteristic.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ uint8_t BLERemoteCharacteristic::operator[] (int offset) const
8585
return 0;
8686
}
8787

88-
int BLERemoteCharacteristic::writeValue(const uint8_t value[], int length)
88+
int BLERemoteCharacteristic::writeValue(const uint8_t value[], int length, bool withResponse)
8989
{
9090
if (!ATT.connected(_connectionHandle)) {
9191
return false;
@@ -104,7 +104,7 @@ int BLERemoteCharacteristic::writeValue(const uint8_t value[], int length)
104104
return 0;
105105
}
106106

107-
if (_properties & BLEWrite) {
107+
if ((_properties & BLEWrite) && withResponse) {
108108
uint8_t resp[4];
109109
int respLength = ATT.writeReq(_connectionHandle, _valueHandle, value, length, resp);
110110

@@ -133,9 +133,9 @@ int BLERemoteCharacteristic::writeValue(const uint8_t value[], int length)
133133
return 0;
134134
}
135135

136-
int BLERemoteCharacteristic::writeValue(const char* value)
136+
int BLERemoteCharacteristic::writeValue(const char* value, bool withResponse)
137137
{
138-
return writeValue((uint8_t*)value, strlen(value));
138+
return writeValue((uint8_t*)value, strlen(value), withResponse);
139139
}
140140

141141
bool BLERemoteCharacteristic::valueUpdated()

Diff for: src/remote/BLERemoteCharacteristic.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ class BLERemoteCharacteristic : public BLERemoteAttribute {
3838
int valueLength() const;
3939
uint8_t operator[] (int offset) const;
4040

41-
int writeValue(const uint8_t value[], int length);
42-
int writeValue(const char* value);
41+
int writeValue(const uint8_t value[], int length, bool withResponse = true);
42+
int writeValue(const char* value, bool withResponse = true);
4343

4444
bool valueUpdated();
4545
bool updatedValueRead();

0 commit comments

Comments
 (0)