Git Product home page Git Product logo

node-ds4's Introduction

node-ds4

Stream events from DualShock 4 controllers. Works for Bluetooth & USB.

Supports:

  • Left & right analog stick
  • D-pad: up, down, left, right (also intermediate positions)
  • Buttons: x, circle, square, triangle, share, options, (DS4) trackpad button
  • Left & right analog triggers
  • (DS4) 2 touches on the trackpad (X, Y, active, ID) & trackpad button
  • Gryoscope (absolute orientation) & accelerometer (relative movement)
  • Activating motors
  • Changing LED color
  • Battery status

Compared to the DS3 the DS4 dropped most pressure sensitive buttons. Only L2 and R2 are still also analog. PEW PEW! I guess someone had to make room for the trackpad...

TODO:

  • Microphone/speaker magic

Install

$ npm install -g ds4

Usage

$ ds4-dump

Will dump decoded events to stdout.

var ds4 = require('ds4');
var through = require('through');

// controller is a node-hid HID object representing the controller
hid.pipe(through(ds4.parseDS4HIDData)).pipe(process.stdout);

Example output frame:

{ leftAnalogX: 128,
  leftAnalogY: 128,
  rightAnalogX: 127,
  rightAnalogY: 127,
  l2Analog: 0,
  r2Analog: 0,
  dPadUp: false,
  dPadRight: false,
  dPadDown: false,
  dPadLeft: false,
  cross: false,
  circle: false,
  square: false,
  triangle: false,
  l1: false,
  l2: false,
  r1: false,
  r2: false,
  l3: false,
  r3: false,
  share: false,
  options: false,
  trackPadButton: false,
  psButton: false,
  motionY: 0,
  motionX: 1,
  motionZ: -2,
  orientationRoll: -145,
  orientationYaw: 8155,
  orientationPitch: 2089,
  trackPadTouch0Id: 4,
  trackPadTouch0Active: false,
  trackPadTouch0X: 1513,
  trackPadTouch0Y: 40,
  trackPadTouch1Id: 0,
  trackPadTouch1Active: false,
  trackPadTouch1X: 0,
  trackPadTouch1Y: 0,
  timestamp: 36,
  batteryLevel: 0 }

Emitting data:

var ds4 = require('ds4');

ds4.emit(hid, {
  rumbleRight: 0, // 0 ... 255
  rumbleLeft:  0, // 0 ... 255
  r:           0, // 0 ... 255
  g:           0, // 0 ... 255
  b:           0, // 0 ... 255
  flashOn:     0, // 0 ... 255  (flash on duration)
  flashOff:    0  // 0 ... 255  (flash off duration)
});

Caveat

As long as this is pre 1.0 I'll rename property names.

¯\_(ツ)_/¯

Thanks & References

LICENSE

MIT

node-ds4's People

Contributors

dutzi avatar mccraveiro avatar seidtgeist avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

node-ds4's Issues

sh get-hidapi.sh

During pre-install on Windows:

[email protected] preinstall C:\Users\gbstarkeyr\AppData\Roaming\npm\node_modules\ds4\node_modules\node-hid
sh get-hidapi.sh

'sh' is not recognized as an internal or external command.

Does this module work for Windows?

Data-dump bluetooth OSX

$ ds4-dump works great on USB, but with bluetooth it throws an error:

buffer.js:663
    throw new RangeError('index out of range');
    ^

RangeError: index out of range
    at checkOffset (buffer.js:663:11)
    at Buffer.readInt16LE (buffer.js:798:5)
    at parseDS4HIDData (/Users/mikkmartin/Documents/dualshock-test/node_modules/ds4/index.js:40:18)

when i log the buffer without parsing, the HID device returns smaller dataset (without trackpad / gyro data) initially:

<Buffer 01 80 7f 84 77 08 00 00 00 00>

and nothing after hidDevice.getFeatureReport(0x04, 66);
then I have to reconnect the controller on bluetooth to reset the controller state.

npm install fails

$ npm install -g ds4

fails. prints errors for node-hid

2 warnings generated.
  LIBTOOL-STATIC Release/hidapi.a
  CXX(target) Release/obj.target/HID/src/HID.o
../src/HID.cc:50:79: error: no member named 'New' in 'v8::String'
  virtual Handle<Value> asV8Exception() const { return ThrowException(String::New(message().c_str())); }

and exits on 20 errors.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.