TWELITE STAGE を試す

TWELITE STAGE は TWELITE の評価開発環境。

- TWELITE STAGE BOARD
- TWELITE STAGE APP
- TWELITE STAGE SDK


で構成されている。

以前、「TWELITE SDKを試す」で
https://qiita.com/nanbuwks/items/5571f6d13d4cc0f67005
を書いた(2020/04/08)が、その直後にSDKの配布は以下のようになった。

> TWELITE NET 1.3.0 (2020/04) 以降は TWELITE STAGE として配布されます。

https://sdk.twelite.info/latest


前回試したのは、MWSDK2018-05 。 MWSDK2020-04以降は上記のようになるらしい。

改めてテストをし直してみた。



# 環境
- Ubuntu 18.04
- MWSTAGE2020_05（2020/5月29日）

# インストール

https://mono-wireless.com/jp/products/stage/index.html
から
MWSTAGE-2020-05_linux.zip
をダウンロードして展開すると 「 MWSTAGE 」というフォルダができた

「TWELITE Stage」
https://stage.twelite.info/
に基づいて作業をしていきます。

上記ページには
> Linux (Ubuntu18.04) - 2020/05公開予定

とあるけど大丈夫かな・・・
読み進めていくと
「Linux - TWELITE STAGE」
https://stage.twelite.info/install/linux
があるのでそれに基づいて以下のように作業

```

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

```

```


$ cd ./MWSTAGE/TWELITE_Stage/INSTALL/ubuntu/
$ ./make_launch_icon.sh

```
これで TWELITE STAGE APP の アイコンが登録される。


# TWELITE STAGE BOARD

https://mono-wireless.com/jp/products/stage-board/index.html
データシート
https://mono-wireless.com/jp/products/stage-board/MW-PDS-STABRD-JP.pdf
回路図
https://mono-wireless.com/jp/products/stage-board/MW-STA-1B-1_sch.pdf

- TWELITE は別に購入が必要。
 - Grove端子、単4x2乾電池BoxやPS/2 キーボードコネクタなどが付いている
- 基本的にはスイッチ、コネクタ、ポテンショメーター、LEDの集合
- レベル変換やインターフェースICなどは搭載されていない。
- はんだ付けレスで実験を行うためのものっぽい。
- PS/2 キーボードコネクタの様子から見て、 M5Stack と接続が前提かな？
- 無くても開発には支障はない
- 2020/10/05 現在まだ販売されていないらしい

# TWELITE STAGE APP

TWELITE APPSとは違うので注意。
https://mono-wireless.com/jp/products/TWE-APPS/index.html

TWELITE R2 を接続して実行してみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ed9ca3c5-012d-b020-be5f-c52794b78f58.png)

シリアルポートを認識しないと全ての機能が使えない。

## トラブルシューティング

先のインストール作業中の

```

$ sudo ./set_udev_sudo.sh
```
が、シリアルポートの認識に関係している。中身を見てみると、

```

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

```

/etc/udev/rules.d/51-ftdi.rules 
```
に追加され、ftdi_sio と usbserial モジュールを rmmod するようになっている。


試しに

```

$ sudo rmmod usbserial
```
としてみたら、

```

rmmod: ERROR: Module usbserial is in use by: cp210x
```

とでた。なので先に cp210x を rmmod し,ftdi_sio, usbserial の順番に rmmod。

その後 sudo ./TWELITE_Stage.run

とすると以下のように起動できた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a2cb0edf-96bc-3604-2c4e-4c181d914cad.png)


## 問題点

このやりかただと他の usbserial モジュールを使用するデバイス機器と干渉を起こす。

たとえば、FTDIチップ経由でUSBシリアルとして認識するソフトウェアは使用できなくなる。

なので、/etc/udev/rules.d/51-ftdi.rules は元に戻し、 TWELITE STAGE APP
を使う必要に応じて都度 rmmod することにする。


# TWELITE STAGE SDK



今回のものを解凍すると以下のようなディレクトリ構成になる。

```

MWSTAGE
├── BIN
├── MWSDK
│   ├── Act_samples
│   ├── ChipLib
│   ├── LICENSE
│   ├── MkFiles
│   ├── TWENET
│   ├── Tools
│   └── Wks_TweApps
└── TWELITE_Stage
    ├── INSTALL
    └── LICENSE
```

このうち、MWSDKは以下の通り

```

MWSDK
├── Act_samples
├── ChipLib
├── LICENSE
├── MkFiles
├── TWENET
├── Tools
└── Wks_TweApps
```

以前のSDKのディレクトリ構造は

```

MWSDK
├── ChipLib
├── Documents
├── License
├── MkFiles
├── TWENET
├── Tools
└── Wks_TWELITE
```

ということで、Wks_TWELITEがWks_TweAppsに変わっている。
Wks_TweAppsの中身は


```
Wks_TweApps
├── App_IO
├── App_Melody
├── App_PAL
├── App_Tag
├── App_Twelite
├── App_Uart
├── App_Wings
├── Samp_ContTX
├── Samp_I2C
├── Samp_PER
├── Samp_PingPong
├── Samp_SPI
└── Samp_Wayback
```


旧Wks_TWELITEは

```

Wks_TWELITE/
├── App_Audio
├── App_IO
├── App_Melody
├── App_Tag
├── App_Twelite
├── App_Uart
├── Samp_ContTX
├── Samp_I2C
├── Samp_PER
├── Samp_PingPong
├── Samp_SPI
└── Samp_Wayback
```

となっていて、更にApp_Tweliteに着目し、ファイル構成を見てみると

```

App_Twelite/
├── App_Twelite
│   ├── App_Twelite.c
│   ├── App_Twelite.h
│   ├── Experimental.h
│   └── build
│       ├── Makefile
│       ├── build-BLUE.cmd
│       ├── build-RED.cmd
│       └── build-clean.cmd
├── App_Twelite_MONOSTICK
│   ├── App_Twelite.c
│   ├── App_Twelite.h
│   └── build
│       ├── Makefile
│       ├── build-BLUE.cmd
│       ├── build-RED.cmd
│       └── build-clean.cmd
├── Common
│   ├── SMBus.c
│   ├── SMBus.h
│   ├── adc.c
│   ├── adc.h
│   ├── app_event.h
│   ├── common.c
│   ├── common.h
│   ├── config.h
│   ├── duplicate_checker.c
│   ├── duplicate_checker.h
│   ├── flash.c
│   ├── flash.h
│   ├── input_string.c
│   ├── input_string.h
│   ├── modbus_ascii.c
│   ├── modbus_ascii.h
│   ├── sensor_driver.c
│   └── sensor_driver.h
├── MW-SLA-1E.txt
├── MW-SLA-1J.txt
└── README.md
```

これが旧SDKだと

```

App_Twelite/
├── Common
│   └── Source
│       ├── SMBus.c
│       ├── SMBus.h
│       ├── adc.c
│       ├── adc.h
│       ├── app_event.h
│       ├── common.c
│       ├── common.h
│       ├── config.h
│       ├── duplicate_checker.c
│       ├── duplicate_checker.h
│       ├── flash.c
│       ├── flash.h
│       ├── input_string.c
│       ├── input_string.h
│       ├── modbus_ascii.c
│       ├── modbus_ascii.h
│       ├── sensor_driver.c
│       └── sensor_driver.h
├── MW-SLA-1E.txt
├── MW-SLA-1J.txt
├── Makefile
├── Master
│   ├── Build
│   │   ├── App_Twelite_Master_BLUE_L1200_V1-8-3.bin
│   │   ├── App_Twelite_Master_BLUE_MONOSTICK_L1200_V1-8-3.bin
│   │   ├── App_Twelite_Master_RED_L1200_V1-8-3.bin
│   │   ├── App_Twelite_Master_RED_MONOSTICK_L1200_V1-8-3.bin
│   │   ├── BuildAll.sh
│   │   ├── Makefile
│   │   └── objs_BLUE
│   │       ├── App_Twelite_Master_BLUE.map
│   │       ├── App_Twelite_Master_BLUE_L1200_V1-8-3.elf
│   │       ├── Master.d
│   │       ├── Master.o
│   │       ├── SMBus.d
│   │       ├── SMBus.o
│   │       ├── adc.d
│   │       ├── adc.o
│   │       ├── common.d
│   │       ├── common.o
│   │       ├── duplicate_checker.d
│   │       ├── duplicate_checker.o
│   │       ├── flash.d
│   │       ├── flash.o
│   │       ├── input_string.d
│   │       ├── input_string.o
│   │       ├── modbus_ascii.d
│   │       ├── modbus_ascii.o
│   │       ├── sensor_driver.d
│   │       └── sensor_driver.o
│   ├── Makefile
│   ├── Source
│   │   ├── Experimental.h
│   │   ├── Master.c
│   │   ├── Master.h
│   │   └── Version.h
│   └── Version.mk
├── document.Doxyfile
├── readdoc.html
├── readme_utf8.html
└── releasenote.txt
```


ということで、ディレクトリ構造が変わっている。また、master.cは App_twelite.cになっているようだ。

## Make

> Executing task: sh -l -c make TWELITE=BLUE  <
> 
> Makefile:70: /MkFiles/mw.mk: そのようなファイルやディレクトリはありません
> make: *** ターゲット '/MkFiles/mw.mk' を make するルールがありません.  中止.
> The terminal process terminated with exit code: 2
>
> Terminal will be reused by tasks, press any key to close it.

となる。調べてみたら

MWSTAGE/MWSDK/Wks_TweApps/App_Twelite/App_Twelite/build/Makefile

の最後の方、

```

#####################################################################
### set MWSDK install path and include makefile.
MWSDK_PATH=$(realpath $(MWSDK_ROOT))
### must include mwx.mk (the makefile body part.)
#include $(MWSDK_PATH)/MkFiles/mw.mk
include /home/nanbuwks/Downloads/MWSTAGE/MWSDK/MkFiles/mw.mk
#####################################################################
```

の

```

MWSDK_PATH=$(realpath $(MWSDK_ROOT))
```

の$(MWSDK_ROOT)が正常に定義されていないようだ。

ここを適切に書き換えることで、ビルドができるようになりました。


## 過去のプロジェクトを新SDKに対応させる

過去の SDK において、App_Twelite を元にして作ったプロジェクトがあった。新しいSDKでビルドできるかな？


MWSDK/MyProjects
に過去のプロジェクトをディレクトロをまとめてコピーしてビルドしようとすると、


> Executing task: sh /home/nanbuwks/Downloads/MWSTAGE/MWSDK/MyProjects/App_Twelite/../../Tools/VSCode/bin/cleanbuild.sh TWELITE=BLUE  <
>
>sh: 0: Can't open /home/nanbuwks/Downloads/MWSTAGE/MWSDK/MyProjects/App_Twelite/../../Tools/VSCode/bin/cleanbuild.sh
The terminal process terminated with exit code: 127
>
> Terminal will be reused by tasks, press any key to close it.

となった。プロジェクトディレクトリにはビルドスクリプトなどが含まれていて、それらを直すよりはソースだけ持ってくるのが良さそう。

新SDK に含まれる App_Twelite

```

MWSDK/Wks_TweApps/App_Twelite
```


をコピーして、

```

MWSDK/MyProjects/App_Twelite
```
を作り、

```

MWSDK/MyProjects/App_Twelite/App_Twelite/
```

 の中の以下を削除。

- App_Twelite.c
- App_Twelite.h


過去のプロジェクトから以下のファイル

- Master.c
- Master.h
- Experimental.h
- Version.h

 を

```

MWSDK/MyProjects/App_Twelite/App_Twelite/
```

 へコピー。




MWSTAGE/MWSDK/MkFiles/mw.mk
MWSTAGE/MWSDK/MkFiles/chipsel.mk 

によると、新しいお作法としてディレクトリ名がプロジェクト名となるらしい。そしてプロジェクト名.c の作成の必要があるらしい。

```

MWSDK/MyProjects/[プロジェクトクラスタディレクトリ]/[プロジェクト名ディレクトリ]/
```

の[プロジェクト名ディレクトリ]にあたるところのようだ。

このSDKでは、ノーマル用のプロジェクトとMONOSTICK用のプロジェクトは別となり、プロジェクトクラスタディレクトリに格納されている。



今回、プロジェクト名として Hoge というものにした。プロジェクトクラスタディレクトリを Hageとしてみたので、

```

MWSDK/MyProjects/Hage/Hoge/
```
 というようにディレクトリを調整し、
Master.cを Hoge.c と直す。

- .vscode/settings.json 
- .vscode/tasks.json

を書き換えると、

Hoge_BLUE_L1303_V1-9-0.bin
というバイナリができた。