# RaspberryPi

`RasPi`

TWELITE Stage アプリは、一部を除く Raspberry Pi でも動作します。

* マウスとタッチスクリーンに対応します。
* ビルドツールチェインが付属しており、コンパイルもできます。
* 実行形式には、X11版のほかにフレームバッファ版（nox）があるほか、半透明エフェクトなどを省略した軽量版があります。

{% hint style="warning" %}
お使いの RaspberryPi の OS 種別、バージョン、インストール状況によっては動作しない場合や、再コンパイル等が必要になる場合があります。
{% endhint %}

## 環境

TWELITE STAGE は以下の環境で開発・動作確認しています。

* ハードウェア
  * Raspberry Pi 3 Model B
  * LCD Screen: Raspberry Pi Touch Display (7")
* ソフトウェア
  * Raspberry PI OS (32bit) Lite (Version:August 2020)

## 既知の問題・制限事項

* 1回目の起動で `/dev/serial0` の動作に失敗することがあります。
* Raspberry Pi 4B では `/dev/serial0` の動作は未検証です。
* Raspberry Pi 4B ではタッチスクリーンの動作は未検証です。
* TWELITE STAGE への入力文字列が`/dev/tty1`上で動作してるシェルやgettyへ入力文字列がそのまま渡されます。`/dev/tty1`から起動することを推奨します。
* 他のインストールや動作のプログラム(X11など)に影響を受けることがあります。

## アーカイブの展開

ダウンロードしたアーカイブファイルは、パス名に空白や日本語などが含まれないフォルダに展開します。

以下ではRaspberry Piのホームフォルダに展開しています。

```
$ cd /home/pi
$ unzip MWSTAGE2020_XX_YYYY.zip
```

### フォルダ構成

```
../MWSTAGE
     TWELITE_Stage.run    TWELITE_Stage アプリ
     BIN/                 ファームウェアBINファイル
     MWSDK/               MWSDK ライブラリなど
     TWELITE_Stage/       TWELITE_Stage アプリ関連ファイル
```

## デバイスドライバ

TWELITE STAGE から MONOSTICK や TWELITE-R を認識するためには、ftdi\_sioモジュールのアンロードや、USBデバイスに対する読み書き権限の付与が必要です。

{% hint style="info" %}
USBデバイスのIDを以下に示します。

* ベンダーID 0x0403
* プロダクトID 0x6001(MONOSTICK,TWELITE R) または 0x6015 (TWELITE R2)
  {% endhint %}

この設定を自動化するための udev の設定スクリプトを用意しています。`/etc/udev/rules.d` に定義をコピーして、設定をリロードしています。設定後は USB デバイスを抜き差ししてから `TWELITE_Stage.run` を実行してください。起動直後の画面で USB デバイスが表示されたなら、設定が反映されています。

```
$ cd ./MWSTAGE/TWELITE_Stage/INSTALL/ubuntu/
$ sudo ./set_udev_sudo.sh
```

定義ファイル（読みやすいように改行しています）

```
ACTION=="add",
   ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001",
   MODE="0666",
   RUN+="/bin/sh -c 'rmmod ftdi_sio && rmmod usbserial'"
ACTION=="add",
   ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015",
   MODE="0666",
   RUN+="/bin/sh -c 'rmmod ftdi_sio && rmmod usbserial'"
```

## シリアルポートの取り扱い

上述の環境では、`raspi-config` よりシリアルポートの設定をすることで `/dev/serial0` が利用できます。

```
  $ sudo raspi-config

  メニューより
  "3 Interface Options    Configure connections to peripherals"
  →"P6 Serial Port Enable/disable shell messages on the serial connection"

  以下のようにログインシェルとしては利用しない、ハードウェアを有効化するを選択します。
  "Would you like a login shell to be accessible over serial?" -> <No>
  "Would you like the serial port hardware to be enabled?" → <Yes>
```

### 配線例

```
 [TWELITE]               [RaspberryPi]
  GND  ------------------ Gound (#6,#9,#14,#20,#25,#30,#34,#39のいずれか)
  TXD(DIO6,DIP#10) ------ GPIO15/UART0 RXD (#10)
  PRG(SPIMISO,DIP#7) ---- GPIO23 (#16)
  RXD(DIO7,DIP#3) ------- GPIO14/UART0 TXD (#8)
  RST(RESETN,DIP#21) ---- GPIO22 (#15)
  VCC  ------------------ 3V3 (#1,#17のいずれか)
  SET(DIO12,DIP#15) ----- GPIO12 (#32)
```

* TWELITE, Raspberry Pi それぞれのマニュアルを参照してください。
* DIP# は TWELITE DIP のピン番号です。
* 上記の配線は TWELITEが安定稼働することを保証するものではありません。

## TWELITE Stage アプリの起動

* フレームバッファ版はX11のデスクトップ上では動作しません。X11を終了しておきます。
* `TWELITE_Stage.run`を実行します。スクリーン画面上のTWELITE Stageアプリが表示されます。

### 留意事項

* マウスとタッチパネルに対応します。
* TWELITE Stage アプリ中で、入力した文字はコンソール画面にも表示される場合があります。

## その他

### /dev/dri

`TWELITE_Stage.run` 起動時に以下のエラーが出る場合がありますが、無視して構いません。

```
  "The path /dev/dri/ cannot be opened or is not available"
```

### メモリ不足

CPU数が4以上の場合、ビルド時はCPU数を一つ引いた値の並列コンパイルを実行します(4コアなら3並列)。 場合によってはメモリ不足が発生するかもしれません。その場合は並列数を変更してください。

### RaspberryPi 4

{% hint style="warning" %}
この情報は十分な検証を行っていません。
{% endhint %}

以下の設定が必要です。OpenGL関連のドライバが有効にする必要があります。

* `raspi-config` の Advanced Settings → A2 GL Driver → G2 GL (Fake KMS) を選択します
* `libgles-dev` パッケージを導入しておきます
* タッチスクリーンの動作は未検証です


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://stage.twelite.info/install/raspberrypi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
