osPfsInit.htm 4.11 KB
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="mitu">
</HEAD>

<BODY>

<P>
<B><FONT FACE="Arial">osPfsInit(3P)<BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
osPfsInit   
<P>
→ コントローラパックのファイルハンドルの初期化<BR>

<P>
<B>構文<BR>
</B>
<P>
#include &lt;ultra64.h&gt;<BR>

<P>
<B>s32 osPfsInit(OSMesgQueue *mq,  OSPfs *pfs,  int controller_no);<BR></B>

<P>
<B>説明<BR>
</B>
<P>
(警告)この関数の代わりに<A HREF="osPfsInitPak.htm">osPfsInitPak</A>,(3P)をご使用ください。(1997年2月15日現在)
<BR>
<P>
コントローラパックには、PFSというファイルシステムが存在しています。このPFSファイルシステムは32バイト単位で分割・管理されています。現在のPFSファイルシステムの最大サイズは32Kバイトです。
<BR>
<P>
PFS関数でファイルシステムを制御するときに、OSPfs構造体pfsをファイルハンドルのように用いて、アクセスを行います。関数osPfsInit関数はこのOSpfs構造体を初期化します。controller_noはコントローラパックが挿し込まれているコントローラの番号(0〜3)を指定します。メッセージキューmqはOS_EVENT_SIと関連付けられたイニシャライズされたメッセージ待ち行列です。この関連付けの方法に関しては、<A HREF="osSetEventMesg.htm">osSetEventMesg</A>,(3P)を参照してください。関数osPfsInitの内部ではメッセージキューmqを待っていますので、このキューは共有されてはいけません。また、OSの低レベルでの同期の初期化のため、osPfsInitの呼び出しを行う前に、先に<A HREF="osContInit.htm">osContInit</A>,(3P)を呼び出しておく必要があります。
<BR>
<P>
関数の呼び出しに成功すれば、返り値として0が返されます。エラーが発生した場合には、以下に示すエラーコードのいずれかが返されます。
<BR>
<P>
<B>PFS_ERR_NOPACK</B>
<P>
指定したコントローラにコントローラパックが挿し込まれていません。あるいは、コントローラが挿し込まれていないなど、何らかのPIfエラーが発生しました。このどちらであるのかを調べる場合には、<A HREF="osContStartQuery.htm">osContStartQuery</A>,(3P)&<A HREF="osContGetQuery.htm">osContGetQuery</A>,(3P)などを使用してください。
<BR>
<P>
<B>PFS_ERR_NEW_PACK</B>
<P>
コントローラパックが別のコントローラパックに挿し替わっています。このまま、このコントローラパックを使用する場合には、<A HREF="osPfsInitPak.htm">osPfsInitPak</A>,(3P)を呼び出して、コントローラパックを初期化してください。
<BR>
<P>
<B>PFS_ERR_CONTRFAIL</B>
<P>
コントローラとのデータ転送の失敗です。関数の内部では、転送エラーが発生した場合、最大3回転送のやり直しを行っています。そのため、このエラーが発生することはあまりありません。このエラーが返る場合、コントローラが正しく接続されていないか、あるいは、コントローラパックかコントローラコネクタに異常がある可能性があります。
<BR>
<P>
<B>PFS_ERR_ID_FATAL</B>
<P>
ファイルシステムの初期化時に、ID領域が壊れており、修正を試みましたが失敗しました。コントローラパックが故障しているか、きちんと接続できていないか、あるいは、SRAMを持たない周辺機器がささっています。
<BR>
<P>
<B>PFS_ERR_DEVICE</B>
<P>
ファイルシステム初期化時に、ページ0にあるID領域中のデバイスIDをチェックしたところ、コントローラパックのデバイスIDではありませんでした。つまり、コントローラパック以外の機器がコントローラに挿さっています。
<BR>
<PRE WIDTH=132>
<FONT SIZE=6>
</FONT><FONT SIZE=4 FACE="MS ゴシック">
main()
{
        OSMesgQueue     intMesgQueue;
        OSMesg          intMesgBuf[1];
        OSContStatus    sdata[MAXCONTROLLERS];
        u8              cont_pattern, pak_pattern;
        OSPfs           pfs[MAXCONTROLLERS];

        osCreateMesgQueue(&intMesgQueue, intMesgBuf, 1);

        osSetEventMesg(OS_EVENT_SI, &intMesgQueue, dummyMessage);
        osContInit(&intMesgQueue, &cont_pattern, &sdata[0]);
        osPfsIsPlug(&intMesgQueue, &pak_pattern);
        for (i = 0; i &lt; MAXCONTROLLERS; i++) {
                if (pak_pattern & (1&lt;&lt;i)){
                ret = osPfsInit(&pifMesgQueue, &pfs[i], i);
                }
                if ((ret == PFS_ERR_ID_FATAL) ||(ret == PFS_ERR_DEVICE))
                pak_pattern &= ~(1&lt;&lt;i);
        }
}
</FONT></PRE>
<P>
<B>参照<BR>
</B>
<A HREF="osContInit.htm">osContInit</A>(3P),
<A HREF="osContStartQuery.htm">osContStartQuery</A>(3P),
<A HREF="osContGetQuery.htm">osContGetQuery</A>(3P),
<A HREF="osPfsInitPak.htm">osPfsInitPak</A>(3P),
</BODY>

</HTML>