Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
パケット種別ごとの定義
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
spTwePacketオブジェクトの参照
本関数はspTwePacket
オブジェクトをTwePacket&
として参照します。
この関数は、->
演算子や*
演算子を極力使用しない方針でライブラリを設定しているため、スマートポインタの参照を行うために用意しています。
上記の判定式を(pkt && pkt->get_type() == E_PKT::PKT_TWELITE)
と記述しても同じ判定が得られます。
パケットデータの解釈とオブジェクト生成
パケットデータのバイト列を入力として、パケット種別の判定と、種別に応じたspTwePacket
オブジェクトを生成します。
事前にidentify_packet_type()
を用いてパケットの種別E_PKT
が特定できている場合はeType
を与えます。
戻り値はspTwePacket
です。
パケット種別判定
パケットデータのバイト列を入力として、パケットの種別を判定します。また既に生成済みのspTwePacket
オブジェクトの種別を返します。戻り値はE_PKTです。
パケット種別定義
以下のパケットに対応します。
TWELITE PALのパケット
TwePacketPal
クラスは、TWELITE PALのパケットデータを解釈したものです。このクラスはTWELITE PAL(センサーデータなど上り方向)共通に取り扱います。
PAL共通データはに定義されています。
PALの各センサー基板特有のデータを取り出すためのジェネレータ関数を用意しています。
spTwePacket
オブジェクトからTwePacketPal
オブジェクトを参照します。spTwePacket
にTwePacketPal
以外が格納されている場合は、未解釈のオブジェクトを戻します。
センサーPALの各種データを取り出すためのジェネレータ関数です。
PAL共通データ
PALは接続されるセンサーなどによってパケットデータ構造が異なりますが、DataPal
では共通部のデータ構造を保持します。
PALのパケットデータ構造は大まかに2つのブロックからなり、全てのPAL共通部と個別のデータ部になります。個別のデータ部は、パケットの解釈を行わずそのまま格納しています。取り扱いを単純化するため32バイトを超えるデータは動的に確保するuptr_snsdata
に格納します。
個別のデータ部は、PalBaseをベースクラスに持つ構造体に格納されます。この構造体は、TwePacketPalに定義されるジェネレータ関数により生成されます。
パケット定義
書式を解釈して得られたデータ列は、受信したパケット情報が含まれます。ここでは、このデータ列のことをパケットデータと呼びます。
パケットデータはクラスで表現されます。TwePacket
クラスのデータを解釈することで、その種別を判定し、各アプリケーションや接続ハードウェアに応じたデータ構造となります。TwePacket
クラスは基底クラスでさらにパケット種別ごとの派生クラスとなります。
このオブジェクトは無線パケットのデータ量に準じたメモリ領域を消費し、また、アプリケーションでは多数のパケットを保持することも考えられます。メモリ管理を簡略化するためTwePacket
をスマートポインタstd:shared_ptr<TwePacket>
にて管理します。このスマートポインタをspTwePacket
にtypedef
しています。
以下に、TWELITE PALのパケットデータの場合のクラス関係を示します。TwePacketPal
の基底クラスの一つDataPal
はTWELITE PAL特有のデータを格納しています。TWELITE PALには、さらに接続されるセンサーパルによって格納すべきデータが異なります。TwePacketPal
からさらにPalAmb
やPalMot
を生成します。例えばPalAmb
には温室センサーの値や照度センサーの値が格納されます。このTwePacketPal
をスマートポインタspTwePacket
という形に生成するのがnewTwePacket()
です。
spTwePacket
型はスマートポインタですので、オブジェクトのコピー渡しによる記述を行うことで、コピーのオーバーヘッドを最小にしつつ、メモリーの管理を自動化できます。以下の例はパケットの履歴を管理する単純なクラスです。
パケットオブジェクト
パケットデータは種別によってデータ構造が違いますが、様々な種類のパケットを一元管理するための基底クラスです。
spTwePacket
はメモリ管理のためのスマートポインタです。std::shared_ptr
を用いています。
TwePacketクラスは、パケットデータのパケット種別の管理を行います。また、パケットデータの解釈を行うための仮想関数parse()メソッドを定義しています。パケット特有のデータ構造に基づく解釈やデータの保存等の取り扱いは、派生クラスに実装します。
デフォルトでは、未解釈状態として E_PKT::PKT_ERROR
で初期化します。
パケットデータのバイト列を与えて、パケットデータを解釈する。
派生クラスで、そのパケットに対応するデータ構造を解釈するための実装を行います。
App_Twelite データ
TwePacketTwelite
のデータ部分。
環境センサーパル(AMB)のセンサーデータ
開閉センサーパル(MAG)のセンサーデータ
PAL基板種別
下記のPAL基板に対応します。
開閉センサーパルのデータを取り出します。
環境センサーパルのデータを取り出します。
動作センサーパルのデータを取り出します。
パケットの種別を型で返します。
戻り値は 型 で、成功時は解釈されたパケット種別を、エラー時に E_PKT::PKT_ERROR
を返します。
名前 | 解説 |
NOPCB | 基板未接続、エラー |
MAG | マグネットセンサー付きのMAG (開閉センサーパル) |
AMB | 温湿度センサー、照度センサー付きのAMB (環境センサーパル) |
MOT | 加速度センサー付きのMOT (動作センサーパル) |
PALセンサー共通データ
PALの各センサーのデータ構造体はすべてPalBase
を継承します。センサーデータの格納状況u32StoredMask
とモジュール電源電圧u16Volt
の情報が含まれます。
派生構造体に定義されるSTORE_COMP_MASK
とu32StoreMask
が一致すれば、全てのセンサーのデータが適切に解釈され、格納されていることになります。
動作センサーパル(MOT)のセンサーデータ
※ 各サンプルの連続性を確認するには、パケットのシーケンス番号の抜けが無いことを確認してください。
名前 | 解説 |
PKT_ERROR | パケット解釈前やパケット種別が特定できないなど、TwePacketには意味のあるデータが格納されていない |
PKT_TWELITE | 標準アプリ App_Twelite の を解釈したもの |
PKT_PAL | のシリアル形式を解釈したもの |