「超簡単!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 件のコメント:
コメントを投稿