如何识别 osx 上的 USB 设备 "path" 并从节点创建读取流数据?
How to identify the "path" of USB device on osx and createReadStream its data from node?
我想编写一个应用程序来重新映射我在 NodeJS 中的这个脚踏板的按键。我为我的脚踏板找到了一个类似的库;但是,它硬编码了 linux 而不是 OSX 的设备的 USB 路径。引发错误:
failed to open file { Error: ENOENT: no such file or directory, open '/dev/usb/hiddev0'
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/dev/usb/hiddev0'
问题:
如何识别我的设备的 USB 路径,以便我可以从 USB 设备创建数据读取流。
终端命令:
system_profiler SPUSBDataType
输出:
VEC USB Footpedal:
Product ID: 0x00ff
Vendor ID: 0x05f3 (PI Engineering, Inc)
Version: 1.20
Speed: Up to 1.5 Mb/sec
Manufacturer: VEC
Location ID: 0x1d112000 / 9
Current Available (mA): 500
Current Required (mA): 100
Extra Operating Current (mA): 0
#! /usr/bin/env node
'use strict';
const fs = require('fs');
const robot = require('robotjs');
const DEFAULT_DEVICE_PATH = '/dev/usb/hiddev0'; // this path needs to change
const DEFAULT_KEYS = ['a', 'b', 'c'];
const RETRY_INTERVAL = 5 * 1000;
const argv = require('yargs')
.array('k')
.alias('k', 'keys')
.alias('p', 'path')
.default('path', DEFAULT_DEVICE_PATH)
.default('k', [])
.argv;
const keyMap = DEFAULT_KEYS.map((key, i) => (argv.keys[i] || key));
const state = [ false, false, false ];
function updateState(index, value) {
const previousState = state[index];
const currentState = (value === 0x01);
if (previousState !== currentState) {
const key = keyMap[index];
robot.keyToggle(key, currentState ? 'down' : 'up');
}
state[index] = currentState;
}
function openFile() {
const stream = fs.createReadStream(argv.path); // so that I can read the stream here.
const size = 8;
const offset = 4;
stream.on('data', function(chunk) {
for (var i=0; i<chunk.length / size; i++) {
updateState(i, chunk[i * size + offset]);
}
});
stream.on('error', function(err) {
console.log('failed to open file', err);
setTimeout(openFile, RETRY_INTERVAL);
});
}
openFile();
这是一个库,可以为您提供 OSX 中任何 HID usb 设备的路径:
我想编写一个应用程序来重新映射我在 NodeJS 中的这个脚踏板的按键。我为我的脚踏板找到了一个类似的库;但是,它硬编码了 linux 而不是 OSX 的设备的 USB 路径。引发错误:
failed to open file { Error: ENOENT: no such file or directory, open '/dev/usb/hiddev0'
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/dev/usb/hiddev0'
问题: 如何识别我的设备的 USB 路径,以便我可以从 USB 设备创建数据读取流。
终端命令:
system_profiler SPUSBDataType
输出:
VEC USB Footpedal:
Product ID: 0x00ff
Vendor ID: 0x05f3 (PI Engineering, Inc)
Version: 1.20
Speed: Up to 1.5 Mb/sec
Manufacturer: VEC
Location ID: 0x1d112000 / 9
Current Available (mA): 500
Current Required (mA): 100
Extra Operating Current (mA): 0
#! /usr/bin/env node
'use strict';
const fs = require('fs');
const robot = require('robotjs');
const DEFAULT_DEVICE_PATH = '/dev/usb/hiddev0'; // this path needs to change
const DEFAULT_KEYS = ['a', 'b', 'c'];
const RETRY_INTERVAL = 5 * 1000;
const argv = require('yargs')
.array('k')
.alias('k', 'keys')
.alias('p', 'path')
.default('path', DEFAULT_DEVICE_PATH)
.default('k', [])
.argv;
const keyMap = DEFAULT_KEYS.map((key, i) => (argv.keys[i] || key));
const state = [ false, false, false ];
function updateState(index, value) {
const previousState = state[index];
const currentState = (value === 0x01);
if (previousState !== currentState) {
const key = keyMap[index];
robot.keyToggle(key, currentState ? 'down' : 'up');
}
state[index] = currentState;
}
function openFile() {
const stream = fs.createReadStream(argv.path); // so that I can read the stream here.
const size = 8;
const offset = 4;
stream.on('data', function(chunk) {
for (var i=0; i<chunk.length / size; i++) {
updateState(i, chunk[i * size + offset]);
}
});
stream.on('error', function(err) {
console.log('failed to open file', err);
setTimeout(openFile, RETRY_INTERVAL);
});
}
openFile();
这是一个库,可以为您提供 OSX 中任何 HID usb 设备的路径: