1

我几乎在使用 Nintendo Switch Joy-Con 控制器演示,我已经对其进行了一些修改,以使其与我的条形码扫描仪一起使用。而且它只是不起作用,如果它确实起作用,它会在 100 次站点刷新中起作用。

console.log = text => {
    log.textContent += `${text}\r\n`;
  };
  
  let device;
  
  if (!("hid" in navigator)) {
    console.log("WebHID is not available yet.");
  }
  
  navigator.hid.getDevices().then(devices => {
    if (devices.length == 0) {
      console.log(`No HID devices selected. Press the "request device" button.`);
      return;
    }
    device = devices[0];
    console.log(`User previously selected "${device.productName}" HID device.`);
    console.log(`Now press "open device" button to receive input reports.`);
  });
  
  requestDeviceButton.onclick = async event => {
    document.body.style.display = "none";
    try {
        const filters = [
            {
                vendorId: "8792", 
                productId: "9032"
            }
        ];
  
      [device] = await navigator.hid.requestDevice({ filters });
      if (!device) return;
  
      console.log(`User selected "${device.productName}" HID device.`);
      console.log(`Now press "open device" button to receive input reports.`);
    } finally {
      document.body.style.display = "";
    }
  };
  
  openButton.onclick = async event => {
    if (!device) return;
  
    await device.open();
    console.log(`Waiting for user to press button...`);
  
    device.addEventListener("inputreport", event => {
      const { data, device, reportId } = event;
  
      if (device.productId != "9032") return;
  
      const value = data.getUint8(0);
      if (value == 0) return;
  
   
      console.log(`Data: ${value}.`);
    });
  };

每次我用条形码扫描仪扫描某些东西时都会触发 openButton.onclick 事件。正因为如此,每次我扫描某些东西时,它都会尝试再次执行 device.open() 。并且 inputreport 事件根本不会触发。

有谁知道是什么原因造成的?

4

1 回答 1

1

嘿,我切换到 WEBUSB api 并在使用 zadig 为条形码扫描仪重新安装 winusb 驱动程序后让它工作。

这是我使用 rn 的代码。如果有人有兴趣。RFID 功能通过按下按钮启动。

const RFID = async () => {
try {
  const filters = [{
    vendorId: 0x1A86
  }];
  const device = await navigator.usb.requestDevice({ filters })

  const configuration_number = 1  // device.configuration.configurationValue
  const interface_number = 0      // device.configuration.interfaces[1].interfaceNumber
  const interface_class = 255      // device.configuration.interfaces[1].alternates[0].interfaceClass
  console.log(device);
  console.log(`configuration number :  ${configuration_number}`);
  console.log(`interface number : ${interface_number} `);
  console.log(`interface class : ${interface_class} `);

  await device.open();
  await device.selectConfiguration(configuration_number);
  await device.claimInterface(interface_number);
  await device.controlTransferOut({
    requestType: 'class',
    recipient: 'interface',
    request: 0x22,
    value: 0x10,
    index: interface_number
  });

  const read = async (device) => {
    const result = await device.transferIn(2, 64);
    const decoder = new TextDecoder();
    const message = decoder.decode(result.data);
    return message
  }

  var m
  do {
    m = await read(device)
    setQR(oldArr => [...oldArr, m])
    console.log(m)
  } while (m.charCodeAt(0) !== 13)

} catch (error) {
  console.log(error);
}}
于 2021-06-07T14:19:36.797 回答