summaryrefslogtreecommitdiff
authoreilers <eilers>2003-11-17 17:27:44 (UTC)
committer eilers <eilers>2003-11-17 17:27:44 (UTC)
commite8bba52dc9443d3aadcc2c221fa62ba37ea5c712 (patch) (unidiff)
treeddd09027e169cecb392fb7d956f55631d5bf4ef7
parent2e6030553ecc21845ebb9987dffd6c252760a94d (diff)
downloadopie-e8bba52dc9443d3aadcc2c221fa62ba37ea5c712.zip
opie-e8bba52dc9443d3aadcc2c221fa62ba37ea5c712.tar.gz
opie-e8bba52dc9443d3aadcc2c221fa62ba37ea5c712.tar.bz2
Merging the corgie-patches from Branch manually.. (no cvs -j would caused
a big mess .. ;) ) Changed the keysound handling for zaurus: Just all C7x0 and the 5600 will use the sounddevice.. All other will use the old /dev/sharp_buz device..
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index fef623a..58254a7 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1075,128 +1075,129 @@ bool Yopy::setDisplayBrightness(int bright)
1075 if ( QFile::exists("/proc/sys/pm/light") ) { 1075 if ( QFile::exists("/proc/sys/pm/light") ) {
1076 int fd = ::open("/proc/sys/pm/light", O_WRONLY); 1076 int fd = ::open("/proc/sys/pm/light", O_WRONLY);
1077 if (fd >= 0 ) { 1077 if (fd >= 0 ) {
1078 if (bright) 1078 if (bright)
1079 ::write(fd, "1\n", 2); 1079 ::write(fd, "1\n", 2);
1080 else 1080 else
1081 ::write(fd, "0\n", 2); 1081 ::write(fd, "0\n", 2);
1082 ::close(fd); 1082 ::close(fd);
1083 return true; 1083 return true;
1084 } 1084 }
1085 } 1085 }
1086#endif 1086#endif
1087 return false; 1087 return false;
1088} 1088}
1089 1089
1090int Yopy::displayBrightnessResolution() const 1090int Yopy::displayBrightnessResolution() const
1091{ 1091{
1092 return 2; 1092 return 2;
1093} 1093}
1094 1094
1095/************************************************** 1095/**************************************************
1096 * 1096 *
1097 * iPAQ 1097 * iPAQ
1098 * 1098 *
1099 **************************************************/ 1099 **************************************************/
1100 1100
1101void iPAQ::init ( ) 1101void iPAQ::init ( )
1102{ 1102{
1103 d-> m_vendorstr = "HP"; 1103 d-> m_vendorstr = "HP";
1104 d-> m_vendor = Vendor_HP; 1104 d-> m_vendor = Vendor_HP;
1105 1105
1106 QFile f ( "/proc/hal/model" ); 1106 QFile f ( "/proc/hal/model" );
1107 1107
1108 if ( f. open ( IO_ReadOnly )) { 1108 if ( f. open ( IO_ReadOnly )) {
1109 QTextStream ts ( &f ); 1109 QTextStream ts ( &f );
1110 1110
1111 d-> m_modelstr = "H" + ts. readLine ( ); 1111 d-> m_modelstr = "H" + ts. readLine ( );
1112 1112
1113 if ( d-> m_modelstr == "H3100" ) 1113 if ( d-> m_modelstr == "H3100" )
1114 d-> m_model = Model_iPAQ_H31xx; 1114 d-> m_model = Model_iPAQ_H31xx;
1115 else if ( d-> m_modelstr == "H3600" ) 1115 else if ( d-> m_modelstr == "H3600" )
1116 d-> m_model = Model_iPAQ_H36xx; 1116 d-> m_model = Model_iPAQ_H36xx;
1117 else if ( d-> m_modelstr == "H3700" ) 1117 else if ( d-> m_modelstr == "H3700" )
1118 d-> m_model = Model_iPAQ_H37xx; 1118 d-> m_model = Model_iPAQ_H37xx;
1119 else if ( d-> m_modelstr == "H3800" ) 1119 else if ( d-> m_modelstr == "H3800" )
1120 d-> m_model = Model_iPAQ_H38xx; 1120 d-> m_model = Model_iPAQ_H38xx;
1121 else if ( d-> m_modelstr == "H3900" ) 1121 else if ( d-> m_modelstr == "H3900" )
1122 d-> m_model = Model_iPAQ_H39xx; 1122 d-> m_model = Model_iPAQ_H39xx;
1123 else if ( d-> m_modelstr == "H5400" ) 1123 else if ( d-> m_modelstr == "H5400" )
1124 d-> m_model = Model_iPAQ_H5xxx; 1124 d-> m_model = Model_iPAQ_H5xxx;
1125 else 1125 else
1126 d-> m_model = Model_Unknown; 1126 d-> m_model = Model_Unknown;
1127 1127
1128 f. close ( ); 1128 f. close ( );
1129 } 1129 }
1130 1130
1131 switch ( d-> m_model ) { 1131 switch ( d-> m_model ) {
1132 case Model_iPAQ_H31xx: 1132 case Model_iPAQ_H31xx:
1133 case Model_iPAQ_H38xx: 1133 case Model_iPAQ_H38xx:
1134 d-> m_rotation = Rot90; 1134 d-> m_rotation = Rot90;
1135 break; 1135 break;
1136 case Model_iPAQ_H36xx: 1136 case Model_iPAQ_H36xx:
1137 case Model_iPAQ_H37xx: 1137 case Model_iPAQ_H37xx:
1138 case Model_iPAQ_H39xx: 1138 case Model_iPAQ_H39xx:
1139
1139 default: 1140 default:
1140 d-> m_rotation = Rot270; 1141 d-> m_rotation = Rot270;
1141 break; 1142 break;
1142 case Model_iPAQ_H5xxx: 1143 case Model_iPAQ_H5xxx:
1143 d-> m_rotation = Rot0; 1144 d-> m_rotation = Rot0;
1144 } 1145 }
1145 1146
1146 f. setName ( "/etc/familiar-version" ); 1147 f. setName ( "/etc/familiar-version" );
1147 if ( f. open ( IO_ReadOnly )) { 1148 if ( f. open ( IO_ReadOnly )) {
1148 d-> m_systemstr = "Familiar"; 1149 d-> m_systemstr = "Familiar";
1149 d-> m_system = System_Familiar; 1150 d-> m_system = System_Familiar;
1150 1151
1151 QTextStream ts ( &f ); 1152 QTextStream ts ( &f );
1152 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1153 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
1153 1154
1154 f. close ( ); 1155 f. close ( );
1155 } else { 1156 } else {
1156 f. setName ( "/etc/oz_version" ); 1157 f. setName ( "/etc/oz_version" );
1157 1158
1158 if ( f. open ( IO_ReadOnly )) { 1159 if ( f. open ( IO_ReadOnly )) {
1159 d-> m_systemstr = "OpenEmbedded/iPaq"; 1160 d-> m_systemstr = "OpenEmbedded/iPaq";
1160 d-> m_system = System_Familiar; 1161 d-> m_system = System_Familiar;
1161 1162
1162 QTextStream ts ( &f ); 1163 QTextStream ts ( &f );
1163 ts.setDevice ( &f ); 1164 ts.setDevice ( &f );
1164 d-> m_sysverstr = ts. readLine ( ); 1165 d-> m_sysverstr = ts. readLine ( );
1165 f. close ( ); 1166 f. close ( );
1166 } 1167 }
1167 } 1168 }
1168 1169
1169 1170
1170 1171
1171 1172
1172 1173
1173 m_leds [0] = m_leds [1] = Led_Off; 1174 m_leds [0] = m_leds [1] = Led_Off;
1174 1175
1175 m_power_timer = 0; 1176 m_power_timer = 0;
1176 1177
1177} 1178}
1178 1179
1179void iPAQ::initButtons ( ) 1180void iPAQ::initButtons ( )
1180{ 1181{
1181 if ( d-> m_buttons ) 1182 if ( d-> m_buttons )
1182 return; 1183 return;
1183 1184
1184 if ( isQWS( ) ) 1185 if ( isQWS( ) )
1185 QWSServer::setKeyboardFilter ( this ); 1186 QWSServer::setKeyboardFilter ( this );
1186 1187
1187 d-> m_buttons = new QValueList <ODeviceButton>; 1188 d-> m_buttons = new QValueList <ODeviceButton>;
1188 1189
1189 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++ ) {
1190 i_button *ib = ipaq_buttons + i; 1191 i_button *ib = ipaq_buttons + i;
1191 ODeviceButton b; 1192 ODeviceButton b;
1192 1193
1193 if (( ib-> model & d-> m_model ) == d-> m_model ) { 1194 if (( ib-> model & d-> m_model ) == d-> m_model ) {
1194 b. setKeycode ( ib-> code ); 1195 b. setKeycode ( ib-> code );
1195 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1196 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1196 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1197 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1197 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 1198 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
1198 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 1199 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
1199 1200
1200 d-> m_buttons-> append ( b ); 1201 d-> m_buttons-> append ( b );
1201 } 1202 }
1202 } 1203 }
@@ -1439,385 +1440,387 @@ int iPAQ::displayBrightnessResolution ( ) const
1439 case Model_iPAQ_H36xx: 1440 case Model_iPAQ_H36xx:
1440 case Model_iPAQ_H37xx: 1441 case Model_iPAQ_H37xx:
1441 return 128; // really 256, but >128 could damage the LCD 1442 return 128; // really 256, but >128 could damage the LCD
1442 1443
1443 case Model_iPAQ_H38xx: 1444 case Model_iPAQ_H38xx:
1444 case Model_iPAQ_H39xx: 1445 case Model_iPAQ_H39xx:
1445 return 64; 1446 return 64;
1446 case Model_iPAQ_H5xxx: 1447 case Model_iPAQ_H5xxx:
1447 return 255; 1448 return 255;
1448 1449
1449 default: 1450 default:
1450 return 2; 1451 return 2;
1451 } 1452 }
1452} 1453}
1453 1454
1454 1455
1455bool iPAQ::hasLightSensor ( ) const 1456bool iPAQ::hasLightSensor ( ) const
1456{ 1457{
1457 return true; 1458 return true;
1458} 1459}
1459 1460
1460int iPAQ::readLightSensor ( ) 1461int iPAQ::readLightSensor ( )
1461{ 1462{
1462 int fd; 1463 int fd;
1463 int val = -1; 1464 int val = -1;
1464 1465
1465 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1466 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1466 char buffer [8]; 1467 char buffer [8];
1467 1468
1468 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1469 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1469 char *endptr; 1470 char *endptr;
1470 1471
1471 buffer [4] = 0; 1472 buffer [4] = 0;
1472 val = ::strtol ( buffer + 2, &endptr, 16 ); 1473 val = ::strtol ( buffer + 2, &endptr, 16 );
1473 1474
1474 if ( *endptr != 0 ) 1475 if ( *endptr != 0 )
1475 val = -1; 1476 val = -1;
1476 } 1477 }
1477 ::close ( fd ); 1478 ::close ( fd );
1478 } 1479 }
1479 1480
1480 return val; 1481 return val;
1481} 1482}
1482 1483
1483int iPAQ::lightSensorResolution ( ) const 1484int iPAQ::lightSensorResolution ( ) const
1484{ 1485{
1485 return 256; 1486 return 256;
1486} 1487}
1487 1488
1488/************************************************** 1489/**************************************************
1489 * 1490 *
1490 * Zaurus 1491 * Zaurus
1491 * 1492 *
1492 **************************************************/ 1493 **************************************************/
1493 1494
1494// Check whether this device is the sharp zaurus.. 1495// Check whether this device is the sharp zaurus..
1495bool Zaurus::isZaurus() 1496bool Zaurus::isZaurus()
1496{ 1497{
1497 1498
1498 // 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 !
1499 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){ 1500 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){
1500 return true; 1501 return true;
1501 } 1502 }
1502 1503
1503 // On non-embedix kenrnels, we have too look closer. 1504 // On non-embedix kernels, we have to look closer.
1504 bool is_zaurus = false; 1505 bool is_zaurus = false;
1505 QFile f ( "/proc/cpuinfo" ); 1506 QFile f ( "/proc/cpuinfo" );
1506 if ( f. open ( IO_ReadOnly ) ) { 1507 if ( f. open ( IO_ReadOnly ) ) {
1507 QString model; 1508 QString model;
1508 QFile f ( "/proc/cpuinfo" ); 1509 QFile f ( "/proc/cpuinfo" );
1509 1510
1510 QTextStream ts ( &f ); 1511 QTextStream ts ( &f );
1511 QString line; 1512 QString line;
1512 while( line = ts. readLine ( ) ) { 1513 while( line = ts. readLine ( ) ) {
1513 if ( line. left ( 8 ) == "Hardware" ) 1514 if ( line. left ( 8 ) == "Hardware" )
1514 break; 1515 break;
1515 } 1516 }
1516 int loc = line. find ( ":" ); 1517 int loc = line. find ( ":" );
1517 if ( loc != -1 ) 1518 if ( loc != -1 )
1518 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1519 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1519 1520
1520 if ( model == "Sharp-Collie" 1521 if ( model == "Sharp-Collie"
1521 || model == "Collie" 1522 || model == "Collie"
1522 || model == "SHARP Corgi" 1523 || model == "SHARP Corgi"
1523 || model == "SHARP Shepherd" 1524 || model == "SHARP Shepherd"
1524 || model == "SHARP Poodle" 1525 || model == "SHARP Poodle"
1526 || model == "SHARP Husky" )
1525 ) 1527 )
1526 is_zaurus = true; 1528 is_zaurus = true;
1527 1529
1528 } 1530 }
1529 return is_zaurus; 1531 return is_zaurus;
1530} 1532}
1531 1533
1532 1534
1533void Zaurus::init ( ) 1535void Zaurus::init ( )
1534{ 1536{
1535 d-> m_vendorstr = "Sharp"; 1537 d-> m_vendorstr = "Sharp";
1536 d-> m_vendor = Vendor_Sharp; 1538 d-> m_vendor = Vendor_Sharp;
1537 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 1539 m_embedix = true; // Not openzaurus means: It has an embedix kernel !
1538 1540
1539 // QFile f ( "/proc/filesystems" ); 1541 // QFile f ( "/proc/filesystems" );
1540 QString model; 1542 QString model;
1541 1543
1542 // 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
1543 // detect the distribution ! 1545 // detect the distribution !
1544 // 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
1545 // because it uses a jffs2 filesystem.. 1547 // because it uses a jffs2 filesystem..
1546 // (eilers) 1548 // (eilers)
1547 // 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 )) {
1548 QFile f ("/etc/oz_version"); 1550 QFile f ("/etc/oz_version");
1549 if ( f.exists() ){ 1551 if ( f.exists() ){
1550 d-> m_vendorstr = "OpenZaurus Team"; 1552 d-> m_vendorstr = "OpenZaurus Team";
1551 d-> m_systemstr = "OpenZaurus"; 1553 d-> m_systemstr = "OpenZaurus";
1552 d-> m_system = System_OpenZaurus; 1554 d-> m_system = System_OpenZaurus;
1553 1555
1554 if ( f. open ( IO_ReadOnly )) { 1556 if ( f. open ( IO_ReadOnly )) {
1555 QTextStream ts ( &f ); 1557 QTextStream ts ( &f );
1556 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1558 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1557 f. close ( ); 1559 f. close ( );
1558 } 1560 }
1559 1561
1560 // Openzaurus sometimes uses the embedix kernel! 1562 // Openzaurus sometimes uses the embedix kernel!
1561 // => Check whether this is an embedix kernel 1563 // => Check whether this is an embedix kernel
1562 FILE *uname = popen("uname -r", "r"); 1564 FILE *uname = popen("uname -r", "r");
1563 QString line; 1565 QString line;
1564 if ( f.open(IO_ReadOnly, uname) ) { 1566 if ( f.open(IO_ReadOnly, uname) ) {
1565 QTextStream ts ( &f ); 1567 QTextStream ts ( &f );
1566 line = ts. readLine ( ); 1568 line = ts. readLine ( );
1567 int loc = line. find ( "embedix" ); 1569 int loc = line. find ( "embedix" );
1568 if ( loc != -1 ) 1570 if ( loc != -1 )
1569 m_embedix = true; 1571 m_embedix = true;
1570 else 1572 else
1571 m_embedix = false; 1573 m_embedix = false;
1572 f. close ( ); 1574 f. close ( );
1573 } 1575 }
1574 pclose(uname); 1576 pclose(uname);
1575 } 1577 }
1576 else { 1578 else {
1577 d-> m_systemstr = "Zaurus"; 1579 d-> m_systemstr = "Zaurus";
1578 d-> m_system = System_Zaurus; 1580 d-> m_system = System_Zaurus;
1579 } 1581 }
1580 1582
1581 f. setName ( "/proc/cpuinfo" ); 1583 f. setName ( "/proc/cpuinfo" );
1582 if ( f. open ( IO_ReadOnly ) ) { 1584 if ( f. open ( IO_ReadOnly ) ) {
1583 QTextStream ts ( &f ); 1585 QTextStream ts ( &f );
1584 QString line; 1586 QString line;
1585 while( line = ts. readLine ( ) ) { 1587 while( line = ts. readLine ( ) ) {
1586 if ( line. left ( 8 ) == "Hardware" ) 1588 if ( line. left ( 8 ) == "Hardware" )
1587 break; 1589 break;
1588 } 1590 }
1589 int loc = line. find ( ":" ); 1591 int loc = line. find ( ":" );
1590 if ( loc != -1 ) 1592 if ( loc != -1 )
1591 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1593 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1592 } 1594 }
1593 1595
1594 if ( model == "SHARP Corgi" ) { 1596 if ( model == "SHARP Corgi" ) {
1595 d-> m_model = Model_Zaurus_SLC700; 1597 d-> m_model = Model_Zaurus_SLC7x0;
1596 d-> m_modelstr = "Zaurus SL-C700"; 1598 d-> m_modelstr = "Zaurus SL-C700";
1597 } else if ( model == "SHARP Shepherd" ) { 1599 } else if ( model == "SHARP Shepherd" ) {
1598 d-> m_model = Model_Zaurus_SLC700; // Do we need a special type for the C750 ? (eilers) 1600 d-> m_model = Model_Zaurus_SLC7x0;
1599 d-> m_modelstr = "Zaurus SL-C750"; 1601 d-> m_modelstr = "Zaurus SL-C750";
1602 } else if ( model == "SHARP Husky" ) {
1603 d-> m_model = Model_Zaurus_SLC7x0;
1604 d-> m_modelstr = "Zaurus SL-C760";
1600 } else if ( model == "SHARP Poodle" ) { 1605 } else if ( model == "SHARP Poodle" ) {
1601 d-> m_model = Model_Zaurus_SLB600; 1606 d-> m_model = Model_Zaurus_SLB600;
1602 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1607 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1603 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 1608 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
1604 d-> m_model = Model_Zaurus_SL5500; 1609 d-> m_model = Model_Zaurus_SL5500;
1605 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1610 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1606 } else { 1611 } else {
1607 d-> m_model = Model_Zaurus_SL5500; 1612 d-> m_model = Model_Zaurus_SL5500;
1608 d-> m_modelstr = "Zaurus (Model unknown)"; 1613 d-> m_modelstr = "Zaurus (Model unknown)";
1609 } 1614 }
1610 1615
1611 bool flipstate = false; 1616 bool flipstate = false;
1612 switch ( d-> m_model ) { 1617 switch ( d-> m_model ) {
1613 case Model_Zaurus_SLA300: 1618 case Model_Zaurus_SLA300:
1614 d-> m_rotation = Rot0; 1619 d-> m_rotation = Rot0;
1615 break; 1620 break;
1616 case Model_Zaurus_SLC700: 1621 case Model_Zaurus_SLC7x0:
1617 // Note: need to 1) set flipstate based on physical screen orientation 1622 // Note: need to 1) set flipstate based on physical screen orientation
1618 // 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
1619 // 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
1620 // ensure the rotate applet flips us back to the previous state. 1625 // ensure the rotate applet flips us back to the previous state.
1621 if ( flipstate ) { 1626 if ( flipstate ) {
1622 // 480x640 1627 // 480x640
1623 d-> m_rotation = Rot0; 1628 d-> m_rotation = Rot0;
1624 d-> m_direction = CW; 1629 d-> m_direction = CW;
1625 } else { 1630 } else {
1626 // 640x480 1631 // 640x480
1627 d-> m_rotation = Rot270; 1632 d-> m_rotation = Rot270;
1628 d-> m_direction = CCW; 1633 d-> m_direction = CCW;
1629 } 1634 }
1630 break; 1635 break;
1631 case Model_Zaurus_SLB600: 1636 case Model_Zaurus_SLB600:
1632 case Model_Zaurus_SL5500: 1637 case Model_Zaurus_SL5500:
1633 case Model_Zaurus_SL5000: 1638 case Model_Zaurus_SL5000:
1634 default: 1639 default:
1635 d-> m_rotation = Rot270; 1640 d-> m_rotation = Rot270;
1636 break; 1641 break;
1637 } 1642 }
1638 m_leds [0] = Led_Off; 1643 m_leds [0] = Led_Off;
1639} 1644}
1640 1645
1641void Zaurus::initButtons ( ) 1646void Zaurus::initButtons ( )
1642{ 1647{
1643 if ( d-> m_buttons ) 1648 if ( d-> m_buttons )
1644 return; 1649 return;
1645 1650
1646 d-> m_buttons = new QValueList <ODeviceButton>; 1651 d-> m_buttons = new QValueList <ODeviceButton>;
1647 1652
1648 struct z_button * pz_buttons; 1653 struct z_button * pz_buttons;
1649 int buttoncount; 1654 int buttoncount;
1650 switch ( d-> m_model ) { 1655 switch ( d-> m_model ) {
1651 case Model_Zaurus_SLC700: 1656 case Model_Zaurus_SLC7x0:
1652 pz_buttons = z_buttons_c700; 1657 pz_buttons = z_buttons_c700;
1653 buttoncount = ARRAY_SIZE(z_buttons_c700); 1658 buttoncount = ARRAY_SIZE(z_buttons_c700);
1654 break; 1659 break;
1655 default: 1660 default:
1656 pz_buttons = z_buttons; 1661 pz_buttons = z_buttons;
1657 buttoncount = ARRAY_SIZE(z_buttons); 1662 buttoncount = ARRAY_SIZE(z_buttons);
1658 break; 1663 break;
1659 } 1664 }
1660 1665
1661 for ( int i = 0; i < buttoncount; i++ ) { 1666 for ( int i = 0; i < buttoncount; i++ ) {
1662 struct z_button *zb = pz_buttons + i; 1667 struct z_button *zb = pz_buttons + i;
1663 ODeviceButton b; 1668 ODeviceButton b;
1664 1669
1665 b. setKeycode ( zb-> code ); 1670 b. setKeycode ( zb-> code );
1666 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1671 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1667 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1672 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1668 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), 1673 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ),
1669 zb-> fpressedaction )); 1674 zb-> fpressedaction ));
1670 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), 1675 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ),
1671 zb-> fheldaction )); 1676 zb-> fheldaction ));
1672 1677
1673 d-> m_buttons-> append ( b ); 1678 d-> m_buttons-> append ( b );
1674 } 1679 }
1675 1680
1676 reloadButtonMapping ( ); 1681 reloadButtonMapping ( );
1677 1682
1678 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1683 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1679 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), 1684 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )),
1680 this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1685 this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1681} 1686}
1682 1687
1683#include <unistd.h> 1688#include <unistd.h>
1684#include <fcntl.h> 1689#include <fcntl.h>
1685#include <sys/ioctl.h> 1690#include <sys/ioctl.h>
1686 1691
1687//#include <asm/sharp_char.h> // including kernel headers is evil ... 1692//#include <asm/sharp_char.h> // including kernel headers is evil ...
1688 1693
1689#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1694#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1690 1695
1691 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1696 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1692#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1697#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1693 1698
1694#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1699#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1695#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1700#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1696#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1701#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1697 1702
1698/* --- for SHARP_BUZZER device --- */ 1703/* --- for SHARP_BUZZER device --- */
1699 1704
1700 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1705 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1701//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1706//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1702 1707
1703#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1708#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1704#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1709#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1705#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1710#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1706#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1711#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1707#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1712#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1708 1713
1709//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1714//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1710//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1715//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1711 1716
1712//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1717//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1713//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1718//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1714//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1719//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1715//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1720//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1716//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1721//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1717//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1722//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1718//#define SHARP_PDA_APPSTART 9 /* application start */ 1723//#define SHARP_PDA_APPSTART 9 /* application start */
1719//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1724//#define SHARP_PDA_APPQUIT 10 /* application ends */
1720 1725
1721//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1726//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1722//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1727//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1723//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1728//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1724//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1729//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1725// 1730//
1726 1731
1727 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1732 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1728#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1733#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1729 1734
1730typedef struct sharp_led_status { 1735typedef struct sharp_led_status {
1731 int which; /* select which LED status is wanted. */ 1736 int which; /* select which LED status is wanted. */
1732 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 */
1733} sharp_led_status; 1738} sharp_led_status;
1734 1739
1735#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1740#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1736 1741
1737#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 */
1738#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 1743#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
1739#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 */
1740 1745
1741// #include <asm/sharp_apm.h> // including kernel headers is evil ... 1746// #include <asm/sharp_apm.h> // including kernel headers is evil ...
1742 1747
1743#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 1748#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
1744#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 1749#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
1745#define APM_EVT_POWER_BUTTON (1 << 0) 1750#define APM_EVT_POWER_BUTTON (1 << 0)
1746 1751
1747#define FL_IOCTL_STEP_CONTRAST 100 1752#define FL_IOCTL_STEP_CONTRAST 100
1748 1753
1749 1754
1750void Zaurus::buzzer ( int sound ) 1755void Zaurus::buzzer ( int sound )
1751{ 1756{
1752#ifndef QT_NO_SOUND 1757#ifndef QT_NO_SOUND
1753 QString soundname; 1758 QString soundname;
1754 1759
1755 // Not all devices have real sound. But I expect 1760 // Not all devices have real sound
1756 // that Openzaurus now has a sound driver which 1761 if ( d->m_model == Model_Zaurus_SLC7x0
1757 // I will use instead the buzzer... 1762 || d->m_model == Model_Zaurus_SLB600 ){
1758 if ( ( d->m_model == Model_Zaurus_SLC700 )
1759 || d->m_system == System_OpenZaurus ){
1760 1763
1761 switch ( sound ){ 1764 switch ( sound ){
1762 case SHARP_BUZ_SCHEDULE_ALARM: 1765 case SHARP_BUZ_SCHEDULE_ALARM:
1763 soundname = "alarm"; 1766 soundname = "alarm";
1764 break; 1767 break;
1765 case SHARP_BUZ_TOUCHSOUND: 1768 case SHARP_BUZ_TOUCHSOUND:
1766 soundname = "touchsound"; 1769 soundname = "touchsound";
1767 break; 1770 break;
1768 case SHARP_BUZ_KEYSOUND: 1771 case SHARP_BUZ_KEYSOUND:
1769 soundname = "keysound"; 1772 soundname = "keysound";
1770 break; 1773 break;
1771 default: 1774 default:
1772 soundname = "alarm"; 1775 soundname = "alarm";
1773 1776
1774 } 1777 }
1775 } 1778 }
1776 1779
1777 // If a soundname is defined, we expect that this device has 1780 // If a soundname is defined, we expect that this device has
1778 // sound capabilities.. Otherwise we expect to have the buzzer 1781 // sound capabilities.. Otherwise we expect to have the buzzer
1779 // device.. 1782 // device..
1780 if ( !soundname.isEmpty() ){ 1783 if ( !soundname.isEmpty() ){
1781 int fd; 1784 int fd;
1782 int vol; 1785 int vol;
1783 bool vol_reset = false; 1786 bool vol_reset = false;
1784 1787
1785 Sound snd ( soundname ); 1788 Sound snd ( soundname );
1786 1789
1787 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1790 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1788 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1791 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1789 Config cfg ( "qpe" ); 1792 Config cfg ( "qpe" );
1790 cfg. setGroup ( "Volume" ); 1793 cfg. setGroup ( "Volume" );
1791 1794
1792 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1795 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1793 if ( volalarm < 0 ) 1796 if ( volalarm < 0 )
1794 volalarm = 0; 1797 volalarm = 0;
1795 else if ( volalarm > 100 ) 1798 else if ( volalarm > 100 )
1796 volalarm = 100; 1799 volalarm = 100;
1797 volalarm |= ( volalarm << 8 ); 1800 volalarm |= ( volalarm << 8 );
1798 1801
1799 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1802 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1800 vol_reset = true; 1803 vol_reset = true;
1801 } 1804 }
1802 } 1805 }
1803 1806
1804 snd. play ( ); 1807 snd. play ( );
1805 while ( !snd. isFinished ( )) 1808 while ( !snd. isFinished ( ))
1806 qApp-> processEvents ( ); 1809 qApp-> processEvents ( );
1807 1810
1808 if ( fd >= 0 ) { 1811 if ( fd >= 0 ) {
1809 if ( vol_reset ) 1812 if ( vol_reset )
1810 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1813 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1811 ::close ( fd ); 1814 ::close ( fd );
1812 } 1815 }
1813 } else { 1816 } else {
1814 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1817 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1815 1818
1816 if ( fd >= 0 ) { 1819 if ( fd >= 0 ) {
1817 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1820 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1818 ::close ( fd ); 1821 ::close ( fd );
1819 } 1822 }
1820 1823
1821 } 1824 }
1822#endif 1825#endif
1823} 1826}