summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 5038cc9..e24e043 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -1530,1040 +1530,1040 @@ bool Zaurus::isZaurus()
1530 QString line; 1530 QString line;
1531 while( line = ts. readLine ( ) ) { 1531 while( line = ts. readLine ( ) ) {
1532 if ( line. left ( 8 ) == "Hardware" ) 1532 if ( line. left ( 8 ) == "Hardware" )
1533 break; 1533 break;
1534 } 1534 }
1535 int loc = line. find ( ":" ); 1535 int loc = line. find ( ":" );
1536 if ( loc != -1 ) 1536 if ( loc != -1 )
1537 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1537 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1538 1538
1539 if ( model == "Sharp-Collie" 1539 if ( model == "Sharp-Collie"
1540 || model == "Collie" 1540 || model == "Collie"
1541 || model == "SHARP Corgi" 1541 || model == "SHARP Corgi"
1542 || model == "SHARP Shepherd" 1542 || model == "SHARP Shepherd"
1543 || model == "SHARP Poodle" 1543 || model == "SHARP Poodle"
1544 || model == "SHARP Husky" 1544 || model == "SHARP Husky"
1545 ) 1545 )
1546 is_zaurus = true; 1546 is_zaurus = true;
1547 1547
1548 } 1548 }
1549 return is_zaurus; 1549 return is_zaurus;
1550} 1550}
1551 1551
1552 1552
1553void Zaurus::init ( ) 1553void Zaurus::init ( )
1554{ 1554{
1555 d-> m_vendorstr = "Sharp"; 1555 d-> m_vendorstr = "Sharp";
1556 d-> m_vendor = Vendor_Sharp; 1556 d-> m_vendor = Vendor_Sharp;
1557 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 1557 m_embedix = true; // Not openzaurus means: It has an embedix kernel !
1558 1558
1559 // QFile f ( "/proc/filesystems" ); 1559 // QFile f ( "/proc/filesystems" );
1560 QString model; 1560 QString model;
1561 1561
1562 // It isn't a good idea to check the system configuration to 1562 // It isn't a good idea to check the system configuration to
1563 // detect the distribution ! 1563 // detect the distribution !
1564 // Otherwise it may happen that any other distribution is detected as openzaurus, just 1564 // Otherwise it may happen that any other distribution is detected as openzaurus, just
1565 // because it uses a jffs2 filesystem.. 1565 // because it uses a jffs2 filesystem..
1566 // (eilers) 1566 // (eilers)
1567 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1567 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
1568 QFile f ("/etc/oz_version"); 1568 QFile f ("/etc/oz_version");
1569 if ( f.exists() ){ 1569 if ( f.exists() ){
1570 d-> m_vendorstr = "OpenZaurus Team"; 1570 d-> m_vendorstr = "OpenZaurus Team";
1571 d-> m_systemstr = "OpenZaurus"; 1571 d-> m_systemstr = "OpenZaurus";
1572 d-> m_system = System_OpenZaurus; 1572 d-> m_system = System_OpenZaurus;
1573 1573
1574 if ( f. open ( IO_ReadOnly )) { 1574 if ( f. open ( IO_ReadOnly )) {
1575 QTextStream ts ( &f ); 1575 QTextStream ts ( &f );
1576 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1576 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1577 f. close ( ); 1577 f. close ( );
1578 } 1578 }
1579 1579
1580 // Openzaurus sometimes uses the embedix kernel! 1580 // Openzaurus sometimes uses the embedix kernel!
1581 // => Check whether this is an embedix kernel 1581 // => Check whether this is an embedix kernel
1582 FILE *uname = popen("uname -r", "r"); 1582 FILE *uname = popen("uname -r", "r");
1583 QString line; 1583 QString line;
1584 if ( f.open(IO_ReadOnly, uname) ) { 1584 if ( f.open(IO_ReadOnly, uname) ) {
1585 QTextStream ts ( &f ); 1585 QTextStream ts ( &f );
1586 line = ts. readLine ( ); 1586 line = ts. readLine ( );
1587 int loc = line. find ( "embedix" ); 1587 int loc = line. find ( "embedix" );
1588 if ( loc != -1 ) 1588 if ( loc != -1 )
1589 m_embedix = true; 1589 m_embedix = true;
1590 else 1590 else
1591 m_embedix = false; 1591 m_embedix = false;
1592 f. close ( ); 1592 f. close ( );
1593 } 1593 }
1594 pclose(uname); 1594 pclose(uname);
1595 } 1595 }
1596 else { 1596 else {
1597 d-> m_systemstr = "Zaurus"; 1597 d-> m_systemstr = "Zaurus";
1598 d-> m_system = System_Zaurus; 1598 d-> m_system = System_Zaurus;
1599 } 1599 }
1600 1600
1601 f. setName ( "/proc/cpuinfo" ); 1601 f. setName ( "/proc/cpuinfo" );
1602 if ( f. open ( IO_ReadOnly ) ) { 1602 if ( f. open ( IO_ReadOnly ) ) {
1603 QTextStream ts ( &f ); 1603 QTextStream ts ( &f );
1604 QString line; 1604 QString line;
1605 while( line = ts. readLine ( ) ) { 1605 while( line = ts. readLine ( ) ) {
1606 if ( line. left ( 8 ) == "Hardware" ) 1606 if ( line. left ( 8 ) == "Hardware" )
1607 break; 1607 break;
1608 } 1608 }
1609 int loc = line. find ( ":" ); 1609 int loc = line. find ( ":" );
1610 if ( loc != -1 ) 1610 if ( loc != -1 )
1611 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1611 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1612 } 1612 }
1613 1613
1614 if ( model == "SHARP Corgi" ) { 1614 if ( model == "SHARP Corgi" ) {
1615 d-> m_model = Model_Zaurus_SLC7x0; 1615 d-> m_model = Model_Zaurus_SLC7x0;
1616 d-> m_modelstr = "Zaurus SL-C700"; 1616 d-> m_modelstr = "Zaurus SL-C700";
1617 } else if ( model == "SHARP Shepherd" ) { 1617 } else if ( model == "SHARP Shepherd" ) {
1618 d-> m_model = Model_Zaurus_SLC7x0; 1618 d-> m_model = Model_Zaurus_SLC7x0;
1619 d-> m_modelstr = "Zaurus SL-C750"; 1619 d-> m_modelstr = "Zaurus SL-C750";
1620 } else if ( model == "SHARP Husky" ) { 1620 } else if ( model == "SHARP Husky" ) {
1621 d-> m_model = Model_Zaurus_SLC7x0; 1621 d-> m_model = Model_Zaurus_SLC7x0;
1622 d-> m_modelstr = "Zaurus SL-C760"; 1622 d-> m_modelstr = "Zaurus SL-C760";
1623 } else if ( model == "SHARP Poodle" ) { 1623 } else if ( model == "SHARP Poodle" ) {
1624 d-> m_model = Model_Zaurus_SLB600; 1624 d-> m_model = Model_Zaurus_SLB600;
1625 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1625 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1626 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 1626 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
1627 d-> m_model = Model_Zaurus_SL5500; 1627 d-> m_model = Model_Zaurus_SL5500;
1628 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1628 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1629 } else { 1629 } else {
1630 d-> m_model = Model_Zaurus_SL5500; 1630 d-> m_model = Model_Zaurus_SL5500;
1631 d-> m_modelstr = "Zaurus (Model unknown)"; 1631 d-> m_modelstr = "Zaurus (Model unknown)";
1632 } 1632 }
1633 1633
1634 bool flipstate = false; 1634 bool flipstate = false;
1635 switch ( d-> m_model ) { 1635 switch ( d-> m_model ) {
1636 case Model_Zaurus_SLA300: 1636 case Model_Zaurus_SLA300:
1637 d-> m_rotation = Rot0; 1637 d-> m_rotation = Rot0;
1638 break; 1638 break;
1639 case Model_Zaurus_SLC7x0: 1639 case Model_Zaurus_SLC7x0:
1640 d-> m_rotation = rotation(); 1640 d-> m_rotation = rotation();
1641 d-> m_direction = direction(); 1641 d-> m_direction = direction();
1642 break; 1642 break;
1643 case Model_Zaurus_SLB600: 1643 case Model_Zaurus_SLB600:
1644 case Model_Zaurus_SL5500: 1644 case Model_Zaurus_SL5500:
1645 case Model_Zaurus_SL5000: 1645 case Model_Zaurus_SL5000:
1646 default: 1646 default:
1647 d-> m_rotation = Rot270; 1647 d-> m_rotation = Rot270;
1648 break; 1648 break;
1649 } 1649 }
1650 m_leds [0] = Led_Off; 1650 m_leds [0] = Led_Off;
1651} 1651}
1652 1652
1653void Zaurus::initButtons ( ) 1653void Zaurus::initButtons ( )
1654{ 1654{
1655 if ( d-> m_buttons ) 1655 if ( d-> m_buttons )
1656 return; 1656 return;
1657 1657
1658 d-> m_buttons = new QValueList <ODeviceButton>; 1658 d-> m_buttons = new QValueList <ODeviceButton>;
1659 1659
1660 struct z_button * pz_buttons; 1660 struct z_button * pz_buttons;
1661 int buttoncount; 1661 int buttoncount;
1662 switch ( d-> m_model ) { 1662 switch ( d-> m_model ) {
1663 case Model_Zaurus_SLC7x0: 1663 case Model_Zaurus_SLC7x0:
1664 pz_buttons = z_buttons_c700; 1664 pz_buttons = z_buttons_c700;
1665 buttoncount = ARRAY_SIZE(z_buttons_c700); 1665 buttoncount = ARRAY_SIZE(z_buttons_c700);
1666 break; 1666 break;
1667 default: 1667 default:
1668 pz_buttons = z_buttons; 1668 pz_buttons = z_buttons;
1669 buttoncount = ARRAY_SIZE(z_buttons); 1669 buttoncount = ARRAY_SIZE(z_buttons);
1670 break; 1670 break;
1671 } 1671 }
1672 1672
1673 for ( int i = 0; i < buttoncount; i++ ) { 1673 for ( int i = 0; i < buttoncount; i++ ) {
1674 struct z_button *zb = pz_buttons + i; 1674 struct z_button *zb = pz_buttons + i;
1675 ODeviceButton b; 1675 ODeviceButton b;
1676 1676
1677 b. setKeycode ( zb-> code ); 1677 b. setKeycode ( zb-> code );
1678 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1678 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1679 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1679 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1680 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), 1680 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ),
1681 zb-> fpressedaction )); 1681 zb-> fpressedaction ));
1682 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), 1682 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ),
1683 zb-> fheldaction )); 1683 zb-> fheldaction ));
1684 1684
1685 d-> m_buttons-> append ( b ); 1685 d-> m_buttons-> append ( b );
1686 } 1686 }
1687 1687
1688 reloadButtonMapping ( ); 1688 reloadButtonMapping ( );
1689 1689
1690 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1690 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1691 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), 1691 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )),
1692 this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1692 this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1693} 1693}
1694 1694
1695#include <unistd.h> 1695#include <unistd.h>
1696#include <fcntl.h> 1696#include <fcntl.h>
1697#include <sys/ioctl.h> 1697#include <sys/ioctl.h>
1698 1698
1699//#include <asm/sharp_char.h> // including kernel headers is evil ... 1699//#include <asm/sharp_char.h> // including kernel headers is evil ...
1700 1700
1701#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1701#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1702 1702
1703 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1703 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1704#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1704#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1705 1705
1706#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1706#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1707#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1707#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1708#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1708#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1709 1709
1710/* --- for SHARP_BUZZER device --- */ 1710/* --- for SHARP_BUZZER device --- */
1711 1711
1712 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1712 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1713//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1713//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1714 1714
1715#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1715#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1716#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1716#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1717#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1717#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1718#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1718#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1719#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1719#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1720 1720
1721//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1721//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1722//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1722//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1723 1723
1724//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1724//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1725//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1725//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1726//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1726//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1727//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1727//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1728//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1728//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1729//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1729//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1730//#define SHARP_PDA_APPSTART 9 /* application start */ 1730//#define SHARP_PDA_APPSTART 9 /* application start */
1731//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1731//#define SHARP_PDA_APPQUIT 10 /* application ends */
1732 1732
1733//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1733//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1734//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1734//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1735//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1735//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1736//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1736//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1737// 1737//
1738 1738
1739 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1739 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1740#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1740#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1741 1741
1742#define SHARP_IOCTL_GET_ROTATION 0x413c 1742#define SHARP_IOCTL_GET_ROTATION 0x413c
1743 1743
1744typedef struct sharp_led_status { 1744typedef struct sharp_led_status {
1745 int which; /* select which LED status is wanted. */ 1745 int which; /* select which LED status is wanted. */
1746 int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 1746 int status; /* set new led status if you call SHARP_LED_SETSTATUS */
1747} sharp_led_status; 1747} sharp_led_status;
1748 1748
1749#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1749#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1750 1750
1751#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 1751#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
1752#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 1752#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
1753#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 1753#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
1754 1754
1755// #include <asm/sharp_apm.h> // including kernel headers is evil ... 1755// #include <asm/sharp_apm.h> // including kernel headers is evil ...
1756 1756
1757#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 1757#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
1758#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 1758#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
1759#define APM_EVT_POWER_BUTTON (1 << 0) 1759#define APM_EVT_POWER_BUTTON (1 << 0)
1760 1760
1761#define FL_IOCTL_STEP_CONTRAST 100 1761#define FL_IOCTL_STEP_CONTRAST 100
1762 1762
1763 1763
1764void Zaurus::buzzer ( int sound ) 1764void Zaurus::buzzer ( int sound )
1765{ 1765{
1766#ifndef QT_NO_SOUND 1766#ifndef QT_NO_SOUND
1767 QString soundname; 1767 QString soundname;
1768 1768
1769 // Not all devices have real sound 1769 // Not all devices have real sound
1770 if ( d->m_model == Model_Zaurus_SLC7x0 1770 if ( d->m_model == Model_Zaurus_SLC7x0
1771 || d->m_model == Model_Zaurus_SLB600 ){ 1771 || d->m_model == Model_Zaurus_SLB600 ){
1772 1772
1773 switch ( sound ){ 1773 switch ( sound ){
1774 case SHARP_BUZ_SCHEDULE_ALARM: 1774 case SHARP_BUZ_SCHEDULE_ALARM:
1775 soundname = "alarm"; 1775 soundname = "alarm";
1776 break; 1776 break;
1777 case SHARP_BUZ_TOUCHSOUND: 1777 case SHARP_BUZ_TOUCHSOUND:
1778 soundname = "touchsound"; 1778 soundname = "touchsound";
1779 break; 1779 break;
1780 case SHARP_BUZ_KEYSOUND: 1780 case SHARP_BUZ_KEYSOUND:
1781 soundname = "keysound"; 1781 soundname = "keysound";
1782 break; 1782 break;
1783 default: 1783 default:
1784 soundname = "alarm"; 1784 soundname = "alarm";
1785 1785
1786 } 1786 }
1787 } 1787 }
1788 1788
1789 // If a soundname is defined, we expect that this device has 1789 // If a soundname is defined, we expect that this device has
1790 // sound capabilities.. Otherwise we expect to have the buzzer 1790 // sound capabilities.. Otherwise we expect to have the buzzer
1791 // device.. 1791 // device..
1792 if ( !soundname.isEmpty() ){ 1792 if ( !soundname.isEmpty() ){
1793 int fd; 1793 int fd;
1794 int vol; 1794 int vol;
1795 bool vol_reset = false; 1795 bool vol_reset = false;
1796 1796
1797 Sound snd ( soundname ); 1797 Sound snd ( soundname );
1798 1798
1799 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1799 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1800 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1800 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1801 Config cfg ( "qpe" ); 1801 Config cfg ( "qpe" );
1802 cfg. setGroup ( "Volume" ); 1802 cfg. setGroup ( "Volume" );
1803 1803
1804 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1804 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1805 if ( volalarm < 0 ) 1805 if ( volalarm < 0 )
1806 volalarm = 0; 1806 volalarm = 0;
1807 else if ( volalarm > 100 ) 1807 else if ( volalarm > 100 )
1808 volalarm = 100; 1808 volalarm = 100;
1809 volalarm |= ( volalarm << 8 ); 1809 volalarm |= ( volalarm << 8 );
1810 1810
1811 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1811 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1812 vol_reset = true; 1812 vol_reset = true;
1813 } 1813 }
1814 } 1814 }
1815 1815
1816 snd. play ( ); 1816 snd. play ( );
1817 while ( !snd. isFinished ( )) 1817 while ( !snd. isFinished ( ))
1818 qApp-> processEvents ( ); 1818 qApp-> processEvents ( );
1819 1819
1820 if ( fd >= 0 ) { 1820 if ( fd >= 0 ) {
1821 if ( vol_reset ) 1821 if ( vol_reset )
1822 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1822 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1823 ::close ( fd ); 1823 ::close ( fd );
1824 } 1824 }
1825 } else { 1825 } else {
1826 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1826 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1827 1827
1828 if ( fd >= 0 ) { 1828 if ( fd >= 0 ) {
1829 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1829 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1830 ::close ( fd ); 1830 ::close ( fd );
1831 } 1831 }
1832 1832
1833 } 1833 }
1834#endif 1834#endif
1835} 1835}
1836 1836
1837 1837
1838void Zaurus::alarmSound ( ) 1838void Zaurus::alarmSound ( )
1839{ 1839{
1840 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1840 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1841} 1841}
1842 1842
1843void Zaurus::touchSound ( ) 1843void Zaurus::touchSound ( )
1844{ 1844{
1845 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1845 buzzer ( SHARP_BUZ_TOUCHSOUND );
1846} 1846}
1847 1847
1848void Zaurus::keySound ( ) 1848void Zaurus::keySound ( )
1849{ 1849{
1850 buzzer ( SHARP_BUZ_KEYSOUND ); 1850 buzzer ( SHARP_BUZ_KEYSOUND );
1851} 1851}
1852 1852
1853 1853
1854QValueList <OLed> Zaurus::ledList ( ) const 1854QValueList <OLed> Zaurus::ledList ( ) const
1855{ 1855{
1856 QValueList <OLed> vl; 1856 QValueList <OLed> vl;
1857 vl << Led_Mail; 1857 vl << Led_Mail;
1858 return vl; 1858 return vl;
1859} 1859}
1860 1860
1861QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1861QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1862{ 1862{
1863 QValueList <OLedState> vl; 1863 QValueList <OLedState> vl;
1864 1864
1865 if ( l == Led_Mail ) 1865 if ( l == Led_Mail )
1866 vl << Led_Off << Led_On << Led_BlinkSlow; 1866 vl << Led_Off << Led_On << Led_BlinkSlow;
1867 return vl; 1867 return vl;
1868} 1868}
1869 1869
1870OLedState Zaurus::ledState ( OLed which ) const 1870OLedState Zaurus::ledState ( OLed which ) const
1871{ 1871{
1872 if ( which == Led_Mail ) 1872 if ( which == Led_Mail )
1873 return m_leds [0]; 1873 return m_leds [0];
1874 else 1874 else
1875 return Led_Off; 1875 return Led_Off;
1876} 1876}
1877 1877
1878bool Zaurus::setLedState ( OLed which, OLedState st ) 1878bool Zaurus::setLedState ( OLed which, OLedState st )
1879{ 1879{
1880 if (!m_embedix) // Currently not supported on non_embedix kernels 1880 if (!m_embedix) // Currently not supported on non_embedix kernels
1881 return false; 1881 return false;
1882 1882
1883 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 1883 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
1884 1884
1885 if ( which == Led_Mail ) { 1885 if ( which == Led_Mail ) {
1886 if ( fd >= 0 ) { 1886 if ( fd >= 0 ) {
1887 struct sharp_led_status leds; 1887 struct sharp_led_status leds;
1888 ::memset ( &leds, 0, sizeof( leds )); 1888 ::memset ( &leds, 0, sizeof( leds ));
1889 leds. which = SHARP_LED_MAIL_EXISTS; 1889 leds. which = SHARP_LED_MAIL_EXISTS;
1890 bool ok = true; 1890 bool ok = true;
1891 1891
1892 switch ( st ) { 1892 switch ( st ) {
1893 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 1893 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
1894 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 1894 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
1895 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 1895 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
1896 default : ok = false; 1896 default : ok = false;
1897 } 1897 }
1898 1898
1899 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 1899 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
1900 m_leds [0] = st; 1900 m_leds [0] = st;
1901 return true; 1901 return true;
1902 } 1902 }
1903 } 1903 }
1904 } 1904 }
1905 return false; 1905 return false;
1906} 1906}
1907 1907
1908bool Zaurus::setSoftSuspend ( bool soft ) 1908bool Zaurus::setSoftSuspend ( bool soft )
1909{ 1909{
1910 if (!m_embedix) { 1910 if (!m_embedix) {
1911 /* non-Embedix kernels dont have kernel autosuspend */ 1911 /* non-Embedix kernels dont have kernel autosuspend */
1912 return ODevice::setSoftSuspend( soft ); 1912 return ODevice::setSoftSuspend( soft );
1913 } 1913 }
1914 1914
1915 bool res = false; 1915 bool res = false;
1916 int fd; 1916 int fd;
1917 1917
1918 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) || 1918 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) ||
1919 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) { 1919 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) {
1920 1920
1921 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources 1921 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources
1922 1922
1923 if ( sources >= 0 ) { 1923 if ( sources >= 0 ) {
1924 if ( soft ) 1924 if ( soft )
1925 sources &= ~APM_EVT_POWER_BUTTON; 1925 sources &= ~APM_EVT_POWER_BUTTON;
1926 else 1926 else
1927 sources |= APM_EVT_POWER_BUTTON; 1927 sources |= APM_EVT_POWER_BUTTON;
1928 1928
1929 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources 1929 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources
1930 res = true; 1930 res = true;
1931 else 1931 else
1932 perror ( "APM_IOCGEVTSRC" ); 1932 perror ( "APM_IOCGEVTSRC" );
1933 } 1933 }
1934 else 1934 else
1935 perror ( "APM_IOCGEVTSRC" ); 1935 perror ( "APM_IOCGEVTSRC" );
1936 1936
1937 ::close ( fd ); 1937 ::close ( fd );
1938 } 1938 }
1939 else 1939 else
1940 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 1940 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
1941 1941
1942 return res; 1942 return res;
1943} 1943}
1944 1944
1945 1945
1946bool Zaurus::setDisplayBrightness ( int bright ) 1946bool Zaurus::setDisplayBrightness ( int bright )
1947{ 1947{
1948// FIXME The C7x0 have a proc-interface (/proc/drivers/corgi-bl) which 1948// FIXME The C7x0 have a proc-interface (/proc/drivers/corgi-bl) which
1949// is nice to use. Currently it exposes 16+1 levels. Implement this! 1949// is nice to use. Currently it exposes 16+1 levels. Implement this!
1950// (or wait for kergoth unifying the interfaces in the OpenZaurus kernel.) 1950// (or wait for kergoth unifying the interfaces in the OpenZaurus kernel.)
1951 bool res = false; 1951 bool res = false;
1952 int fd; 1952 int fd;
1953 1953
1954 if ( bright > 255 ) 1954 if ( bright > 255 )
1955 bright = 255; 1955 bright = 255;
1956 if ( bright < 0 ) 1956 if ( bright < 0 )
1957 bright = 0; 1957 bright = 0;
1958 1958
1959 if (m_embedix) { 1959 if (m_embedix) {
1960 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1960 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
1961 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 1961 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
1962 if ( bright && !bl ) 1962 if ( bright && !bl )
1963 bl = 1; 1963 bl = 1;
1964 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 1964 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
1965 ::close ( fd ); 1965 ::close ( fd );
1966 } 1966 }
1967 } else { 1967 } else {
1968#define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */ 1968#define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */
1969 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) { 1969 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) {
1970 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 ); 1970 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 );
1971 ::close ( fd ); 1971 ::close ( fd );
1972 } 1972 }
1973 } 1973 }
1974 return res; 1974 return res;
1975} 1975}
1976 1976
1977bool Zaurus::suspend ( ) 1977bool Zaurus::suspend ( )
1978{ 1978{
1979 qDebug("ODevice::suspend"); 1979 qDebug("ODevice::suspend");
1980 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 1980 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
1981 return false; 1981 return false;
1982 1982
1983 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 1983 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
1984 return false; 1984 return false;
1985 1985
1986 bool res = false; 1986 bool res = false;
1987 1987
1988 struct timeval tvs, tvn; 1988 struct timeval tvs, tvn;
1989 ::gettimeofday ( &tvs, 0 ); 1989 ::gettimeofday ( &tvs, 0 );
1990 1990
1991 ::sync ( ); // flush fs caches 1991 ::sync ( ); // flush fs caches
1992 res = ( ::system ( "apm --suspend" ) == 0 ); 1992 res = ( ::system ( "apm --suspend" ) == 0 );
1993 1993
1994 // This is needed because the iPAQ apm implementation is asynchronous and we 1994 // This is needed because the iPAQ apm implementation is asynchronous and we
1995 // can not be sure when exactly the device is really suspended 1995 // can not be sure when exactly the device is really suspended
1996 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 1996 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
1997 1997
1998 if ( res ) { 1998 if ( res ) {
1999 do { // Yes, wait 15 seconds. This APM bug sucks big time. 1999 do { // Yes, wait 15 seconds. This APM bug sucks big time.
2000 ::usleep ( 200 * 1000 ); 2000 ::usleep ( 200 * 1000 );
2001 ::gettimeofday ( &tvn, 0 ); 2001 ::gettimeofday ( &tvn, 0 );
2002 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 ); 2002 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 );
2003 } 2003 }
2004 2004
2005 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" ); 2005 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" );
2006 return res; 2006 return res;
2007} 2007}
2008 2008
2009 2009
2010Transformation Zaurus::rotation ( ) const 2010Transformation Zaurus::rotation ( ) const
2011{ 2011{
2012 Transformation rot; 2012 Transformation rot;
2013 int handle = 0; 2013 int handle = 0;
2014 int retval = 0; 2014 int retval = 0;
2015 2015
2016 switch ( d-> m_model ) { 2016 switch ( d-> m_model ) {
2017 case Model_Zaurus_SLC7x0: 2017 case Model_Zaurus_SLC7x0:
2018 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2018 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2019 if (handle == -1) { 2019 if (handle == -1) {
2020 return Rot270; 2020 return Rot270;
2021 } else { 2021 } else {
2022 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2022 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2023 ::close (handle); 2023 ::close (handle);
2024 2024
2025 if (retval == 2 ) 2025 if (retval == 2 )
2026 rot = Rot0; 2026 rot = Rot0;
2027 else 2027 else
2028 rot = Rot270; 2028 rot = Rot270;
2029 } 2029 }
2030 break; 2030 break;
2031 case Model_Zaurus_SLA300: 2031 case Model_Zaurus_SLA300:
2032 case Model_Zaurus_SLB600: 2032 case Model_Zaurus_SLB600:
2033 case Model_Zaurus_SL5500: 2033 case Model_Zaurus_SL5500:
2034 case Model_Zaurus_SL5000: 2034 case Model_Zaurus_SL5000:
2035 default: 2035 default:
2036 rot = d-> m_rotation; 2036 rot = d-> m_rotation;
2037 break; 2037 break;
2038 } 2038 }
2039 2039
2040 return rot; 2040 return rot;
2041} 2041}
2042ODirection Zaurus::direction ( ) const 2042ODirection Zaurus::direction ( ) const
2043{ 2043{
2044 ODirection dir; 2044 ODirection dir;
2045 int handle = 0; 2045 int handle = 0;
2046 int retval = 0; 2046 int retval = 0;
2047 switch ( d-> m_model ) { 2047 switch ( d-> m_model ) {
2048 case Model_Zaurus_SLC7x0: 2048 case Model_Zaurus_SLC7x0:
2049 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2049 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2050 if (handle == -1) { 2050 if (handle == -1) {
2051 dir = Rot270; 2051 dir = CW;
2052 } else { 2052 } else {
2053 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2053 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2054 ::close (handle); 2054 ::close (handle);
2055 if (retval == 2 ) 2055 if (retval == 2 )
2056 dir = CCW; 2056 dir = CCW;
2057 else 2057 else
2058 dir = CW; 2058 dir = CW;
2059 } 2059 }
2060 break; 2060 break;
2061 case Model_Zaurus_SLA300: 2061 case Model_Zaurus_SLA300:
2062 case Model_Zaurus_SLB600: 2062 case Model_Zaurus_SLB600:
2063 case Model_Zaurus_SL5500: 2063 case Model_Zaurus_SL5500:
2064 case Model_Zaurus_SL5000: 2064 case Model_Zaurus_SL5000:
2065 default: 2065 default:
2066 dir = d-> m_direction; 2066 dir = d-> m_direction;
2067 break; 2067 break;
2068 } 2068 }
2069 return dir; 2069 return dir;
2070 2070
2071} 2071}
2072 2072
2073int Zaurus::displayBrightnessResolution ( ) const 2073int Zaurus::displayBrightnessResolution ( ) const
2074{ 2074{
2075 if (m_embedix) 2075 if (m_embedix)
2076 return 5; 2076 return 5;
2077 else 2077 else
2078 return 256; 2078 return 256;
2079} 2079}
2080 2080
2081/************************************************** 2081/**************************************************
2082 * 2082 *
2083 * SIMpad 2083 * SIMpad
2084 * 2084 *
2085 **************************************************/ 2085 **************************************************/
2086 2086
2087void SIMpad::init ( ) 2087void SIMpad::init ( )
2088{ 2088{
2089 d-> m_vendorstr = "SIEMENS"; 2089 d-> m_vendorstr = "SIEMENS";
2090 d-> m_vendor = Vendor_SIEMENS; 2090 d-> m_vendor = Vendor_SIEMENS;
2091 2091
2092 QFile f ( "/proc/hal/model" ); 2092 QFile f ( "/proc/hal/model" );
2093 2093
2094 //TODO Implement model checking 2094 //TODO Implement model checking
2095 //FIXME For now we assume an SL4 2095 //FIXME For now we assume an SL4
2096 2096
2097 d-> m_modelstr = "SL4"; 2097 d-> m_modelstr = "SL4";
2098 d-> m_model = Model_SIMpad_SL4; 2098 d-> m_model = Model_SIMpad_SL4;
2099 2099
2100 switch ( d-> m_model ) { 2100 switch ( d-> m_model ) {
2101 default: 2101 default:
2102 d-> m_rotation = Rot0; 2102 d-> m_rotation = Rot0;
2103 d-> m_direction = CCW; 2103 d-> m_direction = CCW;
2104 d-> m_holdtime = 1000; // 1000ms 2104 d-> m_holdtime = 1000; // 1000ms
2105 2105
2106 break; 2106 break;
2107 } 2107 }
2108 2108
2109 f. setName ( "/etc/familiar-version" ); 2109 f. setName ( "/etc/familiar-version" );
2110 if ( f. open ( IO_ReadOnly )) { 2110 if ( f. open ( IO_ReadOnly )) {
2111 d-> m_systemstr = "Familiar"; 2111 d-> m_systemstr = "Familiar";
2112 d-> m_system = System_Familiar; 2112 d-> m_system = System_Familiar;
2113 2113
2114 QTextStream ts ( &f ); 2114 QTextStream ts ( &f );
2115 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 2115 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
2116 2116
2117 f. close ( ); 2117 f. close ( );
2118 } else { 2118 } else {
2119 f. setName ( "/etc/oz_version" ); 2119 f. setName ( "/etc/oz_version" );
2120 2120
2121 if ( f. open ( IO_ReadOnly )) { 2121 if ( f. open ( IO_ReadOnly )) {
2122 d-> m_systemstr = "OpenEmbedded/SIMpad"; 2122 d-> m_systemstr = "OpenEmbedded/SIMpad";
2123 d-> m_system = System_OpenZaurus; 2123 d-> m_system = System_OpenZaurus;
2124 2124
2125 QTextStream ts ( &f ); 2125 QTextStream ts ( &f );
2126 ts.setDevice ( &f ); 2126 ts.setDevice ( &f );
2127 d-> m_sysverstr = ts. readLine ( ); 2127 d-> m_sysverstr = ts. readLine ( );
2128 f. close ( ); 2128 f. close ( );
2129 } 2129 }
2130 } 2130 }
2131 2131
2132 m_leds [0] = m_leds [1] = Led_Off; 2132 m_leds [0] = m_leds [1] = Led_Off;
2133 2133
2134 m_power_timer = 0; 2134 m_power_timer = 0;
2135 2135
2136} 2136}
2137 2137
2138void SIMpad::initButtons ( ) 2138void SIMpad::initButtons ( )
2139{ 2139{
2140 if ( d-> m_buttons ) 2140 if ( d-> m_buttons )
2141 return; 2141 return;
2142 2142
2143 if ( isQWS( ) ) 2143 if ( isQWS( ) )
2144 QWSServer::setKeyboardFilter ( this ); 2144 QWSServer::setKeyboardFilter ( this );
2145 2145
2146 d-> m_buttons = new QValueList <ODeviceButton>; 2146 d-> m_buttons = new QValueList <ODeviceButton>;
2147 2147
2148 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) { 2148 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) {
2149 s_button *sb = simpad_buttons + i; 2149 s_button *sb = simpad_buttons + i;
2150 ODeviceButton b; 2150 ODeviceButton b;
2151 2151
2152 if (( sb-> model & d-> m_model ) == d-> m_model ) { 2152 if (( sb-> model & d-> m_model ) == d-> m_model ) {
2153 b. setKeycode ( sb-> code ); 2153 b. setKeycode ( sb-> code );
2154 b. setUserText ( QObject::tr ( "Button", sb-> utext )); 2154 b. setUserText ( QObject::tr ( "Button", sb-> utext ));
2155 b. setPixmap ( Resource::loadPixmap ( sb-> pix )); 2155 b. setPixmap ( Resource::loadPixmap ( sb-> pix ));
2156 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb-> fpressedservice ), sb-> fpressedaction )); 2156 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb-> fpressedservice ), sb-> fpressedaction ));
2157 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb-> fheldservice ), sb-> fheldaction )); 2157 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb-> fheldservice ), sb-> fheldaction ));
2158 2158
2159 d-> m_buttons-> append ( b ); 2159 d-> m_buttons-> append ( b );
2160 } 2160 }
2161 } 2161 }
2162 reloadButtonMapping ( ); 2162 reloadButtonMapping ( );
2163 2163
2164 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 2164 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
2165 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 2165 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
2166} 2166}
2167 2167
2168// SIMpad boardcontrol register CS3 2168// SIMpad boardcontrol register CS3
2169#define SIMPAD_BOARDCONTROL "/proc/cs3" 2169#define SIMPAD_BOARDCONTROL "/proc/cs3"
2170#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA 2170#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA
2171#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA 2171#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA
2172#define SIMPAD_EN1 0x0004 // This is only for EPROM's 2172#define SIMPAD_EN1 0x0004 // This is only for EPROM's
2173#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V 2173#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V
2174#define SIMPAD_DISPLAY_ON 0x0010 2174#define SIMPAD_DISPLAY_ON 0x0010
2175#define SIMPAD_PCMCIA_BUFF_DIS 0x0020 2175#define SIMPAD_PCMCIA_BUFF_DIS 0x0020
2176#define SIMPAD_MQ_RESET 0x0040 2176#define SIMPAD_MQ_RESET 0x0040
2177#define SIMPAD_PCMCIA_RESET 0x0080 2177#define SIMPAD_PCMCIA_RESET 0x0080
2178#define SIMPAD_DECT_POWER_ON 0x0100 2178#define SIMPAD_DECT_POWER_ON 0x0100
2179#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave 2179#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave
2180#define SIMPAD_RS232_ON 0x0400 2180#define SIMPAD_RS232_ON 0x0400
2181#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave 2181#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave
2182#define SIMPAD_LED2_ON 0x1000 2182#define SIMPAD_LED2_ON 0x1000
2183#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode 2183#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode
2184#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit 2184#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit
2185#define SIMPAD_RESET_SIMCARD 0x8000 2185#define SIMPAD_RESET_SIMCARD 0x8000
2186 2186
2187//SIMpad touchscreen backlight strength control 2187//SIMpad touchscreen backlight strength control
2188#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL" 2188#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL"
2189#define SIMPAD_BACKLIGHT_MASK 0x00a10044 2189#define SIMPAD_BACKLIGHT_MASK 0x00a10044
2190 2190
2191QValueList <OLed> SIMpad::ledList ( ) const 2191QValueList <OLed> SIMpad::ledList ( ) const
2192{ 2192{
2193 QValueList <OLed> vl; 2193 QValueList <OLed> vl;
2194 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one? 2194 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one?
2195 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway 2195 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway
2196 return vl; 2196 return vl;
2197} 2197}
2198 2198
2199QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const 2199QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const
2200{ 2200{
2201 QValueList <OLedState> vl; 2201 QValueList <OLedState> vl;
2202 2202
2203 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one? 2203 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one?
2204 vl << Led_Off << Led_On; 2204 vl << Led_Off << Led_On;
2205 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway 2205 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway
2206 //vl << Led_Off; 2206 //vl << Led_Off;
2207 return vl; 2207 return vl;
2208} 2208}
2209 2209
2210OLedState SIMpad::ledState ( OLed l ) const 2210OLedState SIMpad::ledState ( OLed l ) const
2211{ 2211{
2212 switch ( l ) { 2212 switch ( l ) {
2213 case Led_Power: 2213 case Led_Power:
2214 return m_leds [0]; 2214 return m_leds [0];
2215 //case Led_Mail: 2215 //case Led_Mail:
2216 //return m_leds [1]; 2216 //return m_leds [1];
2217 default: 2217 default:
2218 return Led_Off; 2218 return Led_Off;
2219 } 2219 }
2220} 2220}
2221 2221
2222bool SIMpad::setLedState ( OLed l, OLedState st ) 2222bool SIMpad::setLedState ( OLed l, OLedState st )
2223{ 2223{
2224 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK ); 2224 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK );
2225 2225
2226 if ( l == Led_Power ) { 2226 if ( l == Led_Power ) {
2227 if ( fd >= 0 ) { 2227 if ( fd >= 0 ) {
2228 LED_IN leds; 2228 LED_IN leds;
2229 ::memset ( &leds, 0, sizeof( leds )); 2229 ::memset ( &leds, 0, sizeof( leds ));
2230 leds. TotalTime = 0; 2230 leds. TotalTime = 0;
2231 leds. OnTime = 0; 2231 leds. OnTime = 0;
2232 leds. OffTime = 1; 2232 leds. OffTime = 1;
2233 leds. OffOnBlink = 2; 2233 leds. OffOnBlink = 2;
2234 2234
2235 switch ( st ) { 2235 switch ( st ) {
2236 case Led_Off : leds. OffOnBlink = 0; break; 2236 case Led_Off : leds. OffOnBlink = 0; break;
2237 case Led_On : leds. OffOnBlink = 1; break; 2237 case Led_On : leds. OffOnBlink = 1; break;
2238 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 2238 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
2239 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 2239 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
2240 } 2240 }
2241 2241
2242 { 2242 {
2243 /*TODO Implement this like that: 2243 /*TODO Implement this like that:
2244 read from cs3 2244 read from cs3
2245 && with SIMPAD_LED2_ON 2245 && with SIMPAD_LED2_ON
2246 write to cs3 */ 2246 write to cs3 */
2247 m_leds [0] = st; 2247 m_leds [0] = st;
2248 return true; 2248 return true;
2249 } 2249 }
2250 } 2250 }
2251 } 2251 }
2252 return false; 2252 return false;
2253} 2253}
2254 2254
2255 2255
2256bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 2256bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
2257{ 2257{
2258 //TODO 2258 //TODO
2259 return false; 2259 return false;
2260} 2260}
2261 2261
2262void SIMpad::timerEvent ( QTimerEvent * ) 2262void SIMpad::timerEvent ( QTimerEvent * )
2263{ 2263{
2264 killTimer ( m_power_timer ); 2264 killTimer ( m_power_timer );
2265 m_power_timer = 0; 2265 m_power_timer = 0;
2266 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 2266 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
2267 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 2267 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
2268} 2268}
2269 2269
2270 2270
2271void SIMpad::alarmSound ( ) 2271void SIMpad::alarmSound ( )
2272{ 2272{
2273#ifndef QT_NO_SOUND 2273#ifndef QT_NO_SOUND
2274 static Sound snd ( "alarm" ); 2274 static Sound snd ( "alarm" );
2275 int fd; 2275 int fd;
2276 int vol; 2276 int vol;
2277 bool vol_reset = false; 2277 bool vol_reset = false;
2278 2278
2279 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 2279 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
2280 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 2280 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
2281 Config cfg ( "qpe" ); 2281 Config cfg ( "qpe" );
2282 cfg. setGroup ( "Volume" ); 2282 cfg. setGroup ( "Volume" );
2283 2283
2284 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 2284 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
2285 if ( volalarm < 0 ) 2285 if ( volalarm < 0 )
2286 volalarm = 0; 2286 volalarm = 0;
2287 else if ( volalarm > 100 ) 2287 else if ( volalarm > 100 )
2288 volalarm = 100; 2288 volalarm = 100;
2289 volalarm |= ( volalarm << 8 ); 2289 volalarm |= ( volalarm << 8 );
2290 2290
2291 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 2291 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
2292 vol_reset = true; 2292 vol_reset = true;
2293 } 2293 }
2294 } 2294 }
2295 2295
2296 snd. play ( ); 2296 snd. play ( );
2297 while ( !snd. isFinished ( )) 2297 while ( !snd. isFinished ( ))
2298 qApp-> processEvents ( ); 2298 qApp-> processEvents ( );
2299 2299
2300 if ( fd >= 0 ) { 2300 if ( fd >= 0 ) {
2301 if ( vol_reset ) 2301 if ( vol_reset )
2302 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 2302 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
2303 ::close ( fd ); 2303 ::close ( fd );
2304 } 2304 }
2305#endif 2305#endif
2306} 2306}
2307 2307
2308 2308
2309bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm 2309bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm
2310{ 2310{
2311 qDebug( "ODevice for SIMpad: suspend()" ); 2311 qDebug( "ODevice for SIMpad: suspend()" );
2312 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 2312 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
2313 return false; 2313 return false;
2314 2314
2315 bool res = false; 2315 bool res = false;
2316 2316
2317 struct timeval tvs, tvn; 2317 struct timeval tvs, tvn;
2318 ::gettimeofday ( &tvs, 0 ); 2318 ::gettimeofday ( &tvs, 0 );
2319 2319
2320 ::sync ( ); // flush fs caches 2320 ::sync ( ); // flush fs caches
2321 res = ( ::system ( "cat /dev/fb/0 >/tmp/.buffer; echo > /proc/sys/pm/suspend; cat /tmp/.buffer >/dev/fb/0" ) == 0 ); //TODO make better :) 2321 res = ( ::system ( "cat /dev/fb/0 >/tmp/.buffer; echo > /proc/sys/pm/suspend; cat /tmp/.buffer >/dev/fb/0" ) == 0 ); //TODO make better :)
2322 2322
2323 return res; 2323 return res;
2324} 2324}
2325 2325
2326 2326
2327bool SIMpad::setSoftSuspend ( bool soft ) 2327bool SIMpad::setSoftSuspend ( bool soft )
2328{ 2328{
2329 qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" ); 2329 qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" );
2330 return false; 2330 return false;
2331} 2331}
2332 2332
2333 2333
2334bool SIMpad::setDisplayStatus ( bool on ) 2334bool SIMpad::setDisplayStatus ( bool on )
2335{ 2335{
2336 qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" ); 2336 qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" );
2337 2337
2338 bool res = false; 2338 bool res = false;
2339 int fd; 2339 int fd;
2340 2340
2341 QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :) 2341 QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :)
2342 2342
2343 res = ( ::system( (const char*) cmdline ) == 0 ); 2343 res = ( ::system( (const char*) cmdline ) == 0 );
2344 2344
2345 return res; 2345 return res;
2346} 2346}
2347 2347
2348 2348
2349bool SIMpad::setDisplayBrightness ( int bright ) 2349bool SIMpad::setDisplayBrightness ( int bright )
2350{ 2350{
2351 qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright ); 2351 qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright );
2352 bool res = false; 2352 bool res = false;
2353 int fd; 2353 int fd;
2354 2354
2355 if ( bright > 255 ) 2355 if ( bright > 255 )
2356 bright = 255; 2356 bright = 255;
2357 if ( bright < 1 ) 2357 if ( bright < 1 )
2358 bright = 0; 2358 bright = 0;
2359 2359
2360 if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) { 2360 if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) {
2361 int value = 255 - bright; 2361 int value = 255 - bright;
2362 const int mask = SIMPAD_BACKLIGHT_MASK; 2362 const int mask = SIMPAD_BACKLIGHT_MASK;
2363 value = value << 8; 2363 value = value << 8;
2364 value += mask; 2364 value += mask;
2365 char writeCommand[100]; 2365 char writeCommand[100];
2366 const int count = sprintf( writeCommand, "0x%x\n", value ); 2366 const int count = sprintf( writeCommand, "0x%x\n", value );
2367 res = ( ::write ( fd, writeCommand, count ) != -1 ); 2367 res = ( ::write ( fd, writeCommand, count ) != -1 );
2368 ::close ( fd ); 2368 ::close ( fd );
2369 } 2369 }
2370 return res; 2370 return res;
2371} 2371}
2372 2372
2373 2373
2374int SIMpad::displayBrightnessResolution ( ) const 2374int SIMpad::displayBrightnessResolution ( ) const
2375{ 2375{
2376 return 255; // All SIMpad models share the same display 2376 return 255; // All SIMpad models share the same display
2377} 2377}
2378 2378
2379/************************************************** 2379/**************************************************
2380 * 2380 *
2381 * Ramses 2381 * Ramses
2382 * 2382 *
2383 **************************************************/ 2383 **************************************************/
2384 2384
2385void Ramses::init() 2385void Ramses::init()
2386{ 2386{
2387 d->m_vendorstr = "M und N"; 2387 d->m_vendorstr = "M und N";
2388 d->m_vendor = Vendor_MundN; 2388 d->m_vendor = Vendor_MundN;
2389 2389
2390 QFile f("/proc/sys/board/ramses"); 2390 QFile f("/proc/sys/board/ramses");
2391 2391
2392 d->m_modelstr = "Ramses"; 2392 d->m_modelstr = "Ramses";
2393 d->m_model = Model_Ramses_MNCI; 2393 d->m_model = Model_Ramses_MNCI;
2394 2394
2395 d->m_rotation = Rot0; 2395 d->m_rotation = Rot0;
2396 d->m_holdtime = 1000; 2396 d->m_holdtime = 1000;
2397 2397
2398 f.setName("/etc/oz_version"); 2398 f.setName("/etc/oz_version");
2399 2399
2400 if (f.open(IO_ReadOnly)) { 2400 if (f.open(IO_ReadOnly)) {
2401 d->m_systemstr = "OpenEmbedded/Ramses"; 2401 d->m_systemstr = "OpenEmbedded/Ramses";
2402 d->m_system = System_OpenZaurus; 2402 d->m_system = System_OpenZaurus;
2403 2403
2404 QTextStream ts(&f); 2404 QTextStream ts(&f);
2405 ts.setDevice(&f); 2405 ts.setDevice(&f);
2406 d->m_sysverstr = ts.readLine(); 2406 d->m_sysverstr = ts.readLine();
2407 f.close(); 2407 f.close();
2408 } 2408 }
2409 2409
2410 m_power_timer = 0; 2410 m_power_timer = 0;
2411 2411
2412#ifdef QT_QWS_ALLOW_OVERCLOCK 2412#ifdef QT_QWS_ALLOW_OVERCLOCK
2413#warning *** Overclocking enabled - this may fry your hardware - you have been warned *** 2413#warning *** Overclocking enabled - this may fry your hardware - you have been warned ***
2414#define OC(x...) x 2414#define OC(x...) x
2415#else 2415#else
2416#define OC(x...) 2416#define OC(x...)
2417#endif 2417#endif
2418 2418
2419 2419
2420 // This table is true for a Intel XScale PXA 255 2420 // This table is true for a Intel XScale PXA 255
2421 2421
2422 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50 2422 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50
2423 OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem 2423 OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem
2424 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99 2424 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99
2425 OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem 2425 OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem
2426 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99 2426 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99
2427 OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem 2427 OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem
2428 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99 2428 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99
2429 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196 2429 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196
2430 OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus 2430 OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus
2431 2431
2432} 2432}
2433 2433
2434bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat) 2434bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat)
2435{ 2435{
2436 Q_UNUSED( keycode ); 2436 Q_UNUSED( keycode );
2437 Q_UNUSED( modifiers ); 2437 Q_UNUSED( modifiers );
2438 Q_UNUSED( isPress ); 2438 Q_UNUSED( isPress );
2439 Q_UNUSED( autoRepeat ); 2439 Q_UNUSED( autoRepeat );
2440 return false; 2440 return false;
2441} 2441}
2442 2442
2443void Ramses::timerEvent(QTimerEvent *) 2443void Ramses::timerEvent(QTimerEvent *)
2444{ 2444{
2445 killTimer(m_power_timer); 2445 killTimer(m_power_timer);
2446 m_power_timer = 0; 2446 m_power_timer = 0;
2447 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false); 2447 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false);
2448 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false); 2448 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false);
2449} 2449}
2450 2450
2451 2451
2452bool Ramses::setSoftSuspend(bool soft) 2452bool Ramses::setSoftSuspend(bool soft)
2453{ 2453{
2454 qDebug("Ramses::setSoftSuspend(%d)", soft); 2454 qDebug("Ramses::setSoftSuspend(%d)", soft);
2455#if 0 2455#if 0
2456 bool res = false; 2456 bool res = false;
2457 int fd; 2457 int fd;
2458 2458
2459 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) || 2459 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) ||
2460 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) { 2460 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) {
2461 2461
2462 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources 2462 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources
2463 2463
2464 if (sources >= 0) { 2464 if (sources >= 0) {
2465 if (soft) 2465 if (soft)
2466 sources &= ~APM_EVT_POWER_BUTTON; 2466 sources &= ~APM_EVT_POWER_BUTTON;
2467 else 2467 else
2468 sources |= APM_EVT_POWER_BUTTON; 2468 sources |= APM_EVT_POWER_BUTTON;
2469 2469
2470 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources 2470 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources
2471 res = true; 2471 res = true;
2472 else 2472 else
2473 perror("APM_IOCGEVTSRC"); 2473 perror("APM_IOCGEVTSRC");
2474 } 2474 }
2475 else 2475 else
2476 perror("APM_IOCGEVTSRC"); 2476 perror("APM_IOCGEVTSRC");
2477 2477
2478 ::close(fd); 2478 ::close(fd);
2479 } 2479 }
2480 else 2480 else
2481 perror("/dev/apm_bios or /dev/misc/apm_bios"); 2481 perror("/dev/apm_bios or /dev/misc/apm_bios");
2482 2482
2483 return res; 2483 return res;
2484#else 2484#else
2485 return true; 2485 return true;
2486#endif 2486#endif
2487} 2487}
2488 2488
2489bool Ramses::suspend ( ) 2489bool Ramses::suspend ( )
2490{ 2490{
2491 qDebug("Ramses::suspend"); 2491 qDebug("Ramses::suspend");
2492 return false; 2492 return false;
2493} 2493}
2494 2494
2495/** 2495/**
2496 * This sets the display on or off 2496 * This sets the display on or off
2497 */ 2497 */
2498bool Ramses::setDisplayStatus(bool on) 2498bool Ramses::setDisplayStatus(bool on)
2499{ 2499{
2500 qDebug("Ramses::setDisplayStatus(%d)", on); 2500 qDebug("Ramses::setDisplayStatus(%d)", on);
2501#if 0 2501#if 0
2502 bool res = false; 2502 bool res = false;
2503 int fd; 2503 int fd;
2504 2504
2505 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) { 2505 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) {
2506 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0); 2506 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0);
2507 ::close(fd); 2507 ::close(fd);
2508 } 2508 }
2509 return res; 2509 return res;
2510#else 2510#else
2511 return true; 2511 return true;
2512#endif 2512#endif
2513} 2513}
2514 2514
2515 2515
2516/* 2516/*
2517 * We get something between 0..255 into us 2517 * We get something between 0..255 into us
2518*/ 2518*/
2519bool Ramses::setDisplayBrightness(int bright) 2519bool Ramses::setDisplayBrightness(int bright)
2520{ 2520{
2521 qDebug("Ramses::setDisplayBrightness(%d)", bright); 2521 qDebug("Ramses::setDisplayBrightness(%d)", bright);
2522 bool res = false; 2522 bool res = false;
2523 int fd; 2523 int fd;
2524 2524
2525 // pwm1 brighness: 20 steps 500..0 (dunkel->hell) 2525 // pwm1 brighness: 20 steps 500..0 (dunkel->hell)
2526 2526
2527 if (bright > 255 ) 2527 if (bright > 255 )
2528 bright = 255; 2528 bright = 255;
2529 if (bright < 0) 2529 if (bright < 0)
2530 bright = 0; 2530 bright = 0;
2531 2531
2532 // Turn backlight completely off 2532 // Turn backlight completely off
2533 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) { 2533 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) {
2534 char writeCommand[10]; 2534 char writeCommand[10];
2535 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0); 2535 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0);
2536 res = (::write(fd, writeCommand, count) != -1); 2536 res = (::write(fd, writeCommand, count) != -1);
2537 ::close(fd); 2537 ::close(fd);
2538 } 2538 }
2539 2539
2540 // scale backlight brightness to hardware 2540 // scale backlight brightness to hardware
2541 bright = 500-(bright * 500 / 255); 2541 bright = 500-(bright * 500 / 255);
2542 if ((fd = ::open("/proc/sys/board/pwm1", O_WRONLY)) >= 0) { 2542 if ((fd = ::open("/proc/sys/board/pwm1", O_WRONLY)) >= 0) {
2543 qDebug(" %d -> pwm1", bright); 2543 qDebug(" %d -> pwm1", bright);
2544 char writeCommand[100]; 2544 char writeCommand[100];
2545 const int count = sprintf(writeCommand, "%d\n", bright); 2545 const int count = sprintf(writeCommand, "%d\n", bright);
2546 res = (::write(fd, writeCommand, count) != -1); 2546 res = (::write(fd, writeCommand, count) != -1);
2547 ::close(fd); 2547 ::close(fd);
2548 } 2548 }
2549 return res; 2549 return res;
2550} 2550}
2551 2551
2552 2552
2553int Ramses::displayBrightnessResolution() const 2553int Ramses::displayBrightnessResolution() const
2554{ 2554{
2555 return 32; 2555 return 32;
2556} 2556}
2557 2557
2558bool Ramses::setDisplayContrast(int contr) 2558bool Ramses::setDisplayContrast(int contr)
2559{ 2559{
2560 qDebug("Ramses::setDisplayContrast(%d)", contr); 2560 qDebug("Ramses::setDisplayContrast(%d)", contr);
2561 bool res = false; 2561 bool res = false;
2562 int fd; 2562 int fd;
2563 2563
2564 // pwm0 contrast: 20 steps 79..90 (dunkel->hell) 2564 // pwm0 contrast: 20 steps 79..90 (dunkel->hell)
2565 2565
2566 if (contr > 255 ) 2566 if (contr > 255 )
2567 contr = 255; 2567 contr = 255;
2568 if (contr < 0) 2568 if (contr < 0)
2569 contr = 0; 2569 contr = 0;