osContGetReadData.htm
2.97 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
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0j">
</HEAD>
<BODY>
<P>
<B><FONT FACE="Arial">osContGetReadData(3P) <BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
osContStartReadData, osContGetReadData
<P>
→ コントローラからのデータの獲得<BR>
<P>
<B>構文<BR>
</B>
<P>
#include <ultra64.h>
<P>
s32 osContStartReadData(OSMesgQueue *mq);
<P>
void osContGetReadData(OSContPad *pad);<BR>
<P>
<B>説明<BR>
</B>
<P>
osContStartReadDataコールはコントローラの状態を獲得するためのリードコマンドを発行し、osContGetReadDataコールは3Dスティックとボタンの状態をOSContPad構造体のpadに返します。ユーザーはMAXCONTROLLERS個のOSContPad構造体に十分なメモリブロックをあらかじめ用意しておかなければなりません。メッセージキューmqはOS_EVENT_SIイベントに関連づけられた初期化済みのメッセージ待ち行列でなければなりません。メッセージキューに関してはosSetEventMesg(3P)を参照してください。リードデータコマンドを発行してからゲームコントローラデータを読み込むのにおよそ2msかかります。したがって、osRecvMesgコールを用いて,このイベントに対して待機しておくようにセットすると良いでしょう。
<BR>
<P>
ジョイスティックデータはsigned charで、-80〜80までの範囲です。ボタンの状態は、下記の定数のORで返ってきます。
<BR>
<P>
<B>START_BUTTON</B> STARTボタン
<P>
<B>A_BUTTON</B> Aボタン
<P>
<B>B_BUTTON</B> Bボタン
<P>
<B>U_CBUTTONS</B> Cボタンユニット上
<P>
<B>D_CBUTTONS</B> Cボタンユニット下
<P>
<B>L_CBUTTONS</B> Cボタンユニット左
<P>
<B>R_CBUTTONS</B> Cボタンユニット右
<P>
<B>U_JPAD</B> 十字キー上
<P>
<B>D_JPAD</B> 十字キー下
<P>
<B>L_JPAD</B> 十字キー左
<P>
<B>R_JPAD</B> 十字キー右
<P>
<B>Z_TRIG</B> Zトリガーボタン
<P>
<B>L_TRIG</B> Lトリガーボタン
<P>
<B>R_TRIG</B> Rトリガーボタン <BR>
<P>
ゲームコントローラからのエラー返値は以下のようになります。 <BR>
<P>
<B>CONT_NO_RESPONSE_ERROR</B>
<P>
コントローラ反応無し
<P>
<B>CONT_OVERRUN_ERROR</B>
<P>
コントローラが本体の転送レートよりも速くデータ送ったときにセットされま
す。つまり本体はコントローラの値を正しく読めていません。<BR>
<P>
CONT_OVERRUN_ERRORを検出したときはデータを無視してください。
<BR>
<BR>
<BR>
<P>
<B>例<BR>
</B>
<P>
main()
<P>
{
<P>
OSMesgQueue intMesgQueue;
<P>
OSMesg intMesgBuf[NUM_MESSAGE];
<P>
OSContStatus sdata[MAXCONTROLLERS];
<P>
OSContPad rdata[MAXCONTROLLERS];<BR>
<P>
osCreateMesgQueue(&intMesgQueue, intMesgBuf, NUM_MESSAGE);
<P>
osSetEventMesg(OS_EVENT_SI, &intMesgQueue, dummyMassage);
<P>
osContInit(&intMesgQueue, &pattern, &sdata[0]);
<P>
osContStartReadData(&intMesgQueue);
<P>
・
<P>
・
<P>
osRecvMesg(&intMesgQueue, &actualMesg, OS_MESG_BLOCK);
<P>
osContGetReadData(&rdata[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="osContStartQuery.htm" >osContStartQuery</A>(3P), <A HREF="osContSetCh.htm" >osContSetCh</A>(3P)
<BR>
</BODY>
</HTML>