46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
var Epoll = require('../../build/Release/epoll').Epoll,
|
|
fs = require('fs'),
|
|
inputfd = fs.openSync('/sys/class/gpio/gpio7/value', 'r+'),
|
|
outputfd = fs.openSync('/sys/class/gpio/gpio8/value', 'r+'),
|
|
value = new Buffer(1), // The three Buffers here are global
|
|
zero = new Buffer('0'), // to improve performance.
|
|
one = new Buffer('1'),
|
|
count = 0,
|
|
time;
|
|
|
|
// Create a new Epoll. The callback is the interrupt handler.
|
|
var poller = new Epoll(function (err, fd, events) {
|
|
var nextValue;
|
|
|
|
count += 1;
|
|
|
|
// Read GPIO value file. Reading also clears the interrupt.
|
|
fs.readSync(inputfd, value, 0, 1, 0);
|
|
|
|
// Toggle GPIO value. This will eventually result
|
|
// in the next interrupt being triggered.
|
|
nextValue = value[0] === zero[0] ? one : zero;
|
|
fs.writeSync(outputfd, nextValue, 0, nextValue.length, 0);
|
|
});
|
|
|
|
time = process.hrtime(); // Get start time.
|
|
|
|
// Start watching for interrupts. This will trigger the first interrupt
|
|
// as the value file already has data waiting for a read.
|
|
poller.add(inputfd, Epoll.EPOLLPRI);
|
|
|
|
// Print interrupt rate to console after 5 seconds.
|
|
setTimeout(function () {
|
|
var rate;
|
|
|
|
time = process.hrtime(time); // Get run time.
|
|
rate = Math.floor(count / (time[0] + time[1] / 1E9));
|
|
console.log(rate + ' interrupts per second');
|
|
|
|
// Stop watching.
|
|
poller.remove(inputfd).close();
|
|
}, 5000);
|
|
|