diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 1a452446af..08e7f08a49 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -433,7 +433,11 @@ void CFrame::OnPlay(wxCommandEvent& WXUNUSED (event)) void CFrame::OnStop(wxCommandEvent& WXUNUSED (event)) { - if (Core::GetState() != Core::CORE_UNINITIALIZED) + // Ask for confirmation in case the user accidently clicked Stop + int answer = wxMessageBox("Are you sure you want to stop the current emulation?", + "Confirm", wxYES_NO); + + if (answer == wxYES && Core::GetState() != Core::CORE_UNINITIALIZED) { Core::Stop(); UpdateGUI(); diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/Debugger/Debugger.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/Debugger/Debugger.cpp index 29257677e1..d77c2f35aa 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/Debugger/Debugger.cpp +++ b/Source/Plugins/Plugin_DSP_HLE/Src/Debugger/Debugger.cpp @@ -43,9 +43,9 @@ BEGIN_EVENT_TABLE(CDebugger,wxDialog) EVT_BUTTON(ID_UPD,CDebugger::OnUpdate) // buttons - EVT_CHECKBOX(IDC_CHECK0,CDebugger::SaveFile) // options - EVT_CHECKBOX(IDC_CHECK2,CDebugger::ShowHideConsole) + EVT_CHECKBOX(IDC_CHECK1,CDebugger::SaveFile) // options EVT_CHECKBOX(IDC_CHECK3,CDebugger::OnlyLooping) + EVT_CHECKBOX(IDC_CHECK4,CDebugger::ShowHideConsole) EVT_RADIOBOX(IDC_RADIO1,CDebugger::ChangeFrequency) // update frequency @@ -404,8 +404,7 @@ void CDebugger::ShowHideConsole(wxCommandEvent& event) } void CDebugger::DoShowHideConsole() -{ - +{ if(m_Check[2]->IsChecked()) { OpenConsole(); diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/Logging/Console.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/Logging/Console.cpp index d72590283f..7548066607 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/Logging/Console.cpp +++ b/Source/Plugins/Plugin_DSP_HLE/Src/Logging/Console.cpp @@ -29,7 +29,7 @@ // On and off bool g_consoleEnable = true; int gSaveFile = 0; -#define DEBUGG +#define DEBUG_HLE // -------------------- @@ -40,11 +40,11 @@ int nFiles = 4; // -------------------- // Create handles -#ifdef DEBUGG -FILE* __fStdOut[4]; // you have to update this manually, we can't place a nFiles in there +#ifdef DEBUG_HLE + FILE* __fStdOut[4]; // you have to update this manually, we can't place a nFiles in there #endif #ifdef _WIN32 -HANDLE __hStdOut = NULL; + HANDLE __hStdOut = NULL; #endif @@ -55,8 +55,7 @@ is closed */ // ------------- void startConsoleWin(int width, int height, char* fname) { - -#if defined(DEBUGG) && defined(_WIN32) +#if defined(DEBUG_HLE) defined(_WIN32) AllocConsole(); @@ -84,6 +83,7 @@ void startConsoleWin(int width, int height, char* fname) } } // --------------- + #endif } @@ -92,7 +92,7 @@ void startConsoleWin(int width, int height, char* fname) // File printf function int aprintf(int a, char *fmt, ...) { -#if defined(DEBUGG) && defined(_WIN32) +#if defined(DEBUG_HLE) && defined(_WIN32) if(gSaveFile) { char s[5000]; // WARNING: mind this value @@ -126,7 +126,7 @@ int aprintf(int a, char *fmt, ...) // Printf to screen function int wprintf(char *fmt, ...) { -#if defined(DEBUGG) && defined(_WIN32) +#if defined(DEBUG_HLE) && defined(_WIN32) char s[5000]; // WARNING: mind this value va_list argptr; int cnt; @@ -151,9 +151,11 @@ int wprintf(char *fmt, ...) } +// --------------------------------------------------------------------------------------- +// Clear console screen void ClearScreen() { -#if defined(DEBUGG) && defined(_WIN32) +#if defined(DEBUG_HLE) && defined(_WIN32) if(g_consoleEnable) { COORD coordScreen = { 0, 0 }; @@ -175,7 +177,10 @@ void ClearScreen() #endif } -#if defined(DEBUGG) && defined(_WIN32) + +// --------------------------------------------------------------------------------------- +// Get window handle of console window to be able to resize it +#if defined(DEBUG_HLE) && defined(_WIN32) HWND GetConsoleHwnd(void) { @@ -215,4 +220,4 @@ HWND GetConsoleHwnd(void) return(hwndFound); } -#endif // win32 +#endif // win32 \ No newline at end of file diff --git a/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj b/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj index 7adc496ce6..a42e02ba20 100644 --- a/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj +++ b/Source/Plugins/Plugin_Wiimote_Test/Plugin_Wiimote_Test.vcproj @@ -521,6 +521,18 @@ > + + + + + + diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/Console.cpp b/Source/Plugins/Plugin_Wiimote_Test/Src/Console.cpp new file mode 100644 index 0000000000..c077ddd9b8 --- /dev/null +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/Console.cpp @@ -0,0 +1,223 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// 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, version 2.0. + +// 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 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +// -------------------- +// Includes +#include +#include +#ifdef _WIN32 +#include +#endif + + +// -------------------- +// On and off +bool g_consoleEnable = true; +int gSaveFile = 0; +#define DEBUG_WIIMOTE + + +// -------------------- +// Settings +int nFiles = 1; + + +// -------------------- +// Create handles + +#ifdef DEBUG_WIIMOTE + FILE* __fStdOut[1]; // you have to update this manually, we can't place a nFiles in there +#endif +#ifdef _WIN32 + HANDLE __hStdOut = NULL; +#endif + + +// ======================================================================================= +/* Start console window - width and height is the size of console window, if you specify +fname, the output will also be written to this file. TODO: Close the file pointer when the app +is closed */ +// ------------- +void startConsoleWin(int width, int height, char* fname) +{ +#if defined(DEBUG_WIIMOTE) && defined(_WIN32) + + AllocConsole(); + + SetConsoleTitle(fname); + __hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); + + COORD co = {width,height}; + SetConsoleScreenBufferSize(__hStdOut, co); + + SMALL_RECT coo = {0,0,(width - 1),70}; // top, left, right, bottom + SetConsoleWindowInfo(__hStdOut, TRUE, &coo); + + // --------------------------------------------------------------------------------------- + // Write to a file + if(fname) + { + for(int i = 0; i < nFiles; i++) + { + // Edit the log file name + std::string FileEnding = ".log"; + std::string FileName = fname; + char buffer[33]; itoa(i, buffer, 10); // convert number to string + std::string FullFilename = (FileName + buffer + FileEnding); + __fStdOut[i] = fopen(FullFilename.c_str(), "w"); + } + } + // --------------- + +#endif +} + + +// --------------------------------------------------------------------------------------- +// File printf function +int aprintf(int a, char *fmt, ...) +{ +#if defined(DEBUG_WIIMOTE) && defined(_WIN32) + if(gSaveFile) + { + char s[500]; // WARNING: mind this value + va_list argptr; + int cnt; + + va_start(argptr, fmt); + cnt = vsnprintf(s, 500, fmt, argptr); // remember to update this value to + va_end(argptr); + + // --------------------------------------------------------------------------------------- + if(__fStdOut[a]) // TODO: make this work, we have to set all default values to NULL + //to make it work + fprintf(__fStdOut[a], s); + // ------------- + + return(cnt); + } + else + { + return 0; + } +#else + return 0; +#endif +} + + + +// --------------------------------------------------------------------------------------- +// Printf to screen function +int wprintf(char *fmt, ...) +{ +#if defined(DEBUG_WIIMOTE) && defined(_WIN32) + char s[500]; // WARNING: mind this value + va_list argptr; + int cnt; + + va_start(argptr, fmt); + cnt = vsnprintf(s, 500, fmt, argptr); + va_end(argptr); + + DWORD cCharsWritten; + + // --------------------------------------------------------------------------------------- + if(__hStdOut) + { + WriteConsole(__hStdOut, s, strlen(s), &cCharsWritten, NULL); + } + // ------------- + + return(cnt); +#else + return 0; +#endif +} + + +// --------------------------------------------------------------------------------------- +// Clear console screen +void ClearScreen() +{ +#if defined(_WIN32) + if(g_consoleEnable) + { + COORD coordScreen = { 0, 0 }; + DWORD cCharsWritten; + CONSOLE_SCREEN_BUFFER_INFO csbi; + DWORD dwConSize; + + HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); + + GetConsoleScreenBufferInfo(hConsole, &csbi); + dwConSize = csbi.dwSize.X * csbi.dwSize.Y; + FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, + coordScreen, &cCharsWritten); + GetConsoleScreenBufferInfo(hConsole, &csbi); + FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, + coordScreen, &cCharsWritten); + SetConsoleCursorPosition(hConsole, coordScreen); + } +#endif +} + + +// --------------------------------------------------------------------------------------- +// Get window handle of console window to be able to resize it +#if defined(_WIN32) +HWND GetConsoleHwnd(void) +{ + + #define MY_BUFSIZE 1024 // Buffer size for console window titles. + HWND hwndFound; // This is what is returned to the caller. + char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated + // WindowTitle. + char pszOldWindowTitle[MY_BUFSIZE]; // Contains original + // WindowTitle. + + // Fetch current window title. + + GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE); + + // Format a "unique" NewWindowTitle. + + wsprintf(pszNewWindowTitle,"%d/%d", + GetTickCount(), + GetCurrentProcessId()); + + // Change current window title. + + SetConsoleTitle(pszNewWindowTitle); + + // Ensure window title has been updated. + + Sleep(40); + + // Look for NewWindowTitle. + + hwndFound = FindWindow(NULL, pszNewWindowTitle); + + // Restore original window title. + + SetConsoleTitle(pszOldWindowTitle); + + return(hwndFound); + +} +#endif // win32 diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/Console.h b/Source/Plugins/Plugin_Wiimote_Test/Src/Console.h new file mode 100644 index 0000000000..401b374ffd --- /dev/null +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/Console.h @@ -0,0 +1,26 @@ +// Copyright (C) 2003-2008 Dolphin Project. + +// 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, version 2.0. + +// 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 2.0 for more details. + +// A copy of the GPL 2.0 should have been included with the program. +// If not, see http://www.gnu.org/licenses/ + +// Official SVN repository and contact information can be found at +// http://code.google.com/p/dolphin-emu/ + + +void startConsoleWin(int width, int height, char* fname); +int wprintf(char *fmt, ...); +int aprintf(int a, char *fmt, ...); +void ClearScreen(); + +#ifdef _WIN32 + HWND GetConsoleHwnd(void); +#endif \ No newline at end of file diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp b/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp index 16f158ae2e..55f233c045 100644 --- a/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/main.cpp @@ -28,6 +28,8 @@ #include "wiimote_emu.h" #include "wiimote_real.h" +#include "Console.h" // for startConsoleWin, wprintf, GetConsoleHwnd + SWiimoteInitialize g_WiimoteInitialize; #define VERSION_STRING "0.1" @@ -35,8 +37,6 @@ bool g_UseRealWiiMote = false; HINSTANCE g_hInstance; - - class wxDLLApp : public wxApp { bool OnInit() @@ -119,6 +119,11 @@ extern "C" void Wiimote_Initialize(SWiimoteInitialize _WiimoteInitialize) WiiMoteEmu::Initialize(); + + // Debugging window + /*startConsoleWin(100, 30, "Wiimote"); // give room for 20 rows + wprintf("Wiimote console opened\n"); + MoveWindow(GetConsoleHwnd(), 0,400, 100*8,30*14, true); // move window, TODO: make this*/ } extern "C" void Wiimote_DoState(void* ptr, int mode) diff --git a/Source/Plugins/Plugin_Wiimote_Test/Src/wiimote_emu.cpp b/Source/Plugins/Plugin_Wiimote_Test/Src/wiimote_emu.cpp index 6ea1d6f367..3bf6e9e0cc 100644 --- a/Source/Plugins/Plugin_Wiimote_Test/Src/wiimote_emu.cpp +++ b/Source/Plugins/Plugin_Wiimote_Test/Src/wiimote_emu.cpp @@ -18,9 +18,11 @@ #include "pluginspecs_wiimote.h" +#include #include #include "common.h" #include "wiimote_hid.h" +#include "Console.h" // for startConsoleWin, wprintf, GetConsoleHwnd extern SWiimoteInitialize g_WiimoteInitialize; extern void __Log(int log, const char *format, ...); @@ -416,11 +418,142 @@ void FillReportInfo(wm_core& _core) #endif } +// ----------------------------- +// Global declarations for FillReportAcc. The accelerometer x, y and z values range from +// 0x00 to 0xff with 0x80 being neutral and 0x00 being - and 0xff being + +// ---------- +//int A = 64, B = 64, C = 64; // for debugging +int X = 0x80, Y = 0x80, Z = 0x80; // global so they can be changed during debugging +u8 x = 0x80, y = 0x80, z = 0x80; +int shake = -1; // for the shake function +std::vector yhist(15); // for the tilt function + void FillReportAcc(wm_accel& _acc) { - _acc.x = 0x00; - _acc.y = 0x00; - _acc.z = 0x00; + // ----------------------------- + // Wiimote to Gamepad translations + // ---------- + // Tilting Wiimote (Wario Land aiming, Mario Kart steering) + if(GetAsyncKeyState('3')) + y+=2; // aim left + else if(GetAsyncKeyState('4')) + y-=2; // aim right + + // Single shake of Wiimote while holding it sideways (Wario Land pound ground) + if(GetAsyncKeyState('S')) + { + z = 0; + y = 0; + shake = 2; + } + else if(shake == 2) + { + z = 128; + y = 0; + shake = 1; + } + else if(shake == 1) + { + z = Z; + y = Y; + shake = -1; + } + // ---------- + + + // ----------------------------- + // Add new value and move all back + // ---------- + bool ypressed = false; + + yhist[yhist.size() - 1] = ( + GetAsyncKeyState('3') ? true : false + || GetAsyncKeyState('4') ? true : false + || shake > 0 + ); + for (int i = 1; i < yhist.size(); i++) + { + yhist[i-1] = yhist[i]; + if(yhist[i]) ypressed = true; + } + + if(!ypressed) // y was not pressed a single time + { + y = Y; + } + // ---------- + + + // Write values + _acc.x = X; + _acc.y = y; + _acc.z = z; + + + // ---------------------------- + // Debugging for translating Wiimote to Gamepad + // ---------- + /* + if(GetAsyncKeyState('5')) + A-=8; + else if(GetAsyncKeyState('6')) + A+=8; + if(GetAsyncKeyState('7')) + B-=8; + else if(GetAsyncKeyState('8')) + B+=8; + if(GetAsyncKeyState('9')) + C-=8; + else if(GetAsyncKeyState('0')) + C+=8; + + + if(GetAsyncKeyState(VK_NUMPAD1)) + X+=8; + else if(GetAsyncKeyState(VK_NUMPAD2)) + X-=8; + if(GetAsyncKeyState(VK_NUMPAD4)) + Y+=8; + else if(GetAsyncKeyState(VK_NUMPAD5)) + Y-=8; + if(GetAsyncKeyState(VK_NUMPAD7)) + Z+=8; + else if(GetAsyncKeyState(VK_NUMPAD8)) + Z-=8; + + if(GetAsyncKeyState('S')) + { + z = Z + C; + } + else + { + z = Z; + } + + if(GetAsyncKeyState('D')) + { + y = Y + B; + } + else + { + y = Y; + } + + if(GetAsyncKeyState('F')) + { + z = Z + C; + y = Y + B; + } + else if(!GetAsyncKeyState('S') && !GetAsyncKeyState('D')) + { + z = Z; + y = Y; + } + + wprintf("x: %03i | y: %03i | z: %03i | A:%i B:%i C:%i X:%i Y:%i Z:%i\n", _acc.x, _acc.y, _acc.z, + A, B, C, + X, Y, Z); + */ } void FillReportIR(wm_ir_extended& _ir0, wm_ir_extended& _ir1)