osContInit.htm 4.52 KB
<HTML>

<HEAD>

<TITLE>HTML 文書</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>

<BODY>

<P>
<B><FONT FACE="Arial">osContInit(3P) <BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
osContInit
<P>
→ ゲームコントローラのための初期設定
<BR>

<P>
<B>構文<BR>
</B>
<P>
#include &lt;ultra64.h&gt;
<P>
s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus
*status);<BR>

<P>
<B>説明<BR>
</B>
<P>
osContInitは、コントローラを使用するための初期化関数です。コントローラ等で使用される内部変数の初期化などを行います。また、どのコントローラが接続されているのかをビットパターンbitpatternで返し、接続されているコントローラ、コントローラパックの状態を調べ、これをstatusに返します。
<P>
コントローラ、コントローラパック、EEP-ROMを使用する場合、必ず最初に一度この関数を呼ばなければなりません。
<P>
2回以上この関数を呼んでも意味がありません。2回目以降の呼び出しでは、何も行いません。つまり、コントローラの状態を調べることはできません。2回目以降、コントローラやコントローラパックの状態を調べたいときには、関数<A HREF="osContStartQuery.htm" >osContStartQuery</A>(3P)&osContGetQuery(3P)を使用してください。
<P>
statusに指し示される領域は、MAXCONTROLLERS個分のOSContStatus構造体が入るだけの大きさを確保しておく必要があります。メッセージ待ち行列mqはOS_EVENT_SIイベントに結びつけられたイニシャライズされたメッセージ待ち行列でなければなりません。この結合の作成方法についてはosSetEventMesg(3P)を参照してください。osContInitルーチンがメッセージ待ち行列mq上で待機状態になった後は、この待ち行列はシェアされてはいけません。コールが成功すれば0値が返され、そうでなければ-1が返されます。
<BR>

<P>
<PRE>
  typedef struct {
      u16     type;           /* コントローラの種類 */
      u8      status;         /* コントローラパックの状態 */
      u8      errno;
  }OSContStatus;
</PRE>
<BR>

<P>
コントローラの状態に応じて、status->typeには以下のビットが立てられます。
<BR>

<P>
<B>CONT_ABSOLUTE</B>
<P>
コントローラは内部にカウンタを含み、ジョイスティックのデータを絶対値で
送ります。通常のコントローラはこれになります。
<P>
<B>CONT_RELATIVE</B>
<P>
コントローラは内部にカウンタを含み、ジョイスティックのデータを相対値で
送ります。
<P>
<B>CONT_JOYPORT</B>
<P>
コントローラパックが接続可能なジョイポートが付いています。<BR>
<P>
<BR>

<P>
コントローラパックの状態に応じて、status->statusには以下のビットが立てられます。<BR>

<P>
<B>CONT_CARD_ON</B>
<P>
このビットはコントローラにコントローラパックが接続されているときにセットされ
ます。
<P>
<B>CONT_CARD_PULL</B>
<P>
コントローラのリセット後に、コントローラパックが抜かれたときに、このビッ
トがセットされます。
<P>
<B>CONT_ADDR_CRC_ER</B>
<P>
このビットはアドレスがジョイポートに正しく転送されなかったときにセット
されます。<BR>
<P>
<BR>

<P>
コントローラからの読み込みに異常があった場合、status->errorは以下の値を取ります。<BR>

<P>
<B>CONT_NO_RESPONSE_ERROR</B>
<P>
コントローラ反応なし。コントローラが挿し込まれていません。
<P>
<B>CONT_OVERRUN_ERROR</B>
<P>
コントローラがハードウェアのハンドリング能力よりも高いデータ転送速度で
データを送ったときにセットされます。この場合、データは無視してください。<BR>

<P>
接続されていないと認識されたコントローラ・ポート(bitpatternのビットが0、または、ステータスのエラーが0でない場合)は、コントローラのステータスのタイプ、および、ステータスの値は無効となります。そのため、まず最初にbitpatternを見て、接続されているかどうか判断してから、コントローラのタイプやステータスを見てください。
<P>
通常のコントローラを使用するアプリケーションの場合には、ステータスのタイプの、CONT_ABSOLUTEとCONT_JOYPORTのビットが立っていることを確認してください。
<P>
Nintendo64 OS Ver 2.0f以降では、コントローラのリセットは行いません。通常行う必要はないと思いますが、コントローラをリセットしたい場合には、<A HREF="osContReset.htm" >osContReset</A>(3P)を使用してください。
<BR>

<P>
<B><BR>
</B>
<P>
main()
<P>
{
<P>
OSMesgQueue intMesgQueue;
<P>
OSmesg intMesgBuf[1];
<P>
OSContStatus sdata[MAXCONTROLLERS]; <BR>

<P>
osCreateMesgQueue(&amp;intMesgQueue, intMesgBuf, 1);
<P>
osSetEventMesg(OS_EVENT_SI, &amp;intMesgQueue, dummyMessage);
<P>
osContInit(&amp;intMesgQueue, &amp;pattern, &amp;sdata[0]);
<P>
}<BR>

<P>
<B>参照<BR>
</B>
<P>
<A HREF="osContReset.htm" >osContReset</A>(3P), <A HREF="osContStartQuery.htm" >osContStartQuery</A>(3P),

<P>
<A HREF="osContStartReadData.htm" >osContStartReadData</A>(3P),
<A HREF="osContGetQuery.htm" >osContGetQuery</A>(3P),
<P>
<A HREF="osContGetReadData.htm" >osContGetReadData</A>(3P), <A HREF="osContSetCh.htm" >osContSetCh</A>(3P)
<BR>

</BODY>

</HTML>