# NNS_McsRegisterRecvCallback

## 構文

      #include <nnsys/mcs.h>

      void NNS_McsRegisterRecvCallback(
               NNSMcsRecvCBInfo*   pInfo,
               u16                 channel,
               NNSMcsRecvCallback  cbFunc,
               u32                 userData);

## 引数

pInfo | コールバック関数の情報を保持する構造体へのポインタ。
channel | ストリームを識別するための値。0〜0x3FFFの値を指定できます。0x4000〜0x7FFFはTWL-Systemアプリケーション用、0x8000〜0xFFFFはmcsシステム用に予約しています。
cbFunc | 登録するコールバック関数。
userData | ユーザー任意の値。

## 返り値

なし。

## 説明

データを受信したときにコールバックされる関数を登録します。

cbFuncの型`NNSMcsRecvCallback`は次のように定義されています。登録する関数の定義は次のとおりです。

>     typedef void (*NNSMcsRecvCallback)(
>                        const void* recv,
>                        u32         recvSize,
>                        u32         userData,
>                        u32         offset,
>                        u32         totalSize);

recv | 受信したデータの一部あるいは全部を格納しているバッファへのポインタ。
recvSize | recvによって示されるバッファに格納されているデータのサイズ。
userData | `NNS_McsRegisterRecvCallback()`の引数userDataで指定した値。
offset | 受信したデータの全部がrecvによって示されるバッファに格納されている場合は0。 受信したデータの一部が格納されている場合は、受信したデータ全体に対する0を基準としたオフセット位置。
totalSize | 受信したデータの全体のサイズ。

受信したデータが大きい場合は、複数回に分けてコールバック関数が呼び出されます。このとき、recvが指すバッファには一部のデータが格納され、offsetには格納されているデータの全体からのオフセット値が入ります。totalSizeには、常に受信したデータの全体のサイズが入ります。

登録するコールバック関数内ではデータの送受信を行わないでください。 また、割り込みが禁止されている場合があるため、割り込み待ちループも行わないでください。

## 参照

`NNS_McsRegisterStreamRecvBuffer, NNS_McsUnregisterRecvResource`

## 履歴

2006/08/20 NITRO-SystemをTWL-Systemに変更。
2004/11/29 コールバック関数の解説を追加。
2004/10/08 引数channelの解説を追加。また、参照にNNS_McsUnregisterRecvResourceを追加。
2004/08/26 引数channelの型の変更。
2004/06/01 初版