前回の記事では、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 :今日はそれで十分だと思う。