2014年9月9日火曜日

TWE-Liteで子機間欠受信を有効にする方法

最初は無理かと思ったけど、だんだんわかってきた気がする。
「超簡単!TWE標準アプリ」を子機間欠モードで受信に対応させるには、若干のソース変更が必要。

無線回路アイドル時に受信回路を有効化する


 cbAppColdStart()で子機間欠モードの場合に
sToCoNet_AppContext.bRxOnIdle = FALSE;
としている部分を、
sToCoNet_AppContext.bRxOnIdle = TRUE;
に変える。

 SDKマニュアル中のbRxOnIdle の説明には「受信時は常に受信電流を消費します。」という恐ろしいことが書いてあるが、テスターで測った感じだと、間欠動作の場合はbRxOnIdle =TRUE にしてもスリープ時に17mAも電流を消費するようなことは無い。デジタルテスターの20mAレンジでは、スリープ時の電流消費は0mAとしか表示されず、連続動作に比べたら誤差の範囲。スリープ解除のタイミングだけ、連続動作並みに消費電流が増える。

受信イベントのコールバック関数で受信処理をスキップさせない

cbToCoNet_vRxEvent()に、子機間欠モードの受信処理を抑制するif文が存在する。これをコメントアウトする。
例えば、1秒間欠モードの受信を有効にするなら、 こんな感じ。
--- a/Master/Source/Master.c
+++ b/Master/Source/Master.c
@@ -989,7 +989,9 @@ void cbToCoNet_vRxEvent(tsRxDataApp *psRx) {
             psRx->u32SrcAddr, psRx->u32DstAddr);

     if (IS_APPCONF_ROLE_SILENT_MODE()
+#ifndef USE_RX_ON_SLP_1SEC
             || sAppData.u8Mode == E_IO_MODE_CHILD_SLP_1SEC
+#endif
             || sAppData.u8Mode == E_IO_MODE_CHILD_SLP_10SEC) {
         // SILENT, 1秒スリープ, 10秒スリープでは受信処理はしない。
         return;

 手元の改造ソースでは、vProcessEvCoreSlp()を変更して、状態遷移を数TICK遅らせてスリープまでの時間稼ぎをしているけど、これが必須か否かは未確認。まあ、受信したからには何か処理をするだろうから、必須でなくともイベント追加したりすると思う。

0 件のコメント:

コメントを投稿