1.首先
在連接 USB 設(shè)備成功后,可以使用 WebUSB API 提供的 transferIn() 和 transferOut() 方法來發(fā)送和接收數(shù)據(jù)。這兩個方法都返回一個 Promise 對象,可以使用 async/await 或者 Promise.then() 方法來處理結(jié)果。
下面是一個示例代碼,演示了如何使用 WebUSB API 連接到 USB 設(shè)備,并向設(shè)備發(fā)送和接收數(shù)據(jù):
<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>WebUSB Example</title>
</head>
<body>
<button id="connect">Connect to USB Device</button>
<script>
const connectButton = document.querySelector('#connect');
connectButton.addEventListener('click', async () => {
try {
const device = await navigator.usb.requestDevice({ filters: [{ vendorId: 0x1234 }] });
console.log('USB Device:', device);
await device.open();
await device.selectConfiguration(1);
await device.claimInterface(2);
console.log('Interface claimed');
const data = new Uint8Array([0x01, 0x02, 0x03, 0x04]);
const result = await device.transferOut(2, data);
console.log('Data sent:', result);
const response = await device.transferIn(1, 4);
console.log('Data received:', response.data);
} catch (error) {
console.error(error);
}
});
</script>
</body>
</html>
在上面的示例中,我們使用 device.open() 方法打開設(shè)備連接,使用 device.selectConfiguration() 方法選擇設(shè)備的配置,使用 device.claimInterface() 方法來獲取設(shè)備接口的訪問權(quán)限。
2.然后
我們創(chuàng)建一個 Uint8Array 類型的數(shù)組,作為要發(fā)送的數(shù)據(jù),使用 device.transferOut() 方法將數(shù)據(jù)發(fā)送到設(shè)備。這個方法接受兩個參數(shù),第一個參數(shù)是要發(fā)送數(shù)據(jù)的端點地址(Endpoint Address),在這個例子中是 2,第二個參數(shù)是一個 Uint8Array 類型的數(shù)據(jù)。
3.接下來
我們使用 device.transferIn() 方法來從設(shè)備接收數(shù)據(jù)。這個方法也接受兩個參數(shù),第一個參數(shù)是要接收數(shù)據(jù)的端點地址(Endpoint Address),在這個例子中是 1,第二個參數(shù)是要接收的數(shù)據(jù)長度,這里我們指定為 4。
當(dāng)數(shù)據(jù)發(fā)送和接收完成后,我們可以在控制臺中查看結(jié)果。
4.需要注意的是
具體的數(shù)據(jù)傳輸方式和數(shù)據(jù)格式需要根據(jù) USB 設(shè)備的協(xié)議來進行編寫。