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:
Install
$ npm install -g ds4
Usage
$ ds4-dump
Will dump decoded events to stdout.
var ds4 = require('ds4');
var through = require('through');
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,
x: false,
cricle: 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,
rumbleLeft: 0,
r: 0,
g: 0,
b: 0,
flashOn: 0,
flashOff: 0
});
Caveat
As long as this is pre 1.0 I'll rename property names.
¯\_(ツ)_/¯
Thanks & References
LICENSE
MIT