Skip to content

Commit ac83d10

Browse files
author
Daisuke Baba
committed
Merge branch 'release/2.0.2'
2 parents ba8473e + a0e05cc commit ac83d10

File tree

4 files changed

+67
-31
lines changed

4 files changed

+67
-31
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ Set `GENERIC_BLE_TRACE=true` on starting Node-RED and you can find the precise l
131131

132132
# Revision History
133133

134+
* 2.0.2
135+
- Fix an issue where Write operation cannot be performed properly (#4)
136+
134137
* 2.0.1
135138
- Fix an issue where `Select from scan result` failed to list characteristics
136139

examples/01-read-write.json

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
[
22
{
3-
"id": "867e39b4.d517f",
3+
"id": "31e26832.b13058",
44
"type": "tab",
55
"label": "Generic BLE Example",
66
"disabled": false,
77
"info": "This flow shows BLE Read/Write example.\n"
88
},
99
{
10-
"id": "dfcf20d6.138ff",
10+
"id": "72e93d17.88e32c",
1111
"type": "Generic BLE in",
12-
"z": "867e39b4.d517f",
12+
"z": "31e26832.b13058",
1313
"name": "",
14-
"genericBle": "3b98076c.99a4c8",
14+
"genericBle": "bee5eec.96bf31",
1515
"useString": false,
1616
"notification": true,
1717
"x": 450,
1818
"y": 320,
1919
"wires": [
2020
[
21-
"da23254.83523d8"
21+
"ef614de2.5caa4"
2222
]
2323
]
2424
},
2525
{
26-
"id": "215c4824.9513c8",
26+
"id": "d0252715.dac4b8",
2727
"type": "inject",
28-
"z": "867e39b4.d517f",
28+
"z": "31e26832.b13058",
2929
"name": "Get Battery Level",
3030
"topic": "2a19",
3131
"payload": "",
@@ -37,14 +37,14 @@
3737
"y": 220,
3838
"wires": [
3939
[
40-
"dfcf20d6.138ff"
40+
"72e93d17.88e32c"
4141
]
4242
]
4343
},
4444
{
45-
"id": "da23254.83523d8",
45+
"id": "ef614de2.5caa4",
4646
"type": "debug",
47-
"z": "867e39b4.d517f",
47+
"z": "31e26832.b13058",
4848
"name": "",
4949
"active": true,
5050
"console": "false",
@@ -54,38 +54,38 @@
5454
"wires": []
5555
},
5656
{
57-
"id": "f717fa38.f4e548",
57+
"id": "73fbb96b.2b7cf8",
5858
"type": "Generic BLE out",
59-
"z": "867e39b4.d517f",
59+
"z": "31e26832.b13058",
6060
"name": "",
61-
"genericBle": "3b98076c.99a4c8",
61+
"genericBle": "bee5eec.96bf31",
6262
"x": 450,
6363
"y": 400,
6464
"wires": []
6565
},
6666
{
67-
"id": "bcb384fa.99e64",
67+
"id": "66eb9698.1366b8",
6868
"type": "inject",
69-
"z": "867e39b4.d517f",
70-
"name": "Write Some Data",
69+
"z": "31e26832.b13058",
70+
"name": "Write Transient Data",
7171
"topic": "",
72-
"payload": "{\"2a00\":\"yayyay\"}",
72+
"payload": "{\"f000aa0204514000b000000000000000\":\"ca\"}",
7373
"payloadType": "json",
7474
"repeat": "",
7575
"crontab": "",
7676
"once": false,
77-
"x": 200,
77+
"x": 210,
7878
"y": 460,
7979
"wires": [
8080
[
81-
"f717fa38.f4e548"
81+
"73fbb96b.2b7cf8"
8282
]
8383
]
8484
},
8585
{
86-
"id": "940c1128.0cc1f8",
86+
"id": "2b7c6888.26cb88",
8787
"type": "inject",
88-
"z": "867e39b4.d517f",
88+
"z": "31e26832.b13058",
8989
"name": "Get All Readable Attributes",
9090
"topic": "",
9191
"payload": "",
@@ -97,14 +97,14 @@
9797
"y": 140,
9898
"wires": [
9999
[
100-
"dfcf20d6.138ff"
100+
"72e93d17.88e32c"
101101
]
102102
]
103103
},
104104
{
105-
"id": "5525464e.999a4",
105+
"id": "1589318.4ea604f",
106106
"type": "inject",
107-
"z": "867e39b4.d517f",
107+
"z": "31e26832.b13058",
108108
"name": "Poll Notify Events",
109109
"topic": "2a19",
110110
"payload": "{\"notify\":true,\"period\":5000}",
@@ -116,12 +116,31 @@
116116
"y": 300,
117117
"wires": [
118118
[
119-
"dfcf20d6.138ff"
119+
"72e93d17.88e32c"
120+
]
121+
]
122+
},
123+
{
124+
"id": "164faa57.c92a66",
125+
"type": "inject",
126+
"z": "31e26832.b13058",
127+
"name": "Read Trransient Data",
128+
"topic": "f000aa0204514000b000000000000000",
129+
"payload": "",
130+
"payloadType": "date",
131+
"repeat": "",
132+
"crontab": "",
133+
"once": false,
134+
"x": 220,
135+
"y": 360,
136+
"wires": [
137+
[
138+
"72e93d17.88e32c"
120139
]
121140
]
122141
},
123142
{
124-
"id": "3b98076c.99a4c8",
143+
"id": "bee5eec.96bf31",
125144
"type": "Generic BLE",
126145
"z": "",
127146
"localName": "CC2650 SensorTag",

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-red-contrib-generic-ble",
3-
"version": "2.0.1",
3+
"version": "2.0.2",
44
"description": "Node-RED nodes for generic BLE devices",
55
"license": "Apache-2.0",
66
"repository": {

src/generic-ble.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -142,17 +142,25 @@ function characteristicsTask(services, bleDevice) {
142142
return new Promise((taskResolve, taskReject) => {
143143
loop = () => {
144144
let writeRequest = bleDevice._writeRequests.shift() || [];
145+
if (TRACE) {
146+
bleDevice.log(`<characteristicsTask> writeRequest => ${JSON.stringify(writeRequest)}`);
147+
}
145148
let writeUuidList = writeRequest.map(c => c.uuid);
146149
let writeChars = writeRequest.length > 0 ?
147150
characteristics.filter(c => writeUuidList.indexOf(c.uuid) >= 0) : [];
148151
let writePromises = writeChars.map((c) => {
149-
if (!writeRequest.data) {
152+
let req = writeRequest.filter((r) => r.uuid === c.uuid)[0];
153+
if (!req || !req.data) {
150154
return null;
151155
}
152156
return new Promise((resolve, reject) => {
157+
let buf = valToBuffer(req.data);
158+
if (TRACE) {
159+
bleDevice.log(`<Write> uuid => ${c.uuid}, data => ${buf}, writeWithoutResponse => ${req.writeWithoutResponse}`);
160+
}
153161
c.write(
154-
valToBuffer(writeRequest.data),
155-
writeRequest.writeWithoutResponse,
162+
buf,
163+
req.writeWithoutResponse,
156164
(err) => {
157165
if (err) {
158166
if (TRACE) {
@@ -169,9 +177,15 @@ function characteristicsTask(services, bleDevice) {
169177
});
170178
}).filter(p => p);
171179
operationTimeoutMs += writePromises.length * BLE_OPERATION_WAIT_MS;
180+
if (TRACE) {
181+
bleDevice.log(`<characteristicsTask> writePromises.length => ${writePromises.length}`);
182+
}
172183

173184
let readObj = {};
174185
let readRequest = bleDevice._readRequests.shift() || [];
186+
if (TRACE) {
187+
bleDevice.log(`<characteristicsTask> readRequest => ${JSON.stringify(readRequest)}`);
188+
}
175189
let readUuidList = readRequest.map(c => c.uuid);
176190
let readChars = readUuidList.length > 0 ?
177191
characteristics.filter(c => c && readUuidList.indexOf(c.uuid) >= 0) : [];
@@ -186,7 +200,7 @@ function characteristicsTask(services, bleDevice) {
186200
return reject(err);
187201
}
188202
if (TRACE) {
189-
bleDevice.log(`<Read> ${c.uuid} => ${data}`);
203+
bleDevice.log(`<Read> ${c.uuid} => ${JSON.stringify(data)}`);
190204
}
191205
readObj[c.uuid] = data;
192206
resolve();

0 commit comments

Comments
 (0)