/**************************************************************************** * * * Project64 - A Nintendo 64 emulator. * * http://www.pj64-emu.com/ * * Copyright (C) 2016 Project64. All rights reserved. * * * * License: * * GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html * * version 2 of the License, or (at your option) any later version. * * * ****************************************************************************/ #include "Controller_1.1.h" #include "Version.h" #include #include #ifdef ANDROID #include #include #define printf(...) __android_log_print(ANDROID_LOG_VERBOSE, "PluginInput", __VA_ARGS__) #endif static CONTROL_INFO g_control_info; BUTTONS g_buttons; void ShowAboutWindow (void * hParent); /****************************************************************** Function: CloseDLL Purpose: This function is called when the emulator is closing down allowing the dll to de-initialise. input: none output: none *******************************************************************/ EXPORT void CALL CloseDLL (void) { } /****************************************************************** Function: ControllerCommand Purpose: To process the raw data that has just been sent to a specific controller. input: - Controller Number (0 to 3) and -1 signalling end of processing the pif ram. - Pointer of data to be processed. output: none note: This function is only needed if the DLL is allowing raw data, or the plugin is set to raw the data that is being processed looks like this: initilize controller: 01 03 00 FF FF FF read controller: 01 04 01 FF FF FF FF *******************************************************************/ EXPORT void CALL ControllerCommand ( int /*Control*/, uint8_t * /*Command*/) { } /****************************************************************** Function: DllAbout Purpose: This function is optional function that is provided to give further information about the DLL. input: a handle to the window that calls this function output: none *******************************************************************/ EXPORT void CALL DllAbout ( void * hParent ) { #ifdef _WIN32 ShowAboutWindow(hParent); #endif } /****************************************************************** 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 *******************************************************************/ EXPORT void CALL DllConfig ( void * /*hParent*/ ) { } /****************************************************************** Function: DllTest Purpose: This function is optional function that is provided to allow the user to test the dll input: a handle to the window that calls this function output: none *******************************************************************/ EXPORT void CALL DllTest ( void * /*hParent*/ ) { } /****************************************************************** 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 stucture that needs to be filled by the function. (see def above) output: none *******************************************************************/ EXPORT void CALL GetDllInfo ( PLUGIN_INFO * PluginInfo ) { PluginInfo->Version = 0x0101; PluginInfo->Type = PLUGIN_TYPE_CONTROLLER; #ifdef _DEBUG sprintf(PluginInfo->Name, "Android Input Debug Plugin %s", VER_FILE_VERSION_STR); #else sprintf(PluginInfo->Name, "Android Input Plugin %s", VER_FILE_VERSION_STR); #endif } /****************************************************************** Function: GetKeys Purpose: To get the current state of the controllers buttons. input: - Controller Number (0 to 3) - A pointer to a BUTTONS structure to be filled with the controller state. output: none *******************************************************************/ EXPORT void CALL GetKeys(int Control, BUTTONS * Keys ) { if (Control == 0) { *Keys = g_buttons; } } /****************************************************************** Function: InitiateControllers Purpose: This function initialises how each of the controllers should be handled. input: - The handle to the main window. - A controller structure that needs to be filled for the emulator to know how to handle each controller. output: none *******************************************************************/ EXPORT void CALL InitiateControllers (CONTROL_INFO ControlInfo) { g_control_info = ControlInfo; g_control_info.Controls[0].Present = true; g_control_info.Controls[0].Plugin = PLUGIN_MEMPAK; } /****************************************************************** Function: ReadController Purpose: To process the raw data in the pif ram that is about to be read. input: - Controller Number (0 to 3) and -1 signalling end of processing the pif ram. - Pointer of data to be processed. output: none note: This function is only needed if the DLL is allowing raw data. *******************************************************************/ EXPORT void CALL ReadController ( int /*Control*/, uint8_t * /*Command*/ ) { } /****************************************************************** Function: RomClosed Purpose: This function is called when a rom is closed. input: none output: none *******************************************************************/ EXPORT void CALL RomClosed (void) { } /****************************************************************** Function: RomOpen Purpose: This function is called when a rom is open. (from the emulation thread) input: none output: none *******************************************************************/ EXPORT void CALL RomOpen (void) { memset(&g_buttons, 0, sizeof(g_buttons)); } /****************************************************************** Function: WM_KeyDown Purpose: To pass the WM_KeyDown message from the emulator to the plugin. input: wParam and lParam of the WM_KEYDOWN message. output: none *******************************************************************/ EXPORT void CALL WM_KeyDown( uint32_t /*wParam*/, uint32_t /*lParam*/ ) { } /****************************************************************** Function: WM_KeyUp Purpose: To pass the WM_KEYUP message from the emulator to the plugin. input: wParam and lParam of the WM_KEYDOWN message. output: none *******************************************************************/ EXPORT void CALL WM_KeyUp( uint32_t /*wParam*/, uint32_t /*lParam*/ ) { } #ifdef ANDROID EXPORT void CALL Java_emu_project64_jni_NativeInput_setState(JNIEnv* env, jclass jcls, jint controllerNum, jbooleanArray Buttons, jint pXAxis, jint pYAxis) { printf("setState controllerNum = %d",controllerNum); jboolean* elements = env->GetBooleanArrayElements(Buttons, NULL); if (controllerNum == 0) { g_buttons.R_DPAD = elements[0]; g_buttons.L_DPAD = elements[1]; g_buttons.D_DPAD = elements[2]; g_buttons.U_DPAD = elements[3]; g_buttons.START_BUTTON = elements[4]; g_buttons.Z_TRIG = elements[5]; g_buttons.B_BUTTON = elements[6]; g_buttons.A_BUTTON = elements[7]; g_buttons.R_CBUTTON = elements[8]; g_buttons.L_CBUTTON = elements[9]; g_buttons.D_CBUTTON = elements[10]; g_buttons.U_CBUTTON = elements[11]; g_buttons.R_TRIG = elements[12]; g_buttons.L_TRIG = elements[13]; g_buttons.Reserved1 = elements[14]; g_buttons.Reserved2 = elements[15]; g_buttons.Y_AXIS = pXAxis; g_buttons.X_AXIS = pYAxis; } env->ReleaseBooleanArrayElements(Buttons, elements, 0); } #endif