Socket
Socket
Sign inDemoInstall

gamepad-ts

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gamepad-ts - npm Package Compare versions

Comparing version 1.1.0 to 1.1.1

7

package.json
{
"name": "gamepad-ts",
"version": "1.1.0",
"version": "1.1.1",
"description": "gamepad contoller in typescript",

@@ -29,3 +29,6 @@ "main": "src/index.js",

"@types/node-hid": "^1.3.1",
"rimraf": "^3.0.2"
"@types/throttle-debounce": "^2.1.0",
"picocolors": "^1.0.0",
"rimraf": "^3.0.2",
"throttle-debounce": "^4.0.0"
},

@@ -32,0 +35,0 @@ "files": [

@@ -0,1 +1,3 @@

/// <reference types="node" />
import { Device } from "node-hid";
export declare const xboxButton: readonly ["X", "A", "B", "Y", "start", "back", "LStickBt", "RStickBt", "LB", "RB", "LT", "RT"];

@@ -20,6 +22,8 @@ export declare const nintendoButton: readonly ["Y", "B", "A", "X", "+", "-", "LStickBt", "RStickBt", "L", "R", "ZL", "ZR"];

export interface JoyPadMapping {
axes: {
LStick: [number, number];
RStick: [number, number];
};
axes: Array<{
offset: number;
rest?: number;
name: string;
pos?: number;
}>;
buttons: Array<{

@@ -36,2 +40,19 @@ offset: number;

}
export declare const dualShock: JoyPadMapping;
export declare const DualShockBT: JoyPadMapping;
/**
* 'Sony Interactive Entertainment',
* product: 'Wireless Controller',
*/
export declare const dualShockUSB: JoyPadMapping;
export declare const dualShockUSBLT: JoyPadMapping;
export interface CommonEmissions {
error: (data: Error) => void;
scan: (sns: Array<Device>) => void;
connected: () => void;
LStick: (x: number, y: number) => void;
RStick: (x: number, y: number) => void;
dpad: (x: number, y: number) => void;
LStickBt: (pressed: boolean) => void;
RStickBt: (pressed: boolean) => void;
raw: (buffer: Buffer) => void;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.dualShock = exports.ALL_BUTTONS = exports.genericButton = exports.playStationButton = exports.nintendoButton = exports.xboxButton = void 0;
exports.dualShockUSBLT = exports.dualShockUSB = exports.DualShockBT = exports.ALL_BUTTONS = exports.genericButton = exports.playStationButton = exports.nintendoButton = exports.xboxButton = void 0;
exports.xboxButton = ['X', 'A', 'B', 'Y', 'start', 'back', 'LStickBt', 'RStickBt', 'LB', 'RB', 'LT', 'RT'];

@@ -25,8 +25,10 @@ exports.nintendoButton = ['Y', 'B', 'A', 'X', '+', '-', 'LStickBt', 'RStickBt', 'L', 'R', 'ZL', 'ZR'];

};
exports.dualShock = {
exports.DualShockBT = {
// 0-255 1 byte value
axes: {
LStick: [3, 4],
RStick: [5, 6], // X, Y
},
axes: [
{ offset: 3, rest: 0x80, name: 'LStick', pos: 0 },
{ offset: 4, rest: 0x80, name: 'LStick', pos: 1 },
{ offset: 5, rest: 0x80, name: 'RStick', pos: 0 },
{ offset: 6, rest: 0x80, name: 'RStick', pos: 1 },
],
buttons: [

@@ -60,2 +62,104 @@ { offset: 7, mask: 0x10, names: exports.ALL_BUTTONS.BL },

};
// 64 Byle length
/**
* 'Sony Interactive Entertainment',
* product: 'Wireless Controller',
*/
exports.dualShockUSB = {
// 0-255 1 byte value
axes: [
{ offset: 1, name: 'LStick', pos: 0 },
{ offset: 2, name: 'LStick', pos: 1 },
{ offset: 3, name: 'RStick', pos: 0 },
{ offset: 4, name: 'RStick', pos: 1 },
{ offset: 8, name: 'L2', pos: 0 },
{ offset: 9, name: 'R2', pos: 0 },
],
buttons: [
{ offset: 5, mask: 0x10, names: exports.ALL_BUTTONS.BL },
{ offset: 5, mask: 0x20, names: exports.ALL_BUTTONS.BD },
{ offset: 5, mask: 0x40, names: exports.ALL_BUTTONS.BR },
{ offset: 5, mask: 0x80, names: exports.ALL_BUTTONS.BT },
{ offset: 6, mask: 0x10, names: exports.ALL_BUTTONS.BML },
{ offset: 6, mask: 0x20, names: exports.ALL_BUTTONS.BMR },
{ offset: 6, mask: 0x01, names: exports.ALL_BUTTONS.L1 },
{ offset: 6, mask: 0x02, names: exports.ALL_BUTTONS.R1 },
{ offset: 6, mask: 0x40, names: exports.ALL_BUTTONS.LStickBt },
{ offset: 6, mask: 0x80, names: exports.ALL_BUTTONS.RStickBt },
{ offset: 6, mask: 0x04, names: exports.ALL_BUTTONS.L2 },
{ offset: 6, mask: 0x08, names: exports.ALL_BUTTONS.R2 },
],
dpadOffset: 5,
dpadBitShift: 0,
dpad: {
0b0000: [0x80, 0xFF],
0b0001: [0xFF, 0xFF],
0b0010: [0xFF, 0x80],
0b0011: [0xFF, 0x00],
0b0100: [0x80, 0x00],
0b0101: [0x00, 0x00],
0b0110: [0x00, 0x80],
0b0111: [0x00, 0xFF],
0b1000: [0x80, 0x80], // neutral
}
// offset: 7 => timmer +4
// offset: 19 => noise
// offset: 20 => roll
// offset: 21 => noise
// offset: 22 => roll
// offset: 23 => roll little part
// offset: 24 => roll
// offset: 24 => roll
// offset: 25--29 RAS
// offset: 30 0xF0 => flg micro
// offset: 31--33 RAS
// offset: 34 => time town
// offset: 35 => touch ID
// offset: 36 => X position
// offset: 37 => Y position
// offset: 38 => Y position
// offset: 39 => 2nd finger
// offset: 40 => 2nd finger
// offset: 41 => 2nd finger
// offset: 42 => 2nd finger
// RAS ... END
};
exports.dualShockUSBLT = {
// 0-255 1 byte value
axes: [
{ offset: 1, name: 'LStick', pos: 0 },
{ offset: 3, name: 'LStick', pos: 1 },
{ offset: 5, name: 'RStick', pos: 0 },
{ offset: 7, name: 'RStick', pos: 1 },
{ offset: 8, name: 'L1' },
{ offset: 9, name: 'L2' }, // ZL
],
buttons: [
{ offset: 10, mask: 0x04, names: exports.ALL_BUTTONS.BL },
{ offset: 10, mask: 0x01, names: exports.ALL_BUTTONS.BD },
{ offset: 10, mask: 0x02, names: exports.ALL_BUTTONS.BR },
{ offset: 10, mask: 0x08, names: exports.ALL_BUTTONS.BT },
{ offset: 10, mask: 0x40, names: exports.ALL_BUTTONS.BML },
{ offset: 10, mask: 0x80, names: exports.ALL_BUTTONS.BMR },
{ offset: 10, mask: 0x10, names: exports.ALL_BUTTONS.L1 },
{ offset: 10, mask: 0x20, names: exports.ALL_BUTTONS.R1 },
{ offset: 11, mask: 0x01, names: exports.ALL_BUTTONS.LStickBt },
{ offset: 11, mask: 0x02, names: exports.ALL_BUTTONS.RStickBt }, // ZR
// { offset: 8, mask: 0x04, names: ALL_BUTTONS.L2 },
// { offset: 8, mask: 0x08, names: ALL_BUTTONS.R2 },
],
dpadOffset: 11,
dpadBitShift: 2,
dpad: {
0b0000: [0x80, 0x80],
0b0001: [0x80, 0xFF],
0b0010: [0xFF, 0xFF],
0b0011: [0xFF, 0x80],
0b0100: [0xFF, 0x00],
0b0101: [0x80, 0x00],
0b0110: [0x00, 0x00],
0b0111: [0x00, 0x80],
0b1000: [0x00, 0xFF], // left up
}
};
//# sourceMappingURL=data.js.map

@@ -20,6 +20,5 @@ /// <reference types="node" />

private productId?;
private LStick;
private RStick;
private dpadPos;
private buttonStats;
private axisStat;
constructor(options?: {

@@ -26,0 +25,0 @@ brand?: ContollerBrand;

@@ -24,4 +24,2 @@ "use strict";

// hid?: HID.HID;
this.LStick = [0x80, 0x80]; // X, Y
this.RStick = [0x80, 0x80]; // X, Y
this.dpadPos = [0x80, 0x80]; // X, Y

@@ -35,4 +33,11 @@ options = options || {};

this.brand = options.brand || 'xbox';
this.mapping = options.mapping || data_1.dualShock;
this.mapping = options.mapping || data_1.DualShockBT;
this.buttonStats = new Array(this.mapping.buttons.length).fill(false);
this.axisStat = {};
for (const axis of this.mapping.axes) {
if (!this.axisStat[axis.name]) {
this.axisStat[axis.name] = [];
}
this.axisStat[axis.name][axis.pos || 0] = axis.rest || 0x80;
}
}

@@ -44,5 +49,6 @@ start() {

let devices = node_hid_1.default.devices().filter(d => d.path);
if (!this.serialNumber && !this.product && !this.path && !this.vendorId && !this.productId)
devices = devices.filter(d => d.product && d.product.toLowerCase().includes('controller'));
if (this.serialNumber)
devices = devices.filter(d => d.serialNumber && d.serialNumber.includes(this.serialNumber));
// devices = devices.filter(d => d.product && d.product.toLowerCase().includes('controller'));
if (this.product)

@@ -84,2 +90,3 @@ devices = devices.filter(d => d.product && this.product.test(d.product));

digest(data) {
this.emit('raw', data);
const { buttons, axes, dpadOffset, dpadBitShift, dpad } = this.mapping;

@@ -91,3 +98,3 @@ // buttons

if (status != this.buttonStats[i]) {
this.emit(bt.names[this.brand], status);
this.emit(bt.names[this.brand], status ? 0xff : 0);
this.buttonStats[i] = status;

@@ -97,11 +104,21 @@ }

// Annalogic Pad
for (const name of Object.keys(axes)) {
const stick = axes[name];
const current = [data[stick[0]], data[stick[1]]];
const previous = this[name];
if (previous[0] !== current[0] || previous[1] !== current[1]) {
this[name] = current;
this.emit(name, current);
// const toEmit: {[key: string]: number[]} = {};
const newAxis = {};
for (const { name, pos, offset } of axes) {
if (!newAxis[name]) {
newAxis[name] = [];
}
newAxis[name][pos || 0] = data[offset];
}
for (const name in newAxis) {
const oldV = this.axisStat[name];
const newV = newAxis[name];
for (let i = 0; i < oldV.length; i++) {
if (oldV[i] != newV[i]) {
this.emit(name, ...newV);
this.axisStat[name] = newV;
break;
}
}
}
// Digital Pad

@@ -112,3 +129,3 @@ const dpadState = data[dpadOffset] >> dpadBitShift;

this.dpadPos = dpadNewPos;
this.emit('dpad', dpadNewPos);
this.emit('dpad', ...dpadNewPos);
}

@@ -115,0 +132,0 @@ }

@@ -1,27 +0,14 @@

import { Device } from "node-hid";
import { JoyPadMapping } from "./data";
import { CommonEmissions, JoyPadMapping } from "./data";
import GamePadController from "./GamePadController";
interface IEmissions {
error: (data: Error) => void;
scan: (sns: Array<Device>) => void;
LStick: (pos: [number, number]) => void;
RStick: (pos: [number, number]) => void;
dpad: (pos: [number, number]) => void;
LStickBt: (pressed: boolean) => void;
RStickBt: (pressed: boolean) => void;
BL: (pressed: boolean) => void;
BD: (pressed: boolean) => void;
BR: (pressed: boolean) => void;
BT: (pressed: boolean) => void;
X: (pressed: boolean) => void;
A: (pressed: boolean) => void;
B: (pressed: boolean) => void;
Y: (pressed: boolean) => void;
L1: (pressed: boolean) => void;
R1: (pressed: boolean) => void;
L2: (pressed: boolean) => void;
R2: (pressed: boolean) => void;
BMR: (pressed: boolean) => void;
BML: (pressed: boolean) => void;
connected: () => void;
interface IEmissions extends CommonEmissions {
BL: (pressed: number) => void;
BD: (pressed: number) => void;
BR: (pressed: number) => void;
BT: (pressed: number) => void;
L1: (pressed: number) => void;
R1: (pressed: number) => void;
L2: (pressed: number) => void;
R2: (pressed: number) => void;
BMR: (pressed: number) => void;
BML: (pressed: number) => void;
}

@@ -28,0 +15,0 @@ export default class GenericController extends GamePadController {

@@ -5,2 +5,2 @@ export { default as GenericController } from './GenericController';

export { default as XBoxController } from './XBoxController';
export { ContollerBrand, ButtonsNames, ALL_BUTTONS, JoyPadMapping, dualShock } from './data';
export { ContollerBrand, ButtonsNames, ALL_BUTTONS, JoyPadMapping, dualShockUSB, dualShockUSBLT, DualShockBT } from './data';

@@ -6,3 +6,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.dualShock = exports.ALL_BUTTONS = exports.XBoxController = exports.PlayStationController = exports.NintendoController = exports.GenericController = void 0;
exports.DualShockBT = exports.dualShockUSBLT = exports.dualShockUSB = exports.ALL_BUTTONS = exports.XBoxController = exports.PlayStationController = exports.NintendoController = exports.GenericController = void 0;
var GenericController_1 = require("./GenericController");

@@ -18,3 +18,5 @@ Object.defineProperty(exports, "GenericController", { enumerable: true, get: function () { return __importDefault(GenericController_1).default; } });

Object.defineProperty(exports, "ALL_BUTTONS", { enumerable: true, get: function () { return data_1.ALL_BUTTONS; } });
Object.defineProperty(exports, "dualShock", { enumerable: true, get: function () { return data_1.dualShock; } });
Object.defineProperty(exports, "dualShockUSB", { enumerable: true, get: function () { return data_1.dualShockUSB; } });
Object.defineProperty(exports, "dualShockUSBLT", { enumerable: true, get: function () { return data_1.dualShockUSBLT; } });
Object.defineProperty(exports, "DualShockBT", { enumerable: true, get: function () { return data_1.DualShockBT; } });
//# sourceMappingURL=index.js.map

@@ -1,23 +0,14 @@

import { Device } from "node-hid";
import { JoyPadMapping } from "./data";
import { CommonEmissions, JoyPadMapping } from "./data";
import GamePadController from "./GamePadController";
interface IEmissions {
error: (data: Error) => void;
scan: (sns: Array<Device>) => void;
LStick: (pos: [number, number]) => void;
RStick: (pos: [number, number]) => void;
dpad: (pos: [number, number]) => void;
LStickBt: (pressed: boolean) => void;
RStickBt: (pressed: boolean) => void;
X: (pressed: boolean) => void;
A: (pressed: boolean) => void;
B: (pressed: boolean) => void;
Y: (pressed: boolean) => void;
L: (pressed: boolean) => void;
R: (pressed: boolean) => void;
ZL: (pressed: boolean) => void;
ZR: (pressed: boolean) => void;
'+': (pressed: boolean) => void;
'-': (pressed: boolean) => void;
connected: () => void;
interface IEmissions extends CommonEmissions {
X: (pressed: number) => void;
A: (pressed: number) => void;
B: (pressed: number) => void;
Y: (pressed: number) => void;
L: (pressed: number) => void;
R: (pressed: number) => void;
ZL: (pressed: number) => void;
ZR: (pressed: number) => void;
'+': (pressed: number) => void;
'-': (pressed: number) => void;
}

@@ -24,0 +15,0 @@ export default class NintendoController extends GamePadController {

@@ -1,22 +0,14 @@

import { Device } from "node-hid";
import { CommonEmissions } from "./data";
import GamePadController, { GamePadOptions } from "./GamePadController";
interface IEmissions {
error: (data: Error) => void;
scan: (sns: Array<Device>) => void;
LStick: (pos: [number, number]) => void;
RStick: (pos: [number, number]) => void;
dpad: (pos: [number, number]) => void;
LStickBt: (pressed: boolean) => void;
RStickBt: (pressed: boolean) => void;
L1: (pressed: boolean) => void;
R1: (pressed: boolean) => void;
L2: (pressed: boolean) => void;
R2: (pressed: boolean) => void;
square: (pressed: boolean) => void;
cross: (pressed: boolean) => void;
circle: (pressed: boolean) => void;
triangle: (pressed: boolean) => void;
share: (pressed: boolean) => void;
options: (pressed: boolean) => void;
connected: () => void;
interface IEmissions extends CommonEmissions {
L1: (pressed: number) => void;
R1: (pressed: number) => void;
L2: (pressed: number) => void;
R2: (pressed: number) => void;
square: (pressed: number) => void;
cross: (pressed: number) => void;
circle: (pressed: number) => void;
triangle: (pressed: number) => void;
share: (pressed: number) => void;
options: (pressed: number) => void;
}

@@ -23,0 +15,0 @@ export default class PlaystationController extends GamePadController {

@@ -1,23 +0,14 @@

import { Device } from "node-hid";
import { JoyPadMapping } from "./data";
import { CommonEmissions, JoyPadMapping } from "./data";
import GamePadController from "./GamePadController";
interface IEmissions {
error: (data: Error) => void;
scan: (sns: Array<Device>) => void;
LStick: (pos: [number, number]) => void;
RStick: (pos: [number, number]) => void;
dpad: (pos: [number, number]) => void;
LStickBt: (pressed: boolean) => void;
RStickBt: (pressed: boolean) => void;
X: (pressed: boolean) => void;
A: (pressed: boolean) => void;
B: (pressed: boolean) => void;
Y: (pressed: boolean) => void;
start: (pressed: boolean) => void;
back: (pressed: boolean) => void;
LB: (pressed: boolean) => void;
RB: (pressed: boolean) => void;
LT: (pressed: boolean) => void;
RT: (pressed: boolean) => void;
connected: () => void;
interface IEmissions extends CommonEmissions {
X: (pressed: number) => void;
A: (pressed: number) => void;
B: (pressed: number) => void;
Y: (pressed: number) => void;
start: (pressed: number) => void;
back: (pressed: number) => void;
LB: (pressed: number) => void;
RB: (pressed: number) => void;
LT: (pressed: number) => void;
RT: (pressed: number) => void;
}

@@ -24,0 +15,0 @@ export default class XBoxController extends GamePadController {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc