diff --git a/README.md b/README.md index 11f71d2..6ef6ca7 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,38 @@ wire.read(length, function(err, res) { ```` +## Usage with async/await + +```javascript +const i2c = require('i2c'); +const address = 0x18; +const wire = new i2c(address, {device: '/dev/i2c-1'}); + +(async () => { + try { + const data = await wire.scanAsync(); + // result contains an array of addresses + + await wire.writeByteAsync(byte); + + await wire.writeBytesAsync(command, [byte0, byte1]); + + const byte = await wire.readByteAsync(); + // result is single byte + + const bytes = await wire.readBytesAsync(command, length); + // result contains a buffer of bytes + + // plain read/write + await wire.writeAsync([byte0, byte1]); + + const buffer = await wire.readAsync(length); + // result contains a buffer of bytes + } catch (err) { + // handle errors + } +})(); +``` ## Raspberry Pi Setup diff --git a/lib/i2c.js b/lib/i2c.js index 1ff537a..d656b68 100644 --- a/lib/i2c.js +++ b/lib/i2c.js @@ -1,5 +1,6 @@ const wire = require('../build/Release/i2c'); const { EventEmitter } = require('events'); +const { promisify } = require('util'); const tick = setImmediate || process.nextTick; class i2c extends EventEmitter { @@ -36,6 +37,15 @@ class i2c extends EventEmitter { this.setAddress(this.address); } }); + + this.scanAsync = promisify(this.scan).bind(this); + this.openAsync = promisify(this.open).bind(this); + this.writeAsync = promisify(this.write).bind(this); + this.writeByteAsync = promisify(this.writeByte).bind(this); + this.writeBytesAsync = promisify(this.writeBytes).bind(this); + this.readAsync = promisify(this.read).bind(this); + this.readByteAsync = promisify(this.readByte).bind(this); + this.readBytesAsync = promisify(this.readBytes).bind(this); } scan(callback) {