2014年9月8日月曜日

TWE-Liteの子機間欠モードでは受信できない?

駅前駐輪場で、自転車の置き場所をよく忘れる。
忘れても大丈夫なように、携帯のToDoメモに置き場所をメモるようにしているのだが、急いでいるとメモるのを忘れてしまう。先週も、メモを忘れた上に置き場所を憶えてなくて、5分くらい駐輪場をさまよった。

で、ふと思った。
これってもしかして、TWE-Lite使ったら、解決するんじゃね?

早速、家にあったTWE-Liteで試作を開始したのだが、どうもだめっぽい。
自転車に装着する予定の子機は、大半の時間は用無しなので、電池節約のため間欠モードでなくてはならない。さもないと、数日で電池がなくなってしまう。
 東京コスモス電機の説明では、
間欠1秒モードは休止状態(スリープモード)になり、1秒毎に送受信を行うモードです。休止状態では送受信は行わず内蔵タイマーだけを動作させ節電を行います。
休止中は親機からの信号を受けることができません。
 と書いてあって、休止が解除されたタイミングでは受信できそうに書いてある。ところが、超簡単!TWE標準アプリで子機を間欠1秒モードにしてみると、親機の操作にまったく反応しない。
 ソースを見てみると、間欠モードでは受信処理を抑止している事がわかった。受信処理のコールバック関数 cbToCoNet_vRxEvent() では、間欠モードでは素通りで戻るようになっている。
void cbToCoNet_vRxEvent(tsRxDataApp *psRx) {
    //uint8 *p = pRx->auData;

    DBGOUT(3, "Rx packet (cm:%02x, fr:%08x, to:%08x)"LB, psRx->u8Cmd,
            psRx->u32SrcAddr, psRx->u32DstAddr);

    if (IS_APPCONF_ROLE_SILENT_MODE()
            || sAppData.u8Mode == E_IO_MODE_CHILD_SLP_1SEC
            || sAppData.u8Mode == E_IO_MODE_CHILD_SLP_10SEC) {
        // SILENT, 1秒スリープ, 10秒スリープでは受信処理はしない。
        return;
    }
 試しに、間欠1秒モードでも受信処理へ進むようにif分の条件を変えてみたが、結果は変わらず。そもそも、このコールバックさえ呼ばれていなかった。道は険しそうだ。
とりあえず、TWE-Lite標準アプリの子機間欠モードは送信専用で、受信処理ができないらしい。

可能か否かはまだ不明だが、目標としているのは、こんなアプリ。
  • 音と光で知らせる自転車発見器にする予定なので、ベースにはApp_Melodyを使う。
  • 子機は間欠モード。数秒おきに動作する。
  • タイマーで起動したら、数msの間だけ受信動作する。
  • 親機の信号を受信したらメロディーを鳴らしてLEDを光らせる。
  • メロディーが鳴っている間はスリープしない。
  • 親機は連続動作。ただし、必要な時だけ電源を入れる。 

0 件のコメント:

コメントを投稿