トップページ
はじめに
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
- Device Informationの取得(Output Subcommand ID: 0x02)
- Simple HID mode(Input Subcommand ID: 0x3f)もしくはStandard full mode(Input Subcommand ID: 0x30)の解析
- 入力ボタンの表示
- 加速度センサーとジャイロスコープのデータの取得
- Joy-ConのサイドについているPlayer lightsの点灯、点滅および消灯の操作
- HD振動(バイブレーター)のHigh/Low bandの周波数もしくは振幅の操作
NFC/IR
NFC ICとIRカメラを制御しているMCUとの通信を行う。
- MCUの状態を取得
- NFC TagのPollingとUID/IDmの取得
SPI Flash Memory
SPI Flash Memory内の一部の情報を表示する。
- Pairing information
- Factory calibration
- User calibration
Hex dump
SPI Flash Memory内の一部のデータをHex dumpとして表示する。
使い方
- PCとJoy-ConとをBluetoothによりペアリングを行う。
- Joy-Con Operation Testerに移動し、Connectボタンをクリックする。
- HIDデバイスとの接続を要求されるので、Joy-Conを選択する。
- 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
- Bluetooth HID Information - Nintendo_Switch_Reverse_Engineering, dekuNukem
- Subcommands - Nintendo_Switch_Reverse_Engineering, dekuNukem
- 6-Axis sensor information - Nintendo_Switch_Reverse_Engineering, dekuNukem
- NFC #49 - Nintendo_Switch_Reverse_Engineering, dekuNukem
- IR/NFC MCU - Nintendo_Switch_Reverse_Engineering, CTCaer