node-gamecontroller icon indicating copy to clipboard operation
node-gamecontroller copied to clipboard

A node.js driver for several gamecontrollers

node-gamecontroller

NPM Package MIT license

Gamecontroller.js is a small layer on top of HID to interact with any USB game controller, like Sony PlayStation, XBOX, SNES, ... with node.js, depending on a small config for each controller only.

Installation

Installing node-gamecontroller is as easy as cloning this repo or use npmjs:

npm install gamecontroller

Usage

Plug in your game controller and run the following code:

const Gamecontroller = require('gamecontroller');
const ctrl = new Gamecontroller('ps2');

ctrl.connect(function() {
    console.log('Game On!');
});

ctrl.on('X:press', function() {
    console.log('X was pressed');
});

ctrl.on('X:release', function() {
    console.log('X was released');
});

To get the full parsed HID data stream, you can run

ctrl.on('data', function(data) {
    console.log(data);
});

Supported Events

Data

  • data- Get parsed data as it comes in

Buttons

  • {type}:press - Button with given type was pressed
  • {type}:release - Button with given type was released

Joysticks

  • {type}:move - Joystick with given type was moved in either x or y direction. Object with positions gets passed

Status

  • {type}:change - The status of a measure like battery changed

Misc

  • error - An error has occurred
  • close - The connection was closed successfully

Supported Controllers

At the moment, the following controllers are supported:

  • Playstation 2 Ripoff ("ps2")
  • XBOX 360 ("xbox360")
  • Tomee SNES Controller ("snes-tomee")
  • Retrolink SNES Controller ("snes-retrolink")

If you've connected a supported controller, you can run the following to find the name of it:

var Gamecontroller = require('gamecontroller');

var dev = Gamecontroller.getDevices();

console.log(dev);

Adding new controllers

If your controller isn't supported yet, add the config to the lib/vendor.js file and send a pull request or file a bug ticket. To get all the information follow the following simple steps. Run the following snippet, locate your controller and note the vendorId and productId:

var HID = require('node-hid');
console.log(HID.devices());

Using the vendorId and productId you can run the following snippet, press all the keys on your controller and get the array position of what key changes what array index:

var hid = new HID.HID(vendorId, productId);
hid.on("data", function(data) {
    console.log(data);
});

Copyright and licensing

Copyright (c) 2017, Robert Eisele Dual licensed under the MIT or GPL Version 2 licenses.