Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Index: Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.cpp
- ===================================================================
- --- Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.cpp (revision 4793)
- +++ Plugins/Plugin_Wiimote/Src/ConfigBasicDlg.cpp (working copy)
- @@ -109,6 +109,7 @@
- m_RecordingConfigFrame->ShowModal();
- m_RecordingConfigFrame->Destroy();
- m_RecordingConfigFrame = NULL;
- + m_Page = g_Config.CurrentPage;
- break;
- #ifdef WIN32
- case ID_BUTTONPAIRUP:
- Index: Plugins/Plugin_Wiimote/Src/ConfigRecording.cpp
- ===================================================================
- --- Plugins/Plugin_Wiimote/Src/ConfigRecording.cpp (revision 4793)
- +++ Plugins/Plugin_Wiimote/Src/ConfigRecording.cpp (working copy)
- @@ -137,6 +137,13 @@
- m_GaugeAccel[1] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- m_GaugeAccel[2] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- + m_GaugeAccelNunchuk[0] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- + m_GaugeAccelNunchuk[1] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- + m_GaugeAccelNunchuk[2] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- + m_GaugeGForceNunchuk[0] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- + m_GaugeGForceNunchuk[1] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- + m_GaugeGForceNunchuk[2] = new wxGauge( m_PageRecording, wxID_ANY, 255, wxDefaultPosition, wxSize(Gw, Gh), wxGA_VERTICAL | wxNO_BORDER | wxGA_SMOOTH);
- +
- // The text controls
- m_TextIR = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Cursor: 000 000\nDistance: 0000"));
- @@ -152,14 +159,22 @@
- sBoxAccel[0] = new wxBoxSizer(wxVERTICAL);
- sBoxAccel[1] = new wxBoxSizer(wxVERTICAL);
- sBoxAccel[2] = new wxBoxSizer(wxVERTICAL);
- -
- + wxBoxSizer * sBoxAccelNunchuk[3];
- + sBoxAccelNunchuk[0] = new wxBoxSizer(wxVERTICAL);
- + sBoxAccelNunchuk[1] = new wxBoxSizer(wxVERTICAL);
- + sBoxAccelNunchuk[2] = new wxBoxSizer(wxVERTICAL);
- + wxBoxSizer * sBoxGForceNunchuk[3];
- + sBoxGForceNunchuk[0] = new wxBoxSizer(wxVERTICAL);
- + sBoxGForceNunchuk[1] = new wxBoxSizer(wxVERTICAL);
- + sBoxGForceNunchuk[2] = new wxBoxSizer(wxVERTICAL);
- +
- wxStaticText * m_TextBattery = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Batt."), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- wxStaticText * m_TextRoll = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Roll"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- wxStaticText * m_TextPitch = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Pitch"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- - wxStaticText *m_TextX[2], *m_TextY[2], *m_TextZ[2];
- - m_TextX[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextX[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- - m_TextY[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextY[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- - m_TextZ[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextZ[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- + wxStaticText *m_TextX[4], *m_TextY[4], *m_TextZ[4];
- + m_TextX[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextX[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextX[2] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextX[3] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("X"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- + m_TextY[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextY[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextY[2] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextY[3] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Y"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- + m_TextZ[0] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextZ[1] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextZ[2] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE); m_TextZ[3] = new wxStaticText(m_PageRecording, wxID_ANY, wxT("Z"), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE);
- sBoxBattery->Add(m_GaugeBattery, 0, wxEXPAND | (wxALL), 0); sBoxBattery->Add(m_TextBattery, 0, wxEXPAND | (wxUP), 5);
- @@ -174,13 +189,28 @@
- sBoxAccel[1]->Add(m_GaugeAccel[1], 0, wxEXPAND | (wxUP | wxDOWN), 0); sBoxAccel[1]->Add(m_TextY[1], 0, wxEXPAND | (wxUP), 5);
- sBoxAccel[2]->Add(m_GaugeAccel[2], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxAccel[2]->Add(m_TextZ[1], 0, wxEXPAND | (wxUP), 5);
- + sBoxGForceNunchuk[0]->Add(m_GaugeGForceNunchuk[0], 0, wxEXPAND | (wxUP | wxDOWN | wxLEFT), 0); sBoxGForceNunchuk[0]->Add(m_TextX[2], 0, wxEXPAND | (wxUP), 5);
- + sBoxGForceNunchuk[1]->Add(m_GaugeGForceNunchuk[1], 0, wxEXPAND | (wxUP | wxDOWN), 0); sBoxGForceNunchuk[1]->Add(m_TextY[2], 0, wxEXPAND | (wxUP), 5);
- + sBoxGForceNunchuk[2]->Add(m_GaugeGForceNunchuk[2], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxGForceNunchuk[2]->Add(m_TextZ[2], 0, wxEXPAND | (wxUP), 5);
- +
- + sBoxAccelNunchuk[0]->Add(m_GaugeAccelNunchuk[0], 0, wxEXPAND | (wxUP | wxDOWN | wxLEFT), 0); sBoxAccelNunchuk[0]->Add(m_TextX[3], 0, wxEXPAND | (wxUP), 5);
- + sBoxAccelNunchuk[1]->Add(m_GaugeAccelNunchuk[1], 0, wxEXPAND | (wxUP | wxDOWN), 0); sBoxAccelNunchuk[1]->Add(m_TextY[3], 0, wxEXPAND | (wxUP), 5);
- + sBoxAccelNunchuk[2]->Add(m_GaugeAccelNunchuk[2], 0, wxEXPAND | (wxUP | wxDOWN | wxRIGHT), 0); sBoxAccelNunchuk[2]->Add(m_TextZ[3], 0, wxEXPAND | (wxUP), 5);
- +
- +
- +
- wxStaticBoxSizer * sbRealStatus = new wxStaticBoxSizer(wxVERTICAL, m_PageRecording, wxT("Status"));
- wxStaticBoxSizer * sbRealIR = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("IR"));
- wxStaticBoxSizer * sbRealBattery = new wxStaticBoxSizer(wxVERTICAL, m_PageRecording, wxT("Battery"));
- wxStaticBoxSizer * sbRealRoll = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("Roll and Pitch"));
- wxStaticBoxSizer * sbRealGForce = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("G-Force"));
- wxStaticBoxSizer * sbRealAccel = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("Accelerometer"));
- + wxStaticBoxSizer * sbRealGForceNunchuk = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("G-Force NC"));
- + wxStaticBoxSizer * sbRealAccelNunchuk = new wxStaticBoxSizer(wxHORIZONTAL, m_PageRecording, wxT("Accelerometer NC"));
- +
- +
- +
- // Status
- sbRealStatus->Add(m_TextUpdateRate, 0, wxEXPAND | (wxALL), 5);
- sbRealStatus->Add(m_UpdateMeters, 0, wxEXPAND | (wxLEFT | wxRIGHT | wxDOWN), 5);
- @@ -190,6 +220,8 @@
- sbRealRoll->Add(sBoxRoll[0], 0, wxEXPAND | (wxALL), 5); sbRealRoll->Add(sBoxRoll[1], 0, wxEXPAND | (wxALL), 5);
- sbRealGForce->Add(sBoxGForce[0], 0, wxEXPAND | (wxALL), 5); sbRealGForce->Add(sBoxGForce[1], 0, wxEXPAND | (wxALL), 5); sbRealGForce->Add(sBoxGForce[2], 0, wxEXPAND | (wxALL), 5);
- sbRealAccel->Add(sBoxAccel[0], 0, wxEXPAND | (wxALL), 5); sbRealAccel->Add(sBoxAccel[1], 0, wxEXPAND | (wxALL), 5); sbRealAccel->Add(sBoxAccel[2], 0, wxEXPAND | (wxALL), 5);
- + sbRealAccelNunchuk->Add(sBoxAccelNunchuk[0], 0, wxEXPAND | (wxALL), 5); sbRealAccelNunchuk->Add(sBoxAccelNunchuk[1], 0, wxEXPAND | (wxALL), 5); sbRealAccelNunchuk->Add(sBoxAccelNunchuk[2], 0, wxEXPAND | (wxALL), 5);
- + sbRealGForceNunchuk->Add(sBoxGForceNunchuk[0], 0, wxEXPAND | (wxALL), 5); sbRealGForceNunchuk->Add(sBoxGForceNunchuk[1], 0, wxEXPAND | (wxALL), 5); sbRealGForceNunchuk->Add(sBoxGForceNunchuk[2], 0, wxEXPAND | (wxALL), 5);
- // Vertical leftmost status
- wxBoxSizer * sbStatusLeft = new wxBoxSizer(wxVERTICAL);
- @@ -202,6 +234,8 @@
- sbRealWiimoteStatus->Add(sbRealRoll, 0, wxEXPAND | (wxLEFT), 5);
- sbRealWiimoteStatus->Add(sbRealGForce, 0, wxEXPAND | (wxLEFT), 5);
- sbRealWiimoteStatus->Add(sbRealAccel, 0, wxEXPAND | (wxLEFT), 5);
- + sbRealWiimoteStatus->Add(sbRealAccelNunchuk, 0, wxEXPAND | (wxLEFT), 5);
- + sbRealWiimoteStatus->Add(sbRealGForceNunchuk, 0, wxEXPAND | (wxLEFT), 5);
- m_GaugeBattery->SetToolTip(wxT("Press '+' to show the current status. Press '-' to stop recording the status."));
- @@ -346,7 +380,7 @@
- TmpStr += StringFromFormat("%s", m_vRecording.at(i).z >= 0 ? StringFromFormat("+%03i", m_vRecording.at(i).z).c_str() : StringFromFormat("%04i", m_vRecording.at(i).z).c_str());
- if (i < ((int)m_vRecording.size() - 1)) TmpStr += ",";
- - //DEBUG_LOG(WIIMOTE, "%s", TmpStr.c_str());
- + DEBUG_LOG(WIIMOTE, "%s", TmpStr.c_str());
- // Write the IR data
- TmpIR += ArrayToString(m_vRecording.at(i).IR, IRBytes, 0, 30, false);
- Index: Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.cpp
- ===================================================================
- --- Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.cpp (revision 4793)
- +++ Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.cpp (working copy)
- @@ -21,7 +21,9 @@
- #include "ConfigBasicDlg.h"
- #include "Config.h"
- #include "EmuMain.h" // for LoadRecordedMovements()
- +#include "wiimote_real.h"
- +
- BEGIN_EVENT_TABLE(WiimoteRecordingConfigDialog,wxDialog)
- EVT_CLOSE(WiimoteRecordingConfigDialog::OnClose)
- EVT_BUTTON(ID_CLOSE, WiimoteRecordingConfigDialog::CloseClick)
- @@ -95,7 +97,8 @@
- switch(event.GetId())
- {
- case ID_CLOSE:
- - Close();
- + SetEvent(WiiMoteReal::g_StopThreadTemporary); //direct closing will result in crash @ReadWiimote, also dont try to waitforobject here, it will result in deadlock! because this thread is still needed to progress in the Readwiimote to get to the waitingobject @readwiimote itself.....
- + //Problem lies mainly in Readwiimote(), closing here leaves the thread readWiimote thread, trying to access vars which aint there anymore.
- break;
- case ID_APPLY:
- SaveFile();
- @@ -141,4 +144,3 @@
- if(ControlsCreated) m_PageRecording->FindItem(i)->Enable(ActiveRecording);
- #endif
- }
- -
- Index: Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.h
- ===================================================================
- --- Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.h (revision 4793)
- +++ Plugins/Plugin_Wiimote/Src/ConfigRecordingDlg.h (working copy)
- @@ -28,6 +28,7 @@
- #include <wx/combobox.h>
- #include <wx/checkbox.h>
- #include <wx/panel.h>
- +#include "Thread.h"
- class WiimoteRecordingConfigDialog : public wxDialog
- {
- @@ -40,7 +41,6 @@
- long style = wxDEFAULT_DIALOG_STYLE | wxWANTS_CHARS);
- virtual ~WiimoteRecordingConfigDialog(){;}
- -
- void UpdateRecordingGUI(int Slot = 0);
- void LoadFile();
- void SaveFile();
- @@ -67,12 +67,16 @@
- wxGauge *m_GaugeBattery,
- *m_GaugeRoll[2],
- *m_GaugeGForce[3],
- - *m_GaugeAccel[3];
- + *m_GaugeAccel[3],
- + *m_GaugeAccelNunchuk[3],
- + *m_GaugeGForceNunchuk[3];
- private:
- DECLARE_EVENT_TABLE();
- bool ControlsCreated;
- + THREAD_RETURN SafeCloseReadWiimote_ThreadFunc2(void* arg);
- + Common::Thread* g_pReadThread2;
- wxPanel *m_PageRecording;
- wxButton *m_Close,
- Index: Plugins/Plugin_Wiimote/Src/ReadWiimote.cpp
- ===================================================================
- --- Plugins/Plugin_Wiimote/Src/ReadWiimote.cpp (revision 4793)
- +++ Plugins/Plugin_Wiimote/Src/ReadWiimote.cpp (working copy)
- @@ -85,8 +85,23 @@
- //if (IS_PRESSED(wm, WIIMOTE_BUTTON_ONE)) g_Run = false;
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_TWO)) DEBUG_LOG(WIIMOTE, "TWO pressed");
- if (IS_PRESSED(wm, WIIMOTE_BUTTON_HOME)) DEBUG_LOG(WIIMOTE, "HOME pressed");
- + // Create shortcut to the nunchuck
- + struct nunchuk_t* nc = NULL;
- + if (wm->exp.type == EXP_NUNCHUK) {
- +
- + nc = (nunchuk_t*)&wm->exp.nunchuk;
- + if (IS_PRESSED(nc, NUNCHUK_BUTTON_C))
- + DEBUG_LOG(WIIMOTE, "C pressed");
- + if (IS_PRESSED(nc, NUNCHUK_BUTTON_Z))
- + DEBUG_LOG(WIIMOTE, "Z pressed");
- + }
- +
- +
- +
- +
- +
- // Pressing minus will tell the wiimote we are no longer interested in movement.
- // This is useful because it saves battery power.
- if (IS_JUST_PRESSED(wm, WIIMOTE_BUTTON_MINUS))
- @@ -95,6 +110,7 @@
- wiiuse_set_ir(wm, 0);
- g_MotionSensing = false;
- }
- +
- // Turn aceelerometer and IR reporting on, there is some kind of bug that prevents us from turing these on
- // directly after each other, so we have to wait for another wiiuse_poll() this way
- if (IS_JUST_PRESSED(wm, WIIMOTE_BUTTON_PLUS))
- @@ -106,25 +122,24 @@
- if (g_MotionSensing && !WIIUSE_USING_IR(wm))
- wiiuse_set_ir(wm, 1);
- - // Print battery status
- + if (!m_RecordingConfigFrame) return;
- +
- + // Print battery status
- #if defined(HAVE_WX) && HAVE_WX
- if(m_RecordingConfigFrame && g_Config.bUpdateRealWiimote)
- m_RecordingConfigFrame->m_GaugeBattery->SetValue((int)floor((wm->battery_level * 100) + 0.5));
- #endif
- - // Create shortcut to the nunchuck
- - struct nunchuk_t* nc = NULL;
- - if (wm->exp.type == EXP_NUNCHUK)
- - nc = (nunchuk_t*)&wm->exp.nunchuk;
- // If the accelerometer is turned on then print angles
- if (WIIUSE_USING_ACC(wm) && WIIUSE_USING_IR(wm))
- {
- + /*
- std::string Tmp;
- Tmp += StringFromFormat("Roll: %2.1f ", wm->orient.roll);
- Tmp += StringFromFormat("Pitch: %2.1f ", wm->orient.pitch);
- Tmp += StringFromFormat("Battery: %1.2f\n", wm->battery_level);
- Tmp += StringFromFormat("G-Force x, y, z: %1.2f %1.2f %1.2f\n", wm->gforce.x, wm->gforce.y, wm->gforce.z);
- - Tmp += StringFromFormat("Accel x, y, z: %03i %03i %03i\n", wm->accel.x, wm->accel.y, wm->accel.z);
- + Tmp += StringFromFormat("Accel x, y, z: %03i %03i %03i\n", wm->accel.x, wm->accel.y, wm->accel.z); */
- // wm->event_buf is cleared at the end of all wiiuse_poll(), so wm->event_buf will always be zero
- // after that. To get the raw IR data we need to read the wiimote again. This seems to work most of the time,
- @@ -132,7 +147,7 @@
- if (wiiuse_io_read(wm))
- if (IRDataOK(wm))
- memcpy(g_EventBuffer, wm->event_buf, GetIRDataSize(wm));
- -
- +/*
- // Go through each of the 4 possible IR sources
- for (int i = 0; i < 4; ++i)
- {
- @@ -149,7 +164,7 @@
- {
- Tmp += "\n";
- Tmp += StringFromFormat("Nunchuck accel x, y, z: %03i %03i %03i\n", nc->accel.x, nc->accel.y, nc->accel.z);
- - }
- + } */
- //Tmp += "\n";
- //std::string TmpData = ArrayToString(g_EventBuffer, ReportSize, 0, 30);
- @@ -158,7 +173,7 @@
- //DEBUG_LOG(WIIMOTE, "%s", Tmp.c_str());
- #if defined(HAVE_WX) && HAVE_WX
- - if(m_RecordingConfigFrame)
- + if(m_RecordingConfigFrame && g_Config.bUpdateRealWiimote)
- {
- // Produce adjusted accelerometer values
- float _Gx = (float)(wm->accel.x - wm->accel_calib.cal_zero.x) / (float)wm->accel_calib.cal_g.x;
- @@ -170,18 +185,9 @@
- int Gy = (int)(_Gy * 100);
- int Gz = (int)(_Gz * 100);
- - // And for the Nunchuck
- - u8 AccelNX = 0, AccelNY = 0, AccelNZ = 0;
- - if(wm->exp.type == EXP_NUNCHUK)
- - {
- - if((nc->accel.x + g_Config.iAccNunNeutralX) <= 255) AccelNX = nc->accel.x + g_Config.iAccNunNeutralX;
- - if((nc->accel.y + g_Config.iAccNunNeutralY) <= 255) AccelNY = nc->accel.y + g_Config.iAccNunNeutralY;
- - if((nc->accel.z + g_Config.iAccNunNeutralZ) <= 255) AccelNZ = nc->accel.z + g_Config.iAccNunNeutralZ;
- - }
- -
- - if(g_Config.bUpdateRealWiimote)
- - {
- - // Update gauges
- +
- + { //Updating Wiimote Gauges.
- +
- m_RecordingConfigFrame->m_GaugeRoll[0]->SetValue(wm->orient.roll + 180);
- m_RecordingConfigFrame->m_GaugeRoll[1]->SetValue(wm->orient.pitch + 180);
- @@ -194,17 +200,47 @@
- m_RecordingConfigFrame->m_GaugeAccel[1]->SetValue(wm->accel.y);
- m_RecordingConfigFrame->m_GaugeAccel[2]->SetValue(wm->accel.z);
- + if(wm->exp.type == EXP_NUNCHUK) // Updating Nunchuck Gauges
- + {
- +
- + m_RecordingConfigFrame->m_GaugeGForceNunchuk[0]->SetValue((int)floor((nc->gforce.x * 100) + 300.5));
- + m_RecordingConfigFrame->m_GaugeGForceNunchuk[1]->SetValue((int)floor((nc->gforce.y * 100) + 300.5));
- + m_RecordingConfigFrame->m_GaugeGForceNunchuk[2]->SetValue((int)floor((nc->gforce.z * 100) + 300.5));
- +
- + m_RecordingConfigFrame->m_GaugeAccelNunchuk[0]->SetValue(nc->accel.x);
- + m_RecordingConfigFrame->m_GaugeAccelNunchuk[1]->SetValue(nc->accel.y);
- + m_RecordingConfigFrame->m_GaugeAccelNunchuk[2]->SetValue(nc->accel.z);
- +
- + //Produce valid data for recording
- + float _GNCx = (float)(nc->accel.x - nc->accel_calib.cal_zero.x) / (float)nc->accel_calib.cal_g.x;
- + float _GNCy = (float)(nc->accel.y - nc->accel_calib.cal_zero.y) / (float)nc->accel_calib.cal_g.y;
- + float _GNCz = (float)(nc->accel.z - nc->accel_calib.cal_zero.z) / (float)nc->accel_calib.cal_g.z;
- +
- + // Conver the data to integers
- + int GNCx = (int)(_GNCx * 100);
- + int GNCy = (int)(_GNCy * 100);
- + int GNCz = (int)(_GNCz * 100);
- +
- + }
- +
- m_RecordingConfigFrame->m_TextIR->SetLabel(wxString::Format(
- wxT("Cursor: %03u %03u\nDistance:%4.0f"), wm->ir.x, wm->ir.y, wm->ir.z));
- //m_RecordingConfigFrame->m_TextAccNeutralCurrent->SetLabel(wxString::Format(
- // wxT("Current: %03u %03u %03u"), Gx, Gy, Gz));
- - if(m_RecordingConfigFrame->m_bRecording)
- - DEBUG_LOG(WIIMOTE, "Wiiuse Recorded accel x, y, z: %03i %03i %03i", Gx, Gy, Gz);
- + if(m_RecordingConfigFrame->m_bRecording) {
- + if(wm->exp.type == EXP_NUNCHUK) {
- + DEBUG_LOG(WIIMOTE, "Wiiuse Recorded accel x, y, z: %03i %03i %03i", Gx, Gy, Gz);
- + }
- + else {
- + DEBUG_LOG(WIIMOTE, "Wiiuse Recorded accel x, y, z: %03i %03i %03i; NCx, NCy, NCz: %03i %03i %03i", GNCx, GNCy, GNCz);
- + }
- + }
- }
- - // Send the data to be saved
- +
- + // Send the data to be saved //todo: passing nunchuck x,y,z vars as well
- m_RecordingConfigFrame->DoRecordMovement(Gx, Gy, Gz, g_EventBuffer + 6, GetIRDataSize(wm));
- // Turn recording on and off
- @@ -238,6 +274,7 @@
- #if defined(HAVE_WX) && HAVE_WX
- if (m_RecordingConfigFrame)
- {
- + NOTICE_LOG(BOOT, "readwiimote, reset bars to zero");
- m_RecordingConfigFrame->m_GaugeRoll[0]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeRoll[1]->SetValue(0);
- @@ -249,6 +286,14 @@
- m_RecordingConfigFrame->m_GaugeAccel[1]->SetValue(0);
- m_RecordingConfigFrame->m_GaugeAccel[2]->SetValue(0);
- + m_RecordingConfigFrame->m_GaugeAccelNunchuk[0]->SetValue(0);
- + m_RecordingConfigFrame->m_GaugeAccelNunchuk[1]->SetValue(0);
- + m_RecordingConfigFrame->m_GaugeAccelNunchuk[2]->SetValue(0);
- +
- + m_RecordingConfigFrame->m_GaugeGForceNunchuk[0]->SetValue(0);
- + m_RecordingConfigFrame->m_GaugeGForceNunchuk[1]->SetValue(0);
- + m_RecordingConfigFrame->m_GaugeGForceNunchuk[2]->SetValue(0);
- +
- m_RecordingConfigFrame->m_TextIR->SetLabel(wxT("Cursor:\nDistance:"));
- }
- #endif
- @@ -266,7 +311,6 @@
- {
- handle_event(g_WiiMotesFromWiiUse[i]);
- }
- -
- // Declaration
- std::string Temp;
- @@ -336,9 +380,8 @@
- * threshold values. By default they are the same
- * as the wiimote.
- */
- - //wiiuse_set_nunchuk_orient_threshold((struct nunchuk_t*)&wiimotes[i]->exp.nunchuk, 90.0f);
- - //wiiuse_set_nunchuk_accel_threshold((struct nunchuk_t*)&wiimotes[i]->exp.nunchuk, 100);
- - DEBUG_LOG(WIIMOTE, "Nunchuk inserted.");
- + //wiiuse_set_nunchuk_orient_threshold(g_WiiMotesFromWiiUse[i], 90.0f);
- + //wiiuse_set_nunchuk_accel_threshold(g_WiiMotesFromWiiUse[i], 100);
- break;
- case WIIUSE_CLASSIC_CTRL_INSERTED:
- @@ -352,6 +395,9 @@
- break;
- case WIIUSE_NUNCHUK_REMOVED:
- + DEBUG_LOG(WIIMOTE, "Nunchuck was removed.");
- + break;
- +
- case WIIUSE_CLASSIC_CTRL_REMOVED:
- case WIIUSE_GUITAR_HERO_3_CTRL_REMOVED:
- // some expansion was removed
- Index: Plugins/Plugin_Wiimote/Src/wiimote_real.cpp
- ===================================================================
- --- Plugins/Plugin_Wiimote/Src/wiimote_real.cpp (revision 4793)
- +++ Plugins/Plugin_Wiimote/Src/wiimote_real.cpp (working copy)
- @@ -34,6 +34,8 @@
- #include "EmuDefinitions.h"
- #define EXCLUDE_H // Avoid certain declarations in wiimote_real.h
- #include "wiimote_real.h"
- +#include "ConfigRecordingDlg.h"
- +
- #ifdef WIN32
- #include <bthdef.h>
- #include <BluetoothAPIs.h>
- @@ -50,6 +52,7 @@
- class CWiiMote;
- THREAD_RETURN ReadWiimote_ThreadFunc(void* arg);
- +THREAD_RETURN SafeCloseReadWiimote_ThreadFunc(void* arg);
- // Variable declarations
- @@ -58,7 +61,8 @@
- int g_NumberOfWiiMotes;
- CWiiMote* g_WiiMotes[MAX_WIIMOTES];
- bool g_Shutdown = false;
- -bool g_ThreadGoing = false;
- +HANDLE g_StartThread = false;
- +HANDLE g_StopThreadTemporary;
- bool g_LocalThread = true;
- bool g_IRSensing = false;
- bool g_MotionSensing = false;
- @@ -472,12 +476,12 @@
- void Shutdown(void)
- {
- // Stop the loop in the thread
- - g_Shutdown = true;
- + g_Shutdown = true; // not safe .. might crash when still @ReadWiimote
- // Stop the thread
- if (g_pReadThread != NULL)
- {
- - delete g_pReadThread;
- + delete g_pReadThread;
- g_pReadThread = NULL;
- }
- @@ -526,25 +530,53 @@
- time to avoid a potential collision. */
- THREAD_RETURN ReadWiimote_ThreadFunc(void* arg)
- {
- + WiiMoteReal::g_StopThreadTemporary = CreateEvent(NULL, TRUE, FALSE, NULL);
- + WiiMoteReal::g_StartThread = CreateEvent(NULL, TRUE, FALSE, NULL);
- +
- while (!g_Shutdown)
- {
- - // We need g_ThreadGoing to do a manual WaitForSingleObject() from the configuration window
- - g_ThreadGoing = true;
- // There is at least one Real Wiimote in use
- +
- if (g_Config.bNumberRealWiimotes > 0 && !g_RunTemporary)
- {
- for (int i = 0; i < MAX_WIIMOTES; i++)
- if (g_WiimoteInUse[i])
- g_WiiMotes[i]->ReadData();
- }
- - else
- - ReadWiimote();
- - g_ThreadGoing = false;
- + else {
- +
- + switch (WaitForSingleObject(WiiMoteReal::g_StopThreadTemporary,0))
- + {
- + // Event object was signaled, exiting thread to close ConfigRecordingDlg
- + case WAIT_OBJECT_0:
- +
- + new Common::Thread(SafeCloseReadWiimote_ThreadFunc, NULL);
- + SetEvent(WiiMoteReal::g_StartThread); //tell the new thread to get going
- + return 0;
- +
- + default:
- + ReadWiimote();
- + }
- +
- +
- + }
- +
- }
- return 0;
- }
- -
- -
- +THREAD_RETURN SafeCloseReadWiimote_ThreadFunc(void* arg) // Thread to avoid racing conditions by directly closing of ReadWiimote_ThreadFunc() resp. ReadWiimote() // shutting down the Dlg while still beeing @ReadWiimote will result in a crash;
- +{
- + WiiMoteReal::g_Shutdown = true;
- + WaitForSingleObject(WiiMoteReal::g_StartThread,INFINITE); //Ready to start cleaning
- +
- + if (g_RealWiiMoteInitialized)
- + WiiMoteReal::Shutdown();
- + m_RecordingConfigFrame->Close(true);
- + if (!g_RealWiiMoteInitialized)
- + WiiMoteReal::Initialize();
- +
- + return 0;
- +}
- // WiiMote Pair-Up
- #ifdef WIN32
- int WiimotePairUp(void)
- Index: Plugins/Plugin_Wiimote/Src/wiimote_real.h
- ===================================================================
- --- Plugins/Plugin_Wiimote/Src/wiimote_real.h (revision 4793)
- +++ Plugins/Plugin_Wiimote/Src/wiimote_real.h (working copy)
- @@ -48,7 +48,8 @@
- #ifndef EXCLUDE_H
- extern wiimote_t** g_WiiMotesFromWiiUse;
- extern bool g_Shutdown;
- - extern bool g_ThreadGoing;
- + extern HANDLE g_StopThreadTemporary;
- + extern HANDLE g_StartThread;
- extern int g_NumberOfWiiMotes;
- extern bool g_MotionSensing;
- extern bool g_IRSensing;
Add Comment
Please, Sign In to add comment