summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
Unidiff
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 58254a7..71ed9e4 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1142,769 +1142,769 @@ void iPAQ::init ( )
1142 break; 1142 break;
1143 case Model_iPAQ_H5xxx: 1143 case Model_iPAQ_H5xxx:
1144 d-> m_rotation = Rot0; 1144 d-> m_rotation = Rot0;
1145 } 1145 }
1146 1146
1147 f. setName ( "/etc/familiar-version" ); 1147 f. setName ( "/etc/familiar-version" );
1148 if ( f. open ( IO_ReadOnly )) { 1148 if ( f. open ( IO_ReadOnly )) {
1149 d-> m_systemstr = "Familiar"; 1149 d-> m_systemstr = "Familiar";
1150 d-> m_system = System_Familiar; 1150 d-> m_system = System_Familiar;
1151 1151
1152 QTextStream ts ( &f ); 1152 QTextStream ts ( &f );
1153 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1153 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
1154 1154
1155 f. close ( ); 1155 f. close ( );
1156 } else { 1156 } else {
1157 f. setName ( "/etc/oz_version" ); 1157 f. setName ( "/etc/oz_version" );
1158 1158
1159 if ( f. open ( IO_ReadOnly )) { 1159 if ( f. open ( IO_ReadOnly )) {
1160 d-> m_systemstr = "OpenEmbedded/iPaq"; 1160 d-> m_systemstr = "OpenEmbedded/iPaq";
1161 d-> m_system = System_Familiar; 1161 d-> m_system = System_Familiar;
1162 1162
1163 QTextStream ts ( &f ); 1163 QTextStream ts ( &f );
1164 ts.setDevice ( &f ); 1164 ts.setDevice ( &f );
1165 d-> m_sysverstr = ts. readLine ( ); 1165 d-> m_sysverstr = ts. readLine ( );
1166 f. close ( ); 1166 f. close ( );
1167 } 1167 }
1168 } 1168 }
1169 1169
1170 1170
1171 1171
1172 1172
1173 1173
1174 m_leds [0] = m_leds [1] = Led_Off; 1174 m_leds [0] = m_leds [1] = Led_Off;
1175 1175
1176 m_power_timer = 0; 1176 m_power_timer = 0;
1177 1177
1178} 1178}
1179 1179
1180void iPAQ::initButtons ( ) 1180void iPAQ::initButtons ( )
1181{ 1181{
1182 if ( d-> m_buttons ) 1182 if ( d-> m_buttons )
1183 return; 1183 return;
1184 1184
1185 if ( isQWS( ) ) 1185 if ( isQWS( ) )
1186 QWSServer::setKeyboardFilter ( this ); 1186 QWSServer::setKeyboardFilter ( this );
1187 1187
1188 d-> m_buttons = new QValueList <ODeviceButton>; 1188 d-> m_buttons = new QValueList <ODeviceButton>;
1189 1189
1190 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 1190 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
1191 i_button *ib = ipaq_buttons + i; 1191 i_button *ib = ipaq_buttons + i;
1192 ODeviceButton b; 1192 ODeviceButton b;
1193 1193
1194 if (( ib-> model & d-> m_model ) == d-> m_model ) { 1194 if (( ib-> model & d-> m_model ) == d-> m_model ) {
1195 b. setKeycode ( ib-> code ); 1195 b. setKeycode ( ib-> code );
1196 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1196 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1197 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1197 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1198 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 1198 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
1199 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 1199 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
1200 1200
1201 d-> m_buttons-> append ( b ); 1201 d-> m_buttons-> append ( b );
1202 } 1202 }
1203 } 1203 }
1204 reloadButtonMapping ( ); 1204 reloadButtonMapping ( );
1205 1205
1206 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1206 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1207 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1207 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1208} 1208}
1209 1209
1210 1210
1211//#include <linux/h3600_ts.h> // including kernel headers is evil ... 1211//#include <linux/h3600_ts.h> // including kernel headers is evil ...
1212 1212
1213typedef struct { 1213typedef struct {
1214 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 1214 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
1215 unsigned char TotalTime; /* Units of 5 seconds */ 1215 unsigned char TotalTime; /* Units of 5 seconds */
1216 unsigned char OnTime; /* units of 100m/s */ 1216 unsigned char OnTime; /* units of 100m/s */
1217 unsigned char OffTime; /* units of 100m/s */ 1217 unsigned char OffTime; /* units of 100m/s */
1218} LED_IN; 1218} LED_IN;
1219 1219
1220typedef struct { 1220typedef struct {
1221 unsigned char mode; 1221 unsigned char mode;
1222 unsigned char pwr; 1222 unsigned char pwr;
1223 unsigned char brightness; 1223 unsigned char brightness;
1224} FLITE_IN; 1224} FLITE_IN;
1225 1225
1226#define LED_ON OD_IOW( 'f', 5, LED_IN ) 1226#define LED_ON OD_IOW( 'f', 5, LED_IN )
1227#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 1227#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
1228 1228
1229 1229
1230QValueList <OLed> iPAQ::ledList ( ) const 1230QValueList <OLed> iPAQ::ledList ( ) const
1231{ 1231{
1232 QValueList <OLed> vl; 1232 QValueList <OLed> vl;
1233 vl << Led_Power; 1233 vl << Led_Power;
1234 1234
1235 if ( d-> m_model == Model_iPAQ_H38xx ) 1235 if ( d-> m_model == Model_iPAQ_H38xx )
1236 vl << Led_BlueTooth; 1236 vl << Led_BlueTooth;
1237 return vl; 1237 return vl;
1238} 1238}
1239 1239
1240QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 1240QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
1241{ 1241{
1242 QValueList <OLedState> vl; 1242 QValueList <OLedState> vl;
1243 1243
1244 if ( l == Led_Power ) 1244 if ( l == Led_Power )
1245 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 1245 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
1246 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 1246 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
1247 vl << Led_Off; // << Led_On << ??? 1247 vl << Led_Off; // << Led_On << ???
1248 1248
1249 return vl; 1249 return vl;
1250} 1250}
1251 1251
1252OLedState iPAQ::ledState ( OLed l ) const 1252OLedState iPAQ::ledState ( OLed l ) const
1253{ 1253{
1254 switch ( l ) { 1254 switch ( l ) {
1255 case Led_Power: 1255 case Led_Power:
1256 return m_leds [0]; 1256 return m_leds [0];
1257 case Led_BlueTooth: 1257 case Led_BlueTooth:
1258 return m_leds [1]; 1258 return m_leds [1];
1259 default: 1259 default:
1260 return Led_Off; 1260 return Led_Off;
1261 } 1261 }
1262} 1262}
1263 1263
1264bool iPAQ::setLedState ( OLed l, OLedState st ) 1264bool iPAQ::setLedState ( OLed l, OLedState st )
1265{ 1265{
1266 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 1266 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
1267 1267
1268 if ( l == Led_Power ) { 1268 if ( l == Led_Power ) {
1269 if ( fd >= 0 ) { 1269 if ( fd >= 0 ) {
1270 LED_IN leds; 1270 LED_IN leds;
1271 ::memset ( &leds, 0, sizeof( leds )); 1271 ::memset ( &leds, 0, sizeof( leds ));
1272 leds. TotalTime = 0; 1272 leds. TotalTime = 0;
1273 leds. OnTime = 0; 1273 leds. OnTime = 0;
1274 leds. OffTime = 1; 1274 leds. OffTime = 1;
1275 leds. OffOnBlink = 2; 1275 leds. OffOnBlink = 2;
1276 1276
1277 switch ( st ) { 1277 switch ( st ) {
1278 case Led_Off : leds. OffOnBlink = 0; break; 1278 case Led_Off : leds. OffOnBlink = 0; break;
1279 case Led_On : leds. OffOnBlink = 1; break; 1279 case Led_On : leds. OffOnBlink = 1; break;
1280 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 1280 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
1281 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 1281 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
1282 } 1282 }
1283 1283
1284 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 1284 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
1285 m_leds [0] = st; 1285 m_leds [0] = st;
1286 return true; 1286 return true;
1287 } 1287 }
1288 } 1288 }
1289 } 1289 }
1290 return false; 1290 return false;
1291} 1291}
1292 1292
1293 1293
1294bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 1294bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
1295{ 1295{
1296 int newkeycode = keycode; 1296 int newkeycode = keycode;
1297 1297
1298 switch ( keycode ) { 1298 switch ( keycode ) {
1299 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 1299 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
1300 case HardKey_Menu: { 1300 case HardKey_Menu: {
1301 if (( d-> m_model == Model_iPAQ_H38xx ) || 1301 if (( d-> m_model == Model_iPAQ_H38xx ) ||
1302 ( d-> m_model == Model_iPAQ_H39xx ) || 1302 ( d-> m_model == Model_iPAQ_H39xx ) ||
1303 ( d-> m_model == Model_iPAQ_H5xxx)) { 1303 ( d-> m_model == Model_iPAQ_H5xxx)) {
1304 newkeycode = HardKey_Mail; 1304 newkeycode = HardKey_Mail;
1305 } 1305 }
1306 break; 1306 break;
1307 } 1307 }
1308 1308
1309 // Rotate cursor keys 180° 1309 // Rotate cursor keys 180°
1310 case Key_Left : 1310 case Key_Left :
1311 case Key_Right: 1311 case Key_Right:
1312 case Key_Up : 1312 case Key_Up :
1313 case Key_Down : { 1313 case Key_Down : {
1314 if (( d-> m_model == Model_iPAQ_H31xx ) || 1314 if (( d-> m_model == Model_iPAQ_H31xx ) ||
1315 ( d-> m_model == Model_iPAQ_H38xx )) { 1315 ( d-> m_model == Model_iPAQ_H38xx )) {
1316 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 1316 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
1317 } 1317 }
1318 break; 1318 break;
1319 } 1319 }
1320 1320
1321 // map Power Button short/long press to F34/F35 1321 // map Power Button short/long press to F34/F35
1322 case Key_SysReq: { 1322 case Key_SysReq: {
1323 if ( isPress ) { 1323 if ( isPress ) {
1324 if ( m_power_timer ) 1324 if ( m_power_timer )
1325 killTimer ( m_power_timer ); 1325 killTimer ( m_power_timer );
1326 m_power_timer = startTimer ( 500 ); 1326 m_power_timer = startTimer ( 500 );
1327 } 1327 }
1328 else if ( m_power_timer ) { 1328 else if ( m_power_timer ) {
1329 killTimer ( m_power_timer ); 1329 killTimer ( m_power_timer );
1330 m_power_timer = 0; 1330 m_power_timer = 0;
1331 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 1331 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
1332 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 1332 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
1333 } 1333 }
1334 newkeycode = Key_unknown; 1334 newkeycode = Key_unknown;
1335 break; 1335 break;
1336 } 1336 }
1337 } 1337 }
1338 1338
1339 if ( newkeycode != keycode ) { 1339 if ( newkeycode != keycode ) {
1340 if ( newkeycode != Key_unknown ) 1340 if ( newkeycode != Key_unknown )
1341 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 1341 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
1342 return true; 1342 return true;
1343 } 1343 }
1344 else 1344 else
1345 return false; 1345 return false;
1346} 1346}
1347 1347
1348void iPAQ::timerEvent ( QTimerEvent * ) 1348void iPAQ::timerEvent ( QTimerEvent * )
1349{ 1349{
1350 killTimer ( m_power_timer ); 1350 killTimer ( m_power_timer );
1351 m_power_timer = 0; 1351 m_power_timer = 0;
1352 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 1352 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
1353 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 1353 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
1354} 1354}
1355 1355
1356 1356
1357void iPAQ::alarmSound ( ) 1357void iPAQ::alarmSound ( )
1358{ 1358{
1359#ifndef QT_NO_SOUND 1359#ifndef QT_NO_SOUND
1360 static Sound snd ( "alarm" ); 1360 static Sound snd ( "alarm" );
1361 int fd; 1361 int fd;
1362 int vol; 1362 int vol;
1363 bool vol_reset = false; 1363 bool vol_reset = false;
1364 1364
1365 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1365 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1366 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1366 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1367 Config cfg ( "qpe" ); 1367 Config cfg ( "qpe" );
1368 cfg. setGroup ( "Volume" ); 1368 cfg. setGroup ( "Volume" );
1369 1369
1370 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1370 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1371 if ( volalarm < 0 ) 1371 if ( volalarm < 0 )
1372 volalarm = 0; 1372 volalarm = 0;
1373 else if ( volalarm > 100 ) 1373 else if ( volalarm > 100 )
1374 volalarm = 100; 1374 volalarm = 100;
1375 volalarm |= ( volalarm << 8 ); 1375 volalarm |= ( volalarm << 8 );
1376 1376
1377 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1377 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1378 vol_reset = true; 1378 vol_reset = true;
1379 } 1379 }
1380 } 1380 }
1381 1381
1382 snd. play ( ); 1382 snd. play ( );
1383 while ( !snd. isFinished ( )) 1383 while ( !snd. isFinished ( ))
1384 qApp-> processEvents ( ); 1384 qApp-> processEvents ( );
1385 1385
1386 if ( fd >= 0 ) { 1386 if ( fd >= 0 ) {
1387 if ( vol_reset ) 1387 if ( vol_reset )
1388 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1388 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1389 ::close ( fd ); 1389 ::close ( fd );
1390 } 1390 }
1391#endif 1391#endif
1392} 1392}
1393 1393
1394 1394
1395bool iPAQ::setSoftSuspend ( bool soft ) 1395bool iPAQ::setSoftSuspend ( bool soft )
1396{ 1396{
1397 bool res = false; 1397 bool res = false;
1398 int fd; 1398 int fd;
1399 1399
1400 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 1400 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
1401 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1401 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1402 res = true; 1402 res = true;
1403 else 1403 else
1404 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1404 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1405 1405
1406 ::close ( fd ); 1406 ::close ( fd );
1407 } 1407 }
1408 else 1408 else
1409 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1409 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1410 1410
1411 return res; 1411 return res;
1412} 1412}
1413 1413
1414 1414
1415bool iPAQ::setDisplayBrightness ( int bright ) 1415bool iPAQ::setDisplayBrightness ( int bright )
1416{ 1416{
1417 bool res = false; 1417 bool res = false;
1418 int fd; 1418 int fd;
1419 1419
1420 if ( bright > 255 ) 1420 if ( bright > 255 )
1421 bright = 255; 1421 bright = 255;
1422 if ( bright < 0 ) 1422 if ( bright < 0 )
1423 bright = 0; 1423 bright = 0;
1424 1424
1425 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1425 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1426 FLITE_IN bl; 1426 FLITE_IN bl;
1427 bl. mode = 1; 1427 bl. mode = 1;
1428 bl. pwr = bright ? 1 : 0; 1428 bl. pwr = bright ? 1 : 0;
1429 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1429 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1430 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1430 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1431 ::close ( fd ); 1431 ::close ( fd );
1432 } 1432 }
1433 return res; 1433 return res;
1434} 1434}
1435 1435
1436int iPAQ::displayBrightnessResolution ( ) const 1436int iPAQ::displayBrightnessResolution ( ) const
1437{ 1437{
1438 switch ( model ( )) { 1438 switch ( model ( )) {
1439 case Model_iPAQ_H31xx: 1439 case Model_iPAQ_H31xx:
1440 case Model_iPAQ_H36xx: 1440 case Model_iPAQ_H36xx:
1441 case Model_iPAQ_H37xx: 1441 case Model_iPAQ_H37xx:
1442 return 128; // really 256, but >128 could damage the LCD 1442 return 128; // really 256, but >128 could damage the LCD
1443 1443
1444 case Model_iPAQ_H38xx: 1444 case Model_iPAQ_H38xx:
1445 case Model_iPAQ_H39xx: 1445 case Model_iPAQ_H39xx:
1446 return 64; 1446 return 64;
1447 case Model_iPAQ_H5xxx: 1447 case Model_iPAQ_H5xxx:
1448 return 255; 1448 return 255;
1449 1449
1450 default: 1450 default:
1451 return 2; 1451 return 2;
1452 } 1452 }
1453} 1453}
1454 1454
1455 1455
1456bool iPAQ::hasLightSensor ( ) const 1456bool iPAQ::hasLightSensor ( ) const
1457{ 1457{
1458 return true; 1458 return true;
1459} 1459}
1460 1460
1461int iPAQ::readLightSensor ( ) 1461int iPAQ::readLightSensor ( )
1462{ 1462{
1463 int fd; 1463 int fd;
1464 int val = -1; 1464 int val = -1;
1465 1465
1466 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1466 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1467 char buffer [8]; 1467 char buffer [8];
1468 1468
1469 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1469 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1470 char *endptr; 1470 char *endptr;
1471 1471
1472 buffer [4] = 0; 1472 buffer [4] = 0;
1473 val = ::strtol ( buffer + 2, &endptr, 16 ); 1473 val = ::strtol ( buffer + 2, &endptr, 16 );
1474 1474
1475 if ( *endptr != 0 ) 1475 if ( *endptr != 0 )
1476 val = -1; 1476 val = -1;
1477 } 1477 }
1478 ::close ( fd ); 1478 ::close ( fd );
1479 } 1479 }
1480 1480
1481 return val; 1481 return val;
1482} 1482}
1483 1483
1484int iPAQ::lightSensorResolution ( ) const 1484int iPAQ::lightSensorResolution ( ) const
1485{ 1485{
1486 return 256; 1486 return 256;
1487} 1487}
1488 1488
1489/************************************************** 1489/**************************************************
1490 * 1490 *
1491 * Zaurus 1491 * Zaurus
1492 * 1492 *
1493 **************************************************/ 1493 **************************************************/
1494 1494
1495// Check whether this device is the sharp zaurus.. 1495// Check whether this device is the sharp zaurus..
1496bool Zaurus::isZaurus() 1496bool Zaurus::isZaurus()
1497{ 1497{
1498 1498
1499 // If the special devices by embedix exist, it is quite simple: it is a Zaurus ! 1499 // If the special devices by embedix exist, it is quite simple: it is a Zaurus !
1500 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){ 1500 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){
1501 return true; 1501 return true;
1502 } 1502 }
1503 1503
1504 // On non-embedix kernels, we have to look closer. 1504 // On non-embedix kernels, we have to look closer.
1505 bool is_zaurus = false; 1505 bool is_zaurus = false;
1506 QFile f ( "/proc/cpuinfo" ); 1506 QFile f ( "/proc/cpuinfo" );
1507 if ( f. open ( IO_ReadOnly ) ) { 1507 if ( f. open ( IO_ReadOnly ) ) {
1508 QString model; 1508 QString model;
1509 QFile f ( "/proc/cpuinfo" ); 1509 QFile f ( "/proc/cpuinfo" );
1510 1510
1511 QTextStream ts ( &f ); 1511 QTextStream ts ( &f );
1512 QString line; 1512 QString line;
1513 while( line = ts. readLine ( ) ) { 1513 while( line = ts. readLine ( ) ) {
1514 if ( line. left ( 8 ) == "Hardware" ) 1514 if ( line. left ( 8 ) == "Hardware" )
1515 break; 1515 break;
1516 } 1516 }
1517 int loc = line. find ( ":" ); 1517 int loc = line. find ( ":" );
1518 if ( loc != -1 ) 1518 if ( loc != -1 )
1519 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1519 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1520 1520
1521 if ( model == "Sharp-Collie" 1521 if ( model == "Sharp-Collie"
1522 || model == "Collie" 1522 || model == "Collie"
1523 || model == "SHARP Corgi" 1523 || model == "SHARP Corgi"
1524 || model == "SHARP Shepherd" 1524 || model == "SHARP Shepherd"
1525 || model == "SHARP Poodle" 1525 || model == "SHARP Poodle"
1526 || model == "SHARP Husky" ) 1526 || model == "SHARP Husky"
1527 ) 1527 )
1528 is_zaurus = true; 1528 is_zaurus = true;
1529 1529
1530 } 1530 }
1531 return is_zaurus; 1531 return is_zaurus;
1532} 1532}
1533 1533
1534 1534
1535void Zaurus::init ( ) 1535void Zaurus::init ( )
1536{ 1536{
1537 d-> m_vendorstr = "Sharp"; 1537 d-> m_vendorstr = "Sharp";
1538 d-> m_vendor = Vendor_Sharp; 1538 d-> m_vendor = Vendor_Sharp;
1539 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 1539 m_embedix = true; // Not openzaurus means: It has an embedix kernel !
1540 1540
1541 // QFile f ( "/proc/filesystems" ); 1541 // QFile f ( "/proc/filesystems" );
1542 QString model; 1542 QString model;
1543 1543
1544 // It isn't a good idea to check the system configuration to 1544 // It isn't a good idea to check the system configuration to
1545 // detect the distribution ! 1545 // detect the distribution !
1546 // Otherwise it may happen that any other distribution is detected as openzaurus, just 1546 // Otherwise it may happen that any other distribution is detected as openzaurus, just
1547 // because it uses a jffs2 filesystem.. 1547 // because it uses a jffs2 filesystem..
1548 // (eilers) 1548 // (eilers)
1549 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1549 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
1550 QFile f ("/etc/oz_version"); 1550 QFile f ("/etc/oz_version");
1551 if ( f.exists() ){ 1551 if ( f.exists() ){
1552 d-> m_vendorstr = "OpenZaurus Team"; 1552 d-> m_vendorstr = "OpenZaurus Team";
1553 d-> m_systemstr = "OpenZaurus"; 1553 d-> m_systemstr = "OpenZaurus";
1554 d-> m_system = System_OpenZaurus; 1554 d-> m_system = System_OpenZaurus;
1555 1555
1556 if ( f. open ( IO_ReadOnly )) { 1556 if ( f. open ( IO_ReadOnly )) {
1557 QTextStream ts ( &f ); 1557 QTextStream ts ( &f );
1558 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1558 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1559 f. close ( ); 1559 f. close ( );
1560 } 1560 }
1561 1561
1562 // Openzaurus sometimes uses the embedix kernel! 1562 // Openzaurus sometimes uses the embedix kernel!
1563 // => Check whether this is an embedix kernel 1563 // => Check whether this is an embedix kernel
1564 FILE *uname = popen("uname -r", "r"); 1564 FILE *uname = popen("uname -r", "r");
1565 QString line; 1565 QString line;
1566 if ( f.open(IO_ReadOnly, uname) ) { 1566 if ( f.open(IO_ReadOnly, uname) ) {
1567 QTextStream ts ( &f ); 1567 QTextStream ts ( &f );
1568 line = ts. readLine ( ); 1568 line = ts. readLine ( );
1569 int loc = line. find ( "embedix" ); 1569 int loc = line. find ( "embedix" );
1570 if ( loc != -1 ) 1570 if ( loc != -1 )
1571 m_embedix = true; 1571 m_embedix = true;
1572 else 1572 else
1573 m_embedix = false; 1573 m_embedix = false;
1574 f. close ( ); 1574 f. close ( );
1575 } 1575 }
1576 pclose(uname); 1576 pclose(uname);
1577 } 1577 }
1578 else { 1578 else {
1579 d-> m_systemstr = "Zaurus"; 1579 d-> m_systemstr = "Zaurus";
1580 d-> m_system = System_Zaurus; 1580 d-> m_system = System_Zaurus;
1581 } 1581 }
1582 1582
1583 f. setName ( "/proc/cpuinfo" ); 1583 f. setName ( "/proc/cpuinfo" );
1584 if ( f. open ( IO_ReadOnly ) ) { 1584 if ( f. open ( IO_ReadOnly ) ) {
1585 QTextStream ts ( &f ); 1585 QTextStream ts ( &f );
1586 QString line; 1586 QString line;
1587 while( line = ts. readLine ( ) ) { 1587 while( line = ts. readLine ( ) ) {
1588 if ( line. left ( 8 ) == "Hardware" ) 1588 if ( line. left ( 8 ) == "Hardware" )
1589 break; 1589 break;
1590 } 1590 }
1591 int loc = line. find ( ":" ); 1591 int loc = line. find ( ":" );
1592 if ( loc != -1 ) 1592 if ( loc != -1 )
1593 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1593 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1594 } 1594 }
1595 1595
1596 if ( model == "SHARP Corgi" ) { 1596 if ( model == "SHARP Corgi" ) {
1597 d-> m_model = Model_Zaurus_SLC7x0; 1597 d-> m_model = Model_Zaurus_SLC7x0;
1598 d-> m_modelstr = "Zaurus SL-C700"; 1598 d-> m_modelstr = "Zaurus SL-C700";
1599 } else if ( model == "SHARP Shepherd" ) { 1599 } else if ( model == "SHARP Shepherd" ) {
1600 d-> m_model = Model_Zaurus_SLC7x0; 1600 d-> m_model = Model_Zaurus_SLC7x0;
1601 d-> m_modelstr = "Zaurus SL-C750"; 1601 d-> m_modelstr = "Zaurus SL-C750";
1602 } else if ( model == "SHARP Husky" ) { 1602 } else if ( model == "SHARP Husky" ) {
1603 d-> m_model = Model_Zaurus_SLC7x0; 1603 d-> m_model = Model_Zaurus_SLC7x0;
1604 d-> m_modelstr = "Zaurus SL-C760"; 1604 d-> m_modelstr = "Zaurus SL-C760";
1605 } else if ( model == "SHARP Poodle" ) { 1605 } else if ( model == "SHARP Poodle" ) {
1606 d-> m_model = Model_Zaurus_SLB600; 1606 d-> m_model = Model_Zaurus_SLB600;
1607 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1607 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1608 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 1608 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
1609 d-> m_model = Model_Zaurus_SL5500; 1609 d-> m_model = Model_Zaurus_SL5500;
1610 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1610 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1611 } else { 1611 } else {
1612 d-> m_model = Model_Zaurus_SL5500; 1612 d-> m_model = Model_Zaurus_SL5500;
1613 d-> m_modelstr = "Zaurus (Model unknown)"; 1613 d-> m_modelstr = "Zaurus (Model unknown)";
1614 } 1614 }
1615 1615
1616 bool flipstate = false; 1616 bool flipstate = false;
1617 switch ( d-> m_model ) { 1617 switch ( d-> m_model ) {
1618 case Model_Zaurus_SLA300: 1618 case Model_Zaurus_SLA300:
1619 d-> m_rotation = Rot0; 1619 d-> m_rotation = Rot0;
1620 break; 1620 break;
1621 case Model_Zaurus_SLC7x0: 1621 case Model_Zaurus_SLC7x0:
1622 // Note: need to 1) set flipstate based on physical screen orientation 1622 // Note: need to 1) set flipstate based on physical screen orientation
1623 // and 2) check to see if the user overrode the rotation direction 1623 // and 2) check to see if the user overrode the rotation direction
1624 // using appearance, and if so, remove that item from the Config to 1624 // using appearance, and if so, remove that item from the Config to
1625 // ensure the rotate applet flips us back to the previous state. 1625 // ensure the rotate applet flips us back to the previous state.
1626 if ( flipstate ) { 1626 if ( flipstate ) {
1627 // 480x640 1627 // 480x640
1628 d-> m_rotation = Rot0; 1628 d-> m_rotation = Rot0;
1629 d-> m_direction = CW; 1629 d-> m_direction = CW;
1630 } else { 1630 } else {
1631 // 640x480 1631 // 640x480
1632 d-> m_rotation = Rot270; 1632 d-> m_rotation = Rot270;
1633 d-> m_direction = CCW; 1633 d-> m_direction = CCW;
1634 } 1634 }
1635 break; 1635 break;
1636 case Model_Zaurus_SLB600: 1636 case Model_Zaurus_SLB600:
1637 case Model_Zaurus_SL5500: 1637 case Model_Zaurus_SL5500:
1638 case Model_Zaurus_SL5000: 1638 case Model_Zaurus_SL5000:
1639 default: 1639 default:
1640 d-> m_rotation = Rot270; 1640 d-> m_rotation = Rot270;
1641 break; 1641 break;
1642 } 1642 }
1643 m_leds [0] = Led_Off; 1643 m_leds [0] = Led_Off;
1644} 1644}
1645 1645
1646void Zaurus::initButtons ( ) 1646void Zaurus::initButtons ( )
1647{ 1647{
1648 if ( d-> m_buttons ) 1648 if ( d-> m_buttons )
1649 return; 1649 return;
1650 1650
1651 d-> m_buttons = new QValueList <ODeviceButton>; 1651 d-> m_buttons = new QValueList <ODeviceButton>;
1652 1652
1653 struct z_button * pz_buttons; 1653 struct z_button * pz_buttons;
1654 int buttoncount; 1654 int buttoncount;
1655 switch ( d-> m_model ) { 1655 switch ( d-> m_model ) {
1656 case Model_Zaurus_SLC7x0: 1656 case Model_Zaurus_SLC7x0:
1657 pz_buttons = z_buttons_c700; 1657 pz_buttons = z_buttons_c700;
1658 buttoncount = ARRAY_SIZE(z_buttons_c700); 1658 buttoncount = ARRAY_SIZE(z_buttons_c700);
1659 break; 1659 break;
1660 default: 1660 default:
1661 pz_buttons = z_buttons; 1661 pz_buttons = z_buttons;
1662 buttoncount = ARRAY_SIZE(z_buttons); 1662 buttoncount = ARRAY_SIZE(z_buttons);
1663 break; 1663 break;
1664 } 1664 }
1665 1665
1666 for ( int i = 0; i < buttoncount; i++ ) { 1666 for ( int i = 0; i < buttoncount; i++ ) {
1667 struct z_button *zb = pz_buttons + i; 1667 struct z_button *zb = pz_buttons + i;
1668 ODeviceButton b; 1668 ODeviceButton b;
1669 1669
1670 b. setKeycode ( zb-> code ); 1670 b. setKeycode ( zb-> code );
1671 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1671 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1672 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1672 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1673 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), 1673 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ),
1674 zb-> fpressedaction )); 1674 zb-> fpressedaction ));
1675 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), 1675 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ),
1676 zb-> fheldaction )); 1676 zb-> fheldaction ));
1677 1677
1678 d-> m_buttons-> append ( b ); 1678 d-> m_buttons-> append ( b );
1679 } 1679 }
1680 1680
1681 reloadButtonMapping ( ); 1681 reloadButtonMapping ( );
1682 1682
1683 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1683 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1684 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), 1684 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )),
1685 this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1685 this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1686} 1686}
1687 1687
1688#include <unistd.h> 1688#include <unistd.h>
1689#include <fcntl.h> 1689#include <fcntl.h>
1690#include <sys/ioctl.h> 1690#include <sys/ioctl.h>
1691 1691
1692//#include <asm/sharp_char.h> // including kernel headers is evil ... 1692//#include <asm/sharp_char.h> // including kernel headers is evil ...
1693 1693
1694#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1694#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1695 1695
1696 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1696 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1697#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1697#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1698 1698
1699#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1699#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1700#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1700#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1701#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1701#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1702 1702
1703/* --- for SHARP_BUZZER device --- */ 1703/* --- for SHARP_BUZZER device --- */
1704 1704
1705 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1705 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1706//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1706//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1707 1707
1708#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1708#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1709#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1709#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1710#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1710#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1711#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1711#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1712#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1712#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1713 1713
1714//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1714//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1715//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1715//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1716 1716
1717//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1717//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1718//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1718//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1719//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1719//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1720//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1720//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1721//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1721//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1722//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1722//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1723//#define SHARP_PDA_APPSTART 9 /* application start */ 1723//#define SHARP_PDA_APPSTART 9 /* application start */
1724//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1724//#define SHARP_PDA_APPQUIT 10 /* application ends */
1725 1725
1726//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1726//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1727//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1727//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1728//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1728//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1729//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1729//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1730// 1730//
1731 1731
1732 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1732 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1733#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1733#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1734 1734
1735typedef struct sharp_led_status { 1735typedef struct sharp_led_status {
1736 int which; /* select which LED status is wanted. */ 1736 int which; /* select which LED status is wanted. */
1737 int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 1737 int status; /* set new led status if you call SHARP_LED_SETSTATUS */
1738} sharp_led_status; 1738} sharp_led_status;
1739 1739
1740#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1740#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1741 1741
1742#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 1742#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
1743#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 1743#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
1744#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 1744#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
1745 1745
1746// #include <asm/sharp_apm.h> // including kernel headers is evil ... 1746// #include <asm/sharp_apm.h> // including kernel headers is evil ...
1747 1747
1748#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 1748#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
1749#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 1749#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
1750#define APM_EVT_POWER_BUTTON (1 << 0) 1750#define APM_EVT_POWER_BUTTON (1 << 0)
1751 1751
1752#define FL_IOCTL_STEP_CONTRAST 100 1752#define FL_IOCTL_STEP_CONTRAST 100
1753 1753
1754 1754
1755void Zaurus::buzzer ( int sound ) 1755void Zaurus::buzzer ( int sound )
1756{ 1756{
1757#ifndef QT_NO_SOUND 1757#ifndef QT_NO_SOUND
1758 QString soundname; 1758 QString soundname;
1759 1759
1760 // Not all devices have real sound 1760 // Not all devices have real sound
1761 if ( d->m_model == Model_Zaurus_SLC7x0 1761 if ( d->m_model == Model_Zaurus_SLC7x0
1762 || d->m_model == Model_Zaurus_SLB600 ){ 1762 || d->m_model == Model_Zaurus_SLB600 ){
1763 1763
1764 switch ( sound ){ 1764 switch ( sound ){
1765 case SHARP_BUZ_SCHEDULE_ALARM: 1765 case SHARP_BUZ_SCHEDULE_ALARM:
1766 soundname = "alarm"; 1766 soundname = "alarm";
1767 break; 1767 break;
1768 case SHARP_BUZ_TOUCHSOUND: 1768 case SHARP_BUZ_TOUCHSOUND:
1769 soundname = "touchsound"; 1769 soundname = "touchsound";
1770 break; 1770 break;
1771 case SHARP_BUZ_KEYSOUND: 1771 case SHARP_BUZ_KEYSOUND:
1772 soundname = "keysound"; 1772 soundname = "keysound";
1773 break; 1773 break;
1774 default: 1774 default:
1775 soundname = "alarm"; 1775 soundname = "alarm";
1776 1776
1777 } 1777 }
1778 } 1778 }
1779 1779
1780 // If a soundname is defined, we expect that this device has 1780 // If a soundname is defined, we expect that this device has
1781 // sound capabilities.. Otherwise we expect to have the buzzer 1781 // sound capabilities.. Otherwise we expect to have the buzzer
1782 // device.. 1782 // device..
1783 if ( !soundname.isEmpty() ){ 1783 if ( !soundname.isEmpty() ){
1784 int fd; 1784 int fd;
1785 int vol; 1785 int vol;
1786 bool vol_reset = false; 1786 bool vol_reset = false;
1787 1787
1788 Sound snd ( soundname ); 1788 Sound snd ( soundname );
1789 1789
1790 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1790 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1791 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1791 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1792 Config cfg ( "qpe" ); 1792 Config cfg ( "qpe" );
1793 cfg. setGroup ( "Volume" ); 1793 cfg. setGroup ( "Volume" );
1794 1794
1795 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1795 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1796 if ( volalarm < 0 ) 1796 if ( volalarm < 0 )
1797 volalarm = 0; 1797 volalarm = 0;
1798 else if ( volalarm > 100 ) 1798 else if ( volalarm > 100 )
1799 volalarm = 100; 1799 volalarm = 100;
1800 volalarm |= ( volalarm << 8 ); 1800 volalarm |= ( volalarm << 8 );
1801 1801
1802 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1802 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1803 vol_reset = true; 1803 vol_reset = true;
1804 } 1804 }
1805 } 1805 }
1806 1806
1807 snd. play ( ); 1807 snd. play ( );
1808 while ( !snd. isFinished ( )) 1808 while ( !snd. isFinished ( ))
1809 qApp-> processEvents ( ); 1809 qApp-> processEvents ( );
1810 1810
1811 if ( fd >= 0 ) { 1811 if ( fd >= 0 ) {
1812 if ( vol_reset ) 1812 if ( vol_reset )
1813 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1813 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1814 ::close ( fd ); 1814 ::close ( fd );
1815 } 1815 }
1816 } else { 1816 } else {
1817 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1817 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1818 1818
1819 if ( fd >= 0 ) { 1819 if ( fd >= 0 ) {
1820 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1820 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1821 ::close ( fd ); 1821 ::close ( fd );
1822 } 1822 }
1823 1823
1824 } 1824 }
1825#endif 1825#endif
1826} 1826}
1827 1827
1828 1828
1829void Zaurus::alarmSound ( ) 1829void Zaurus::alarmSound ( )
1830{ 1830{
1831 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1831 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1832} 1832}
1833 1833
1834void Zaurus::touchSound ( ) 1834void Zaurus::touchSound ( )
1835{ 1835{
1836 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1836 buzzer ( SHARP_BUZ_TOUCHSOUND );
1837} 1837}
1838 1838
1839void Zaurus::keySound ( ) 1839void Zaurus::keySound ( )
1840{ 1840{
1841 buzzer ( SHARP_BUZ_KEYSOUND ); 1841 buzzer ( SHARP_BUZ_KEYSOUND );
1842} 1842}
1843 1843
1844 1844
1845QValueList <OLed> Zaurus::ledList ( ) const 1845QValueList <OLed> Zaurus::ledList ( ) const
1846{ 1846{
1847 QValueList <OLed> vl; 1847 QValueList <OLed> vl;
1848 vl << Led_Mail; 1848 vl << Led_Mail;
1849 return vl; 1849 return vl;
1850} 1850}
1851 1851
1852QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1852QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1853{ 1853{
1854 QValueList <OLedState> vl; 1854 QValueList <OLedState> vl;
1855 1855
1856 if ( l == Led_Mail ) 1856 if ( l == Led_Mail )
1857 vl << Led_Off << Led_On << Led_BlinkSlow; 1857 vl << Led_Off << Led_On << Led_BlinkSlow;
1858 return vl; 1858 return vl;
1859} 1859}
1860 1860
1861OLedState Zaurus::ledState ( OLed which ) const 1861OLedState Zaurus::ledState ( OLed which ) const
1862{ 1862{
1863 if ( which == Led_Mail ) 1863 if ( which == Led_Mail )
1864 return m_leds [0]; 1864 return m_leds [0];
1865 else 1865 else
1866 return Led_Off; 1866 return Led_Off;
1867} 1867}
1868 1868
1869bool Zaurus::setLedState ( OLed which, OLedState st ) 1869bool Zaurus::setLedState ( OLed which, OLedState st )
1870{ 1870{
1871 if (!m_embedix) // Currently not supported on non_embedix kernels 1871 if (!m_embedix) // Currently not supported on non_embedix kernels
1872 return false; 1872 return false;
1873 1873
1874 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 1874 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
1875 1875
1876 if ( which == Led_Mail ) { 1876 if ( which == Led_Mail ) {
1877 if ( fd >= 0 ) { 1877 if ( fd >= 0 ) {
1878 struct sharp_led_status leds; 1878 struct sharp_led_status leds;
1879 ::memset ( &leds, 0, sizeof( leds )); 1879 ::memset ( &leds, 0, sizeof( leds ));
1880 leds. which = SHARP_LED_MAIL_EXISTS; 1880 leds. which = SHARP_LED_MAIL_EXISTS;
1881 bool ok = true; 1881 bool ok = true;
1882 1882
1883 switch ( st ) { 1883 switch ( st ) {
1884 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 1884 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
1885 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 1885 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
1886 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 1886 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
1887 default : ok = false; 1887 default : ok = false;
1888 } 1888 }
1889 1889
1890 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 1890 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
1891 m_leds [0] = st; 1891 m_leds [0] = st;
1892 return true; 1892 return true;
1893 } 1893 }
1894 } 1894 }
1895 } 1895 }
1896 return false; 1896 return false;
1897} 1897}
1898 1898
1899bool Zaurus::setSoftSuspend ( bool soft ) 1899bool Zaurus::setSoftSuspend ( bool soft )
1900{ 1900{
1901 if (!m_embedix) { 1901 if (!m_embedix) {
1902 /* non-Embedix kernels dont have kernel autosuspend */ 1902 /* non-Embedix kernels dont have kernel autosuspend */
1903 return ODevice::setSoftSuspend( soft ); 1903 return ODevice::setSoftSuspend( soft );
1904 } 1904 }
1905 1905
1906 bool res = false; 1906 bool res = false;
1907 int fd; 1907 int fd;
1908 1908
1909 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) || 1909 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) ||
1910 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) { 1910 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) {