在做嵌入式开发时,我们经常需要能够侦听USB端口的热插拔事件。目前node.js本身是不提供这类系统事件的接口的。不过已经有人用node.js和c/c++来侦听USB的系统事件,并将其打包进了NPM。
由于含有c/c++代码,所以在安装NPM时,在Linux环境下需要安装编绎环境:
apt-get install build-essential libudev-dev
这里有两个USB事件检测的NODE.JS包
node-usb
这个包除了可以检测USB端口的热插拔外,还可以与USB进行数据交互。
安装
npm install usb
使用
var usb = require('usb')
usb.on('attach', function(device) {
});
usb.on('detach', function(device) {
});
一小段数据传输的示例代码:
const GET_STATUS_INFO = 0xAA;
var device = usb.findByIds(vid, pid);
if(device){
device.open();
var interface = device.interfaces[0];
interface.claim();
var inpoint = interface.endpoints[0]; // interface.endpoint(id) don't work for id=0 btw
var outpoint = interface.endpoints[1];
var update_status_info = function(){
var out_report = Buffer.alloc(128, 0);
out_report[0] = GET_STATUS_INFO;
outpoint.transfer(out_report, function(err){
if(err) throw err;
inpoint.transfer(128, function(err, data){
if(err) throw err;
// valid data packet received!
// ...
// update status regulary
setTimeout(update_status_info, 500);
}
}
update_status_info();
}
node-usb-detection
这个USB端口的插拔事件检测接口比较丰富:
var usbDetect = require('usb-detection');
// Detect add/insert
usbDetect.on('add', function(device) { console.log('add', device); });
usbDetect.on('add:vid', function(device) { console.log('add', device); });
usbDetect.on('add:vid:pid', function(device) { console.log('add', device); });
// Detect remove
usbDetect.on('remove', function(device) { console.log('remove', device); });
usbDetect.on('remove:vid', function(device) { console.log('remove', device); });
usbDetect.on('remove:vid:pid', function(device) { console.log('remove', device); });
// Detect add or remove (change)
usbDetect.on('change', function(device) { console.log('change', device); });
usbDetect.on('change:vid', function(device) { console.log('change', device); });
usbDetect.on('change:vid:pid', function(device) { console.log('change', device); });
// Get a list of USB devices on your system, optionally filtered by `vid` or `pid`
usbDetect.find(function(err, devices) { console.log('find', devices, err); });
usbDetect.find(vid, function(err, devices) { console.log('find', devices, err); });
usbDetect.find(vid, pid, function(err, devices) { console.log('find', devices, err); });
// Promise version of `find`:
usbDetect.find().then(function(devices) { console.log(devices); }).catch(function(err) { console.log(err); });
高报酬寻安卓APP马甲封装上架技术人员。 请联系QQ 973177813 价格合理,长期合作
ljo
我在本地装了npm install usb,写了一个a.js
var usb = require('usb');
usb.on('attach', function(device) {
console.log("1"+device); });
usb.on('detach', function(device) { console.log("2"+device); });
然后用命令node a.js ,可以运行,拔插是可以检测到的,但是我想用nw.js(node+webkkit),在页面上检测usb的拔插,怎么编译文件,请作者发邮件,谢谢了997659148@qq.com
这行代码报错,device.open是null,是什么原因呢?