- mac OS (osx) 用のゲームプログラムで IOKit を用いて HID (gamepad / joystick / keybord / mouse) の入力を検出するライブラリです
- GameController framework と違い, 様々な種類の ゲームパッド を認識できます
- 使いたい XCode プロジェクト で以下を実施
gamepad.c
とgamepad.h
を組み込む- IOKit.framework を追加
- APIを利用 (言語インタフェース は C規約です)
- Objective-c の XCode プロジェクトで利用できます (実証済み)
- swift の XCode プロジェクトでも多分利用できます (未確認)
- ターミナルで以下を実行すればテストできます
- このテストプログラムは入力内容に応じてコールバックの値を出力します
$ git clone https://github.com/suzukiplan/gamepad-osx.git
$ cd gamepad-osx
$ make
$ ./test
#include "gamepad.h"
/* declare callback function */
void callback(int type, int page, int usage, int value)
{
printf("type=%d, page=%d, usage=%d, value=%d\n", type, page, usage, value);
}
int main()
{
/* initialize gamepad */
void* ctx = gamepad_init(1, 1, 0);
if (!ctx) {
puts("init failed");
return -1;
}
/* set callback */
gamepad_set_callback(ctx, callback);
~~~ main procedure ~~~
/* terminate gamepad */
gamepad_term(ctx);
return 0;
}
void* gamepad_init(int useGamePad, int useKeybord, int useMouse)
- gamepad の device context を返す (失敗時は
NULL
を返す) useGamePad
: ゲームパッド/ジョイステック を 使用する=1 or 使用しない=0useKeybord
: キーボード を 使用する=1 or 使用しない=0useMouse
: マウス/トラックパッド を 使用する=1 or 使用しない=0
void gamepad_set_callback(void* ctx, void (*callback)(int type, int page, int usage, int value));
- gamepad, keybord, mouse の入力コールバックを設定
- type, page, usage, value の値を参照することで入力状態を確認できる
device name = Elecom Wired Gamepad
type | page | usage | value | input | description |
---|---|---|---|---|---|
1 | 1 | 48 | 0 | X axis - |
左カーソルを入力 |
1 | 1 | 48 | 255 | X axis + |
右カーソルを入力 |
1 | 1 | 48 | 128 | X axis 0 |
左右カーソルを離す |
1 | 1 | 49 | 0 | Y axis - |
上カーソルを入力 |
1 | 1 | 49 | 255 | Y axis + |
下カーソルを入力 |
1 | 1 | 49 | 128 | Y axis 0 |
上下カーソルを離す |
2 | 9 | 1~10 | 0 or 1 | button #usage |
ボタン1〜10を 押す(value=1) or 離す(value=0) |
device name = Apple Internal Keyboard / Trackpad
type | page | usage | value | input | description |
---|---|---|---|---|---|
2 | 7 | 80 | 0 or 1 | ← | 左カーソルを 押す(value=1) or 離す(value=0) |
2 | 7 | 79 | 0 or 1 | → | 右カーソルを 押す(value=1) or 離す(value=0) |
2 | 7 | 82 | 0 or 1 | ↑ | 上カーソルを 押す(value=1) or 離す(value=0) |
2 | 7 | 81 | 0 or 1 | ↓ | 下カーソルを 押す(value=1) or 離す(value=0) |
2 | 7 | 29 | 0 or 1 | Z | Zキーを 押す(value=1) or 離す(value=0) |
2 | 7 | 27 | 0 or 1 | X | Xキーを 押す(value=1) or 離す(value=0) |
2 | 7 | 225 | 0 or 1 | SHIFT | SHIFTキーを 押す(value=1) or 離す(value=0) |
2 | 7 | 41 | 0 or 1 | ESC | ESCキーを 押す(value=1) or 離す(value=0) |
void gamepad_term(void* ctx);
gamepad_init
で確保した gamepad の device context を開放