UNPKG

pi-tank

Version:

Raspberry Pi Tank, play with 🎮 PS DualShock 2 or scripts.

63 lines (58 loc) • 1.68 kB
var fs = require('fs'); var events = require('events'); function Joystick(id) { events.EventEmitter.call(this); var self = this, buffer = new Buffer(8), fd, event = { id: id, time: 0, value: 0, number: 0 }; fs.open("/dev/input/js" + id, "r", function(err, bytes) { if (err) { return self.emit("error", err); } else { self.emit("ready"); fd = bytes; readBuffer(); } }); function readBuffer() { if (!fd) { return; } fs.read(fd, buffer, 0, 8, null, function onRead(err, bytes) { if (err) { return self.emit("error", err); } var type = buffer[6]; if (type & 0x80) { event.type = 'init'; if (type & 0x01) { event.name = 'button'; } else if (type & 0x02) { event.name = 'axis'; } } else if (type & 0x01) { event.type = 'button'; } else if (type & 0x02) { event.type = 'axis'; } event.time = buffer.readUInt32LE(0); event.value = buffer.readInt16LE(4); event.number = buffer[7]; self.emit(event.type, event); readBuffer(); }); } this.close = function(callback) { fs.close(fd, callback); fd = undefined; }; } Joystick.prototype = Object.create(events.EventEmitter.prototype); Joystick.prototype.constructor = Joystick; module.exports = Joystick;