summaryrefslogtreecommitdiff
path: root/libopie
authorzecke <zecke>2004-02-19 01:01:30 (UTC)
committer zecke <zecke>2004-02-19 01:01:30 (UTC)
commit3b4b9e070f84ce884a98b4112eaee2cef7530308 (patch) (unidiff)
treea63b57ec3368e41ea1482a37a41b4b9df2f30fd4 /libopie
parentab41e301eb7f06af0869844d197e38a7838f3f2d (diff)
downloadopie-3b4b9e070f84ce884a98b4112eaee2cef7530308.zip
opie-3b4b9e070f84ce884a98b4112eaee2cef7530308.tar.gz
opie-3b4b9e070f84ce884a98b4112eaee2cef7530308.tar.bz2
The hardware keys on the H5xxx are rotated by 270°
so rotate the key events
Diffstat (limited to 'libopie') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 35d6cb4..c5a916b 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1141,393 +1141,400 @@ void iPAQ::init ( )
1141 else if ( d-> m_modelstr == "H3700" ) 1141 else if ( d-> m_modelstr == "H3700" )
1142 d-> m_model = Model_iPAQ_H37xx; 1142 d-> m_model = Model_iPAQ_H37xx;
1143 else if ( d-> m_modelstr == "H3800" ) 1143 else if ( d-> m_modelstr == "H3800" )
1144 d-> m_model = Model_iPAQ_H38xx; 1144 d-> m_model = Model_iPAQ_H38xx;
1145 else if ( d-> m_modelstr == "H3900" ) 1145 else if ( d-> m_modelstr == "H3900" )
1146 d-> m_model = Model_iPAQ_H39xx; 1146 d-> m_model = Model_iPAQ_H39xx;
1147 else if ( d-> m_modelstr == "H5400" ) 1147 else if ( d-> m_modelstr == "H5400" )
1148 d-> m_model = Model_iPAQ_H5xxx; 1148 d-> m_model = Model_iPAQ_H5xxx;
1149 else 1149 else
1150 d-> m_model = Model_Unknown; 1150 d-> m_model = Model_Unknown;
1151 1151
1152 f. close ( ); 1152 f. close ( );
1153 } 1153 }
1154 1154
1155 switch ( d-> m_model ) { 1155 switch ( d-> m_model ) {
1156 case Model_iPAQ_H31xx: 1156 case Model_iPAQ_H31xx:
1157 case Model_iPAQ_H38xx: 1157 case Model_iPAQ_H38xx:
1158 d-> m_rotation = Rot90; 1158 d-> m_rotation = Rot90;
1159 break; 1159 break;
1160 case Model_iPAQ_H36xx: 1160 case Model_iPAQ_H36xx:
1161 case Model_iPAQ_H37xx: 1161 case Model_iPAQ_H37xx:
1162 case Model_iPAQ_H39xx: 1162 case Model_iPAQ_H39xx:
1163 1163
1164 default: 1164 default:
1165 d-> m_rotation = Rot270; 1165 d-> m_rotation = Rot270;
1166 break; 1166 break;
1167 case Model_iPAQ_H5xxx: 1167 case Model_iPAQ_H5xxx:
1168 d-> m_rotation = Rot0; 1168 d-> m_rotation = Rot0;
1169 } 1169 }
1170 1170
1171 f. setName ( "/etc/familiar-version" ); 1171 f. setName ( "/etc/familiar-version" );
1172 if ( f. open ( IO_ReadOnly )) { 1172 if ( f. open ( IO_ReadOnly )) {
1173 d-> m_systemstr = "Familiar"; 1173 d-> m_systemstr = "Familiar";
1174 d-> m_system = System_Familiar; 1174 d-> m_system = System_Familiar;
1175 1175
1176 QTextStream ts ( &f ); 1176 QTextStream ts ( &f );
1177 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1177 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
1178 1178
1179 f. close ( ); 1179 f. close ( );
1180 } else { 1180 } else {
1181 f. setName ( "/etc/oz_version" ); 1181 f. setName ( "/etc/oz_version" );
1182 1182
1183 if ( f. open ( IO_ReadOnly )) { 1183 if ( f. open ( IO_ReadOnly )) {
1184 d-> m_systemstr = "OpenEmbedded/iPaq"; 1184 d-> m_systemstr = "OpenEmbedded/iPaq";
1185 d-> m_system = System_Familiar; 1185 d-> m_system = System_Familiar;
1186 1186
1187 QTextStream ts ( &f ); 1187 QTextStream ts ( &f );
1188 ts.setDevice ( &f ); 1188 ts.setDevice ( &f );
1189 d-> m_sysverstr = ts. readLine ( ); 1189 d-> m_sysverstr = ts. readLine ( );
1190 f. close ( ); 1190 f. close ( );
1191 } 1191 }
1192 } 1192 }
1193 1193
1194 1194
1195 1195
1196 1196
1197 1197
1198 m_leds [0] = m_leds [1] = Led_Off; 1198 m_leds [0] = m_leds [1] = Led_Off;
1199 1199
1200 m_power_timer = 0; 1200 m_power_timer = 0;
1201 1201
1202} 1202}
1203 1203
1204void iPAQ::initButtons ( ) 1204void iPAQ::initButtons ( )
1205{ 1205{
1206 if ( d-> m_buttons ) 1206 if ( d-> m_buttons )
1207 return; 1207 return;
1208 1208
1209 if ( isQWS( ) ) 1209 if ( isQWS( ) )
1210 QWSServer::setKeyboardFilter ( this ); 1210 QWSServer::setKeyboardFilter ( this );
1211 1211
1212 d-> m_buttons = new QValueList <ODeviceButton>; 1212 d-> m_buttons = new QValueList <ODeviceButton>;
1213 1213
1214 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 1214 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
1215 i_button *ib = ipaq_buttons + i; 1215 i_button *ib = ipaq_buttons + i;
1216 ODeviceButton b; 1216 ODeviceButton b;
1217 1217
1218 if (( ib-> model & d-> m_model ) == d-> m_model ) { 1218 if (( ib-> model & d-> m_model ) == d-> m_model ) {
1219 b. setKeycode ( ib-> code ); 1219 b. setKeycode ( ib-> code );
1220 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1220 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1221 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1221 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1222 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 1222 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
1223 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 1223 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
1224 1224
1225 d-> m_buttons-> append ( b ); 1225 d-> m_buttons-> append ( b );
1226 } 1226 }
1227 } 1227 }
1228 reloadButtonMapping ( ); 1228 reloadButtonMapping ( );
1229 1229
1230 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1230 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1231 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1231 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1232} 1232}
1233 1233
1234 1234
1235//#include <linux/h3600_ts.h> // including kernel headers is evil ... 1235//#include <linux/h3600_ts.h> // including kernel headers is evil ...
1236 1236
1237typedef struct { 1237typedef struct {
1238 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 1238 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
1239 unsigned char TotalTime; /* Units of 5 seconds */ 1239 unsigned char TotalTime; /* Units of 5 seconds */
1240 unsigned char OnTime; /* units of 100m/s */ 1240 unsigned char OnTime; /* units of 100m/s */
1241 unsigned char OffTime; /* units of 100m/s */ 1241 unsigned char OffTime; /* units of 100m/s */
1242} LED_IN; 1242} LED_IN;
1243 1243
1244typedef struct { 1244typedef struct {
1245 unsigned char mode; 1245 unsigned char mode;
1246 unsigned char pwr; 1246 unsigned char pwr;
1247 unsigned char brightness; 1247 unsigned char brightness;
1248} FLITE_IN; 1248} FLITE_IN;
1249 1249
1250#define LED_ON OD_IOW( 'f', 5, LED_IN ) 1250#define LED_ON OD_IOW( 'f', 5, LED_IN )
1251#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 1251#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
1252 1252
1253 1253
1254QValueList <OLed> iPAQ::ledList ( ) const 1254QValueList <OLed> iPAQ::ledList ( ) const
1255{ 1255{
1256 QValueList <OLed> vl; 1256 QValueList <OLed> vl;
1257 vl << Led_Power; 1257 vl << Led_Power;
1258 1258
1259 if ( d-> m_model == Model_iPAQ_H38xx ) 1259 if ( d-> m_model == Model_iPAQ_H38xx )
1260 vl << Led_BlueTooth; 1260 vl << Led_BlueTooth;
1261 return vl; 1261 return vl;
1262} 1262}
1263 1263
1264QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 1264QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
1265{ 1265{
1266 QValueList <OLedState> vl; 1266 QValueList <OLedState> vl;
1267 1267
1268 if ( l == Led_Power ) 1268 if ( l == Led_Power )
1269 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 1269 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
1270 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 1270 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
1271 vl << Led_Off; // << Led_On << ??? 1271 vl << Led_Off; // << Led_On << ???
1272 1272
1273 return vl; 1273 return vl;
1274} 1274}
1275 1275
1276OLedState iPAQ::ledState ( OLed l ) const 1276OLedState iPAQ::ledState ( OLed l ) const
1277{ 1277{
1278 switch ( l ) { 1278 switch ( l ) {
1279 case Led_Power: 1279 case Led_Power:
1280 return m_leds [0]; 1280 return m_leds [0];
1281 case Led_BlueTooth: 1281 case Led_BlueTooth:
1282 return m_leds [1]; 1282 return m_leds [1];
1283 default: 1283 default:
1284 return Led_Off; 1284 return Led_Off;
1285 } 1285 }
1286} 1286}
1287 1287
1288bool iPAQ::setLedState ( OLed l, OLedState st ) 1288bool iPAQ::setLedState ( OLed l, OLedState st )
1289{ 1289{
1290 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 1290 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
1291 1291
1292 if ( l == Led_Power ) { 1292 if ( l == Led_Power ) {
1293 if ( fd >= 0 ) { 1293 if ( fd >= 0 ) {
1294 LED_IN leds; 1294 LED_IN leds;
1295 ::memset ( &leds, 0, sizeof( leds )); 1295 ::memset ( &leds, 0, sizeof( leds ));
1296 leds. TotalTime = 0; 1296 leds. TotalTime = 0;
1297 leds. OnTime = 0; 1297 leds. OnTime = 0;
1298 leds. OffTime = 1; 1298 leds. OffTime = 1;
1299 leds. OffOnBlink = 2; 1299 leds. OffOnBlink = 2;
1300 1300
1301 switch ( st ) { 1301 switch ( st ) {
1302 case Led_Off : leds. OffOnBlink = 0; break; 1302 case Led_Off : leds. OffOnBlink = 0; break;
1303 case Led_On : leds. OffOnBlink = 1; break; 1303 case Led_On : leds. OffOnBlink = 1; break;
1304 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 1304 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
1305 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 1305 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
1306 } 1306 }
1307 1307
1308 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 1308 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
1309 m_leds [0] = st; 1309 m_leds [0] = st;
1310 return true; 1310 return true;
1311 } 1311 }
1312 } 1312 }
1313 } 1313 }
1314 return false; 1314 return false;
1315} 1315}
1316 1316
1317 1317
1318bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 1318bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
1319{ 1319{
1320 int newkeycode = keycode; 1320 int newkeycode = keycode;
1321 1321
1322 switch ( keycode ) { 1322 switch ( keycode ) {
1323 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 1323 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
1324 case HardKey_Menu: { 1324 case HardKey_Menu: {
1325 if (( d-> m_model == Model_iPAQ_H38xx ) || 1325 if (( d-> m_model == Model_iPAQ_H38xx ) ||
1326 ( d-> m_model == Model_iPAQ_H39xx ) || 1326 ( d-> m_model == Model_iPAQ_H39xx ) ||
1327 ( d-> m_model == Model_iPAQ_H5xxx)) { 1327 ( d-> m_model == Model_iPAQ_H5xxx)) {
1328 newkeycode = HardKey_Mail; 1328 newkeycode = HardKey_Mail;
1329 } 1329 }
1330 break; 1330 break;
1331 } 1331 }
1332 1332
1333 // Rotate cursor keys 180° 1333 // Rotate cursor keys 180° or 270°
1334 case Key_Left : 1334 case Key_Left :
1335 case Key_Right: 1335 case Key_Right:
1336 case Key_Up : 1336 case Key_Up :
1337 case Key_Down : { 1337 case Key_Down : {
1338
1338 if (( d-> m_model == Model_iPAQ_H31xx ) || 1339 if (( d-> m_model == Model_iPAQ_H31xx ) ||
1339 ( d-> m_model == Model_iPAQ_H38xx )) { 1340 ( d-> m_model == Model_iPAQ_H38xx )) {
1340 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 1341 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
1341 } 1342 }
1343 // Rotate the cursor keys by 270°
1344 // keycode - Key_Left = position of the button starting from left clockwise
1345 // add the rotation to it and modolo. No we've the original offset
1346 // add the offset to the Key_Left key
1347 if ( d-> m_model == Model_iPAQ_H5xxx )
1348 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
1342 break; 1349 break;
1343 } 1350 }
1344 1351
1345 // map Power Button short/long press to F34/F35 1352 // map Power Button short/long press to F34/F35
1346 case Key_SysReq: { 1353 case Key_SysReq: {
1347 if ( isPress ) { 1354 if ( isPress ) {
1348 if ( m_power_timer ) 1355 if ( m_power_timer )
1349 killTimer ( m_power_timer ); 1356 killTimer ( m_power_timer );
1350 m_power_timer = startTimer ( 500 ); 1357 m_power_timer = startTimer ( 500 );
1351 } 1358 }
1352 else if ( m_power_timer ) { 1359 else if ( m_power_timer ) {
1353 killTimer ( m_power_timer ); 1360 killTimer ( m_power_timer );
1354 m_power_timer = 0; 1361 m_power_timer = 0;
1355 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 1362 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
1356 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 1363 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
1357 } 1364 }
1358 newkeycode = Key_unknown; 1365 newkeycode = Key_unknown;
1359 break; 1366 break;
1360 } 1367 }
1361 } 1368 }
1362 1369
1363 if ( newkeycode != keycode ) { 1370 if ( newkeycode != keycode ) {
1364 if ( newkeycode != Key_unknown ) 1371 if ( newkeycode != Key_unknown )
1365 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 1372 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
1366 return true; 1373 return true;
1367 } 1374 }
1368 else 1375 else
1369 return false; 1376 return false;
1370} 1377}
1371 1378
1372void iPAQ::timerEvent ( QTimerEvent * ) 1379void iPAQ::timerEvent ( QTimerEvent * )
1373{ 1380{
1374 killTimer ( m_power_timer ); 1381 killTimer ( m_power_timer );
1375 m_power_timer = 0; 1382 m_power_timer = 0;
1376 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 1383 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
1377 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 1384 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
1378} 1385}
1379 1386
1380 1387
1381void iPAQ::alarmSound ( ) 1388void iPAQ::alarmSound ( )
1382{ 1389{
1383#ifndef QT_NO_SOUND 1390#ifndef QT_NO_SOUND
1384 static Sound snd ( "alarm" ); 1391 static Sound snd ( "alarm" );
1385 int fd; 1392 int fd;
1386 int vol; 1393 int vol;
1387 bool vol_reset = false; 1394 bool vol_reset = false;
1388 1395
1389 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1396 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1390 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1397 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1391 Config cfg ( "qpe" ); 1398 Config cfg ( "qpe" );
1392 cfg. setGroup ( "Volume" ); 1399 cfg. setGroup ( "Volume" );
1393 1400
1394 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1401 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1395 if ( volalarm < 0 ) 1402 if ( volalarm < 0 )
1396 volalarm = 0; 1403 volalarm = 0;
1397 else if ( volalarm > 100 ) 1404 else if ( volalarm > 100 )
1398 volalarm = 100; 1405 volalarm = 100;
1399 volalarm |= ( volalarm << 8 ); 1406 volalarm |= ( volalarm << 8 );
1400 1407
1401 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1408 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1402 vol_reset = true; 1409 vol_reset = true;
1403 } 1410 }
1404 } 1411 }
1405 1412
1406 snd. play ( ); 1413 snd. play ( );
1407 while ( !snd. isFinished ( )) 1414 while ( !snd. isFinished ( ))
1408 qApp-> processEvents ( ); 1415 qApp-> processEvents ( );
1409 1416
1410 if ( fd >= 0 ) { 1417 if ( fd >= 0 ) {
1411 if ( vol_reset ) 1418 if ( vol_reset )
1412 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1419 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1413 ::close ( fd ); 1420 ::close ( fd );
1414 } 1421 }
1415#endif 1422#endif
1416} 1423}
1417 1424
1418 1425
1419bool iPAQ::setSoftSuspend ( bool soft ) 1426bool iPAQ::setSoftSuspend ( bool soft )
1420{ 1427{
1421 bool res = false; 1428 bool res = false;
1422 int fd; 1429 int fd;
1423 1430
1424 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 1431 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
1425 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1432 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1426 res = true; 1433 res = true;
1427 else 1434 else
1428 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1435 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1429 1436
1430 ::close ( fd ); 1437 ::close ( fd );
1431 } 1438 }
1432 else 1439 else
1433 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1440 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1434 1441
1435 return res; 1442 return res;
1436} 1443}
1437 1444
1438 1445
1439bool iPAQ::setDisplayBrightness ( int bright ) 1446bool iPAQ::setDisplayBrightness ( int bright )
1440{ 1447{
1441 bool res = false; 1448 bool res = false;
1442 int fd; 1449 int fd;
1443 1450
1444 if ( bright > 255 ) 1451 if ( bright > 255 )
1445 bright = 255; 1452 bright = 255;
1446 if ( bright < 0 ) 1453 if ( bright < 0 )
1447 bright = 0; 1454 bright = 0;
1448 1455
1449 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1456 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1450 FLITE_IN bl; 1457 FLITE_IN bl;
1451 bl. mode = 1; 1458 bl. mode = 1;
1452 bl. pwr = bright ? 1 : 0; 1459 bl. pwr = bright ? 1 : 0;
1453 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1460 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1454 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1461 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1455 ::close ( fd ); 1462 ::close ( fd );
1456 } 1463 }
1457 return res; 1464 return res;
1458} 1465}
1459 1466
1460int iPAQ::displayBrightnessResolution ( ) const 1467int iPAQ::displayBrightnessResolution ( ) const
1461{ 1468{
1462 switch ( model ( )) { 1469 switch ( model ( )) {
1463 case Model_iPAQ_H31xx: 1470 case Model_iPAQ_H31xx:
1464 case Model_iPAQ_H36xx: 1471 case Model_iPAQ_H36xx:
1465 case Model_iPAQ_H37xx: 1472 case Model_iPAQ_H37xx:
1466 return 128; // really 256, but >128 could damage the LCD 1473 return 128; // really 256, but >128 could damage the LCD
1467 1474
1468 case Model_iPAQ_H38xx: 1475 case Model_iPAQ_H38xx:
1469 case Model_iPAQ_H39xx: 1476 case Model_iPAQ_H39xx:
1470 return 64; 1477 return 64;
1471 case Model_iPAQ_H5xxx: 1478 case Model_iPAQ_H5xxx:
1472 return 255; 1479 return 255;
1473 1480
1474 default: 1481 default:
1475 return 2; 1482 return 2;
1476 } 1483 }
1477} 1484}
1478 1485
1479 1486
1480bool iPAQ::hasLightSensor ( ) const 1487bool iPAQ::hasLightSensor ( ) const
1481{ 1488{
1482 return true; 1489 return true;
1483} 1490}
1484 1491
1485int iPAQ::readLightSensor ( ) 1492int iPAQ::readLightSensor ( )
1486{ 1493{
1487 int fd; 1494 int fd;
1488 int val = -1; 1495 int val = -1;
1489 1496
1490 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1497 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1491 char buffer [8]; 1498 char buffer [8];
1492 1499
1493 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1500 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1494 char *endptr; 1501 char *endptr;
1495 1502
1496 buffer [4] = 0; 1503 buffer [4] = 0;
1497 val = ::strtol ( buffer + 2, &endptr, 16 ); 1504 val = ::strtol ( buffer + 2, &endptr, 16 );
1498 1505
1499 if ( *endptr != 0 ) 1506 if ( *endptr != 0 )
1500 val = -1; 1507 val = -1;
1501 } 1508 }
1502 ::close ( fd ); 1509 ::close ( fd );
1503 } 1510 }
1504 1511
1505 return val; 1512 return val;
1506} 1513}
1507 1514
1508int iPAQ::lightSensorResolution ( ) const 1515int iPAQ::lightSensorResolution ( ) const
1509{ 1516{
1510 return 256; 1517 return 256;
1511} 1518}
1512 1519
1513/************************************************** 1520/**************************************************
1514 * 1521 *
1515 * Zaurus 1522 * Zaurus
1516 * 1523 *
1517 **************************************************/ 1524 **************************************************/
1518 1525
1519// Check whether this device is the sharp zaurus.. 1526// Check whether this device is the sharp zaurus..
1520// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 1527// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
1521// class up into individual classes. We need three classes 1528// class up into individual classes. We need three classes
1522// 1529//
1523// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 1530// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
1524// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 1531// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
1525// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) 1532// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860)
1526// 1533//
1527// Only question right now is: Do we really need to do it? Because as soon 1534// Only question right now is: Do we really need to do it? Because as soon
1528// as the OpenZaurus kernel is ready, there will be a unified interface for all 1535// as the OpenZaurus kernel is ready, there will be a unified interface for all
1529// Zaurus models (concerning apm, backlight, buttons, etc.) 1536// Zaurus models (concerning apm, backlight, buttons, etc.)
1530// 1537//
1531// Comments? - mickeyl. 1538// Comments? - mickeyl.
1532 1539
1533bool Zaurus::isZaurus() 1540bool Zaurus::isZaurus()