--- /dev/null
+#include "joystick.h"
+
+JoyStick::JoyStick(QObject *parent) :
+ QObject(parent)
+{
+ qDebug() << "JoyStick::JoyStick()";
+ m_joySettings=new QSettings("katix.org","joystick");
+#ifdef HAVE_SDL
+ joyStick=NULL;
+#endif
+ m_haveJoyStick=false;
+ m_rawAxis1=0;
+ m_rawAxis2=0;
+ m_rawAxis3=0;
+ m_rawAxis4=0;
+ m_rawAxis5=0;
+ m_rawAxis6=0;
+ m_minAxis1=0;
+ m_minAxis2=0;
+ m_minAxis3=0;
+ m_minAxis4=0;
+ m_minAxis5=0;
+ m_minAxis6=0;
+ m_maxAxis1=0;
+ m_maxAxis2=0;
+ m_maxAxis3=0;
+ m_maxAxis4=0;
+ m_maxAxis5=0;
+ m_maxAxis6=0;
+#ifdef HAVE_SDL
+ if ( SDL_Init(SDL_INIT_JOYSTICK) == 0 ) {
+ if(0< SDL_NumJoysticks()) {
+ m_haveJoyStick=true;
+ m_joyStickName=SDL_JoystickName(0);
+ joyStick = SDL_JoystickOpen(0);
+ qDebug() << "Have JoyStick" << SDL_NumJoysticks() << SDL_JoystickName(0) << joyStick;
+ m_minAxis1= m_joySettings->value(m_joyStickName+"/MinAxis1",-1).toInt();
+ m_minAxis2= m_joySettings->value(m_joyStickName+"/MinAxis2",-1).toInt();
+ m_minAxis3= m_joySettings->value(m_joyStickName+"/MinAxis3",-1).toInt();
+ m_minAxis4= m_joySettings->value(m_joyStickName+"/MinAxis4",-1).toInt();
+ m_minAxis5= m_joySettings->value(m_joyStickName+"/MinAxis5",-1).toInt();
+ m_minAxis6= m_joySettings->value(m_joyStickName+"/MinAxis6",-1).toInt();
+ m_maxAxis1= m_joySettings->value(m_joyStickName+"/MaxAxis1",1).toInt();
+ m_maxAxis2= m_joySettings->value(m_joyStickName+"/MaxAxis2",1).toInt();
+ m_maxAxis3= m_joySettings->value(m_joyStickName+"/MaxAxis3",1).toInt();
+ m_maxAxis4= m_joySettings->value(m_joyStickName+"/MaxAxis4",1).toInt();
+ m_maxAxis5= m_joySettings->value(m_joyStickName+"/MaxAxis5",1).toInt();
+ m_maxAxis6= m_joySettings->value(m_joyStickName+"/MaxAxis6",1).toInt();
+ m_mapAxis[0]= m_joySettings->value(m_joyStickName+"/MapAxis1",1).toInt();
+ m_mapAxis[1]= m_joySettings->value(m_joyStickName+"/MapAxis2",2).toInt();
+ m_mapAxis[2]= m_joySettings->value(m_joyStickName+"/MapAxis3",3).toInt();
+ m_mapAxis[3]= m_joySettings->value(m_joyStickName+"/MapAxis4",4).toInt();
+ m_mapAxis[4]= m_joySettings->value(m_joyStickName+"/MapAxis5",5).toInt();
+ m_mapAxis[5]= m_joySettings->value(m_joyStickName+"/MapAxis6",6).toInt();
+ m_invertAxis1= m_joySettings->value(m_joyStickName+"/InvertAxis1",0).toBool();
+ m_invertAxis2= m_joySettings->value(m_joyStickName+"/InvertAxis2",0).toBool();
+ m_invertAxis3= m_joySettings->value(m_joyStickName+"/InvertAxis3",0).toBool();
+ m_invertAxis4= m_joySettings->value(m_joyStickName+"/InvertAxis4",0).toBool();
+ m_invertAxis5= m_joySettings->value(m_joyStickName+"/InvertAxis5",0).toBool();
+ m_invertAxis6= m_joySettings->value(m_joyStickName+"/InvertAxis6",0).toBool();
+ connect(&joyStickTimer, SIGNAL(timeout()), this, SLOT(updateJoyStick()));
+ joyStickTimer.start(50);
+ }
+ }
+#endif
+}
+
+ JoyStick::~JoyStick()
+{
+#ifdef HAVE_SDL
+ if(joyStick) SDL_JoystickClose(joyStick);
+ SDL_Quit();
+#endif
+ m_joySettings->~QSettings();
+};
+
+void JoyStick::setCalibrate(bool val)
+{
+ if(m_joyCal && !val ) saveCalibration();
+ m_joyCal=val;
+
+};
+
+ void JoyStick::saveCalibration()
+ {
+ m_joySettings->setValue(m_joyStickName+"/MinAxis1",m_minAxis1);
+ m_joySettings->setValue(m_joyStickName+"/MinAxis2",m_minAxis2);
+ m_joySettings->setValue(m_joyStickName+"/MinAxis3",m_minAxis3);
+ m_joySettings->setValue(m_joyStickName+"/MinAxis4",m_minAxis4);
+ m_joySettings->setValue(m_joyStickName+"/MinAxis5",m_minAxis5);
+ m_joySettings->setValue(m_joyStickName+"/MinAxis6",m_minAxis6);
+ m_joySettings->setValue(m_joyStickName+"/MaxAxis1",m_maxAxis1);
+ m_joySettings->setValue(m_joyStickName+"/MaxAxis2",m_maxAxis2);
+ m_joySettings->setValue(m_joyStickName+"/MaxAxis3",m_maxAxis3);
+ m_joySettings->setValue(m_joyStickName+"/MaxAxis4",m_maxAxis4);
+ m_joySettings->setValue(m_joyStickName+"/MaxAxis5",m_maxAxis5);
+ m_joySettings->setValue(m_joyStickName+"/MaxAxis6",m_maxAxis6);
+ m_joySettings->setValue(m_joyStickName+"/InvertAxis1",m_invertAxis1);
+ m_joySettings->setValue(m_joyStickName+"/InvertAxis2",m_invertAxis2);
+ m_joySettings->setValue(m_joyStickName+"/InvertAxis3",m_invertAxis3);
+ m_joySettings->setValue(m_joyStickName+"/InvertAxis4",m_invertAxis4);
+ m_joySettings->setValue(m_joyStickName+"/InvertAxis5",m_invertAxis5);
+ m_joySettings->setValue(m_joyStickName+"/InvertAxis6",m_invertAxis6);
+ m_joySettings->setValue(m_joyStickName+"/MapAxis1",m_mapAxis[0]);
+ m_joySettings->setValue(m_joyStickName+"/MapAxis2",m_mapAxis[1]);
+ m_joySettings->setValue(m_joyStickName+"/MapAxis3",m_mapAxis[2]);
+ m_joySettings->setValue(m_joyStickName+"/MapAxis4",m_mapAxis[3]);
+ m_joySettings->setValue(m_joyStickName+"/MapAxis5",m_mapAxis[4]);
+ m_joySettings->setValue(m_joyStickName+"/MapAxis6",m_mapAxis[5]);
+ }
+
+void JoyStick::setMapped(int axis, float value)
+{
+ switch(axis) {
+ case 1: m_axis1=value;
+ case 2: m_axis2=value;
+ case 3: m_axis3=value;
+ case 4: m_axis4=value;
+ case 5: m_axis5=value;
+ case 6: m_axis6=value;
+ }
+}
+
+void JoyStick::updateJoyStick()
+{
+ float joyScale=33000.0;
+#ifdef HAVE_SDL
+ SDL_JoystickUpdate();
+ m_rawAxis1=SDL_JoystickGetAxis(joyStick, 0);
+ m_rawAxis2=SDL_JoystickGetAxis(joyStick, 1);
+ m_rawAxis3=SDL_JoystickGetAxis(joyStick, 2);
+ m_rawAxis4=SDL_JoystickGetAxis(joyStick, 3);
+ m_rawAxis5=SDL_JoystickGetAxis(joyStick, 4);
+ m_rawAxis6=SDL_JoystickGetAxis(joyStick, 5);
+ if(m_joyCal && m_rawAxis1>m_maxAxis1) m_maxAxis1=m_rawAxis1;
+ if(m_joyCal && m_rawAxis2>m_maxAxis2) m_maxAxis2=m_rawAxis2;
+ if(m_joyCal && m_rawAxis3>m_maxAxis3) m_maxAxis3=m_rawAxis3;
+ if(m_joyCal && m_rawAxis4>m_maxAxis4) m_maxAxis4=m_rawAxis4;
+ if(m_joyCal && m_rawAxis5>m_maxAxis5) m_maxAxis5=m_rawAxis5;
+ if(m_joyCal && m_rawAxis6>m_maxAxis6) m_maxAxis6=m_rawAxis6;
+ if(m_joyCal && m_rawAxis1<m_minAxis1) m_minAxis1=m_rawAxis1;
+ if(m_joyCal && m_rawAxis2<m_minAxis2) m_minAxis2=m_rawAxis2;
+ if(m_joyCal && m_rawAxis3<m_minAxis3) m_minAxis3=m_rawAxis3;
+ if(m_joyCal && m_rawAxis4<m_minAxis4) m_minAxis4=m_rawAxis4;
+ if(m_joyCal && m_rawAxis5<m_minAxis5) m_minAxis5=m_rawAxis5;
+ if(m_joyCal && m_rawAxis6<m_minAxis6) m_minAxis6=m_rawAxis6;
+ m_calAxis1=(m_rawAxis1 >0 ? 1.0 * m_rawAxis1/m_maxAxis1 :-1.0*m_rawAxis1/m_minAxis1)*(m_invertAxis1?-1.0:1.0);
+ m_calAxis2=(m_rawAxis2 >0 ? 1.0 * m_rawAxis2/m_maxAxis2 :-1.0*m_rawAxis2/m_minAxis2)*(m_invertAxis2?-1.0:1.0);
+ m_calAxis3=(m_rawAxis3 >0 ? 1.0 * m_rawAxis3/m_maxAxis3 :-1.0*m_rawAxis3/m_minAxis3)*(m_invertAxis3?-1.0:1.0);
+ m_calAxis4=(m_rawAxis4 >0 ? 1.0 * m_rawAxis4/m_maxAxis4 :-1.0*m_rawAxis4/m_minAxis4)*(m_invertAxis4?-1.0:1.0);
+ m_calAxis5=(m_rawAxis5 >0 ? 1.0 * m_rawAxis5/m_maxAxis5 :-1.0*m_rawAxis5/m_minAxis5)*(m_invertAxis5?-1.0:1.0);
+ m_calAxis6=(m_rawAxis6 >0 ? 1.0 * m_rawAxis6/m_maxAxis6 :-1.0*m_rawAxis6/m_minAxis6)*(m_invertAxis6?-1.0:1.0);
+ setMapped(m_mapAxis[0],m_calAxis1);
+ setMapped(m_mapAxis[1],m_calAxis2);
+ setMapped(m_mapAxis[2],m_calAxis3);
+ setMapped(m_mapAxis[3],m_calAxis4);
+ setMapped(m_mapAxis[4],m_calAxis5);
+ setMapped(m_mapAxis[5],m_calAxis6);
+
+ emit joyStickChanged();
+ // qDebug("JoyStickRaw %d %d %d %d %d %d mapped %1.2f %1.2f %1.2f %1.2f",m_rawAxis1,m_rawAxis2,m_rawAxis3,m_rawAxis4,m_rawAxis5,m_rawAxis6,m_axis1,m_axis2,m_axis3,m_axis4);
+#endif
+}