osContGetQuery.htm
3.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>
<BODY>
<P>
<B><FONT FACE="Arial">osContGetQuery(3P) <BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
osContStartQuery, osContGetQuery
<P>
→ ゲームコントローラのステータスとタイプの獲得<BR>
<P>
<B>構文<BR>
</B>
<P>
#include <ultra64.h>
<P>
s32 osContStartQuery(OSMesgqueue *mq);
<P>
void osContGetQuery(OSContStatus *status);<BR>
<P>
<B>説明<BR>
</B>
<P>
osContStartQueryコールはゲームコントローラのステータスとタイプを獲得するためのクエリーコマンドをゲームコントローラに対して発行します。そして、osContGetQueryコールはゲームコントローラのステータスとタイプをstatusに返します。ユーザーはOSContStatusタイプのMAXCONTROLLERS構成のための十分大きなメモリブロックを供給しなければいけません。メッセージ待ち行列mqはOS_EVENT_SIに結びつけられた初期化されたメッセージ待ち行列でなければなりません。この結合の生成方法についてはosSetEventMesg(3P)を参照してください。クエリーコマンドがゲームコントローラからの返値を引っ張ってくることに、およそ2ミリ秒かかるでしょう。従って、メッセージ待ち行列mqでのosRecvMesgコールはこのイベントのために待機しておくために使用されます。
<BR>
<P>
ゲームコントローラのタイプは以下に定義される内の1つにすることができます。
<BR>
<P>
<B>CONT_ABSOLUTE </B>
<P>
コントローラは内部にカウンタを含み、絶対値でジョイスティックのデータを<B>
</B>送ります。
<P>
<B>CONT_RELATIVE</B>
<P>
コントローラは内部にカウンタを含み、相対値でジョイスティックのデータを<B>
</B>送ります。
<P>
<B>CONT_JOYPORT</B>
<P>
コントローラは交換可能なメモリカードを接続するためのジョイポートを持ち<B>
</B>ます。<BR>
<P>
ゲームコントローラのステータスはメモリカードのために使用され、以下に定義されたものの1つにすることができます。
<BR>
<P>
<B>CONT_CARD_ON</B>
<P>
このビットはゲームコントローラにメモりカードが接続されているときにセッ<B>
</B>トされます。
<P>
<B>CONT_CARD_PULL</B>
<P>
ゲームコントローラがリセットされた後、もしメモりカードが抜かれた場合、こ<B>
</B>のビットがセットされます。
<P>
<B>CONT_ADDR_CRC_ER</B>
<P>
このビットはジョイポートに正確に転送されなかったときにセットされます。
<BR>
<P>
ゲームコントローラからのエラー返値は以下のようになります。
<P>
<B>CONT_NO_RESPONSE_ERROR</B>
<P>
コントローラ反応無し。<BR>
<P>
<B>CONT_OVERRUN_ERROR</B>
<P>
コントローラがハードウェアのハンドリング限界より高いデータ転送速度でデ<B>
</B>ータを送ったときにセットされます。<BR>
<P>
ユーザーはCONT_OVERRUN_ERRORを検出したときには、データを無視すべきです。
<BR>
<P>
<B>例<BR>
</B>
<P>
main()
<P>
{
<P>
OSMesgQueue intMesgQueue;
<P>
OSMesg intMesgBuf[NUM_MESSAGE];
<P>
OSContStatus sdata[MAXCONTROLLERS]; <BR>
<P>
osCreateMesgQueue(&intMesgQueue, intMesgBuf, NUM_MESSAGE);
<P>
osSetEventMesg(OS_EVENT_SI, &intMesgQueue, dummyMessage);
<P>
osContInit(&intMesgQueue, &pattern, &sdata[0]);
<P>
osContStartQuery(&intMesgQueue);
<P>
・
<P>
・
<P>
osRecvMesg(&intMesgQueue, &actualMesg, OS_MESG_BLOCK);
<P>
osContGetQuery(&sdata[0]);
<P>
}<BR>
<P>
<B>参照<BR>
</B>
<P>
<A HREF="osContInit.htm" >osContInit</A>(3P), <A HREF="osContReset.htm" >osContReset</A>(3P),
<P>
<A HREF="osContStartReadData.htm" >osContStartReadData</A>(3P),
<A HREF="osContGetReadData.htm" >osContGetReadData</A>(3P),
<P>
<A HREF="osContSetCh.htm" >osContSetCh</A>(3P)<BR>
</BODY>
</HTML>