psxinterpreter: tons of new exceptions
[pcsx_rearmed.git] / plugins / dfinput / main.c
1 /*
2  * (C) GraÅžvydas "notaz" Ignotas, 2011
3  *
4  * This work is licensed under the terms of any of these licenses
5  * (at your option):
6  *  - GNU GPL, version 2 or later.
7  *  - GNU LGPL, version 2.1 or later.
8  * See the COPYING file in the top-level directory.
9  */
10
11 #include "main.h"
12
13 unsigned char CurPad, CurByte, CurCmd, CmdLen;
14
15 /* since this is not a proper plugin, so we'll hook emu internals in a hackish way like this */
16 extern void *PAD1_startPoll, *PAD1_poll;
17 extern void *PAD2_startPoll, *PAD2_poll;
18 extern unsigned char CALLBACK PAD1__startPoll(int pad);
19 extern unsigned char CALLBACK PAD2__startPoll(int pad);
20 extern unsigned char CALLBACK PAD1__poll(unsigned char value);
21 extern unsigned char CALLBACK PAD2__poll(unsigned char value);
22
23 #ifndef HAVE_LIBRETRO
24
25 static int old_controller_type1 = -1, old_controller_type2 = -1;
26
27 #define select_pad(n) \
28         if (pad.controllerType != old_controller_type##n) \
29         { \
30                 switch (pad.controllerType) \
31                 { \
32                 case PSE_PAD_TYPE_ANALOGPAD: \
33                         PAD##n##_startPoll = PADstartPoll_pad; \
34                         PAD##n##_poll = PADpoll_pad; \
35                         pad_init(); \
36                         break; \
37                 case PSE_PAD_TYPE_GUNCON: \
38                         PAD##n##_startPoll = PADstartPoll_guncon; \
39                         PAD##n##_poll = PADpoll_guncon; \
40                         guncon_init(); \
41                         break; \
42                 case PSE_PAD_TYPE_NEGCON: \
43                 case PSE_PAD_TYPE_GUN: \
44                 default: \
45                         PAD##n##_startPoll = PAD##n##__startPoll; \
46                         PAD##n##_poll = PAD##n##__poll; \
47                         break; \
48                 } \
49         }
50
51 void dfinput_activate(void)
52 {
53         PadDataS pad;
54
55         pad.portMultitap = -1;
56         pad.requestPadIndex = 0;
57         PAD1_readPort1(&pad);
58         select_pad(1);
59
60         pad.requestPadIndex = 1;
61         PAD2_readPort2(&pad);
62         select_pad(2);
63 }
64
65 #else // use libretro's libpcsxcore/plugins.c code
66
67 void dfinput_activate(void)
68 {
69 }
70
71 #endif