UNPKG

ds4

Version:

Stream events from DualShock 4 controllers

123 lines (97 loc) 2.55 kB
# 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 ``` sh $ npm install -g ds4 ``` ## Usage ``` sh $ ds4-dump ``` Will dump decoded events to stdout. ``` js 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: ``` js { 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: ``` js 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 - http://www.psdevwiki.com/ps4/Talk:DualShock_4 http://www.psdevwiki.com/ps4/DualShock_4 - @johndrinkwater [protocol gist](https://gist.github.com/johndrinkwater/7708901) - @rdepena [node-dualshock-controller](https://github.com/rdepena/node-dualshock-controller) ## LICENSE MIT