UNPKG

spi-device

Version:

SPI serial bus access with Node.js

91 lines (71 loc) 1.81 kB
'use strict'; const spi = require('bindings')('spi'); const assert = require('assert'); let count = 0; let totalCount = 0; let result; const createMessage = _ => { let message = []; let channelByte; [0, 1, 4, 5].forEach(channel => { channelByte = 0x80 + (channel << 4); message.push({ sendBuffer: Buffer.from([0x01, channelByte, 0x00]), receiveBuffer: Buffer.alloc(3), byteLength: 3, speedHz: 1350000, chipSelectChange: true }); }); return message; }; const saveResult = message => { result = ''; message.forEach(transfer => { result += (((transfer.receiveBuffer[1] & 0x03) << 8) + transfer.receiveBuffer[2]) + ' '; }); }; const sync = _ => { const mcp3008 = spi.openSync(0, 0); const message = createMessage(); mcp3008.setOptionsSync(mcp3008.getOptionsSync()); mcp3008.transferSync(message); saveResult(message); mcp3008.closeSync(); count += 1; totalCount += 1; async(); }; const transfer = (mcp3008, cb) => { mcp3008.transfer(createMessage(), (err, message) => { assert(!err, 'can\'t transfer with mcp3008'); saveResult(message); cb(); }); }; const accessOptions = (mcp3008, cb) => { mcp3008.getOptions((err, options) => { assert(!err, 'can\'t get options from mcp3008'); mcp3008.setOptions(options, (err) => { assert(!err, 'can\'t set mcp3008 options'); transfer(mcp3008, cb); }); }); }; const async = _ => { const mcp3008 = spi.open(0, 0, err => { assert(!err, 'can\'t open mcp3008'); accessOptions(mcp3008, _ => { mcp3008.close(err => { assert(!err, 'can\'t close mcp3008'); sync(); }); }); }); }; setInterval(_ => { console.log(totalCount + ' ' + count + ' - ' + result); count = 0; }, 1000); async();