マイコン工作実験日記

Microcontroller を用いての工作、実験記録

DualSenseのBT接続

2023-05-12 23:49:13 | DoomPlayer

DoomPlayerでは、DualSenseとUSBを使っての接続をサポートしていますが、実際に使おうとするとOTGホストケーブルを介さねばならず、ケーブルを2本つないでの接続が必要となり、ケーブルの取り回しも煩わしく感じます。そこで、Bluetoothでの接続機能を追加してみました。

上の写真のように、ホストケーブルでつないだBluetoothのUSBドングルを使うことで、DualSenseを接続して使うことができるようになりました。具体的にはBluetoothを介してのHID接続機能を実装することでUSBの場合と同じようにコントローラを用いての操作ができるようになりました。USBの場合には、音楽もUSB経由で送ってコントローラ側で再生することができましたが、Bluetooth経由での音楽データ送信はできないので、音楽はI2S経由での再生となります。

Bluetoothのスタックには、BTstackを使用。こちらのブログ記事を参考にUSBのBluetoothクラスを実装することでBTstackを移植しています。

初めてDualSenseを接続する時にはペアリングが必要となりますので、起動時にBluetoothのドングルが検出された場合には、次の画面を表示することにしました。

"Yes"を選択した場合には、BTstack側からinquilyを発行してデバイスのスキャンを行います。デバイスのCoDからコントローラらしきデバイスが見つかると、その名前を調べて"Wireless Controller" であることを確認したら、BTstack側からコントローラへのHID接続を行います。

"No"を選択した場合には、コントローラ側からの接続待ちになります。一度、ペアリングを行えば、DualSenseは最後に接続した相手を覚えているので、以後はPSボタンを押すだけでDoomPlayerへの接続を試みてくれます。

接続に成功したことがわかるように、画面左上にアイコン表示を追加しました。USBアイコンは、USBでコントローラあるいは、BTドングルが接続されたことを示します。Bluetoothアイコンは、BluetoothでのHID接続が成功したことを示します。DualSenseからのステータス取得時には、電池残量も一緒に報告されていることがわかったので、電池残量の表示もついでに追加してあります。