2f8e83820761a349e20638ea45daaddc2741f805
[pcsx_rearmed.git] / include / psemu_plugin_defs.h
1 #ifndef _PSEMU_PLUGIN_DEFS_H
2 #define _PSEMU_PLUGIN_DEFS_H
3
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7
8 // this can't be __stdcall like it was in PSEmu API as too many functions are mixed up
9 #undef CALLBACK
10 #define CALLBACK
11
12 // header version
13 #define _PPDK_HEADER_VERSION            3
14
15 #define PLUGIN_VERSION                          1
16
17 // plugin type returned by PSEgetLibType (types can be merged if plugin is multi type!)
18 #define PSE_LT_CDR                                      1
19 #define PSE_LT_GPU                                      2
20 #define PSE_LT_SPU                                      4
21 #define PSE_LT_PAD                                      8
22 #define PSE_LT_NET                                      16
23
24 // DLL function return codes
25 #define PSE_ERR_SUCCESS                         0       // every function in DLL if completed sucessfully should return this value
26 #define PSE_ERR_FATAL                           -1      // undefined error but fatal one, that kills all functionality
27
28 // XXX_Init return values
29 // Those return values apply to all libraries
30 // currently obsolete - preserved for compatibilty
31
32 #define PSE_INIT_ERR_SUCCESS            0       // initialization went OK
33 #define PSE_INIT_ERR_NOTCONFIGURED      -2      // this driver is not configured
34 #define PSE_INIT_ERR_NOHARDWARE         -3      // this driver can not operate properly on this hardware or hardware is not detected
35
36 /*         GPU PlugIn          */
37
38 //  GPU_Test return values
39
40 // sucess, everything configured, and went OK.
41 #define PSE_GPU_ERR_SUCCESS                     0
42
43 // ERRORS
44 // this error might be returned as critical error but none of below
45 #define PSE_GPU_ERR                                     -20
46
47
48 // this driver is not configured
49 #define PSE_GPU_ERR_NOTCONFIGURED       PSE_GPU_ERR - 1
50 // this driver failed Init
51 #define PSE_GPU_ERR_INIT                        PSE_GPU_ERR - 2
52
53 // WARNINGS
54 // this warning might be returned as undefined warning but allowing driver to continue
55 #define PSE_GPU_WARN                            20
56
57 //  GPU_Query           - will be implemented soon
58
59 typedef struct
60 {
61         unsigned int flags;
62         unsigned int status;
63         void*   window;
64         unsigned char reserved[100];
65 } gpuQueryS;
66
67 // gpuQueryS.flags
68 // if driver can operate in both modes it must support GPU_changeMode();
69 #define PSE_GPU_FLAGS_FULLSCREEN                1       // this driver can operate in fullscreen mode
70 #define PSE_GPU_FLAGS_WINDOWED                  2       // this driver can operate in windowed mode
71
72 // gpuQueryS.status
73 #define PSE_GPU_STATUS_WINDOWWRONG      1       // this driver cannot operate in this windowed mode
74
75 //  GPU_Query   End     - will be implemented in v2
76
77
78 /*         CDR PlugIn          */
79
80 //      CDR_Test return values
81
82 // sucess, everything configured, and went OK.
83 #define PSE_CDR_ERR_SUCCESS                     0
84
85 // general failure (error undefined)
86 #define PSE_CDR_ERR_FAILURE                     -1
87
88 // ERRORS
89 #define PSE_CDR_ERR -40
90 // this driver is not configured
91 #define PSE_CDR_ERR_NOTCONFIGURED       PSE_CDR_ERR - 0
92 // if this driver is unable to read data from medium
93 #define PSE_CDR_ERR_NOREAD                      PSE_CDR_ERR - 1
94
95 // WARNINGS
96 #define PSE_CDR_WARN 40
97 // if this driver emulates lame mode ie. can read only 2048 tracks and sector header is emulated
98 // this might happen to CDROMS that do not support RAW mode reading - surelly it will kill many games
99 #define PSE_CDR_WARN_LAMECD                     PSE_CDR_WARN + 0
100
101
102
103
104 /*         SPU PlugIn          */
105
106 // some info retricted (now!)
107
108 // sucess, everything configured, and went OK.
109 #define PSE_SPU_ERR_SUCCESS 0
110
111 // ERRORS
112 // this error might be returned as critical error but none of below
113 #define PSE_SPU_ERR                                     -60
114
115 // this driver is not configured
116 #define PSE_SPU_ERR_NOTCONFIGURED       PSE_SPU_ERR - 1
117 // this driver failed Init
118 #define PSE_SPU_ERR_INIT                        PSE_SPU_ERR - 2
119
120
121 // WARNINGS
122 // this warning might be returned as undefined warning but allowing driver to continue
123 #define PSE_SPU_WARN                            60
124
125
126
127
128 /*         PAD PlugIn          */
129
130 /*
131
132   functions that must be exported from PAD Plugin
133
134   long  PADinit(long flags);    // called only once when PSEmu Starts
135   void  PADshutdown(void);              // called when PSEmu exits
136   long  PADopen(PadInitS *);    // called when PSEmu is running program
137   long  PADclose(void);
138   long  PADconfigure(void);
139   void  PADabout(void);
140   long  PADtest(void);                  // called from Configure Dialog and after PADopen();
141   long  PADquery(void);
142
143   unsigned char PADstartPoll(int);
144   unsigned char PADpoll(unsigned char, int *);
145
146 */
147
148 // PADquery responses (notice - values ORed)
149 // PSEmu will use them also in PADinit to tell Plugin which Ports will use
150 // notice that PSEmu will call PADinit and PADopen only once when they are from
151 // same plugin
152
153 // might be used in port 1
154 #define PSE_PAD_USE_PORT1                       1
155 // might be used in port 2
156 #define PSE_PAD_USE_PORT2                       2
157
158
159
160 // No controller
161 #define PSE_PAD_TYPE_NONE                       0
162 // MOUSE SCPH-1030
163 #define PSE_PAD_TYPE_MOUSE                      1
164 // NEGCON - 16 button analog controller SLPH-00001
165 #define PSE_PAD_TYPE_NEGCON                     2
166 // GUN CONTROLLER - gun controller SLPH-00014 from Konami
167 #define PSE_PAD_TYPE_GUN                        3
168 // STANDARD PAD SCPH-1080, SCPH-1150
169 #define PSE_PAD_TYPE_STANDARD           4
170 // ANALOG JOYSTICK SCPH-1110
171 #define PSE_PAD_TYPE_ANALOGJOY          5
172 // GUNCON - gun controller SLPH-00034 from Namco
173 #define PSE_PAD_TYPE_GUNCON                     6
174 // ANALOG CONTROLLER SCPH-1150
175 #define PSE_PAD_TYPE_ANALOGPAD          7
176
177
178 // sucess, everything configured, and went OK.
179 #define PSE_PAD_ERR_SUCCESS                     0
180 // general plugin failure (undefined error)
181 #define PSE_PAD_ERR_FAILURE                     -1
182
183
184 // ERRORS
185 // this error might be returned as critical error but none of below
186 #define PSE_PAD_ERR                                     -80
187 // this driver is not configured
188 #define PSE_PAD_ERR_NOTCONFIGURED       PSE_PAD_ERR - 1
189 // this driver failed Init
190 #define PSE_PAD_ERR_INIT                        PSE_PAD_ERR - 2
191
192
193 // WARNINGS
194 // this warning might be returned as undefined warning but allowing driver to continue
195 #define PSE_PAD_WARN                            80
196
197
198 typedef struct PadDataS
199 {
200         // controller type - fill it withe predefined values above
201         unsigned char controllerType;
202
203         unsigned char padding;
204         unsigned short saveSize;
205
206         int portMultitap;
207         int requestPadIndex;
208
209         // status of buttons - every controller fills this field
210         unsigned short buttonStatus;
211
212         // for analog pad fill those next 4 bytes
213         // values are analog in range 0-255 where 127 is center position
214         unsigned char rightJoyX, rightJoyY, leftJoyX, leftJoyY;
215
216         // for mouse fill those next 2 bytes
217         // values are in range -128 - 127
218         unsigned char moveX, moveY;
219
220         // Lightgun values
221         int absoluteX, absoluteY;
222
223         unsigned char Vib[2];
224         unsigned char VibF[2];
225         
226         struct {
227                 unsigned char configMode;
228                 unsigned char padMode; // 0 : digital 1: analog
229                 unsigned char cmd4dConfig[6];
230                 unsigned int  lastUseFrame;
231                 unsigned int  unused;
232                 unsigned char configModeUsed;
233                 unsigned char autoAnalogTried;
234                 unsigned char userToggled;
235                 unsigned char padding;
236         } ds;
237         unsigned char multitapLongModeEnabled;
238         unsigned char respSize;
239         unsigned char txData[8];      // after multitap
240         unsigned char txData1;        // txData[1] before multitap
241         unsigned char reserved1[25];
242         unsigned char rxData[8];
243         unsigned char rxDataOld[8];   // for multitap
244         unsigned char respSizeOld;
245
246         unsigned char reserved2[5];
247 } PadDataS;
248
249 typedef struct {
250         int     y0, y1;
251 } ADPCM_Decode_t;
252
253 typedef struct xa_decode {
254         int                             freq;
255         int                             nbits;
256         int                             stereo;
257         int                             nsamples;
258         ADPCM_Decode_t  left, right;
259         short                   pcm[16384];
260 } xa_decode_t;
261
262 typedef struct SPUFreeze {
263         char PluginName[8];
264         unsigned int PluginVersion;
265         unsigned int Size;
266         unsigned char SPUPorts[0x200];
267         //unsigned char SPURam[0x80000]; // handled separately
268         //xa_decode_t xa;
269 } SPUFreeze_t;
270
271 #define SPUFREEZE_F2_MAX_SIZE 0xc000
272
273 /*         NET PlugIn v2       */
274 /* Added by linuzappz@pcsx.net */
275
276 /* Modes bits for NETsendData/NETrecvData */
277 #define PSE_NET_BLOCKING        0x00000000
278 #define PSE_NET_NONBLOCKING     0x00000001
279
280 /* note: unsupported fields should be zeroed.
281  
282 typedef struct {
283         char EmuName[32];
284         char CdromID[9];        // ie. 'SCPH12345', no \0 trailing character
285         char CdromLabel[11];
286         void *psxMem;
287         GPUshowScreenPic GPU_showScreenPic;
288         GPUdisplayText GPU_displayText;
289         PADsetSensitive PAD_setSensitive;
290         char GPUpath[256];
291         char SPUpath[256];
292         char CDRpath[256];
293         char MCD1path[256];
294         char MCD2path[256];
295         char BIOSpath[256];     // 'HLE' for internal bios
296         char Unused[1024];
297 } netInfo;
298
299 */
300
301 /*
302   basic funcs:
303
304    long NETopen(HWND hWnd)
305     opens the connection.
306     shall return 0 on success, else -1.
307     -1 is also returned if the user selects offline mode.
308
309    long NETclose()
310     closes the connection.
311     shall return 0 on success, else -1.
312
313    void NETpause()
314     this is called when the user paused the emulator.
315
316    void NETresume()
317     this is called when the user resumed the emulator.
318
319    long NETqueryPlayer()
320     returns player number
321
322    long NETsendPadData(void *pData, int Size)
323     this should be called for the first pad only on each side.
324
325    long NETrecvPadData(void *pData, int Pad)
326     call this for Pad 1/2 to get the data sent by the above func.
327
328   extended funcs:
329
330    long NETsendData(void *pData, int Size, int Mode)
331     sends Size bytes from pData to the other side.
332
333    long NETrecvData(void *pData, int Size, int Mode)
334     receives Size bytes from pData to the other side.
335
336    void NETsetInfo(netInfo *info);
337     sets the netInfo struct.
338
339    void NETkeypressed(int key) (linux only)
340     key is a XK_?? (X11) keycode.
341 */
342
343 #ifdef __cplusplus
344 }
345 #endif
346 #endif // _PSEMU_PLUGIN_DEFS_H