ジャンクのベースステーション2.0を直したお話

**IPFactory Advent Calender 2024 5日目の記事です。**

https://qiita.com/advent-calendar/2024/ipfactory

```
       _?_
      /___\
     (| |@|)       _     _       _     _   _
    [|||||||]     | |   (_) __ _| |__ | |_| |__   ___  _   _ ___  ___
     |\    |      | |   | |/ _` | '_ \| __| '_ \ / _ \| | | / __|/ _ \
     |##\  |      | |___| | (_| | | | | |_| | | | (_) | |_| \__ \  __/
     |\###\|      |_____|_|\__, |_| |_|\__|_| |_|\___/ \__,_|___/\___|
     |  \##|               |___/
     |    \|
     |\    |       ____                   ____  _        _   _
     |##\  |      | __ )  __ _ ___  ___  / ___|| |_ __ _| |_(_) ___  _ __
     |\###\|      |  _ \ / _` / __|/ _ \ \___ \| __/ _` | __| |/ _ \| '_ \
     |  \##|      | |_) | (_| \__ \  __/  ___) | || (_| | |_| | (_) | | | |
     | _  \|   .  |____/ \__,_|___/\___| |____/ \__\__,_|\__|_|\___/|_| |_|
   _.~ . = |_  .`,
  /   - ~ "  -._)))

```
> ベースステーション起動時に出るアスキーアート

# はじめに
こんにちは。0kqです。
ジャンクで買ったベースステーションを直したので記録として残しておきます。

:::note warn
悪化するリスクもあるので手順を実行する場合は自己責任でお願いします。
:::

:::note warn
ブートローダーが壊れている場合DFUが行えません。
ハードウェアの故障の場合、この方法では直りません！
:::

# 症状
誤ってベースステーション1.0用の復旧ファームウェアを焼いてしまい白点灯 -> 青点滅 -> 白点灯(若干点滅)という状態に陥り、ベースステーション2.0用のファームウェアを焼いても起動しなくなってしまった。
また、SteamVRやBLEでデバイスを検索すると`LHB-00000000`という名前になってしまっていた。

# ベースステーションへのアクセス方法
## BLE
BLEモジュールにnordic社製の[nRF52832](https://www.nordicsemi.com/Products/nRF52832?lang=ja-JP)が使われている
nrf connectとかで接続できる
DFUも可能
https://fccid.io/NM82QCJ100/Internal-Photos/Internal-Photos-6499590

## USB-UART
USB-UARTが内蔵されているため、PCに接続してtera termで開くとコンソールからコマンドを叩ける


# 必要なもの
- USBケーブル
    - 片側がMicroBでPCと接続できるもの
- nRF Connect for Mobile
    - [Android](https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=ja)
    - [iOS](https://apps.apple.com/jp/app/nrf-connect-for-mobile/id1054362403)
- Tera Term
    - https://teratermproject.github.io/
- 針金等の細い物
    - 裏のボタンを押せるもの
- DFU用のデータ
    - `"C:\Program Files (x86)\Steam\steamapps\common\SteamVR\tools\lighthouse\firmware\lighthouse_tx_vader\archive\428\lighthouse_tx_vader_radio_full_dfu.v2_9_2004771.zip"`
    - nRF Connect for Mobileをインストールしたスマホに転送しておく

# 手順
## 1. DFUモードに入る
ベースステーションの裏のボタンを押しながら電源ケーブルを接続する。
この際、ベースステーションのLEDは点灯しない。

## 2. BLEでベースステーションへ接続する
nRF Connect for Mobileを起動し、`LHB-DFU`というデバイスを探し、`CONNECT`ボタンを押す。

## 3. DFUを行う
画面上部の`DFU`ボタンを押して`lighthouse_tx_vader_radio_full_dfu.v2_9_2004771.zip`を選択する。
Androidの場合はダイアログでzipを選択する。

## 4. ベースステーションの電源を入れる
DFUが終了したら一度電源ケーブルを抜き、再度電源ケーブルを接続する。
症状によってはここで直っている場合もあるかもしれない。

## 5. Tera Termで接続する
ベースステーションをUSBケーブルでPCと接続し、`Tera Term`を起動する。
Enterキーを押して`lhtx>`という表示が出たら成功。
USBシリアルデバイスとして認識しているはず。

一瞬しか認識されない場合や`Lighthouse Base Station`のアスキーアートが何度も流れてくる場合はブートループを起こしている可能性が高い。
その場合は電源ケーブルを何度も抜き差ししてブートループが起こらないことを祈る。
- 私の場合は白点灯-> 青点滅 -> 白点灯(若干点滅)でブートループしていたが、10~20回ほど再起動を行ったところ赤点滅になりセンサーのログが大量に流れるようになった。
ログは`param default-all`で非表示にできる。

## 6. キャリブレーション値を取得する。
`param list`を実行し`fcal.*`の値をすべてメモしておく。

## 7. パーティションを削除する
`param part`を実行しパーティションがあることを確認する。
以下のコマンドで各パーティションを削除する。
```
param erase 0
param erase 1
param erase 2
```
`param part`を再度実行し`EMPTY`になっていることを確認する。

## 8. レーザーのキャリブレーションを行う
`factory laser-cal`を実行し、数値を聞かれたら100~200※ぐらいの数値を入力してキャリブレーションを行う。
`factory save-cal`を実行し、値を保存したら再起動を行う。
※レーザーの出力値と思われる。要検証

## 9. その他のキャリブレーション値を書き込む
[手順6](#6-キャリブレーション値を取得する)で取得した`fcal.*`の値を`param set fcal.* 値`で書き込む。
取得した値が全て0の場合等は以下の値を入力する。
```
param set fcal.0.tilt -0.055352
param set fcal.0.curve 0.103930
param set fcal.0.gibphase 2.318623
param set fcal.0.gibmag -0.004410
param set fcal.0.ogeephase 0.129396
param set fcal.0.ogeemag -0.043033
param set fcal.1.tilt 0.042486
param set fcal.1.phase -0.005831
param set fcal.1.curve 0.159787
param set fcal.1.gibphase 1.944709
param set fcal.1.gibmag -0.001524
param set fcal.1.ogeephase 1.878604
param set fcal.1.ogeemag -0.161527
```

:::note warn
この値は本来個体ごとのキャリブレーションで決まる値なので不具合が出る可能性があります
※キャリブレーション用のコマンドが見当たらなかった
:::

値を書き込んだら`param list`で値が書き込まれていることを確認し、`param save`を実行し再起動。
LEDが緑色に光れば修理完了です。お疲れさまでした。


# 謝辞
@Yuba32 さん。調査、修理の多大なるご協力に感謝します。