Giter Site home page Giter Site 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

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.