最適な出力のために、Google Chrome(15以降)または Microsoft Edge(79以降)を推奨いたします。
2024-09-06 現在コールバック関数
各種コールバック関数
アプリケーションの記述を行うコールバック関数です。コールバックはシステム(ライブラリ)から呼び出されるという意味です。ユーザがいくつかのコールバック関数を定義することでシステムの振る舞いを記述します。
以下のコールバック関数は必須定義です。
それ以外の関数は定義しない場合は、何も実行しない空の関数が替わりにリンクされます。
通常のコールバック呼び出し順序
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
を参照してください。
1 - setup()
初期化処理
コード実行の初期に呼び出され、初期化コードを記述します。
TWENETの初期化は setup()
関数が終了した後にも実行されます。多くの処理はTWENETが終了した後に実行するようになっているため、ここでは初期化以外の処理を行わないようにしてください。
注意すべき事項を以下に列挙します。
- スリープ
the_twenet.sleep()
の実行はできません。初期化後速やかにスリープしたいときはbegin()
関数内に最初のスリープ処理を記述してください。 delay()
関数は後述の処理に置き換えられます。この場合、パラメータのms
はミリ秒を指定するものではありません。
static inline void delay(uint32_t ms) {
volatile uint32_t ct = ms * 4096;
while (ct > 0) {
--ct;
}
}
2 - begin()
初期化処理(TWENET初期化後)
loop()
関数の初回コールの手前で一度だけ呼び出されます。TWENET の初期化は終了しているのでsetup()
のような制約を考慮する必要はありません。
主に下記のような場面で使用します。
- 始動メッセージの表示
- テスト用のコードを記述
- 始動直後のスリープ遷移
setup()
で不都合がある処理(無線パケット処理・タイマー動作など)
3 - loop()
ループ処理
アプリケーションのメインループです。ループ終了後はCPUがDOZEモードに遷移し低消費電流で次の割り込みを待ちます。
アクトでは、ほとんどの処理がこのループ内に記述されます。
4 - wakeup()
スリープ起床後の処理
スリープから起床したときにloop()
に移行する前に呼ばれ、スリープ復帰後の初期化処理や復帰状態によって処理を分岐するための手続きを含めます。
センサーの読み出しなどの処理のみでloop()
での処理がないときは、この関数内で再びスリープを実行できます。
5 - init_coldboot()
初期化処理(ペリフェラル初期化前)
ペリフェラルAPIも初期化もされていない、コード実行の再初期に呼び出されます。
6 - init_warmboot()
スリープ復帰後の処理(ペリフェラル初期化前)
スリープ復帰後、ペリフェラルAPIが初期化されない再初期に呼び出されます。
この関数では割り込み要因の検出を行うことができます。
7 - 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()
を追加しました。
8 - 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
に対してはイベントコールバック関数を呼び出さない)