PlayStation 2のプログラミング:コントローラーライブラリ-パート2

画像

前回の記事では、EEモード専用のモジュールについて説明しました。 この章では、かなり複雑で理解しにくいが、多くの機会を与えるモジュールについて説明します



このモジュールは、ジョイスティックを1つだけ使用するゲームでの使用をお勧めします。

マルチタップのサポートはありますが、このモジュールについては説明しません。



特別なlibpad2ライブラリがあります。 このライブラリは、Emotion Engineコプロセッサー(EEの略)および入出力プロセッサー(IOP)を使用します。







現時点では、通常のデジタルコントローラーDualShockおよびDualShock 2にのみ使用できます。

EEを接続するためのライブラリ:「libdbc.a」および「libpad2.a」。 ヘッダーファイル:「libdbc.h」および「libpad2.h」。

IOPを接続するためのモジュール:「sio2man.irx」(バージョン2.4以降)、「sio2d.irx」、「dbcman.irx」、コントローラードライバーモジュール(***。Irx)。



IOPは、EEアプリケーションのロード後にsceSifLoadModule()関数を使用してロードされます。

モジュールは仮想ソケットを使用します。



次のモジュールは、コントローラードライバーの接続に使用されます。



モジュール名 デジタルコントローラー デュアルショック デュアルショック2
ds1u.irx サポート サポート DualShockエミュレーション
ds2u.irx サポート サポート サポート
dgco.irx サポート デジタルコントローラーエミュレーション デジタルコントローラーエミュレーション
ds1o.irx 互換性がない サポート DualShockエミュレーション
ds2o.irx 互換性がない 互換性がない サポート


特定のコントローラーを接続すると、ドライバーが自動的に切り替わります。



また、ロードされるドライバーの数は、使用されるコントローラーの数と一致する必要があります。



どうやってやるの?





各コントローラーには独自のドライバーがあります。

コントローラ1の場合:ds1u_s1.irx、ds2u_s1.irx、dgco_s1.irx、ds1o_s1.irx、ds2o_s1.irx。

コントローラー2の場合:ds1u_d.irx、ds2u_d.irx、dgco_d.irx、ds1o_d.irx、ds2o_d.irx。

2番目のコントローラーを使用することはお勧めできません。



モジュール手順





sceSifLoadModule()-sio2man.irx、sio2d.irx、dbcman.irxを同じシーケンスでロードするために使用されます。

sceDbcInit()およびscePad2Init()-libdbcおよびlibpad2を初期化するために使用

scePad2CreateSocket()-コントローラーを操作するためのソケットを作成するために使用されます。 最初のパラメーターはポート番号(または最初のコントローラーの場合はNULL)で、2番目はデータが送信される64バイトのプロファイルです。

scePad2ButtonProfile()-ソケットからデータを読み取り、バッファに渡します。 パラメータは、ソケットとバッファです。

scePad2Read()-ボタンデータを読み取ります。 パラメーターは同じです。

scePad2GetState()-コントローラーのステータスを確認します。 パラメーターは同じです。

scePad2DeleteSocket()-ソケットを削除します。 パラメータはソケット番号です。

scePad2End()およびsceDbcEnd()-libpad2およびlibdbcライブラリをそれぞれ終了します。



最も単純なプログラムコードは次のようになります。



<br>main(){<br> int socket_number;<br> unsigned char rdata[32];<br> unsigned char profile[10];<br> u_long128 pad_buff[SCE_PAD2_DMA_BUFFER_MAX]__attribute__((aligned(64)));<br> sceDbcInit();<br> scePad2Init();<br> socket_number = scePad2CreateSocket( NULL, pad_buff );<br> while (1) {<br> scePad2ButtonProfile( socket_number, profile );<br> scePad2Read( socket_number, rdata );<br> // <br> }<br> scePad2DeleteSocket( socket_number );<br> scePad2End();<br> sceDbcEnd();<br>}<br> <br> * This source code was highlighted with Source Code Highlighter .







コントローラープロファイル





プロファイルには、コントローラーの機能、つまり 接続されているコントローラーに関するすべての情報、存在するボタンと番号。



プロファイルの各ビットは、コントローラーの個々の機能を説明しています。 コントローラーに必要な機能がある場合、ビットは1と0に設定されます-サポートがないためです。



プロファイルは、Sonyが将来拡張したかった4バイトの情報です。



バイト ビット ボタン 割り当てられたビット数
0 0 選択してください 1
1 L3(左スティックをクリック) 1
2 R3(右スティックをクリック) 1
3 開始する 1
4 上矢印 1
5 右矢印 1
6 下矢印 1
7 左矢印 1
1 8 L2 1
9 R2 1
10 L1 1
11 R1 1
12 トライアングル 1
13 サークル 1
14 X 1
15 スクエア 1
2 16 アナログモード:

Xによって翻訳された右スティック
8
17 アナログモード:

Yが翻訳した右スティック
8
18 アナログモード:

Xに翻訳された左スティック
8
19 アナログモード:

Yに翻訳された左スティック
8
20 アナログモード:

右矢印
8
21 アナログモード:

左矢印
8
22 アナログモード:

上矢印
8
23 アナログモード:

下矢印
8
3 24 アナログモード:

トライアングル
8
25 アナログモード:

サークル
8
26 アナログモード:

十字架
8
27 アナログモード:

スクエア
8
28 アナログモード:

L1
8
29日 アナログモード:

R1
8
30 アナログモード:

L2
8
31 アナログモード:

R2
8


アナログモードは感度を意味します。



デジタルコントローラーの場合、すべてのアナログ、R3およびL3はゼロになります。 したがって、彼のプロファイルは次のようになります。

バイト ビット ボタン 割り当てられたビット数
0 0 選択してください 1
1 開始する 1
2 上矢印 1
3 右矢印 1
4 下矢印 1
5 左矢印 1
6 L2 1
7 R2 1
1 8 L1 1
9 R1 1
10 トライアングル 1
11 サークル 1
12 X 1
13 スクエア 1
14 -ボイド- 1
15 -ボイド- 1




事例





ユーザーがデジタルコントローラーをオフにし、アナログコントローラーを接続することがあります。

ドライバは自動的に切り替わります。 また、データを正しく処理できない場合があります。

コントローラーが無効になっている場合、scePad2GetState()関数はscePad2StateNoLinkを返します。 その後、コントローラーが再び接続されると、scePad2GetState()関数はscePad2StateStableを返します。 各フレームの前にscePad2GetState()関数を呼び出して、シャットダウンを確認することをお勧めします。



最後に。





コントローラボタンに関するこのタイプの情報は、両方のモードに適しています。

コントローラーを常に監視する必要があります。



これについては、振動ライブラリーのみがコントローラーについて残っていましたが、後で説明します。 最後に。



PS :今日はそれで十分だと思う。



All Articles