File: controller.cpp

package info (click to toggle)
pcsx2 1.4.0%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 22,172 kB
  • ctags: 40,348
  • sloc: cpp: 232,892; ansic: 22,912; asm: 2,273; lisp: 1,346; sh: 561; perl: 253; makefile: 113; xml: 69
file content (110 lines) | stat: -rw-r--r-- 3,038 bytes parent folder | download
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
105
106
107
108
109
110
/*  OnePAD - author: arcum42(@gmail.com)
 *  Copyright (C) 2009
 *
 *  Based on ZeroPAD, author zerofrog@gmail.com
 *  Copyright (C) 2006-2007
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 */

#include "onepad.h"
#include "controller.h"

__forceinline void set_keyboad_key(int pad, int keysym, int index)
{
	conf->keysym_map[pad][keysym] = index;
}

__forceinline int get_keyboard_key(int pad, int keysym)
{
	// You must use find instead of []
	// [] will create an element if the key does not exist and return 0
	map<u32,u32>::iterator it = conf->keysym_map[pad].find(keysym);
	if (it != conf->keysym_map[pad].end())
		return it->second;
	else
		return -1;
}

__forceinline void set_key(int pad, int index, int value)
{
	conf->keys[pad][index] = value;
}

__forceinline int get_key(int pad, int index)
{
	return conf->keys[pad][index];
}

__forceinline KeyType type_of_joykey(int pad, int index)
{
	int key = get_key(pad, index);

	if	    (key >= 0x10000 && key < 0x20000) return PAD_JOYBUTTONS;
	else if (key >= 0x20000 && key < 0x30000) return PAD_AXIS;
	else if (key >= 0x30000 && key < 0x40000) return PAD_HAT;
	else return PAD_NULL;
}

__forceinline bool IsAnalogKey(int index)
{
	return ((index >= PAD_L_UP) && (index <= PAD_R_LEFT));
}

//*******************************************************
//			onepad key -> joy input
//*******************************************************
__forceinline int key_to_button(int pad, int index)
{
	return (get_key(pad, index) & 0xff);
}

__forceinline int key_to_axis(int pad, int index)
{
	return (get_key(pad, index) & 0xff);
}

__forceinline bool key_to_axis_sign(int pad, int index)
{
	return ((get_key(pad, index) >> 8) & 0x1);
}

__forceinline bool key_to_axis_type(int pad, int index)
{
	return ((get_key(pad, index) >> 9) & 0x1);
}

__forceinline int key_to_hat_dir(int pad, int index)
{
	return ((get_key(pad, index) >> 8) & 0xF);
}

//*******************************************************
//			joy input -> onepad key
//*******************************************************
__forceinline int button_to_key(int button_id)
{
	return (0x10000 | button_id);
}

__forceinline int axis_to_key(int full_axis, int sign, int axis_id)
{
	return (0x20000 | (full_axis  << 9) | (sign << 8) | axis_id);
}

__forceinline int hat_to_key(int dir, int axis_id)
{
	return (0x30000 | (dir << 8) | axis_id);
}