diff options
| author | Sonicadvance1 <sonicadvance1@gmail.com> | 2008-12-03 02:33:02 +0000 |
|---|---|---|
| committer | Sonicadvance1 <sonicadvance1@gmail.com> | 2008-12-03 02:33:02 +0000 |
| commit | 395129d2c49567dcc1f8ddcdcef97e1ec6fdc878 (patch) | |
| tree | 3f267137cc2cb64e262879653cedc007bb70d33e /Source/Plugins/Plugin_nJoy_Testing/Src/GUI/ConfigBox.cpp | |
| parent | ab36429fb05c47e4d7e2fd3aa053f1e0c4d3e596 (diff) | |
More work. Must press calibrate to figure out the min and max first. Triggers are annoying in Linux, because each is treated as a different axis from 0 to 255. but Windows it's from -255 to 25. It keeps setting the pressed button to the l-Trigger in Linux because of this. Must do more work.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1381 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Plugins/Plugin_nJoy_Testing/Src/GUI/ConfigBox.cpp')
| -rw-r--r-- | Source/Plugins/Plugin_nJoy_Testing/Src/GUI/ConfigBox.cpp | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/Source/Plugins/Plugin_nJoy_Testing/Src/GUI/ConfigBox.cpp b/Source/Plugins/Plugin_nJoy_Testing/Src/GUI/ConfigBox.cpp index 2f7b2e89f6..e5aca13a7d 100644 --- a/Source/Plugins/Plugin_nJoy_Testing/Src/GUI/ConfigBox.cpp +++ b/Source/Plugins/Plugin_nJoy_Testing/Src/GUI/ConfigBox.cpp @@ -62,6 +62,7 @@ BEGIN_EVENT_TABLE(ConfigBox,wxDialog) EVT_BUTTON(IDB_BUTTON_Y, ConfigBox::GetInputs)
EVT_BUTTON(IDB_BUTTON_Z, ConfigBox::GetInputs)
EVT_BUTTON(IDB_BUTTONSTART, ConfigBox::GetInputs)
+ EVT_BUTTON(ID_BUTTONCALIBRATE, ConfigBox::Calibrate)
EVT_BUTTON(IDB_BUTTONHALFPRESS, ConfigBox::GetInputs)
EVT_BUTTON(IDB_DPAD_UP, ConfigBox::GetInputs)
EVT_BUTTON(IDB_DPAD_DOWN, ConfigBox::GetInputs)
@@ -239,6 +240,7 @@ void ConfigBox::CreateGUIControls() // GUI center button
m_JoyButtonStart[i] = new wxTextCtrl(m_Controller[i], ID_BUTTONSTART, wxT("0"), wxPoint(278, 403), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
m_JoyButtonStart[i]->Enable(false);
+ m_bJoyButtonCalibrate[i] = new wxButton(m_Controller[i], ID_BUTTONCALIBRATE, wxT("Calibrate"), wxPoint(297, 440), wxSize(21, 14), 0, wxDefaultValidator, wxT("Calibrate"));
m_JoyButtonHalfpress[i] = new wxTextCtrl(m_Controller[i], ID_BUTTONHALFPRESS, wxT("0"), wxPoint(167, 424), wxSize(59, 19), wxTE_READONLY | wxTE_CENTRE, wxDefaultValidator, wxT("0"));
m_JoyButtonHalfpress[i]->Enable(false);
m_bJoyButtonStart[i] = new wxButton(m_Controller[i], IDB_BUTTONSTART, wxEmptyString, wxPoint(297, 385), wxSize(21, 14), 0, wxDefaultValidator, wxEmptyString);
@@ -321,6 +323,34 @@ void ConfigBox::CancelClick(wxCommandEvent& event) }
}
+void ConfigBox::Calibrate(wxCommandEvent& event)
+{
+ int controller = notebookpage;
+
+
+ SDL_Joystick *joy = SDL_JoystickOpen(joysticks[controller].ID);
+ int axes = SDL_JoystickNumAxes(joy);
+ Sint16 value;
+ unsigned long Started = SDL_GetTicks();
+ while(1)
+ {
+ for(int b = 0; b < axes; b++)
+ {
+ SDL_JoystickUpdate();
+ value = SDL_JoystickGetAxis(joy, b);
+ if(value < joysticks[controller].sData[b].Min)
+ joysticks[controller].sData[b].Min = value;
+ if(value > joysticks[controller].sData[b].Max)
+ joysticks[controller].sData[b].Max = value;
+ }
+ if(SDL_GetTicks() - Started >= 5000)
+ break;
+ }
+ for(int a = 0; a < axes;a++)
+ printf("Axis %d has a Min of %d, and a Max of %d\n", a, joysticks[controller].sData[a].Min, joysticks[controller].sData[a].Max);
+ if(SDL_JoystickOpened(joysticks[controller].ID))
+ SDL_JoystickClose(joy);
+}
// Set dialog items
// ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ
void ConfigBox::SetControllerAll(int controller)
@@ -613,7 +643,8 @@ void ConfigBox::GetInputs(wxCommandEvent& event) sprintf(format, "[%d]", counter2);
SetButtonText(ID, format);
wxWindow::Update(); // win only? doesnt seem to work in linux...
-
+
+ SDL_JoystickUpdate();
while(waiting)
{
SDL_JoystickUpdate();
@@ -629,10 +660,12 @@ void ConfigBox::GetInputs(wxCommandEvent& event) }
}
for(int b = 0; b < axes; b++)
- {
+ {
value = SDL_JoystickGetAxis(joy, b);
- if(value < -10000 || value > 10000)
- {
+ if(value <= (joysticks[controller].sData[b].Min - (joysticks[controller].sData[b].Min * joysticks[controller].deadzone / 100)) || value >= (joysticks[controller].sData[b].Max - (joysticks[controller].sData[b].Max * joysticks[controller].deadzone / 100))) // Add and subtract a small value
+ { // It allows for some small jitter
+ printf("value %d, Min %d Max %d Removal %d\n", value, joysticks[controller].sData[b].Min,joysticks[controller].sData[b].Max, (joysticks[controller].sData[b].Min * joysticks[controller].deadzone / 100));
+ value = value <= (joysticks[controller].sData[b].Min - joysticks[controller].sData[b].Min * joysticks[controller].deadzone) ? -1 : 1; // Makes it know if the value is negative or positive
pressed = b;
waiting = false;
succeed = true;
|
