2009年02月21日

uhid0を直接覗いてみる。

まず最初にSDLでできることをつめたいし続いてはちゃんとusbhid.hとかを使うつもりではあるが
/dev/uhid0からどんなデータがくるかみたくなった。
その前にxlib併用でのバーチャルキーボードやマウスはさておき
SDL単独での使用の注意点を考えてみた。
とりあえず


if (! SDL_NumJoysticks()){exit(-1)
}

等接続時にジョイステッィクがゼロの対策を立てておかないと
SDL_JoystickOpenでコアダンプする様だ。

またSDL_Initでは画面を使わなくても
SDL_INIT_VIDEOを加えないとイベントをとってくれないらしく
ジョイステッィクの値は得られない様だ。

SDL_JoystickNameはデバイスをアクセスして得られる名称ではなくて
Joystick (0)なので使うメリットは低い。
SDL_JoystickIndex(joystick)で番号だけ取得する方が良い。

ここで直接uhidを叩いたらどうなるのか知りたくなった。

パイプでバイナリ表示をさせてみる。

cat /dev/uhid0 | od -t x1


ボタンを押すとデータが送られてくる。
ボタンを0123の順で押すと14バイト目と6バイト目が番号ぽい

0012060 01 7f 7f 7f 7f 0f 00 00 01 7f 7f 7f 7f 1f 00 00
0012100 01 7f 7f 7f 7f 1f 00 00 01 7f 7f 7f 7f 1f 00 00
*
0012240 01 7f 7f 7f 7f 1f 00 00 01 7f 7f 7f 7f 0f 00 00
0012260 01 7f 7f 7f 7f 0f 00 00 01 7f 7f 7f 7f 0f 00 00
*
0014660 01 7f 7f 7f 7f 2f 00 00 01 7f 7f 7f 7f 2f 00 00
*
0015020 01 7f 7f 7f 7f 0f 00 00 01 7f 7f 7f 7f 0f 00 00
*

0017420 01 7f 7f 7f 7f 0f 00 00 01 7f 7f 7f 7f 4f 00 00
0017440 01 7f 7f 7f 7f 4f 00 00 01 7f 7f 7f 7f 4f 00 00
*
0017560 01 7f 7f 7f 7f 4f 00 00 01 7f 7f 7f 7f 0f 00 00
0017600 01 7f 7f 7f 7f 0f 00 00 01 7f 7f 7f 7f 0f 00 00
*
0021140 01 7f 7f 7f 7f 8f 00 00 01 7f 7f 7f 7f 8f 00 00
*
0021300 01 7f 7f 7f 7f 8f 00 00 01 7f 7f 7f 7f 0f 00 00
00
アナログジョイスティックをつなぐと最初はだまっているが
ちょっと動かすとずらずらとデータを送りつづけてくる様だ。全然分からなかった。

ここでSDLでは認識してくれなかったがuhidとしては認識するエレコムのプレステ変換器をつないでみる。
ボタンを△○×□と押すと

0021500 01 01 00 7f 7f 7f 7f 0f 01 01 00 7f 7f 7f 7f 0f
*
0021660 01 00 00 7f 7f 7f 7f 0f 01 00 00 7f 7f 7f 7f 0f
*
0043300 01 00 00 7f 7f 7f 7f 0f 01 02 00 7f 7f 7f 7f 0f
0043320 01 02 00 7f 7f 7f 7f 0f 01 02 00 7f 7f 7f 7f 0f
*
0043420 01 00 00 7f 7f 7f 7f 0f 01 00 00 7f 7f 7f 7f 0f
*
0045260 01 04 00 7f 7f 7f 7f 0f 01 04 00 7f 7f 7f 7f 0f
*
0045400 01 04 00 7f 7f 7f 7f 0f 01 00 00 7f 7f 7f 7f 0f
0045420 01 00 00 7f 7f 7f 7f 0f 01 00 00 7f 7f 7f 7f 0f
*
0047000 01 00 00 7f 7f 7f 7f 0f 01 08 00 7f 7f 7f 7f 0f
0047020 01 08 00 7f 7f 7f 7f 0f 01 08 00 7f 7f 7f 7f 0f
*
0047120 01 08 00 7f 7f 7f 7f 0f 01 00 00 7f 7f 7f 7f 0f
0047140 01 00 00 7f 7f 7f 7f 0f 01 00 00 7f 7f 7f 7f 0f

とでる。2バイト目と10バイト目がボタン番号っぽい
なんか使えそうな雰囲気だ。
つまりSDLでのジョイスティック認識はそこそこだけど何か足りないということが分かった。
使えると分かった以上どうにかしたいがそれは後日
ラベル:SDL Joystick
posted by Xo_ox at 20:21| Comment(0) | FreeBSDアプリ | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。