OculusQuestがつながらない問題

# 2020/10/05 追記
ここ最近？Twitterなどで「解決していないものを技術系まとめサイトに載せるな」との言説を目にするようになりました。
個人的には、前置きさえしておけば「解決していないなりに何かヒントになることはあるかもしれない」くらいの軽い気持ちで読めるので別に構わないと思いますが、おっしゃる気持ちも理解できます。

で、その前置きを忘れていたので書いておくと、この記事はその類の記事です。
自分なりに結構いろいろ試したつもりなのでそのどれかに引っ掛かって解決する人がいたらいいなぁくらいの気持ちで書きました。
そこまで了承した上で続きをどうぞ。

# はじめに
OculusQuestに接続できません。

最終的な目的は、
**[3mのUSB-C to USB3.0ケーブル](https://www.amazon.co.jp/gp/product/B01MZIPYPY/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1)で`adb devices`で正常に認識させること。**

問題はとにかくこれ↓
![デバイスマネージャー画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153451/7aa6dbd2-0e14-9483-18a6-895738566bf9.png)

**adbなんだかんだとか以前にデバイスマネージャーでQuestのデバイスとして認識しない。**

上記のものとは別のUSB-C to USB3.0ケーブルでも同様の状態でつながらない。
付属のUSB-Cケーブルでやったら特に問題なくつながる。

まだ解決していませんが、とりあえずやったことはまとめとこうと思い書きました。
以下詳細。

# やったこと
## 普通の接続手順を踏む
1. [公式のドライバ](https://developer.oculus.com/downloads/package/oculus-adb-drivers/)をインストール
2. スマホアプリから開発者モードをONに変更（登録は済ませてある）
3. PCと接続
4. Quest側で接続許可
5. 完了！`adb devices`で確認

付属のケーブルではこれで問題なく接続完了しました。
が、件のケーブルだと冒頭のようになり`adb devices`でも表示されません。

参考: [script life 千夜一夜 プログラミング別館 - [Oculus Quest] adb接続する](https://www.scriptlife.jp/contents/programming/2019/06/23/oculus-quest-adb/)


## 一通り再起動
- OculusQuest本体を再起動
- PC再起動
- 接続、確認

変化なし。

## 本体を出荷前状態に復元
章題通り、OculusQuestを出荷前状態に復元。
1. 設定でスマホアプリで本体に接続
2. 出荷前状態に復元
3. 普通の接続手順で接続

特に変化なし。
元々気にするほどのものはありませんでしたが無駄にセーブデータが消し飛びました。

## ドライバ再インストール
1. 接続してデバイスマネージャーを確認
2. エラーを吐いているやつを削除
3. 再び公式ドライバをインストール
4. PC再起動
5. 接続

特に変化なし。

## ADB Interfaceのドライバを再インストール

「不明なADBデバイス」というものがデバイスマネージャー上である場合、そちらを参考サイトの手順で再インストールするといいとのこと。

これは近いかなぁと少し期待しましたが、そもそもADBデバイス自体見当たらないのでダメ。

参考: 
- [reddit - Installation of ADB-drivers after last update no longer possible on Windows 7?](https://www.reddit.com/r/OculusQuest/comments/dd9yf6/installation_of_adbdrivers_after_last_update_no/)
- [Github - SideQuest - Wiki - Updated my Quest recently and now it won't connect to SideQuest](https://github.com/the-expanse/SideQuest/wiki/Updated-my-Quest-recently-and-now-it-won't-connect-to-SideQuest)

## Windowsのシステム ファイルのチェック・修復

「device driver usb composite device」とかでググったら出てきました。

>また、システム ファイルのチェック・修復のため、以下の手順を実行するのが良いと思います。
>1. 左下のスタート メニューを右クリックし、[コマンド プロンプト (管理者) ] または [Windows PowerShell (管理者) ] を選択します。
>2. [このアプリが PC に変更を加えることを許可しますか?] と表示された場合は [はい (Y)] を選択します。
>3. 画面に以下を入力して Enter キーを押します。
>`dism /online /cleanup-image /restorehealth`
>4. 同じ画面に以下を入力して Enter キーを押します。
>`sfc /scannow`

変化なし。

参考: [Microsoft - USB Composite Deviceのドライバに問題がある　エラー【コード39】](https://answers.microsoft.com/ja-jp/windows/forum/all/usb-composite/33d59e7c-36ef-4bd9-bd66-64f2011ad3f6)

## 公式ドライバ（.inf）の書き換え
.infの中身がどうなっているのか気になり、適当なテキストエディタで開いてみました。
ほぼほぼわかっていませんが、その中の`;Oculus HMD`の項目が気になりました。

```
%SingleAdbInterface%        = USB_Install, USB\VID_2833&PID_0086
%CompositeAdbInterface%     = USB_Install, USB\VID_2833&PID_0083&MI_01
%CompositeAdbInterface%     = USB_Install, USB\VID_2833&PID_0090
%SingleBootLoaderInterface% = USB_Install, USB\VID_2833&PID_0081
```

デバイスマネージャーでエラーになっている項目のプロパティから、イベントタブの項目を見ると、

```
デバイス USB\VID_2833&PID_0183&MI_02\(文字列、何かわかってないので一応隠しとく) を使用するには、さらにインストールが必要です。
```
とあります。
ここのデバイスと先ほどの行末の文字列がそっくりで関係ありそうですが、実際のデバイスの文字列が.infには含まれていません。

何もわかってないけどそれ足す...?と右往左往していると、近しい名前の別のドライバが見つかりました。
[Oculus XRSP Interface other devices drivers](https://www.drvhub.net/devices/other-devices/oculus/xrsp-interface)
これをダウンロードしてみると、公式と似たようなファイル構成になっていました。

```
oculus-xrsp-interface-829794
├ amd64
│ ├ WdfCoInstaller01009.dll
│ └ WinUSBCoInstaller2.dll
├ android_winusb.inf
└ androidwinusba64.cat
```

ので、こちらも.infの中身を見ると、先ほどのデバイス一覧っぽいやつの種類が増えています。

```
%SingleAdbInterface%        = USB_Install, USB\VID_2833&PID_0086
%CompositeAdbInterface%     = USB_Install, USB\VID_2833&PID_0083&MI_01
%CompositeAdbInterface%     = USB_Install, USB\VID_2833&PID_0090
%SingleBootLoaderInterface% = USB_Install, USB\VID_2833&PID_0081
%CompositeXrspInterface%    = USB_Install, USB\VID_2833&PID_0182&MI_01
%CompositeXrspInterface%    = USB_Install, USB\VID_2833&PID_0183&MI_01
%CompositeAdbInterface%     = USB_Install, USB\VID_2833&PID_0183&MI_02
%CompositeXrspInterface%    = USB_Install, USB\VID_2833&PID_0186&MI_00
%CompositeAdbInterface%     = USB_Install, USB\VID_2833&PID_0186&MI_01
%SingleXrspInterface%       = USB_Install, USB\VID_2833&PID_0137
```

イベントで出てきたデバイス名？もあったので、こちらをインストール。

結果。
変化なし。
だめでしたねぇ。

## その他見たサイト
- [【Oculus Quest】なぜかOculus Linkが繋がらない！接続できない時にやったことまとめ](https://amaotolog.com/game/177)
    - 今回使いたいケーブルが将来的にLinkを使う用に買ったものだったので一応見てみた
    - 初手でデバイスを認識しないのでアウト
- [reddit - Oculus Quest not detected by PC](https://www.reddit.com/r/OculusQuest/comments/bvt2vq/oculus_quest_not_detected_by_pc/epskwrw/)
    - 他と違い「開発者モードをオンにするな」とのこと。
    - 開発向けではなく、スクリーンショットなどローカルストレージにアクセスする人向け？未確認。

# 終わってないけど終わりに
とりあえずLinkするわけでもなくすぐ必要というわけでもないので一旦諦めることにしました。
が、こういろいろ試してうまくいかないことがあるとすごくもやもやするのでリベンジしたいです。

リベンジとは言うものの解決すれば全部OKなので何かご存知の方がいればコメントもらえればと思います。
ここまでなんだかんだやっといて変なところで凡ミスしてる可能性も全然あるので...