2009-09-02 21:00:45 +00:00
|
|
|
|
2009-01-17 08:21:49 +00:00
|
|
|
//________________________________________________________________________________________
|
|
|
|
// File description: Common plugin spec, version #1.0 maintained by F|RES
|
2009-09-02 21:00:45 +00:00
|
|
|
|
2008-12-08 04:46:09 +00:00
|
|
|
#ifndef _PLUGINS_H_INCLUDED__
|
|
|
|
#define _PLUGINS_H_INCLUDED__
|
|
|
|
|
2009-01-17 08:21:49 +00:00
|
|
|
// Includes
|
|
|
|
// ------------
|
2010-01-19 19:28:27 +00:00
|
|
|
// TODO: See if we can get rid of the windows.h include.
|
2008-12-08 04:46:09 +00:00
|
|
|
#ifdef _WIN32
|
2009-01-17 08:21:49 +00:00
|
|
|
#include <windows.h>
|
2008-12-08 04:46:09 +00:00
|
|
|
#endif
|
2009-01-17 08:21:49 +00:00
|
|
|
#include "CommonTypes.h"
|
2008-12-08 04:46:09 +00:00
|
|
|
|
2010-01-19 19:28:27 +00:00
|
|
|
// Plugin communication. I place this here rather in Common.h to rebuild less if any of this is changed
|
2009-02-07 03:16:41 +00:00
|
|
|
// -----------------
|
|
|
|
enum PLUGIN_COMM
|
|
|
|
{
|
|
|
|
// Begin at 10 in case there is already messages with wParam = 0, 1, 2 and so on
|
2010-02-09 00:34:27 +00:00
|
|
|
WM_USER_PAUSE = 10,
|
|
|
|
WM_USER_STOP,
|
2009-11-15 07:46:43 +00:00
|
|
|
WM_USER_CREATE,
|
2010-04-12 01:33:10 +00:00
|
|
|
WM_USER_SETCURSOR,
|
2009-11-15 07:46:43 +00:00
|
|
|
WM_USER_KEYDOWN,
|
2009-09-07 12:40:43 +00:00
|
|
|
VIDEO_DESTROY, // The video debugging window was destroyed
|
|
|
|
AUDIO_DESTROY, // The audio debugging window was destroyed
|
2009-12-27 19:31:02 +00:00
|
|
|
WIIMOTE_DISCONNECT, // Disconnect Wiimote
|
2009-09-07 12:40:43 +00:00
|
|
|
INPUT_FRAME_COUNTER // Wind back the frame counter for rerecording
|
2009-02-07 03:16:41 +00:00
|
|
|
};
|
|
|
|
|
2009-01-17 08:32:44 +00:00
|
|
|
// System specific declarations and definitions
|
|
|
|
// ------------
|
2009-01-17 18:34:25 +00:00
|
|
|
|
2008-12-08 04:46:09 +00:00
|
|
|
#ifdef _WIN32
|
2009-01-17 08:21:49 +00:00
|
|
|
#define EXPORT __declspec(dllexport)
|
2009-01-17 20:15:41 +00:00
|
|
|
#define CALL __cdecl
|
2008-12-08 04:46:09 +00:00
|
|
|
#else
|
2009-01-17 08:21:49 +00:00
|
|
|
#define EXPORT __attribute__ ((visibility("default")))
|
2009-01-17 20:15:41 +00:00
|
|
|
#define __cdecl
|
|
|
|
#define CALL
|
2009-01-17 08:21:49 +00:00
|
|
|
#ifndef TRUE
|
|
|
|
#define TRUE 1
|
|
|
|
#define FALSE 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// simulate something that looks like win32
|
|
|
|
// long term, kill these
|
|
|
|
#define HWND void*
|
|
|
|
#define HINSTANCE void*
|
2008-12-08 04:46:09 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#if defined(__cplusplus)
|
2009-01-17 08:21:49 +00:00
|
|
|
extern "C" {
|
2008-12-08 04:46:09 +00:00
|
|
|
#endif
|
2009-01-17 08:32:44 +00:00
|
|
|
|
|
|
|
|
2009-09-02 21:00:45 +00:00
|
|
|
|
2009-01-17 08:32:44 +00:00
|
|
|
// Global values
|
|
|
|
// ------------
|
2008-12-08 04:46:09 +00:00
|
|
|
|
2009-01-17 08:21:49 +00:00
|
|
|
// Plugin types
|
2009-01-15 06:48:15 +00:00
|
|
|
enum PLUGIN_TYPE {
|
2010-06-05 01:38:22 +00:00
|
|
|
PLUGIN_TYPE_VIDEO = 1,
|
|
|
|
PLUGIN_TYPE_DVD,
|
2010-06-13 09:14:40 +00:00
|
|
|
PLUGIN_TYPE_PAD_REMOVED,
|
2010-06-05 01:38:22 +00:00
|
|
|
PLUGIN_TYPE_AUDIO,
|
|
|
|
PLUGIN_TYPE_COMPILER,
|
|
|
|
PLUGIN_TYPE_DSP,
|
|
|
|
PLUGIN_TYPE_WIIMOTE,
|
2009-01-15 06:48:15 +00:00
|
|
|
};
|
2008-12-08 04:46:09 +00:00
|
|
|
|
|
|
|
#define STATE_MODE_READ 1
|
|
|
|
#define STATE_MODE_WRITE 2
|
|
|
|
#define STATE_MODE_MEASURE 3
|
|
|
|
|
Now you can switch between Emulated and Real WiiMotes, connect more Real Wiimotes and even pair them up (if you have MS BT Stack) during gameplay!
All you gotta do is Pause the emulation! That's useful for when your batteries run out during gameplay, for example...
But if you change the WiiMote source (between Emulated, Real or Inactive) you must disconnect and reconnect (Menu Tools -> Connect WiiMote) the WiiMotes affected by the change...
Thanks to jack.fr0st who did all the emulation state notification work!
Now every plugin has a way to know the current emulation state (paused, stopped or playing)
@ayuanx: I thought about doing a PostMessage(g_WiimoteInitialize.hWnd, WM_USER, WIIMOTE_DISCONNECT, current_number); so that the user gets asked to reconnect that WiiMote, trying to avoid having to disconnect and reconnect, but it didn't work because shooting that message only asks to reconnect, doesn't do a disconnect... Do you have any ideas on how to accomplish that?
Also, if anyone could check if Issue 1916 is finally fixed... Or at least when is the cursor being hidden or not...
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4789 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-01-06 19:26:52 +00:00
|
|
|
// used for notification on emulation state
|
|
|
|
enum PLUGIN_EMUSTATE {
|
|
|
|
PLUGIN_EMUSTATE_PLAY = 1,
|
|
|
|
PLUGIN_EMUSTATE_PAUSE,
|
|
|
|
PLUGIN_EMUSTATE_STOP,
|
|
|
|
};
|
2009-01-17 08:32:44 +00:00
|
|
|
|
|
|
|
// Export structs
|
|
|
|
// ------------
|
2008-12-08 04:46:09 +00:00
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
u16 Version; // Set to 0x0100
|
2009-01-15 06:48:15 +00:00
|
|
|
PLUGIN_TYPE Type; // Set to PLUGIN_TYPE_DVD
|
2008-12-08 04:46:09 +00:00
|
|
|
char Name[100]; // Name of the DLL
|
|
|
|
} PLUGIN_INFO;
|
|
|
|
|
2009-09-13 09:07:22 +00:00
|
|
|
#ifndef MAX_PATH
|
|
|
|
// apparently a windows-ism.
|
|
|
|
#define MAX_PATH 260
|
|
|
|
#endif
|
|
|
|
|
2009-09-13 08:54:46 +00:00
|
|
|
// TODO: Remove, or at least remove the void pointers and replace with data.
|
|
|
|
// This design is just wrong and ugly - the plugins shouldn't have this much access.
|
2009-01-07 11:16:36 +00:00
|
|
|
typedef struct
|
2008-12-08 04:46:09 +00:00
|
|
|
{
|
2010-06-12 19:42:39 +00:00
|
|
|
void *was_eventHandler_but_lets_not_break_abi;
|
2010-06-05 01:38:22 +00:00
|
|
|
void *logManager;
|
2009-09-13 08:54:46 +00:00
|
|
|
char game_ini[MAX_PATH];
|
|
|
|
char unique_id[16];
|
2009-01-07 11:16:36 +00:00
|
|
|
} PLUGIN_GLOBALS;
|
2009-01-17 08:21:49 +00:00
|
|
|
|
2009-09-02 21:00:45 +00:00
|
|
|
// GLOBAL I N T E R F A C E
|
2009-01-07 18:21:22 +00:00
|
|
|
// ____________________________________________________________________________
|
|
|
|
// Function: GetDllInfo
|
|
|
|
// Purpose: This function allows the emulator to gather information
|
|
|
|
// about the DLL by filling in the PluginInfo structure.
|
|
|
|
// input: A pointer to a PLUGIN_INFO structure that needs to be
|
|
|
|
// filled by the function. (see def above)
|
|
|
|
// output: none
|
|
|
|
//
|
|
|
|
EXPORT void CALL GetDllInfo(PLUGIN_INFO* _pPluginInfo);
|
|
|
|
|
|
|
|
// ___________________________________________________________________________
|
|
|
|
// Function: DllConfig
|
|
|
|
// Purpose: This function is optional function that is provided
|
|
|
|
// to allow the user to configure the DLL
|
|
|
|
// input: A handle to the window that calls this function
|
|
|
|
// output: none
|
|
|
|
//
|
2009-01-07 21:40:55 +00:00
|
|
|
EXPORT void CALL DllConfig(HWND _hParent);
|
2009-01-07 18:21:22 +00:00
|
|
|
|
|
|
|
// ___________________________________________________________________________
|
|
|
|
// Function: DllDebugger
|
|
|
|
// Purpose: Open the debugger
|
|
|
|
// input: a handle to the window that calls this function
|
|
|
|
// output: none
|
|
|
|
//
|
2009-01-07 21:40:55 +00:00
|
|
|
EXPORT void CALL DllDebugger(HWND _hParent, bool Show);
|
|
|
|
|
|
|
|
// ___________________________________________________________________________
|
|
|
|
// Function: DllSetGlobals
|
|
|
|
// Purpose: Set the pointer for globals variables
|
|
|
|
// input: a pointer to the global struct
|
|
|
|
// output: none
|
|
|
|
//
|
|
|
|
EXPORT void CALL SetDllGlobals(PLUGIN_GLOBALS* _pPluginGlobals);
|
2009-01-15 06:48:15 +00:00
|
|
|
|
2009-01-17 08:32:44 +00:00
|
|
|
// ___________________________________________________________________________
|
2009-01-15 06:48:15 +00:00
|
|
|
// Function: Initialize
|
|
|
|
// Purpose: Initialize the plugin
|
|
|
|
// input: Init
|
|
|
|
// output: none
|
|
|
|
//
|
|
|
|
EXPORT void CALL Initialize(void *init);
|
2009-01-17 08:32:44 +00:00
|
|
|
|
|
|
|
// ___________________________________________________________________________
|
2009-01-15 06:48:15 +00:00
|
|
|
// Function: Shutdown
|
|
|
|
// Purpose: This function is called when the emulator is shutting down
|
|
|
|
// a game allowing the dll to de-initialise.
|
|
|
|
// input: none
|
|
|
|
// output: none
|
|
|
|
//
|
|
|
|
EXPORT void CALL Shutdown(void);
|
|
|
|
|
2009-01-17 08:32:44 +00:00
|
|
|
// ___________________________________________________________________________
|
2009-01-15 06:48:15 +00:00
|
|
|
// Function: DoState
|
|
|
|
// Purpose: Saves/load state
|
|
|
|
// input/output: ptr
|
|
|
|
// input: mode
|
|
|
|
//
|
|
|
|
EXPORT void CALL DoState(unsigned char **ptr, int mode);
|
2009-09-02 21:00:45 +00:00
|
|
|
|
Now you can switch between Emulated and Real WiiMotes, connect more Real Wiimotes and even pair them up (if you have MS BT Stack) during gameplay!
All you gotta do is Pause the emulation! That's useful for when your batteries run out during gameplay, for example...
But if you change the WiiMote source (between Emulated, Real or Inactive) you must disconnect and reconnect (Menu Tools -> Connect WiiMote) the WiiMotes affected by the change...
Thanks to jack.fr0st who did all the emulation state notification work!
Now every plugin has a way to know the current emulation state (paused, stopped or playing)
@ayuanx: I thought about doing a PostMessage(g_WiimoteInitialize.hWnd, WM_USER, WIIMOTE_DISCONNECT, current_number); so that the user gets asked to reconnect that WiiMote, trying to avoid having to disconnect and reconnect, but it didn't work because shooting that message only asks to reconnect, doesn't do a disconnect... Do you have any ideas on how to accomplish that?
Also, if anyone could check if Issue 1916 is finally fixed... Or at least when is the cursor being hidden or not...
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4789 8ced0084-cf51-0410-be5f-012b33b47a6e
2010-01-06 19:26:52 +00:00
|
|
|
// ___________________________________________________________________________
|
|
|
|
// Function: EmuStateChange
|
|
|
|
// Purpose: Notifies the plugin of a change in emulation state
|
|
|
|
// input: newState
|
|
|
|
// output: none
|
|
|
|
//
|
|
|
|
EXPORT void CALL EmuStateChange(PLUGIN_EMUSTATE newState);
|
2009-01-17 08:21:49 +00:00
|
|
|
|
2009-01-15 06:48:15 +00:00
|
|
|
|
2008-12-08 04:46:09 +00:00
|
|
|
#if defined(__cplusplus)
|
2009-01-17 08:21:49 +00:00
|
|
|
}
|
2008-12-08 04:46:09 +00:00
|
|
|
#endif
|
2009-01-17 08:21:49 +00:00
|
|
|
|
|
|
|
#endif // _PLUGINS_H_INCLUDED__
|