【失敗】WebUSB を使って FeliCa の IDm を取得する

メモ:

注意: この記事の内容は、失敗記事です。Raspberry Pi 3 Model B+ (Stretch) での WebUSB による FeliCa の IDm は実現できていません。

某製造業の Web ベース工程管理システムで作業者を特定するため FeliCa が使われていました。カードリーダーとの通信には ActiveX が使われているようで IE のみで動作します。もうしばらく IE は使えるようですが、 Edge では ActiveX 非対応となり、さらに Chromium ベースになるなど状況が変わってきています。 Chromium では、 WebUSB という機能が実装されており USB 機器を制御できるそうです 。ここでは、 WebUSB を使って FeliCa の IDm を取得してみたいと思います。

WebUSB と RC-S380/S で FeliCa の IDm を取得する

USB 機器に接続するには、パラメータを確認する必要があるため Chromium を起動して JavaScript コンソールを使って確認していきます。

その前に USB 機器を指定するため、ターミナルで lsusb コマンドを実行し VendorID と ProductID を確認します。

$ lsusb
Bus 001 Device 006: ID 054c:06c1 Sony Corp. 
Bus 001 Device 004: ID 0424:7800 Standard Microsystems Corp. 
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

上記例では、 054c が VendorID となり 06c1 が ProductID になります。

VendorID と ProductID を指定して、 USB デバイスへ接続を要求します。

const device = await navigator.usb.requestDevice(
  {
    'filters': [
      {'vendorId': 0x054c, 'product_id': 0x06c1}
    ]
  }
)
USB デバイスへ接続を要求

Enter キーを押下するとダイアログがポップアップし、カードリーダーの名前が表示されるので選択して接続します。

USB機器の選択

USBデバイスの初期化には、 Configuration と Interface の情報が必要となるので、次のメソッドを実行して確認します。

device.configurations

device.configurations を実行すると、 USB 機器で利用可能な Configuration の情報が USBConfiguration オブジェクトとして返ってくるので展開して configrationValue と interfaceNumber を確認します。

USBConfiguration

使用する Configuration と Interface がわかったので、 USB 機器が使用できるよう初期化していきます。

await device.open()
await device.selectConfiguration(1)
await device.claimInterface(0)

—— ここで失敗中!!