トップページ

はじめに

Joy-ConはBluetoothを通し、HIDデバイス(Human Intarface Device Device)として機能している。なので、デバイス内のフラッシュメモリの情報やボタンの状態の取得、そしてNFCやIRカメラの操作なども可能である。それらの行うためのコマンド等は有志によって解析されている。(Nintendo_Switch_Reverse_Engineering)そこで、これらのコマンドを利用してやろうとPythonのhidapiを用いてあれこれ試してみたところ、ある程度勝手がわかってきたのでそれらをWebHIDを用いて実装してみた。WenHIDとはWeb上でHIDデバイスを操作するためのAPIらしい。これは私が普段利用しているGoogle Chrome89にて正式にサポートされるようになったことから、都合がいいのでこれを利用してみた。

Joy-Con Operation Tester

→Let's Go!

機能

Home

NFC/IR

NFC ICとIRカメラを制御しているMCUとの通信を行う。

SPI Flash Memory

SPI Flash Memory内の一部の情報を表示する。

Hex dump

SPI Flash Memory内の一部のデータをHex dumpとして表示する。

使い方

  1. PCとJoy-ConとをBluetoothによりペアリングを行う。
  2. Joy-Con Operation Testerに移動し、Connectボタンをクリックする。
  3. HIDデバイスとの接続を要求されるので、Joy-Conを選択する。
  4. Player Lightの一番上のみが点灯し、コントローラが振動したら接続成功。

実装予定

以下の事柄は基本的にlocalでのテストが成功している、もしくは実装のための十分な情報が既に集まっているものになる。

不明な事柄

NFC ICによるNFC Tagとのpolling以外の通信

Amiboで採用されているNTag(ISO/IEC 14443 Type A, NFC-A)や、Mifare Classic(ISO/IEC 14443 Type A, NFC-A)と思しきものとのreadなどの通信データはあり、それらとのCommandは紹介されている。しかし、手元にあるNFC TagはPASMO(Felica, NFC-F)とマイナンバーカード(ISO/IEC 14443 Type B, NFC-B)であり、それらとのCommandは紹介されていない。マイナンバーカードは送信データを間違うと場合によってはロックがかかる可能性があり、実験には不向きである。なので、Felicaとの通信を試みたが成功していない。Joy-Conを使ってFelicaと通信できた人がいたら教えて......

Q&A

Q. 動作確認を行った環境は?
Windows 10
Google Chrome 90.0.4430.85
Joy-Con L/R
Q. Pro Controllerは使えるの?
Pro Controllerを所持していないので、動くかは不明。一部は動くと思う。多分。きっと。
Q. Connectボタンを押してもwindowが出てこないんだけど?
Chromeを使用しているのであれば、バージョンアップすれば動くかも。その他のブラウザでは動作確認を行っていないが、ChromeとFirefox以外のブラウザではWebHIDに対応してなく、動作しない可能性あり。

Reference

  1. Bluetooth HID Information - Nintendo_Switch_Reverse_Engineering, dekuNukem
  2. Subcommands - Nintendo_Switch_Reverse_Engineering, dekuNukem
  3. 6-Axis sensor information - Nintendo_Switch_Reverse_Engineering, dekuNukem
  4. NFC #49 - Nintendo_Switch_Reverse_Engineering, dekuNukem
  5. IR/NFC MCU - Nintendo_Switch_Reverse_Engineering, CTCaer