如何从node-webkit访问USB设备

如何从node-webkit访问USB设备

Node-webkit 是一种使用Web技术(如 HTMLCSSJavaScript )创建桌面应用程序的流行工具。然而,从node-webkit应用程序访问USB设备可能是具有挑战性的。在这个背景下,我们将探讨从node-webkit应用程序访问USB设备的不同方法。

要从node-webkit中访问USB设备,您可以使用Node.js的usb包,该包提供了与USB设备通信的Node.js API。

方法1:Node.js usb包: 要使用Node.js usb包,您需要先通过运行以下命令进行安装:

npm install usb

为了访问USB设备,语法如下:

const usb = require('usb');
const device = usb.findByIds(vid, pid);

device.open();
device.controlTransfer(bmRequestType, 
        bRequest, wValue, wIndex, data, callback);
device.close();

访问USB设备需要在某些操作系统(如macOS和Linux)上获得特殊权限。您可能需要在Linux上添加udev规则或在macOS上创建自定义的Info.plist文件,以授权您的Node-webkit应用程序访问USB设备。

下面给出了一个详细的示例,以便正确理解使用此方法。

示例1: 列出所有已连接的USB设备。

const usb = require('usb'); 
  
const devices = usb.getDeviceList(); 
  
devices.forEach((device) => { 
    console.log(`Device: {device.deviceDescriptor.idVendor}: 
                         {device.deviceDescriptor.idProduct}`); 
    console.log(`  Type: {device.deviceDescriptor.iProduct}`); 
    console.log(`  Bus:{device.busNumber}`); 
    console.log(`  Address: {device.deviceAddress}`); 
    console.log(`  Ports:{device.portNumbers}`); 
    console.log(`  Manufacturer:  
        {device.deviceDescriptor.iManufacturer}`); 
    console.log(`  Serial Number:  
        {device.deviceDescriptor.iSerialNumber}`); 
}); 

说明: 此代码使用 usb 包使用 getDeviceList() 方法获取所有连接的 USB 设备的列表。然后,它迭代列表中的每个设备,并将每个设备的信息记录到控制台中,包括供应商ID、产品ID、设备类型、总线号、设备地址、端口号、制造商和序列号。

输出:

如何从node-webkit访问USB设备

该输出显示了关于三个连接的USB设备的信息:一个OpenAI设备,一个无线鼠标和一个USB3.0集线器。

示例2: 向USB设备发送控制传输请求

const usb = require('usb'); 
  
const VENDOR_ID = 0x1234; 
const PRODUCT_ID = 0x5678; 
const bmRequestType = 0x40; 
const bRequest = 0x01; 
const wValue = 0x0100; 
const wIndex = 0x0000; 
const data = Buffer.from([0x01, 0x02]); 
  
const device = usb.findByIds(VENDOR_ID, PRODUCT_ID); 
  
device.open(); 
  
device.controlTransfer(bmRequestType, bRequest,  
                       wValue, wIndex, data,  
                       (error, response) => { 
    if (error) { 
        console.log(`Error: {error}`); 
    } else { 
        console.log(`Response:{response}`); 
    } 
  
    device.close(); 
});

解释: 此代码使用usb包中的findByIds()方法来查找具有特定供应商ID和产品ID的USB设备。然后,它使用open()方法打开设备,并使用controlTransfer()方法向设备发送控制传输请求。控制传输请求具有请求类型为0x40,请求代码为0x01,值为0x0100,并包含字节[0x01, 0x02]的数据缓冲区。控制传输请求的响应记录在控制台上。最后,使用close()方法关闭设备。

输出:

如何从node-webkit访问USB设备

这个输出显示了控制传输请求的响应,它是一个包含字节[0x01, 0x02]的缓冲区。

方法2: 使用JavaScript库

要使用像usb.js或webusb.js这样的JavaScript库。usb.js是一个JavaScript库,为从Web应用程序访问USB设备提供了API。它是WebUSB API的包装器,并提供了一个简单和一致的接口来与USB设备交互。

使用此代码来包含js库。

<script src="https://cdnjs.cloudflare.com/ajax/libs/usb/1.4.0/usb.js"></script>

显示所有已连接的USB设备的代码。

usb.getDeviceList().then((devices) => { 
    const deviceList = document.getElementById('devices'); 
    devices.forEach((device) => { 
        const deviceItem = document.createElement('li'); 
        deviceItem.textContent = `{device.deviceDescriptor.idVendor}: 
                                  {device.deviceDescriptor.idProduct}`; 
        deviceList.appendChild(deviceItem); 
    }); 
}).catch((error) => { 
    console.log(`Error: ${error}`); 
});

示例: 现在,在您的HTML文件中添加以下代码

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>List USB Devices</title> 
    <script src= 
"https://cdnjs.cloudflare.com/ajax/libs/usb/1.4.0/usb.js"> 
    </script> 
</head> 
  
<body> 
    <h1>List USB Devices</h1> 
    <ul id="devices"></ul> 
    <script> 
        usb.getDeviceList().then((devices) => { 
            const deviceList = document.getElementById('devices'); 
            devices.forEach((device) => { 
                const deviceItem = document.createElement('li'); 
                deviceItem.textContent = `{device.deviceDescriptor.idVendor}: 
                                          {device.deviceDescriptor.idProduct}`; 
                deviceList.appendChild(deviceItem); 
            }); 
        }).catch((error) => { 
            console.log(`Error: ${error}`); 
        }); 
    </script> 
</body> 
</html>

输出:

如何从node-webkit访问USB设备

结论: usb.js为从web应用程序访问USB设备提供了一个简单而一致的API。它使得查找设备、打开设备、申请接口以及使用端点发送和接收数据变得简单。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程