-
Notifications
You must be signed in to change notification settings - Fork 31
/
pn532_i2c.js
56 lines (48 loc) · 1.77 KB
/
pn532_i2c.js
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
'use strict';
var EventEmitter = require('events').EventEmitter;
var c = require('./constants');
var logger = require('winston').loggers.get('i2c');
class PN532_I2C extends EventEmitter {
constructor(bus) {
super();
this.bus = bus;
}
init() {
logger.debug('Initializing I2C...');
return new Promise((resolve, reject) => {
setInterval(() => {
var readBuffer = new Buffer(26);
this.bus.i2cRead(c.I2C_ADDRESS, 26, readBuffer, (err, bytesRead, buffer) => {
logger.debug('Read', err, bytesRead, buffer);
if (err) {
this.emit('error', err);
} else if (buffer[0] & 1) { // RDY
// Ready
this.emit('data', buffer.slice(1)); // Slice off
}
})
}, 500);
// this.wire.on('data', (data) => {
// this.emit('data', data);
// });
// this.wire.on('error', (error) => {
// this.emit('error', error);
// });
logger.debug('I2C bus initialized.');
resolve();
});
}
write(buffer) {
logger.debug('writing...', 'length', buffer.length, buffer);
this.bus.i2cWrite(c.I2C_ADDRESS, buffer.length, buffer, (err, bytesWritten, buffer) => {
logger.debug('Wrote', err, bytesWritten, buffer);
// 7 = size of ACK frame + 7 (ready bit)
// addr, length, buffer, cb
// var readBuffer = new Buffer(16);
// this.bus.i2cRead(c.I2C_ADDRESS, 16, readBuffer, (err, bytesRead, buffer) => {
// logger.debug('Read', err, bytesRead, buffer);
// })
});
}
}
module.exports = PN532_I2C;