PSP xvi

PSPプログラミングを教えるブログ(本気で頑張る人アクセス大歓迎サイト)

PSP-X.gif

記事の間違いを報告  新アップローダー
記事修正情報 PSPプログラミング資料 自作ゲーム PSP用エミュレータ リンク

公認リンク
公式PSP専科 公式PSVita専科 はじめるPSPSDK PSP EXEC GAME M@STER PSP 猫山のYouTubeチャンネル

TAG
全記事にタグをつけています  http://nekoyama2gillien.blog36.fc2.com/?tag=タグ
PSP PSPプログラミング DXライブラリPortable OSLib ショートプログラム ハローワールド
PSP自作ゲーム PSP自作ソフト エミュレータ ゲームアーカイブス PSP動画
動画 初音ミク ミクミクダンス MMDドラマ ゲーム 魔法少女まどか☆マギカ 侵略!イカ娘
アイドルマスター

このブログについて

このブログでは、非公式のPSPソフト、いわゆる自作ソフト( PSP Homebrew )を作る事を目的とします。

著作権などの こまかい利用規約については、こちらを開いてお読み下さい

このブログについて知りたい方、初めて来訪された方はこちらを開いてお読みください
お問い合わせは 猫山猫宗(nekomune@gmail.com)までどうぞ


当ブログはリンクフリーです。ブログ名は、アルファベットで「PSP xvi」と書いて『ピーエスピー・エクシビ』とお読みください。
相互リンクを希望されるブログ運営者様は、ココで申請して下さい。


このブログで全記事から探し物の方は、ここをクリックして下さい。
http://nekoyama2gillien.blog36.fc2.com/?all

スポンサーサイト 

--/--/--
--. --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[edit]

CM: --
TB: --

page top

PSPパッドの読み取りについての解説をします.

今回は、DXライブラリPortable での読み取りは行ないません.生データの検出からやります.
この記事でデジタル部分、次回記事でアナログ部分を解説します.
read frame(読み出しフレーム)というのも検出できるようですが、省略です.

定義されている構造体
/** Returned controller data */
typedef struct SceCtrlData {
  /** The current read frame. */
  unsigned int   TimeStamp;
  /** Bit mask containing zero or more of ::PspCtrlButtons. */
  unsigned int   Buttons;
  /** Analogue stick, X axis. */
  unsigned char  Lx;
  /** Analogue stick, Y axis. */
  unsigned char  Ly;
  /** Reserved. */
  unsigned char  Rsrv[6];
} SceCtrlData;

カーネルモードとユーザーモードでは、PSPパッドの読み取れる内容が異なります.
全部 読めるのがカーネルモードで、一部 読めないのがあるのがユーザーモードです.

プログラマブルキーと特殊キーとに区別しようかと.
勝手に命名すると混乱を招く恐れがあるのですが、察して下さい.

参考にした資料 / ヘッダーファイル
pspctrl.h


[ カーネルモードで読み取れるデータ ]

定義されている変数    値(16進数 32ビット)
セレクトキー  PSP_CTRL_SELECT 0x00000001
スタートキー  PSP_CTRL_START 0x00000008
十字キー上   PSP_CTRL_UP 0x00000010
十字キー右   PSP_CTRL_RIGHT 0x00000020
十字キー下   PSP_CTRL_DOWN 0x00000040
十字キー左   PSP_CTRL_LEFT 0x00000080
Lトリガー   PSP_CTRL_LTRIGGER 0x00000100
Rトリガー   PSP_CTRL_RTRIGGER 0x00000200
△ボタン    PSP_CTRL_TRIANGLE 0x00001000
○ボタン    PSP_CTRL_CIRCLE 0x00002000
×ボタン    PSP_CTRL_CROSS 0x00004000
□ボタン    PSP_CTRL_SQUARE 0x00008000
ホーム     PSP_CTRL_HOME 0x00010000
ホールド    PSP_CTRL_HOLD 0x00020000
WLANスイッチ  PSP_CTRL_WLAN_UP 0x00040000
リモコン差込  PSP_CTRL_REMOTE 0x00080000
音量+     PSP_CTRL_VOLUP 0x00100000
音量-     PSP_CTRL_VOLDOWN 0x00200000
スクリーン   PSP_CTRL_SCREEN 0x00400000
♪       PSP_CTRL_NOTE 0x00800000
UMD挿入   PSP_CTRL_DISC 0x01000000
メモステ挿入  PSP_CTRL_MS 0x02000000
プログラマブルキー&特殊キー(全部のキー)

2010年04月08日 00:30 更新
「PSP_CTRL_REMOTE」はリモコン付きヘッドフォンをPSPに挿したらONになりました.
書き間違いの訂正
最初、WANと書きましたが、WLAN(無線LAN)の間違いです.ごめんなさい.
イーサネット -Wikipedia
無線LAN -Wikipedia
WAN -Wikipedia


[ ユーザーモードで読み取れるデータ ]
定義されている変数    値(16進数 32ビット)
セレクトキー  PSP_CTRL_SELECT 0x00000001
スタートキー  PSP_CTRL_START 0x00000008
十字キー上   PSP_CTRL_UP 0x00000010
十字キー右   PSP_CTRL_RIGHT 0x00000020
十字キー下   PSP_CTRL_DOWN 0x00000040
十字キー左   PSP_CTRL_LEFT 0x00000080
Lトリガー   PSP_CTRL_LTRIGGER 0x00000100
Rトリガー   PSP_CTRL_RTRIGGER 0x00000200
△ボタン    PSP_CTRL_TRIANGLE 0x00001000
○ボタン    PSP_CTRL_CIRCLE 0x00002000
×ボタン    PSP_CTRL_CROSS 0x00004000
□ボタン    PSP_CTRL_SQUARE 0x00008000
ホーム     PSP_CTRL_HOME 0x00010000
ホールド    PSP_CTRL_HOLD 0x00020000
プログラマブルキーのみ


PADの読み取りについて 今までやらなかったのは、ユーザーモードでも 音量+ とか 音量- とか WLANスイッチ などを読み取れないか試行錯誤していたからです.

で、昨日 解決したので、PSPパッド入力について一挙公開です.

PSPパッドの読み取りテストプログラム(生データ閲覧用)のダウンロード(ソース付き)
ダウンロードする
(PSPパッド読み取りテスト.7z)
通常のカーネルモード版とユーザーモード版と、特殊なユーザーモード版の3種類同梱.


【 ユーザーモードで どうやって特殊キーの読み取りを行なっているのか説明 】

カーネルモードで動作するプラグインを作り、そのプラグイン内にPSPパッドの読み取りを行なう関数を書いておき、ユーザーモードのメインコードから そのプラグインモジュールを読み込んで 関数呼び出しでPSPパッド値を得ています.

ですから、PSPパッドの特殊キー読み取り部分はカーネルモードで実行しています.
PSP-2000でも、カーネルモードのプラグインは実行可能ですよ.
解かったかな?

このソースでプラグイン初公開ですがコードはプラグイン作り勉強向けではありません.これ専用のプラグインです.
技術を色々勉強できるかと思いますので、興味ある方は挑戦してください.

今日はもう遅いので、詳しく解説するのは後日.


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


スポンサーサイト

[edit]

CM: 14
TB: 0

page top

前回、PSPのデジタルパッド解説をやりましたので、今回はアナログパッド解説です。

入力は、
X方向 = 256段階/数値は(0~255) 8ビット長
Y方向 = 256段階/数値は(0~255) 8ビット長
です。
構造体には unsigned char のキャストで定義されています。

実際の判定には、128を引いてから判別すると良いと思われます。

[A]取得データのまま          [B]128を引いたデータ
    0                   -128

0  基準  255   →    -128   基準  +127

   255                  +127

[B]図で基準の位置は、(0,0)ですが、それは計算上での話です。
生データの検出を行なうと、値が 基準から ±15くらいの範囲でプルプルと変動しています。

アナログパッドの検出結果は PSPの機種別でも異なるようですし、「遊び」があるのがアナログ的でもあり。

PSP-1000 ならアナログパッド部品が簡単に取り外せるので、取り外して眺めながらいじってみてください。
(無くさないように注意してね)
くぼみは円形にえぐられているので、(-128,-128)という値にはなりません。


せっかくなので、アナログパッドも使用する PSP Homebrew を ご紹介。


Battlegrounds QJ.NET へリンクしています。

「本格的3D戦車ゲーム」です.戦車に乗った気分に浸れるゲーム。ないすっ
PSP-2000対応


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


[edit]

CM: 0
TB: 0

page top


h o m e |


 

2017-03