static int16 i16TransmitIoData() {
tsTxDataApp sTx;
memset(&sTx, 0, sizeof(sTx)); // 必ずセロクリアする
uint8 *q = sTx.auData; // S_OCTET() などのマクロ用
// ペイロードを構成
S_OCTET(sAppData.u8AppIdentifier);
S_BE_WORD(sAppData.sIOData_now.u16Volt);
...
// 送信
sTx.u8Len = q - sTx.auData; // パケット長
sTx.u8Cmd = TOCONET_PACKET_CMD_APP_USER_IO_DATA; // パケット種別
// 送信する
sTx.u32DstAddr = TOCONET_MAC_ADDR_BROADCAST; // ブロードキャスト
sTx.u8Retry = 0x81; // 1回再送
// フレームカウントとコールバック識別子の指定
sAppData.u16TxFrame++;
sTx.u8Seq = (sAppData.u16TxFrame & 0xFF);
sTx.u8CbId = sTx.u8Seq;
/* MAC モードでは細かい指定が可能 */
sTx.bAckReq = FALSE;
sTx.u32SrcAddr = sToCoNet_AppContext.u16ShortAddress;
sTx.u16RetryDur = 4; // 再送間隔[ms]
sTx.u16DelayMax = 16; // 送信開始タイミングにブレを作る(最大16ms)
// 送信API
if (ToCoNet_bMacTxReq(&sTx)) {
// 成功(処理が終わると cbToCoNet_vTxEvent() が発生する
return sTx.u8CbId; // 成功
} else {
// 失敗
return -1; // 失敗
}
}