# WM_SetMPDataToPort

## 構文

      #include <nitro/wm.h>

      WMErrCode WM_SetMPDataToPort(
              WMCallbackFunc  callback ,
              const u16*      sendData ,
              u16             sendDataSize ,
              u16             destBitmap ,
              u16             port ,
              u16             prio
      );

## 引数

callback | 非同期処理が完了した時に呼び出されるコールバック関数を指定します。 このコールバックは割り込みハンドラ内から呼び出されます。
sendData | 送信予約するデータへのポインタを指定します。 このデータの実体は強制的にキャッシュストアされる点に注意して下さい。
sendDataSize | 送信予約するデータのサイズを指定します。
destBitmap | 送信先子機のAIDを示すビットマップを指定します。(親機のみ有効)
port | データを送信するポート番号を指定します。0 〜 15 の値を指定して下さい。
prio | データ送信の優先度を指定します。0 (最高) 〜 3 (最低) の値を指定して下さい。

## 返り値

WMErrCode列挙型の処理結果を返します。

## 説明

MPで特定のポートに送信するデータをセットします。WMがMP_PARENTステートもしくはMP_CHILDステートの場合に実行可能です。
APIの戻り値がWM_ERRCODE_OPERATINGであった場合、MPにてデータ送信処理が完了した後にコールバックが発生します。コールバックが呼び出されるまでは引数sendDataの指しているバッファを書き換えてはいけません。他の無線APIの非同期関数と異なり、コールバックを待たずにこのAPIを連続して呼び出した際にcallbackにそれぞれ異なる関数ポインタを指定しても、正常に処理されます。 但しコールバックを待たずに連続して呼び出せる回数は全優先度を合わせて32回までという制限があり、32回を越えて連続で呼び出すと `WM_ERRCODE_SEND_QUEUE_FULL` がコールバックに返り、失敗します。

このAPIはargにNULLを指定したWM_SetMPDataToPortEx( ) の呼び出しと同等です。

## 注意

引数に渡したデータ(sendData) は内部で強制的にキャッシュストアされます。キャッシュのトラブルを回避するには、32バイト境界に揃ったデータを渡す必要があります。
注意点などの詳細は「ワイヤレス通信ライブラリ解説 (AboutWirelessManager.pdf)」を参照してください。

## 参照

`WM_StartMP, WM_EndMP, WM_SetMPDataToPortEx, WM_SetPortCallback, WMPort`

## 履歴

2009/10/27 コールバックを待たずに呼び出せる回数についての説明修正
2008/12/17 引数に渡したデータが内部で強制的にキャッシュストアされる点について注意を追記
2005/07/08 非同期に連続して呼び出すことができる制限回数を追記
2005/06/08 コールバックが割り込みハンドラから呼び出される旨を補足
2005/03/02 port引数について指定可能範囲を追記
2004/10/22 返り値の型を変更
2004/09/25 説明の加筆・修正
2004/09/09 WM_SetMPDataToPortEx についての記述を追加
2004/08/11 初版