summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
Unidiff
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp45
1 files changed, 42 insertions, 3 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 713cc90..cb7dd74 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -26,32 +26,35 @@
26#include <linux/soundcard.h> 26#include <linux/soundcard.h>
27#include <math.h> 27#include <math.h>
28 28
29#include <qapplication.h> 29#include <qapplication.h>
30 30
31#include <qfile.h> 31#include <qfile.h>
32#include <qtextstream.h> 32#include <qtextstream.h>
33#include <qpe/sound.h> 33#include <qpe/sound.h>
34#include <qpe/resource.h> 34#include <qpe/resource.h>
35#include <qpe/config.h> 35#include <qpe/config.h>
36#include <qpe/qcopenvelope_qws.h> 36#include <qpe/qcopenvelope_qws.h>
37 37
38#include "odevice.h" 38#include "odevice.h"
39 39
40#include <qwindowsystem_qws.h> 40#include <qwindowsystem_qws.h>
41 41
42#ifndef ARRAY_SIZE
43#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
44#endif
42 45
43// _IO and friends are only defined in kernel headers ... 46// _IO and friends are only defined in kernel headers ...
44 47
45#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 48#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
46 49
47#define OD_IO(type,number) OD_IOC(0,type,number,0) 50#define OD_IO(type,number) OD_IOC(0,type,number,0)
48#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 51#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
49#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 52#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
50#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 53#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
51 54
52using namespace Opie; 55using namespace Opie;
53 56
54class ODeviceData { 57class ODeviceData {
55public: 58public:
56 bool m_qwsserver : 1; 59 bool m_qwsserver : 1;
57 60
@@ -192,32 +195,55 @@ struct z_button {
192 "addressbook", "raise()", 195 "addressbook", "raise()",
193 "addressbook", "beamBusinessCard()" }, 196 "addressbook", "beamBusinessCard()" },
194 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 197 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
195 "devicebuttons/z_home", 198 "devicebuttons/z_home",
196 "QPE/Launcher", "home()", 199 "QPE/Launcher", "home()",
197 "buttonsettings", "raise()" }, 200 "buttonsettings", "raise()" },
198 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 201 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
199 "devicebuttons/z_menu", 202 "devicebuttons/z_menu",
200 "QPE/TaskBar", "toggleMenu()", 203 "QPE/TaskBar", "toggleMenu()",
201 "QPE/TaskBar", "toggleStartMenu()" }, 204 "QPE/TaskBar", "toggleStartMenu()" },
202 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 205 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
203 "devicebuttons/z_mail", 206 "devicebuttons/z_mail",
204 "mail", "raise()", 207 "mail", "raise()",
205 "mail", "newMail()" }, 208 "mail", "newMail()" },
206}; 209};
207 210
211struct z_button z_buttons_c700 [] = {
212 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
213 "devicebuttons/z_calendar",
214 "datebook", "nextView()",
215 "today", "raise()" },
216 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
217 "devicebuttons/z_contact",
218 "addressbook", "raise()",
219 "addressbook", "beamBusinessCard()" },
220 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
221 "devicebuttons/z_home",
222 "QPE/Launcher", "home()",
223 "buttonsettings", "raise()" },
224 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
225 "devicebuttons/z_menu",
226 "QPE/TaskBar", "toggleMenu()",
227 "QPE/TaskBar", "toggleStartMenu()" },
228 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Display Rotate"),
229 "",
230 "QPE/Rotation", "flip()",
231 "QPE/Rotation", "flip()" },
232};
233
208static QCString makeChannel ( const char *str ) 234static QCString makeChannel ( const char *str )
209{ 235{
210 if ( str && !::strchr ( str, '/' )) 236 if ( str && !::strchr ( str, '/' ))
211 return QCString ( "QPE/Application/" ) + str; 237 return QCString ( "QPE/Application/" ) + str;
212 else 238 else
213 return str; 239 return str;
214} 240}
215 241
216 242
217 243
218 244
219ODevice *ODevice::inst ( ) 245ODevice *ODevice::inst ( )
220{ 246{
221 static ODevice *dev = 0; 247 static ODevice *dev = 0;
222 248
223 if ( !dev ) { 249 if ( !dev ) {
@@ -1128,38 +1154,38 @@ void Zaurus::init ( )
1128 if ( model == "SL-5500" ) 1154 if ( model == "SL-5500" )
1129 d-> m_model = Model_Zaurus_SL5500; 1155 d-> m_model = Model_Zaurus_SL5500;
1130 else if ( model == "SL-C700" ) 1156 else if ( model == "SL-C700" )
1131 d-> m_model = Model_Zaurus_SLC700; 1157 d-> m_model = Model_Zaurus_SLC700;
1132 else if ( model == "SL-A300" ) 1158 else if ( model == "SL-A300" )
1133 d-> m_model = Model_Zaurus_SLA300; 1159 d-> m_model = Model_Zaurus_SLA300;
1134 else if ( model == "SL-B600" || model == "SL-5600" ) 1160 else if ( model == "SL-B600" || model == "SL-5600" )
1135 d-> m_model = Model_Zaurus_SLB600; 1161 d-> m_model = Model_Zaurus_SLB600;
1136 else 1162 else
1137 d-> m_model = Model_Zaurus_SL5000; 1163 d-> m_model = Model_Zaurus_SL5000;
1138 } 1164 }
1139 else { 1165 else {
1140 d-> m_model = Model_Zaurus_SL5000; 1166 d-> m_model = Model_Zaurus_SL5000;
1141 d-> m_modelstr = "Zaurus (model unknown)"; 1167 d-> m_modelstr = "Zaurus (model unknown)";
1142 } 1168 }
1143 1169
1170 bool flipstate = false;
1144 switch ( d-> m_model ) { 1171 switch ( d-> m_model ) {
1145 case Model_Zaurus_SLA300: 1172 case Model_Zaurus_SLA300:
1146 d-> m_rotation = Rot0; 1173 d-> m_rotation = Rot0;
1147 break; 1174 break;
1148 case Model_Zaurus_SLC700: 1175 case Model_Zaurus_SLC700:
1149 bool flipstate = false;
1150 // Note: need to 1) set flipstate based on physical screen orientation 1176 // Note: need to 1) set flipstate based on physical screen orientation
1151 // and 2) check to see if the user overrode the rotation direction 1177 // and 2) check to see if the user overrode the rotation direction
1152 // using appearance, and if so, remove that item from the Config to 1178 // using appearance, and if so, remove that item from the Config to
1153 // ensure the rotate applet flips us back to the previous state. 1179 // ensure the rotate applet flips us back to the previous state.
1154 if ( flipstate ) { 1180 if ( flipstate ) {
1155 // 480x640 1181 // 480x640
1156 d-> m_rotation = Rot0; 1182 d-> m_rotation = Rot0;
1157 d-> m_direction = CW; 1183 d-> m_direction = CW;
1158 } else { 1184 } else {
1159 // 640x480 1185 // 640x480
1160 d-> m_rotation = Rot270; 1186 d-> m_rotation = Rot270;
1161 d-> m_direction = CCW; 1187 d-> m_direction = CCW;
1162 } 1188 }
1163 break; 1189 break;
1164 case Model_Zaurus_SLB600: 1190 case Model_Zaurus_SLB600:
1165 case Model_Zaurus_SL5500: 1191 case Model_Zaurus_SL5500:
@@ -1167,34 +1193,47 @@ void Zaurus::init ( )
1167 default: 1193 default:
1168 d-> m_rotation = Rot270; 1194 d-> m_rotation = Rot270;
1169 break; 1195 break;
1170 } 1196 }
1171 m_leds [0] = Led_Off; 1197 m_leds [0] = Led_Off;
1172} 1198}
1173 1199
1174void Zaurus::initButtons ( ) 1200void Zaurus::initButtons ( )
1175{ 1201{
1176 if ( d-> m_buttons ) 1202 if ( d-> m_buttons )
1177 return; 1203 return;
1178 1204
1179 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 1205 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
1180 1206
1181 d-> m_buttons = new QValueList <ODeviceButton>; 1207 d-> m_buttons = new QValueList <ODeviceButton>;
1182 1208
1183 for ( uint i = 0; i < ( sizeof( z_buttons ) / sizeof( z_button )); i++ ) { 1209 struct z_button * pz_buttons;
1184 z_button *zb = z_buttons + i; 1210 int buttoncount;
1211 switch ( d-> m_model ) {
1212 case Model_Zaurus_SLC700:
1213 pz_buttons = z_buttons_c700;
1214 buttoncount = ARRAY_SIZE(z_buttons_c700);
1215 break;
1216 default:
1217 pz_buttons = z_buttons;
1218 buttoncount = ARRAY_SIZE(z_buttons);
1219 break;
1220 }
1221
1222 for ( int i = 0; i < buttoncount; i++ ) {
1223 struct z_button *zb = pz_buttons + i;
1185 ODeviceButton b; 1224 ODeviceButton b;
1186 1225
1187 b. setKeycode ( zb-> code ); 1226 b. setKeycode ( zb-> code );
1188 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1227 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1189 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1228 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1190 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction )); 1229 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction ));
1191 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction )); 1230 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction ));
1192 1231
1193 d-> m_buttons-> append ( b ); 1232 d-> m_buttons-> append ( b );
1194 } 1233 }
1195 1234
1196 reloadButtonMapping ( ); 1235 reloadButtonMapping ( );
1197 1236
1198 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1237 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1199 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1238 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1200} 1239}