You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.3 KiB
JavaScript
108 lines
2.3 KiB
JavaScript
// from https://github.com/jehervy/node-virtual-gamepads/blob/master/lib/io.js
|
|
|
|
var io = {};
|
|
|
|
io["int"] = 4;
|
|
io["char"] = 1;
|
|
io["char*"] = 8;
|
|
|
|
io.UINPUT_IOCTL_BASE = "U".charCodeAt();
|
|
|
|
io._IOC_NONE = 0;
|
|
io._IOC_WRITE = 1;
|
|
io._IOC_READ = 2;
|
|
|
|
io._IOC_NRBITS = 8;
|
|
io._IOC_TYPEBITS = 8;
|
|
|
|
io._IOC_SIZEBITS = 14;
|
|
io._IOC_DIRBITS = 2;
|
|
|
|
io._IOC_NRMASK = (1 << io._IOC_NRBITS) - 1;
|
|
io._IOC_TYPEMASK = (1 << io._IOC_TYPEBITS) - 1;
|
|
io._IOC_SIZEMASK = (1 << io._IOC_SIZEBITS) - 1;
|
|
io._IOC_DIRMASK = (1 << io._IOC_DIRBITS) - 1;
|
|
|
|
io._IOC_NRSHIFT = 0;
|
|
io._IOC_TYPESHIFT = io._IOC_NRSHIFT + io._IOC_NRBITS;
|
|
io._IOC_SIZESHIFT = io._IOC_TYPESHIFT + io._IOC_TYPEBITS;
|
|
io._IOC_DIRSHIFT = io._IOC_SIZESHIFT + io._IOC_SIZEBITS;
|
|
|
|
io.sizeof = function(n) {
|
|
switch (typeof n) {
|
|
case "number":
|
|
return n;
|
|
case "string":
|
|
return n.length;
|
|
case "object":
|
|
return n.length ? n.length : 0;
|
|
case "undefined":
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
io._IOC = function(dir, type, nr, size) {
|
|
return (
|
|
(dir << io._IOC_DIRSHIFT) |
|
|
(type << io._IOC_TYPESHIFT) |
|
|
(nr << io._IOC_NRSHIFT) |
|
|
(size << io._IOC_SIZESHIFT)
|
|
);
|
|
};
|
|
|
|
io._IOC_TYPECHECK = function(t) {
|
|
return io.sizeof(t);
|
|
};
|
|
|
|
io._IO = function(type, nr) {
|
|
return io._IOC(io._IOC_NONE, type, nr, 0);
|
|
};
|
|
|
|
io._IOR = function(type, nr, size) {
|
|
return io._IOC(io._IOC_READ, type, nr, io._IOC_TYPECHECK(size));
|
|
};
|
|
|
|
io._IOW = function(type, nr, size) {
|
|
return io._IOC(io._IOC_WRITE, type, nr, io._IOC_TYPECHECK(size));
|
|
};
|
|
|
|
io._IOWR = function(type, nr, size) {
|
|
return io._IOC(
|
|
io._IOC_READ | io._IOC_WRITE,
|
|
type,
|
|
nr,
|
|
io._IOC_TYPECHECK(size)
|
|
);
|
|
};
|
|
|
|
io._IOR_BAD = function(type, nr, size) {
|
|
return io._IOC(io._IOC_READ, type, nr, io.sizeof(size));
|
|
};
|
|
|
|
io._IOW_BAD = function(type, nr, size) {
|
|
return io._IOC(io._IOC_WRITE, type, nr, io.sizeof(size));
|
|
};
|
|
|
|
io._IOWR_BAD = function(type, nr, size) {
|
|
return io._IOC(io._IOC_READ | io._IOC_WRITE, type, nr, io.sizeof(size));
|
|
};
|
|
|
|
/* used to decode ioctl numbers.. */
|
|
io._IOC_DIR = function(nr) {
|
|
return (nr >> io._IOC_DIRSHIFT) & io._IOC_DIRMASK;
|
|
};
|
|
|
|
io._IOC_TYPE = function(nr) {
|
|
return (nr >> io._IOC_TYPESHIFT) & io._IOC_TYPEMASK;
|
|
};
|
|
|
|
io._IOC_NR = function(nr) {
|
|
return (nr >> io._IOC_NRSHIFT) & io._IOC_NRMASK;
|
|
};
|
|
|
|
io._IOC_SIZE = function(nr) {
|
|
return (nr >> io._IOC_SIZESHIFT) & io._IOC_SIZEMASK;
|
|
};
|
|
|
|
module.exports = io;
|