MWM5ライブラリには、シリアル入出力、画面出力など多岐にわたるコードが含まれます。ここでは、コマンドライン(コンソール)画面上で動作標準入出力のみを用いる単純なサンプルについて解説します。
サンプルはexamples_con/
以下に格納します。
glancer_con : App_Wings(または各アプリのUART出力)を解釈して、各パケットメッセージの概要を表示します。
App_Wings(または各アプリのUART出力)を解釈して、各パケットメッセージの概要を表示します。
glancerは「glance(一目する)人」の意味の英単語です。
プロジェクトフォルダのソースコードはglancer.cpp
のみです。残りの必要なコードはsrc/..
を参照します。
MWM5ライブラリ全てのファイルは必要ありません。以下に必要なファイルを列挙します。
上記で必要なファイル等は本ドキュメントと相違ある場合もあります。問題があればビルド時にエラーが表示されますので、エラーファイルに記述される"~not found"といったメッセージを頼りに足りないファイルをコピーしてください。
examples/glancer_con というプロジェクト定義がありますので、こちらをビルドしてください。
make (GNU) と g++ (gcc より) が必要です。事前にインストールを済ませてください。
Makefile
を確認してください。以下の定義は必要に応じて書き換えます。
makeコマンドを実行します。
標準入力(通常の1バイト入力を用いているため改行が入力されるまでは入力文字列は評価されません)にアスキー形式のUARTメッセージを入力します。出力はPKT...
となります。
先頭の項目について解説します。
必要な標準ライブラリヘッダとMWM5ライブラリヘッダを読み込みます。
MWM5ライブラリでは細かく名前空間が使用されていますが、利用時には煩雑ですのですべてusing namespace
により省略可能とします。
このサンプルでは標準入力から1バイトずつ入力(std::cin::get()
)して、これをASCIIパーサーに投入します。
標準入力ではシステムによって改行コードが異なりますが、ここでは'r'
または'\n'
のいずれが来ても'\r'
を投入するようにしています。本パーサーは末尾の'\r'
のみを評価するためです。
投入後書式が完了した場合はparse_ascii
はtrue
を戻します。ここでデータを解釈します。
ASCIIパーサーにより得られたバイト列は.get_payload()
メソッドにより配列SmplBuf_Byte
型として取り出すことが出来ます。
このサンプルでは得られたバイト列を解釈して、どの種別のUARTメッセージなのか、何が格納されているのかを取り出せるようにします。
バイト列を解釈する手続きはnewTwePacket()
にバイト列payl
を与えます。戻り値としてクラスオブジェクトpkt
を生成します。このオブジェクトはspTwePacket
型の(メモリ管理を行う)スマートオブジェクトで、TwePacket
型のオブジェクトを格納します。
実際にはpkt
は種別に応じたTwePacket
型の派生クラスのインスタンスが格納されています。この派生クラスの種別を確認するのがidentify_pkt_type()
で、パケット種別としてE_PKT
型の値を返します。
パケット種別が得られたら、パケット種別ごとの表示関数print_???(spTwePacket)
を呼び出しています。
ここから先はパケット種別ごとに手続きが違います。以下にApp_Tweliteの解釈例、App_PALの解釈例を示します。
App_Twelite の UARTメッセージの解釈を行います。まずspTwePacket
型のままでは、App_Twelite特有のデータにアクセスできません。
TWELITE PALのUARTメッセージを解釈します。TWELITE PALは接続される基板によって異なるUARTメッセージが出力されます。このためデータ取得も一旦PALとして解釈してから、さらに個別のPAL基板のデータを取り出します。
最初にPAL共通データをrefTwePacketPal()
により取り出します。
最初にパケットにイベントが含まれるかどうかの判定を行います。イベントパケットは例えば通知(NOTICE)PALの加速度センサーが静止状態から加速度を検出した(タップ)といった現象をイベント番号として伝えるものです。イベントパケットにも様々なデータが付加されますが、通常はイベント番号を参照します。
パケットの種別を.get_PalDataType()
により判定します。
PAL基板の種別がわかったら、PAL基板の種別に応じた手続き(.get_PalMag()
など)により、PAL基板特有のデータが含まれるクラスオブジェクトを得ます。
上記の例では開閉センサーPALの磁気センサーの状態を得ています。
解説 についても参照ください。
のクラスインスタンスを生成しておきます。
まずrefTwePacketTwelite()
を呼びます。戻り値はの参照型です。App_TweliteのUARTメッセージを解釈した特有のデータが含まれます。例えば.DI1
はDI1のHigh/Low状態を示します。
定義 | 内容 |
| 必須。標準入出力のみでビルドしたい場合に必要な定義です。 |
| システム時間[ms]を得る ※ |
定義名 |
CXX | g++-9 など実行名が違う場合に書き換えます。 ※ Makefile 中で動作環境を判定している部分があり、この部分に定義が含まれます。 |
DEFINES | 必要に応じて。 |
CFLAGS | 必要に応じて。コンパイルオプションをコンパイラに与えます。 |
項目 | 内容 |
Typ= |
Lq= | LQI値が格納されます。 |
Ad= | 32bitの送信元アドレスと8bitの送信元論理アドレスが格納されます。 |
Vmv= | 電源電圧です。 ※ メッセージにデータがない場合は 0000 となります。 |
Tms= | メッセージを受信したシステム時間が格納されます。 ※ |
です。