Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
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
オブジェクトの種別を返します。戻り値はE_PKTです。
パケット種別定義
以下のパケットに対応します。
App_Wings の親機で出力されるアスキー書式に対応します。
名前
解説
PKT_ERROR
パケット解釈前やパケット種別が特定できないなど、TwePacketには意味のあるデータが格納されていない
PKT_TWELITE
標準アプリ App_Twelite の 0x81 コマンドを解釈したもの
PKT_PAL
TWELITE PALのシリアル形式を解釈したもの
PKT_APPIO
PKT_APPUART
PKT_APPTAG
無線タグアプリApp_TagのUARTメッセージを解釈したもの。センサ固有部分は解釈されずpayloadとしてバイト列を報告します。
PKT_ACT_STD
アクト(Act)のサンプルなどで使用される出力書式。
パケットオブジェクト
パケットデータは種別によってデータ構造が違いますが、様々な種類のパケットを一元管理するための基底クラスです。
spTwePacket
はメモリ管理のためのスマートポインタです。std::shared_ptr
を用いています。
TwePacketクラスは、パケットデータのパケット種別の管理を行います。また、パケットデータの解釈を行うための仮想関数parse()メソッドを定義しています。パケット特有のデータ構造に基づく解釈やデータの保存等の取り扱いは、派生クラスに実装します。
デフォルトでは、未解釈状態として E_PKT::PKT_ERROR
で初期化します。
パケットの種別をE_PKT
型で返します。
パケットデータのバイト列を与えて、パケットデータを解釈する。
派生クラスで、そのパケットに対応するデータ構造を解釈するための実装を行います。
戻り値は E_PKT
型 で、成功時は解釈されたパケット種別を、エラー時に E_PKT::PKT_ERROR
を返します。
パケット定義
書式を解釈して得られたデータ列は、受信したパケット情報が含まれます。ここでは、このデータ列のことをパケットデータと呼びます。
パケットデータはTwePacket
クラスで表現されます。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
オブジェクトを生成します。
事前にidentify_packet_type()
を用いてパケットの種別E_PKT
が特定できている場合はeType
を与えます。
戻り値はspTwePacket
です。
TwePacketAppIO
のデータ部分。
TWELITE PAL/CUEのパケットはTwePacketPal::get_PalDataType()
により、どういった形式で格納されているかを判定します。
TwePacketPal::u8palpcb
による判定の場合、より新しい形式に対応できません。
MAG/AMB/MOTの3種類の場合、下記例の^7の位置にある値(PAL基板種別)のMSB(0x80)が設定されている場合に限りu8palpcb
による判定からget_PalMag()
,get_PalAmb()
,get_PalMot()
によりオブジェクトを取り出すことが出来ます。
PALイベントは、センサーなどの情報を直接送るのではなく、センサー情報を加工し一定の条件が成立したときに送信される情報です。例えば加速度センサーの静止状態から一定以上の加速度が検出された場合などです。
イベントデータが存在する場合はTwePacketPal
の.is_PalEvent()
がtrueになることで判定でき、.get_PalEvent()
によりPalEvent
データ構造を得られます。
PAL共通データ
PALは接続されるセンサーなどによってパケットデータ構造が異なりますが、DataPal
では共通部のデータ構造を保持します。
PALのパケットデータ構造は大まかに2つのブロックからなり、全てのPAL共通部と個別のデータ部になります。個別のデータ部は、パケットの解釈を行わずそのまま格納しています。取り扱いを単純化するため32バイトを超えるデータは動的に確保するuptr_snsdata
に格納します。
個別のデータ部は、PalBase
をベースクラスに持つ構造体に格納されます。この構造体は、TwePacketPal
に定義されるジェネレータ関数により生成されます。
u8pkt_type
が0
の時はPalDataInfo
データ構造が付与された形式となります。比較的複雑な情報を格納するための形式です。1
の場合はPAL基板ごとに決められた標準的な形式でデータが格納されています。
TWELITE PALのパケット
TwePacketPal
クラスは、TWELITE PALのパケットデータを解釈したものです。このクラスはTWELITE PAL(センサーデータなど上り方向)共通に取り扱います。
PAL共通データはに定義されています。
PALの各センサー基板特有のデータを取り出すためのジェネレータ関数を用意しています。
spTwePacket
オブジェクトからTwePacketPal
オブジェクトを参照します。spTwePacket
にTwePacketPal
以外が格納されている場合は、未解釈のオブジェクトを戻します。
パケットにイベント情報が含まれるかを判定します。
パケットプロパティ(パケットの補助情報)が含まれているか判定します。含まれている場合はPalDataInfo
で定義されるメンバーにアクセスできます。
パケットプロパティが存在する場合に呼び出しは有効。タイマー由来からの送信の場合trueを返します。
センサーPALの各種データを取り出すためのジェネレータ関数です。
.is_PalEvent()
がtrue
の場合PalEvent
(PALイベント)を取り出します。
PAL/CUEのパケットがどのような原因で送信されたかなどを付加する補助情報です。例えばタイマー送信かセンサーの発報によるものかなどの情報が含まれます。が本構造体を継承しており単独では使用しません。
PAL基板種別
下記のPAL基板に対応します。
パケット送信要因。PalDataInfo::e_data_cause
で使用されます。
パケットの種別を判定します。種別はとして判定されます。
.u8palpcb==E_PAL_PCB::MAG
の場合、開閉センサーパルのデータを取り出します。
.u8palpcb==E_PAL_PCB::AMB
の場合、環境センサーパルのデータを取り出します。
.u8palpcb==E_PAL_PCB::MOT
の場合、動作センサーパルのデータを取り出します。
名前 | 解説 |
NOPCB | 基板未接続、エラー |
MAG | マグネットセンサー付きのMAG (開閉センサーパル) |
AMB | 温湿度センサー、照度センサー付きのAMB (環境センサーパル) |
MOT | 加速度センサー付きのMOT (動作センサーパル) |
NOTICE | LED付きのMOT (通知パル) |
CUE | TWELITE CUE |
名前 | 解説 |
EVENT | イベントが発生した。 |
VALUE_CHANGED | センサー値が変更された。 |
VALUE_OVER_LIMIT | センサー値が閾値以上である。 |
VALUE_UNDER_LIMIT | センサー値が閾値以下である。 |
VALUE_WITHIN_RANGE | センサー値が範囲内である。 |
NODEF | 要因としては未定義である。 |
定義 | 内容 |
MAG_STD | マグネットセンサー付きのMAG (開閉センサーパル) 標準の形式。 |
AMB_STD | 温湿度センサー、照度センサー付きのAMB (環境センサーパル) 標準の形式。 |
MOT_STD | 加速度センサー付きのMOT (動作センサーパル) 標準の形式。 |
EVENT_ONLY | MOT 動作センサーパル, NOTICE (通知パル) などで、特定条件を要件としてイベントを送信した場合。 |
EX_CUE_STD | TWELITE CUE 標準の形式。パケットプロパティ、イベントが含まれます。 |
メンバー名 | 内容 |
| パケット送信を行う原因となるセンサーやタイマー。 |
|
|
PALセンサー共通データ
PALの各センサーのデータ構造体はすべてPalBase
を継承します。センサーデータの格納状況u32StoredMask
の情報が含まれます。
派生構造体に定義されるSTORE_COMP_MASK
とu32StoreMask
が一致すれば、全てのセンサーのデータが適切に解釈され、格納されていることになります。
TwePacketActStd
のデータ部。 (書式はApp_UARTと同一でDataAppUART
型を流用しています)
動作センサーパル(MOT)のセンサーデータ
※ パケット間の各サンプルの連続性を確認するには、パケットのシーケンス番号の抜けが無いことを確認してください。
TwePacketTwelite
クラスは、標準アプリApp_Tweliteの0x81コマンドを解釈したものです。
パケットデータ内の諸情報はparse()
実行後にDataTwelite
に格納されます。
spTwePacket
オブジェクトからTwePacketTwelite
オブジェクトを参照します。spTwePacket
にTwePacketTwelite
以外が格納されている場合は、未解釈のオブジェクトを戻します。
環境センサーパル(AMB)のセンサーデータ
App_Twelite データ
TwePacketTwelite
のデータ部分。
TwePacketAppUart
のデータ部。
開閉センサーパル(MAG)のセンサーデータ