-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathgamepads.h
106 lines (86 loc) · 2.63 KB
/
gamepads.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#ifndef _gamepads_h__
#define _gamepads_h__
#undef PAD_DATA_HAS_RAW
#define PAD_TYPE_NONE 0
#define PAD_TYPE_N64 4
#define PAD_TYPE_GAMECUBE 5
#define PAD_TYPE_GC_KB 6
#define N64_RAW_SIZE 4
#define GC_RAW_SIZE 8
typedef struct _n64_pad_data {
unsigned char pad_type; // PAD_TYPE_N64
char x,y;
unsigned short buttons;
#ifdef PAD_DATA_HAS_RAW
unsigned char raw_data[N64_RAW_SIZE];
#endif
} n64_pad_data;
#define N64_BTN_A 0x8000
#define N64_BTN_B 0x4000
#define N64_BTN_Z 0x2000
#define N64_BTN_START 0x1000
#define N64_BTN_DPAD_UP 0x0800
#define N64_BTN_DPAD_DOWN 0x0400
#define N64_BTN_DPAD_LEFT 0x0200
#define N64_BTN_DPAD_RIGHT 0x0100
#define N64_BTN_RSVD_LOW1 0x0080
#define N64_BTN_RSVD_LOW2 0x0040
#define N64_BTN_L 0x0020
#define N64_BTN_R 0x0010
#define N64_BTN_C_UP 0x0008
#define N64_BTN_C_DOWN 0x0004
#define N64_BTN_C_LEFT 0x0002
#define N64_BTN_C_RIGHT 0x0001
typedef struct _gc_pad_data {
unsigned char pad_type; // PAD_TYPE_GAMECUBE
char x,y,cx,cy;
unsigned char lt,rt;
unsigned short buttons;
#ifdef PAD_DATA_HAS_RAW
unsigned char raw_data[GC_RAW_SIZE];
#endif
} gc_pad_data;
#define GC_BTN_A 0x0001
#define GC_BTN_B 0x0002
#define GC_BTN_X 0x0004
#define GC_BTN_Y 0x0008
#define GC_BTN_START 0x0010
#define GC_BTN_RSVD0 0x0020
#define GC_BTN_RSVD1 0x0040
#define GC_BTN_RSVD2 0x0080
#define GC_BTN_DPAD_LEFT 0x0100
#define GC_BTN_DPAD_RIGHT 0x0200
#define GC_BTN_DPAD_DOWN 0x0400
#define GC_BTN_DPAD_UP 0x0800
#define GC_BTN_Z 0x1000
#define GC_BTN_R 0x2000
#define GC_BTN_L 0x4000
#define GC_BTN_RSVD3 0x8000
#define GC_ALL_BUTTONS (GC_BTN_START|GC_BTN_Y|GC_BTN_X|GC_BTN_B|GC_BTN_A|GC_BTN_L|GC_BTN_R|GC_BTN_Z|GC_BTN_DPAD_UP|GC_BTN_DPAD_DOWN|GC_BTN_DPAD_RIGHT|GC_BTN_DPAD_LEFT)
typedef struct _gc_keyboard_data {
unsigned char pad_type;
unsigned char keys[3];
} gc_keyboard_data;
typedef struct _gamepad_data {
union {
unsigned char pad_type; // PAD_TYPE_*
n64_pad_data n64;
gc_pad_data gc;
gc_keyboard_data gckb;
};
} gamepad_data;
#define GAMEPAD_MAX_CHANNELS 2
typedef struct {
void (*init)(unsigned char chn);
char (*update)(unsigned char chn);
char (*changed)(unsigned char chn);
void (*hotplug)(unsigned char chn);
void (*getReport)(unsigned char chn, gamepad_data *dst);
void (*setVibration)(unsigned char chn, char enable);
char (*probe)(unsigned char chn); /* return true if found */
} Gamepad;
/* What was most recently read from the controller */
extern gamepad_data last_built_report[GAMEPAD_MAX_CHANNELS];
/* What was most recently sent to the host */
extern gamepad_data last_sent_report[GAMEPAD_MAX_CHANNELS];
#endif // _gamepads_h__