THETAのプラグイン開発Tips

RICOH THETAのプラグイン開発は基本的にAndroidアプリ開発を行うことになる。色々いじってカメラの調子がおかしくなった後、工場出荷時に戻すたびに行っている設定などのメモ。

## 画面表示
画面がないTHETAのAndroidデスクトップを表示する。

* [scrcpy](https://github.com/Genymobile/scrcpy)
 * おすすめ。ただ、キーボードショートカットを覚える必要がある。macOSだと`optionキー+"h"`でホームに戻るのを覚えておけばなんとかなる。
* [Vysor](https://www.vysor.io/)
  * 広告表示が時折開発に支障をきたす（httpsな通信が必要で時刻設定されていないと通信できずにエラーになる）。

## 時刻設定

* 時刻設定しないとhttps接続できない
* スマホアプリで接続することで、カメラの時計が設定されるので、スマホアプリとの接続でもよい。
* コマンドで設定する場合([dateTimeZone](https://api.ricoh/docs/theta-web-api-v2.1/options/date_time_zone/))
    * `adb shell` でTHETAのshellに入る。(curlでうまく`\'`が使えないので)

```shell:shell_in_THETA
curl -H "content-type: application/json; charset=utf-8" -X POST localhost:8080/osc/commands/execute -d '{"name": "camera.setOptions", "parameters": {"options":{"dateTimeZone":"2020:08:09 11:02:00+09:00"}}}'
```

## スリープ無効化
* プログラムを書いているとすぐにスリープしてしまうので無効化する
* スマホアプリ(RICOH THETA)から設定できる。
* コマンドで設定する場合([sleepDelay](https://api.ricoh/docs/theta-web-api-v2.1/options/sleep_delay/))
   * `adb shell` でTHETAのshellに入る。
        
```shell:shell_in_THETA
curl -H "content-type: application/json; charset=utf-8" -X POST localhost:8080/osc/commands/execute -d '{"name": "camera.setOptions", "parameters": {"options":{"sleepDelay":65535}}}'
```

* 自動スリープの他に、自動電源OFFも無効化する([offDelay](https://api.ricoh/docs/theta-web-api-v2.1/options/off_delay/))

```shell:shell_in_THETA
curl -H "content-type: application/json; charset=utf-8" -X POST localhost:8080/osc/commands/execute -d '{"name": "camera.setOptions", "parameters": {"options":{"offDelay":65535}}}'
```


## ~~USB接続時にもWi-FiをONする~~
* ~~USBでadbを使いながらWi-Fiも使いたいとき~~
* Wi-Fi使用しながらのUSB使用は禁止とのことで記載削除（2022/04/07追記）

## 無線LAN(CLモード)設定 
* [THETA V/Z1をルータに簡単につなげる](https://qiita.com/mktshhr/items/2298fd0403a7969c9796)方法(WPS)
* コマンドで設定する場合
   * `adb shell` でTHETAのshellに入る。
        
```shell:shell_in_THETA
curl -H "content-type: application/json; charset=utf-8" -X POST localhost:8080/osc/commands/execute -d '{"name": "camera._setAccessPoint", "parameters": {"ssid":"Wi-FiルータのSSID","security":"WPA/WPA2 PSK","password":"Wi-Fiルータのパスワード"}}'
```

国内モデルは[IoT技適](https://www.soumu.go.jp/main_content/000705080.pdf)対応のため、THETA Z1 51GBモデルおよびTHETA XでCLモードでのプラグイン起動が制限されるようになった。リコーに申請して承認されたプラグインのみCLモードでプラグインを起動できる（Android Studio等でのデバッグは可能）。

## LAN内のTHETAにアクセスする
* [LANにあるTHETA Vを見つける](https://qiita.com/mktshhr/items/17f9208bf35505926dec)方法
    * "thetayl00123456.local." のように"theta"+シリアル番号(YL00123456)+".local."で接続できる。
* プラグインがWebUIを持っていた場合のアクセス先（ポートは8888）
    * http://thetayl00123456.local.:8888/

## 基本アプリの終了(キーボード入力が必要な場合などに使う)
* `adb shell am force-stop com.theta360.receptor`

## 工場出荷時に戻す(本体初期化)
* [【THETAプラグイン開発】工場出荷状態に戻します](https://qiita.com/mShiiina/items/f9317296296ec01421a6)

# 有線でインターネットに接続する
* 高速転送、発熱対策、CLモードの設定回避、などの理由でUSB-OTG-Enernetアダプタ経由で有線接続する場合、使えるアダプタが限られている。どれが使えるか不明なので、調べたものを記載。
  * 使えたもの
     * [Plugable USB LAN アダプター USB2.0 OTG MicroB 10/100](https://amzn.to/33EmhvR)
     * [BUFFALO LUA3-U2-ATX](https://amzn.to/3ks0AFi)
     * [BUFFALO LUA4-U3-AGTE-NBK](https://amzn.to/31uVTlE)
  * 使えなかったもの 
     * [Anker Aluminum USB 3.0 to Ethernet Adapter](https://www.ankerjapan.com/item/A7611.html)
     * [ルートアール RCG-MULA02](http://route-r.co.jp/?p=2369)
     * [ルートアール RUH-OTGU3E+C](http://route-r.co.jp/?p=2530)

## 権限設定
AndroidManifest.xmlで設定する権限、例えば、`"android.permission.CAMERA"`を通常のAndroidスマホであればダイアログ表示で権限を有効にすることができるが、THETAは画面を持たないため、ダイアログ表示することができない。開発者であればscrcpyなどで画面表示させて設定画面からApp permissionsを設定することで権限設定を行えるが、一般に配布した場合はどうやって権限設定させるのだろうか。[THETA Plugin Store](https://pluginstore.theta360.com/)からプラグインを配布する場合は、RICOH THETAアプリ経由でインストールされ、**自動的に権限設定がされるため、ユーザーが意識して権限設定する必要はない**。

## Logcat
* 2020年6月17日のTHETA Z1用FW 1.50.1以降に対して
  * ライブストリーミングの発熱抑制のため、初期状態でデバッグログを出さないように設定されるようになった。デバッグログを出すときには、以下コマンドを利用する。
     * ログ出力 `adb shell setprop persist.log.tag 0`
     * ログ停止 `adb shell setprop persist.log.tag A` 

## Tombstones
アプリがクラッシュするなどの問題があるとAndoidはクラッシュログを出力する。出力場所は`/data/tombstones/`。ここに詳細なクラッシュ時のログが出力されているので、デバッグに役立てられる。