コールバック関数
アプリケーションの記述を行うコールバック関数です。コールバックはシステム(ライブラリ)から呼び出されるという意味です。ユーザがいくつかのコールバック関数を定義することでシステムの振る舞いを記述します。
以下のコールバック関数は必須定義です。
setup()
loop()
それ以外の関数は定義しない場合は、何も実行しない空の関数が替わりにリンクされます。
init_coldboot()
↓ (TWENET内部処理:初期化1)
setup()
↓(TWENET内部処理:初期化2)
begin() --- 初回のみ
↓
loop() <--+
↓ |イベント処理、ビヘイビア処理
CPU DOZE -+
正確なふるまいを参照したい方はソースコードmwx_appcore.cpp
を参照してください。
the_twelite.sleep()
↓ sleeping...
init_warmboot()
↓ (TWENET内部処理:初期化3)
wakeup()
↓(TWENET内部処理:初期化4)
loop() <--+
↓ |イベント処理、ビヘイビア処理
CPU DOZE -+
正確なふるまいを参照したい方はソースコードmwx_appcore.cpp
を参照してください。
setup()
コード実行の初期に呼び出され、初期化コードを記述します。
TWENETの初期化は setup()
関数が終了した後にも実行されます。多くの処理はTWENETが終了した後に実行するようになっているため、ここでは初期化以外の処理を行わないようにしてください。
注意すべき事項を以下に列挙します。
スリープthe_twenet.sleep()
の実行はできません。初期化後速やかにスリープしたいときはbegin()
関数内に最初のスリープ処理を記述してください。
delay()
関数は後述の処理*に置き換えられます。この場合、パラメータのms
はミリ秒を指定するものではありません。\
* delay()
の代替処理
static inline void delay(uint32_t ms) {
volatile uint32_t ct = ms * 4096;
while (ct > 0) {
--ct;
}
}
begin()
loop()
関数の初回コールの手前で一度だけ呼び出されます。TWENET の初期化は終了しているのでsetup()
のような制約を考慮する必要はありません。
主な使い方は、
始動メッセージの表示
テスト用のコードを記述
始動直後のスリープ遷移
setup()
で不都合がある処理(無線パケット処理・タイマー動作など)
loop()
アプリケーションのメインループです。ループ終了後はCPUがDOZEモードに遷移し低消費電流で次の割り込みを待ちます。
アクトの記述では、ほとんどの処理がこのループ内に記述されます。
wakeup()
スリープから起床したときにloop()
に移行する前に呼ばれ、スリープ復帰後の初期化処理や復帰状態によって処理を分岐するための手続きを含めます。
init_coldboot()
通常は使用しません。
ペリフェラルAPIも初期化もされていない、コード実行の再初期に呼び出されます。
init_warmboot()
通常は使用しません。
スリープ復帰後、ペリフェラルAPIが初期化されない再初期に呼び出されます。
on_rx_packet()
受信パケットを受け取ります。
void on_rx_packet(mwx::packet_rx& pkt, bool_t &b_handled)
無線パケットを受信したときにpacket_rxとして pkt
にデータが格納された状態で、本関数が MWX ライブラリ内から呼び出されます。アプリケーション中で本関数が定義されない場合は何もしない weak 関数がリンクされます。
本関数中で b_handled
に true をセットすると、MWX ライブラリに受信パケットがアプリケーション内で処理されたことを伝達します。処理済みとした場合、不要な処理を抑制します。(the_twelite.receiver
の処理を行わない)
ビヘイビアを用いる場合は、ビヘイビア中のコールバック関数を用いてください。
the_twelite.receiver
は推奨されません。
従来loop()
内での記述を意図して the_twelite.receiver
による処理を行っていましたが、キューによる遅延処理である点で原理的に取りこぼしが発生し、また記述も煩雑になりがちである点から on_rx_packet()
を追加しました。
on_tx_comp()
送信完了時に呼び出されます。
void on_tx_comp(mwx::packet_ev_tx& ev, bool_t &b_handled)
無線パケットの送信が終了したときにpacket_ev_tx
として ev
にデータが格納された状態で、本関数が MWX ライブラリ内から呼び出されます。アプリケーション中で本関数が定義されない場合は何もしない weak 関数がリンクされます。
ev.u8CbId
は送信時のID、ev.bStatus
は送信の成功(1)または失敗(0)を示すフラグです。
本関数中で b_handled
に true をセットすると、MWX ライブラリに受信パケットがアプリケーション内で処理されたことを伝達します。処理済みとした場合、不要な処理を抑制します。(the_twelite.app
, .board
, .settings
に対してはイベントコールバック関数を呼び出さない)