# 送信

単純ネットワークでの送信手続きは、[tsTxDataApp](/twelite-net-api-ref/gou-zao-ti/tstxdataapp.md) 構造体を確保し、この構造体に送信に必要な情報を格納します。

1. ローカル変数として tsTxDataApp 構造体を確保し、構造体全体をゼロクリアする。
2. 送信したいデータを .auData にコピーする（ペイロード）。
3. ペイロードの格納バイト数を .u8Len に格納する。
4. .u32DstAddr を格納する（宛先）
5. .u32SrcAddr を格納する（送り元のアドレス）
6. その他送信オプションを指定します。
7. [ToCoNet\_bMacTxReq](/twelite-net-api-ref/twelite-net-guan-shu/toconet_bmactxreq.md)() を実行します。
8. TWENET 内での送信処理が終了すると [cbToCoNet\_TxEvent](/twelite-net-api-ref/krubakku/cbtoconet_vtxevent.md)() が実行されます。

{% hint style="warning" %}
完了イベントが消滅することは例外的ですが、タイムアウトを設け例外処理するようにしてください。 tsTxDataApp 構造体中で遅延や再送遅延が極端に長く設定されていないなら、通常 100ms も必要としません。
{% endhint %}

### サンプルコード

```c
static int16 i16TransmitIoData() {
  tsTxDataApp sTx;
  memset(&sTx, 0, sizeof(sTx)); // ゼロクリア
  uint8 *q = sTx.auData;

  // ペイロードを構成
  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; // 失敗
  }
}
```

{% hint style="info" %}
[S\_OCTET](/twelite-net-api-ref/twelite-net-makuro/utils.h.md#s_octet-x)() [S\_BE\_WORD](/twelite-net-api-ref/twelite-net-makuro/utils.h.md#s_be_word-x-s_le_word-x)() [S\_BE\_DWORD](/twelite-net-api-ref/twelite-net-makuro/utils.h.md#s_be_word-x-s_le_word-x)() マクロは、uint8 \*q をペイロード格納領域のポインタとして宣言しておいた時に使う 1,2,4 バイト格納マクロです。
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sdk.twelite.info/twelite-net-api-expl/nettowkunitsuite/netto/song-xin.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
