# WM_StartMP

## 構文

      #include <nitro/wm.h>

      WMErrCode WM_StartMP(
              WMCallbackFunc  callback ,
              u16*            recvBuf ,
              u16             recvBufSize ,
              u16*            sendBuf ,
              u16             sendBufSize ,
              u16             mpFreq
      );

## 引数

callback | 非同期処理の状況通知、及び完了した際に呼び出されるコールバック関数を指定します。 このコールバックは割り込みハンドラ内から呼び出されます。
recvBuf | SDK が内部的に使用する受信データ格納バッファを指定します。 32バイト境界にあっている必要があります。 ARM7が直接データを書き出しますので、キャッシュに注意して下さい。
recvBufSize | 受信データ格納バッファのサイズを指定します。 WM_GetMPReceiveBuffterSizeの返り値より大きく、かつ64バイトの倍数である必要があります。
sendBuf | SDK が内部的に使用する送信データ格納バッファを指定します。 32バイト境界にあっている必要があります。 ARM7が直接データを読み書きしますので、キャッシュに注意して下さい。
sendBufSize | 送信データ格納バッファのサイズを指定します。 WM_GetMPSendBuffterSizeの返り値より大きく、かつ32バイトの倍数である必要があります。
mpFreq | 1フレームあたり何回のMP通信を行うかを指定します。 0 を指定すると大容量のデータ通信用に用意された連続通信モードになります。

## 返り値

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

## 説明

MP通信モードに入ります。WMがPARENTステート、もしくはCHILDステートの場合のみ実行可能です。 APIの戻り値がWM_ERRCODE_OPERATINGであった場合、MPモードへの移行処理が完了した後にコールバックが発生します。 WMのステートはそれぞれMP_PARENTステート、もしくはMP_CHILDステートに移行します。
また、MP通信によってデータを受信した場合や一回のMP通信が完了した場合にも、その都度コールバックが発生します。 MP通信モードに入った後、接続機器間でVブランク同期処理が自動的に行われるようになります。
毎フレームにmpFreqで指定した回数だけMP通信をしようと試みますが、通信状態によっては回数は保証されません。1フレームで可能なMP通信の回数の上限は、各通信パラメータによって変動します。
同様の機能を持つAPIとして、動作モードを詳細に設定できるWM_StartMPExがありますが、通常はWM_StartMPで十分です。

MP通信を行う子機の場合、WM_StartConnectで親機と接続した後に、あまり時間をあけずにWM_StartMPを呼び出すようにしてください。 接続してからWM_StartMPを呼び出すまでの間、子機は親機からの通信に対して応答を返しません。 この状態が親機のWM_SetLifeTimeで設定されたCAMライフタイムを超えると親機から切断されます。

また、MP通信パラメータを変更することを目的として、接続中にWM_EndMP関数とWM_StartMP関数を連続して呼び出すことは避けてください。 Sequential通信の情報など、MP通信の内部情報が初期化されるため、前後で通信の一貫性が取れなくなります。
MP通信中に、MP通信頻度などの特定のMP通信パラメータを変更する場合は、WM_SetMPFrequency, WM_SetMPParameterなどの関数を使用することが可能です。

## 参照

`WM_StartMPEx, WM_EndMP, WM_SetMPDataToPort, WM_SetPortCallback, WM_SetMPFrequency, WM_SetMPParameter`

## 履歴

2006/01/13 通信中のMP通信パラメータの変更に関する注記を追加
2005/07/29 Null 応答の発生条件の変更に伴う修正
2005/06/08 コールバックが割り込みハンドラから呼び出される旨を補足
2004/11/09 Null応答に関する説明を追記
2004/10/22 返り値の型を変更
2004/09/25 説明の加筆・修正
2004/08/18 引数に sendBuf, sendBufSize, mpFreq を追加
2004/08/11 MP通信完了時のコールバックについて追記
2004/08/02 構造体名の統一
2004/07/29 説明の追加等
2004/07/23 初版