3 JoyStick::JoyStick(QObject *parent) :
6 qDebug() << "JoyStick::JoyStick()";
7 m_joySettings=new QSettings("katix.org","joystick");
31 if ( SDL_Init(SDL_INIT_JOYSTICK) == 0 ) {
32 if(0< SDL_NumJoysticks()) {
34 m_joyStickName=SDL_JoystickName(0);
35 joyStick = SDL_JoystickOpen(0);
36 qDebug() << "Have JoyStick" << SDL_NumJoysticks() << SDL_JoystickName(0) << joyStick;
37 m_minAxis1= m_joySettings->value(m_joyStickName+"/MinAxis1",-1).toInt();
38 m_minAxis2= m_joySettings->value(m_joyStickName+"/MinAxis2",-1).toInt();
39 m_minAxis3= m_joySettings->value(m_joyStickName+"/MinAxis3",-1).toInt();
40 m_minAxis4= m_joySettings->value(m_joyStickName+"/MinAxis4",-1).toInt();
41 m_minAxis5= m_joySettings->value(m_joyStickName+"/MinAxis5",-1).toInt();
42 m_minAxis6= m_joySettings->value(m_joyStickName+"/MinAxis6",-1).toInt();
43 m_maxAxis1= m_joySettings->value(m_joyStickName+"/MaxAxis1",1).toInt();
44 m_maxAxis2= m_joySettings->value(m_joyStickName+"/MaxAxis2",1).toInt();
45 m_maxAxis3= m_joySettings->value(m_joyStickName+"/MaxAxis3",1).toInt();
46 m_maxAxis4= m_joySettings->value(m_joyStickName+"/MaxAxis4",1).toInt();
47 m_maxAxis5= m_joySettings->value(m_joyStickName+"/MaxAxis5",1).toInt();
48 m_maxAxis6= m_joySettings->value(m_joyStickName+"/MaxAxis6",1).toInt();
49 m_mapAxis[0]= m_joySettings->value(m_joyStickName+"/MapAxis1",1).toInt();
50 m_mapAxis[1]= m_joySettings->value(m_joyStickName+"/MapAxis2",2).toInt();
51 m_mapAxis[2]= m_joySettings->value(m_joyStickName+"/MapAxis3",3).toInt();
52 m_mapAxis[3]= m_joySettings->value(m_joyStickName+"/MapAxis4",4).toInt();
53 m_mapAxis[4]= m_joySettings->value(m_joyStickName+"/MapAxis5",5).toInt();
54 m_mapAxis[5]= m_joySettings->value(m_joyStickName+"/MapAxis6",6).toInt();
55 m_invertAxis1= m_joySettings->value(m_joyStickName+"/InvertAxis1",0).toBool();
56 m_invertAxis2= m_joySettings->value(m_joyStickName+"/InvertAxis2",0).toBool();
57 m_invertAxis3= m_joySettings->value(m_joyStickName+"/InvertAxis3",0).toBool();
58 m_invertAxis4= m_joySettings->value(m_joyStickName+"/InvertAxis4",0).toBool();
59 m_invertAxis5= m_joySettings->value(m_joyStickName+"/InvertAxis5",0).toBool();
60 m_invertAxis6= m_joySettings->value(m_joyStickName+"/InvertAxis6",0).toBool();
61 connect(&joyStickTimer, SIGNAL(timeout()), this, SLOT(updateJoyStick()));
62 joyStickTimer.start(50);
71 if(joyStick) SDL_JoystickClose(joyStick);
74 m_joySettings->~QSettings();
77 void JoyStick::setCalibrate(bool val)
79 if(m_joyCal && !val ) saveCalibration();
84 void JoyStick::saveCalibration()
86 m_joySettings->setValue(m_joyStickName+"/MinAxis1",m_minAxis1);
87 m_joySettings->setValue(m_joyStickName+"/MinAxis2",m_minAxis2);
88 m_joySettings->setValue(m_joyStickName+"/MinAxis3",m_minAxis3);
89 m_joySettings->setValue(m_joyStickName+"/MinAxis4",m_minAxis4);
90 m_joySettings->setValue(m_joyStickName+"/MinAxis5",m_minAxis5);
91 m_joySettings->setValue(m_joyStickName+"/MinAxis6",m_minAxis6);
92 m_joySettings->setValue(m_joyStickName+"/MaxAxis1",m_maxAxis1);
93 m_joySettings->setValue(m_joyStickName+"/MaxAxis2",m_maxAxis2);
94 m_joySettings->setValue(m_joyStickName+"/MaxAxis3",m_maxAxis3);
95 m_joySettings->setValue(m_joyStickName+"/MaxAxis4",m_maxAxis4);
96 m_joySettings->setValue(m_joyStickName+"/MaxAxis5",m_maxAxis5);
97 m_joySettings->setValue(m_joyStickName+"/MaxAxis6",m_maxAxis6);
98 m_joySettings->setValue(m_joyStickName+"/InvertAxis1",m_invertAxis1);
99 m_joySettings->setValue(m_joyStickName+"/InvertAxis2",m_invertAxis2);
100 m_joySettings->setValue(m_joyStickName+"/InvertAxis3",m_invertAxis3);
101 m_joySettings->setValue(m_joyStickName+"/InvertAxis4",m_invertAxis4);
102 m_joySettings->setValue(m_joyStickName+"/InvertAxis5",m_invertAxis5);
103 m_joySettings->setValue(m_joyStickName+"/InvertAxis6",m_invertAxis6);
104 m_joySettings->setValue(m_joyStickName+"/MapAxis1",m_mapAxis[0]);
105 m_joySettings->setValue(m_joyStickName+"/MapAxis2",m_mapAxis[1]);
106 m_joySettings->setValue(m_joyStickName+"/MapAxis3",m_mapAxis[2]);
107 m_joySettings->setValue(m_joyStickName+"/MapAxis4",m_mapAxis[3]);
108 m_joySettings->setValue(m_joyStickName+"/MapAxis5",m_mapAxis[4]);
109 m_joySettings->setValue(m_joyStickName+"/MapAxis6",m_mapAxis[5]);
112 void JoyStick::setMapped(int axis, float value)
115 case 1: m_axis1=value;
116 case 2: m_axis2=value;
117 case 3: m_axis3=value;
118 case 4: m_axis4=value;
119 case 5: m_axis5=value;
120 case 6: m_axis6=value;
124 void JoyStick::updateJoyStick()
126 float joyScale=33000.0;
128 SDL_JoystickUpdate();
129 m_rawAxis1=SDL_JoystickGetAxis(joyStick, 0);
130 m_rawAxis2=SDL_JoystickGetAxis(joyStick, 1);
131 m_rawAxis3=SDL_JoystickGetAxis(joyStick, 2);
132 m_rawAxis4=SDL_JoystickGetAxis(joyStick, 3);
133 m_rawAxis5=SDL_JoystickGetAxis(joyStick, 4);
134 m_rawAxis6=SDL_JoystickGetAxis(joyStick, 5);
135 if(m_joyCal && m_rawAxis1>m_maxAxis1) m_maxAxis1=m_rawAxis1;
136 if(m_joyCal && m_rawAxis2>m_maxAxis2) m_maxAxis2=m_rawAxis2;
137 if(m_joyCal && m_rawAxis3>m_maxAxis3) m_maxAxis3=m_rawAxis3;
138 if(m_joyCal && m_rawAxis4>m_maxAxis4) m_maxAxis4=m_rawAxis4;
139 if(m_joyCal && m_rawAxis5>m_maxAxis5) m_maxAxis5=m_rawAxis5;
140 if(m_joyCal && m_rawAxis6>m_maxAxis6) m_maxAxis6=m_rawAxis6;
141 if(m_joyCal && m_rawAxis1<m_minAxis1) m_minAxis1=m_rawAxis1;
142 if(m_joyCal && m_rawAxis2<m_minAxis2) m_minAxis2=m_rawAxis2;
143 if(m_joyCal && m_rawAxis3<m_minAxis3) m_minAxis3=m_rawAxis3;
144 if(m_joyCal && m_rawAxis4<m_minAxis4) m_minAxis4=m_rawAxis4;
145 if(m_joyCal && m_rawAxis5<m_minAxis5) m_minAxis5=m_rawAxis5;
146 if(m_joyCal && m_rawAxis6<m_minAxis6) m_minAxis6=m_rawAxis6;
147 m_calAxis1=(m_rawAxis1 >0 ? 1.0 * m_rawAxis1/m_maxAxis1 :-1.0*m_rawAxis1/m_minAxis1)*(m_invertAxis1?-1.0:1.0);
148 m_calAxis2=(m_rawAxis2 >0 ? 1.0 * m_rawAxis2/m_maxAxis2 :-1.0*m_rawAxis2/m_minAxis2)*(m_invertAxis2?-1.0:1.0);
149 m_calAxis3=(m_rawAxis3 >0 ? 1.0 * m_rawAxis3/m_maxAxis3 :-1.0*m_rawAxis3/m_minAxis3)*(m_invertAxis3?-1.0:1.0);
150 m_calAxis4=(m_rawAxis4 >0 ? 1.0 * m_rawAxis4/m_maxAxis4 :-1.0*m_rawAxis4/m_minAxis4)*(m_invertAxis4?-1.0:1.0);
151 m_calAxis5=(m_rawAxis5 >0 ? 1.0 * m_rawAxis5/m_maxAxis5 :-1.0*m_rawAxis5/m_minAxis5)*(m_invertAxis5?-1.0:1.0);
152 m_calAxis6=(m_rawAxis6 >0 ? 1.0 * m_rawAxis6/m_maxAxis6 :-1.0*m_rawAxis6/m_minAxis6)*(m_invertAxis6?-1.0:1.0);
153 setMapped(m_mapAxis[0],m_calAxis1);
154 setMapped(m_mapAxis[1],m_calAxis2);
155 setMapped(m_mapAxis[2],m_calAxis3);
156 setMapped(m_mapAxis[3],m_calAxis4);
157 setMapped(m_mapAxis[4],m_calAxis5);
158 setMapped(m_mapAxis[5],m_calAxis6);
160 emit joyStickChanged();
161 // 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);