Node.JS与USB接口通信:检测U盘/移动硬盘插拔事件和发送接数据


发布者 ourjs  发布时间 1510973843267
关键字 JS学习  开源 
在做嵌入式开发时,我们经常需要能够侦听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


地址  https://github.com/tessel/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端口的插拔事件检测接口比较丰富:

地址  https://github.com/MadLittleMods/node-usb-detection

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); });




回复 (4)
  • #
  • #1 ios888 1511081145282

    高报酬寻安卓APP马甲封装上架技术人员。 请联系QQ 973177813 价格合理,长期合作

  • #2 龙决闪 1562336900082
    在这里输入代ghjbhkbjk码
    
    1. 列表

    ljo

  • #3 ocenajs 1566984182789

    我在本地装了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

  • #4 wx_16137 1675061921031

    这行代码报错,device.open是null,是什么原因呢?

    device.open();
微信扫码 立即评论




 热门文章 - 分享最多
  1. 阿里涉嫌抄袭创业公司产品:在今天这个故事里,阿里巴巴就是四十大盗
  2. 垄断"开源硬件"树莓派芯片的供应商博通要收购高通了
  3. 从 Node 到 Go:一个粗略的比较—GO平均性能比JavaScript快十几倍
  4. 迫于社区压力:React(Native)16将更换成MIT开源协议
  5. Node也许不是构建大型服务的最佳选择—Node之父Ryan Dahl访谈录
  6. GitHub2017年度开发者报告 JavaScript依然遥遥领先Python突飞猛进
  7. 40行JavaScript代码实现的3D旋转魔方动画效果
  8. NodeJS动态传参特性:不定个数参数的省略,默认值与解构
  9. 招聘前端工程师
  10. 【干货】扫描识别控件Dynamic Web TWAIN在线示例汇总

 相关阅读
  1. NodeJS动态传参特性:不定个数参数的省略,默认值与解构
  2. 从 Node 到 Go:一个粗略的比较—GO平均性能比JavaScript快十几倍
  3. Node.JS中如何快速扫描端口并发现局域网内的Web服务器地址(80)
  4. Node.JS循环递归复制文件夹目录及其子文件夹下的所有文件
  5. 正则中test、exec、match的简单区别,以及括号的用法
  6. node.js使用unzip解压zip包指定文件,提取 word/excel (docx/pptx/xlsx) 文本内容
  7. Linux下用node.js提取Word(doc/docx)/PDF文本内容
  8. 用JavaScript获取当月第一天和最后一天
  9. Node.JSv8的5个新特性:支持string padding与async/await和object参数省略
  10. node.js中fs.stat里的atime,mtime,ctime,birthtime在debian下的更新规则与区别

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA