static tsToCoNet_NwkLyTr_Config sNwkLayerTreeConfig;
static tsToCoNet_Nwk_Context* pContextNwk;
...
} else {
//
tsTxDataApp sTx;
memset(&sTx, 0, sizeof(sTx)); // 必ず0クリアしてから使う!
uint8 *q = sTx.auData;
sTx.u32SrcAddr = ToCoNet_u32GetSerial();
if (IS_APPCONF_OPT_TO_ROUTER()) {
// ルータがアプリ中で一度受信して、ルータから親機に再配送
sTx.u32DstAddr = TOCONET_NWK_ADDR_NEIGHBOUR_ABOVE;
} else {
// ルータがアプリ中では受信せず、単純に中継する
sTx.u32DstAddr = TOCONET_NWK_ADDR_PARENT;
}
// ペイロードの準備
S_OCTET('T');
S_OCTET(sAppData.sFlash.sData.u8id);
S_BE_WORD(sAppData.u16frame_count);
// センサ固有のデータ
memcpy(q,pu8Data,u8Len);
q += u8Len;
sTx.u8Cmd = 0; // 0..7 の値を取る。パケットの種別を分けたい時に使用する
sTx.u8Len = q - sTx.auData; // パケットのサイズ
sTx.u8CbId = sAppData.u16frame_count & 0xFF; // TxEvent で通知される番号、送信先には通知されない
sTx.u8Seq = sAppData.u16frame_count & 0xFF; // シーケンス番号(送信先に通知される)
sTx.u8Retry = sAppData.u8Retry;
if (ToCoNet_Nwk_bTx(pNwk, &sTx)) {
ToCoNet_Event_SetState(pEv, E_STATE_APP_WAIT_TX);
} else {
// ...失敗した(スリープ処理)
ToCoNet_Event_SetState(pEv, E_STATE_SLEEP);
}