以前にUSBシリアルI2C変換基板とWebシリアルAPIを用いたツールを紹介しました。今回はWebシリアルAPIを応用してWeb HID APIを使用したツールを開発してみました。
Web HID APIはキーボードやマウス、ゲームパッド等のUSBヒューマンインタフェースと接続するためのAPIです。残念ならが、WebシリアルAPI同様に対応したブラウザはEdgeもしくはChromeのみ対応となっており、23年11月時点ではFirefoxやSafariは対応していません。Web HID APIはUSBヒューマンインタフェースと接続するためのAPIですが、USB-SPIコンバータ、MCP2210やUSB-I2CコンバータMCP2221等のHID APIに対応したUSBデバイスとWeb HID APIを介して通信することが可能です。
今回はUSB-SPIコンバータ、MCP2210とWeb HID APIでブラウザを介して通信するツールを実装してみました。Web HID APIの仕様に従って下記のようにMCP2210のベンダID、プロダクトIDからnavigator.hid.requestDeviceを実行するとデバイス選択画面が表示され、デバイスを選択できるようになります。
const vendor_id = 0x04D8;//Microchip Technology Inc.
const product_id = 0x00DE;//MCP2210 USB-SPI
const product_id = 0x00DE;//MCP2210 USB-SPI
[device] = await navigator.hid.requestDevice(
{ filters: [{'vendorId': vendor_id, 'productId': product_id}] }
)
{ filters: [{'vendorId': vendor_id, 'productId': product_id}] }
)
デバイス選択後にデバイスを下記のようにOpenし、受信データがあった際にイベント処理を実行するため、addEventListenerでinputreportを登録します。
const resOpen = await device.open();
await device.addEventListener("inputreport", handleInputReport);
await device.addEventListener("inputreport", handleInputReport);
逆にデータをデバイス側に送信する場合はsendReportを用いてデータを送信します。
await device.sendReport(0, sendArry);
デバイス接続、送受信の他に一通りの機能を実装したツールのリンクはこちらです。MCP2210をお持ちであればブラウザを介して簡単に動作確認が可能です。すべてのコードはhtmlファイル内にまとめていますので、ページ内の右クリックでコードの表示から実装を確認することが可能です。
試しにWeb USB SPI ToolとMCP2210、NOR-SPIフラッシュメモリW25Q128JVを使ってフラッシュメモリの固有コードの読み出しをテストしてみました。コマンド0x90を実行すると0xEF、0x17とW25Q128JVの固有コードを読み出すことができました。
今回はWeb HID APIとMCP2210を用いてフラッシュメモリと通信してみました。今後はWeb HID APIを用いた応用的な機能を開発して順次公開したいと思います。