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 d78277f..501b601 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -774,677 +774,677 @@ void iPAQ::init ( )
774 d-> m_systemstr = "Familiar"; 774 d-> m_systemstr = "Familiar";
775 d-> m_system = System_Familiar; 775 d-> m_system = System_Familiar;
776 776
777 QTextStream ts ( &f ); 777 QTextStream ts ( &f );
778 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 778 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
779 779
780 f. close ( ); 780 f. close ( );
781 } else { 781 } else {
782 f. setName ( "/etc/oz_version" ); 782 f. setName ( "/etc/oz_version" );
783 783
784 if ( f. open ( IO_ReadOnly )) { 784 if ( f. open ( IO_ReadOnly )) {
785 d-> m_systemstr = "OpenEmbedded/iPaq"; 785 d-> m_systemstr = "OpenEmbedded/iPaq";
786 d-> m_system = System_Familiar; 786 d-> m_system = System_Familiar;
787 787
788 QTextStream ts ( &f ); 788 QTextStream ts ( &f );
789 ts.setDevice ( &f ); 789 ts.setDevice ( &f );
790 d-> m_sysverstr = ts. readLine ( ); 790 d-> m_sysverstr = ts. readLine ( );
791 f. close ( ); 791 f. close ( );
792 } 792 }
793 } 793 }
794 794
795 795
796 796
797 797
798 798
799 m_leds [0] = m_leds [1] = Led_Off; 799 m_leds [0] = m_leds [1] = Led_Off;
800 800
801 m_power_timer = 0; 801 m_power_timer = 0;
802 802
803} 803}
804 804
805void iPAQ::initButtons ( ) 805void iPAQ::initButtons ( )
806{ 806{
807 if ( d-> m_buttons ) 807 if ( d-> m_buttons )
808 return; 808 return;
809 809
810 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 810 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
811 811
812 if ( d-> m_qwsserver ) 812 if ( d-> m_qwsserver )
813 QWSServer::setKeyboardFilter ( this ); 813 QWSServer::setKeyboardFilter ( this );
814 814
815 d-> m_buttons = new QValueList <ODeviceButton>; 815 d-> m_buttons = new QValueList <ODeviceButton>;
816 816
817 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 817 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
818 i_button *ib = ipaq_buttons + i; 818 i_button *ib = ipaq_buttons + i;
819 ODeviceButton b; 819 ODeviceButton b;
820 820
821 if (( ib-> model & d-> m_model ) == d-> m_model ) { 821 if (( ib-> model & d-> m_model ) == d-> m_model ) {
822 b. setKeycode ( ib-> code ); 822 b. setKeycode ( ib-> code );
823 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 823 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
824 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 824 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
825 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 825 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
826 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 826 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
827 827
828 d-> m_buttons-> append ( b ); 828 d-> m_buttons-> append ( b );
829 } 829 }
830 } 830 }
831 reloadButtonMapping ( ); 831 reloadButtonMapping ( );
832 832
833 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 833 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
834 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 834 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
835} 835}
836 836
837 837
838//#include <linux/h3600_ts.h> // including kernel headers is evil ... 838//#include <linux/h3600_ts.h> // including kernel headers is evil ...
839 839
840typedef struct { 840typedef struct {
841 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 841 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
842 unsigned char TotalTime; /* Units of 5 seconds */ 842 unsigned char TotalTime; /* Units of 5 seconds */
843 unsigned char OnTime; /* units of 100m/s */ 843 unsigned char OnTime; /* units of 100m/s */
844 unsigned char OffTime; /* units of 100m/s */ 844 unsigned char OffTime; /* units of 100m/s */
845} LED_IN; 845} LED_IN;
846 846
847typedef struct { 847typedef struct {
848 unsigned char mode; 848 unsigned char mode;
849 unsigned char pwr; 849 unsigned char pwr;
850 unsigned char brightness; 850 unsigned char brightness;
851} FLITE_IN; 851} FLITE_IN;
852 852
853#define LED_ON OD_IOW( 'f', 5, LED_IN ) 853#define LED_ON OD_IOW( 'f', 5, LED_IN )
854#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 854#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
855 855
856 856
857QValueList <OLed> iPAQ::ledList ( ) const 857QValueList <OLed> iPAQ::ledList ( ) const
858{ 858{
859 QValueList <OLed> vl; 859 QValueList <OLed> vl;
860 vl << Led_Power; 860 vl << Led_Power;
861 861
862 if ( d-> m_model == Model_iPAQ_H38xx ) 862 if ( d-> m_model == Model_iPAQ_H38xx )
863 vl << Led_BlueTooth; 863 vl << Led_BlueTooth;
864 return vl; 864 return vl;
865} 865}
866 866
867QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 867QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
868{ 868{
869 QValueList <OLedState> vl; 869 QValueList <OLedState> vl;
870 870
871 if ( l == Led_Power ) 871 if ( l == Led_Power )
872 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 872 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
873 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 873 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
874 vl << Led_Off; // << Led_On << ??? 874 vl << Led_Off; // << Led_On << ???
875 875
876 return vl; 876 return vl;
877} 877}
878 878
879OLedState iPAQ::ledState ( OLed l ) const 879OLedState iPAQ::ledState ( OLed l ) const
880{ 880{
881 switch ( l ) { 881 switch ( l ) {
882 case Led_Power: 882 case Led_Power:
883 return m_leds [0]; 883 return m_leds [0];
884 case Led_BlueTooth: 884 case Led_BlueTooth:
885 return m_leds [1]; 885 return m_leds [1];
886 default: 886 default:
887 return Led_Off; 887 return Led_Off;
888 } 888 }
889} 889}
890 890
891bool iPAQ::setLedState ( OLed l, OLedState st ) 891bool iPAQ::setLedState ( OLed l, OLedState st )
892{ 892{
893 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 893 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
894 894
895 if ( l == Led_Power ) { 895 if ( l == Led_Power ) {
896 if ( fd >= 0 ) { 896 if ( fd >= 0 ) {
897 LED_IN leds; 897 LED_IN leds;
898 ::memset ( &leds, 0, sizeof( leds )); 898 ::memset ( &leds, 0, sizeof( leds ));
899 leds. TotalTime = 0; 899 leds. TotalTime = 0;
900 leds. OnTime = 0; 900 leds. OnTime = 0;
901 leds. OffTime = 1; 901 leds. OffTime = 1;
902 leds. OffOnBlink = 2; 902 leds. OffOnBlink = 2;
903 903
904 switch ( st ) { 904 switch ( st ) {
905 case Led_Off : leds. OffOnBlink = 0; break; 905 case Led_Off : leds. OffOnBlink = 0; break;
906 case Led_On : leds. OffOnBlink = 1; break; 906 case Led_On : leds. OffOnBlink = 1; break;
907 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 907 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
908 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 908 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
909 } 909 }
910 910
911 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 911 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
912 m_leds [0] = st; 912 m_leds [0] = st;
913 return true; 913 return true;
914 } 914 }
915 } 915 }
916 } 916 }
917 return false; 917 return false;
918} 918}
919 919
920 920
921bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 921bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
922{ 922{
923 int newkeycode = keycode; 923 int newkeycode = keycode;
924 924
925 switch ( keycode ) { 925 switch ( keycode ) {
926 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 926 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
927 case HardKey_Menu: { 927 case HardKey_Menu: {
928 if (( d-> m_model == Model_iPAQ_H38xx ) || 928 if (( d-> m_model == Model_iPAQ_H38xx ) ||
929 ( d-> m_model == Model_iPAQ_H39xx )) { 929 ( d-> m_model == Model_iPAQ_H39xx )) {
930 newkeycode = HardKey_Mail; 930 newkeycode = HardKey_Mail;
931 } 931 }
932 break; 932 break;
933 } 933 }
934 934
935 // Rotate cursor keys 180° 935 // Rotate cursor keys 180°
936 case Key_Left : 936 case Key_Left :
937 case Key_Right: 937 case Key_Right:
938 case Key_Up : 938 case Key_Up :
939 case Key_Down : { 939 case Key_Down : {
940 if (( d-> m_model == Model_iPAQ_H31xx ) || 940 if (( d-> m_model == Model_iPAQ_H31xx ) ||
941 ( d-> m_model == Model_iPAQ_H38xx )) { 941 ( d-> m_model == Model_iPAQ_H38xx )) {
942 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 942 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
943 } 943 }
944 break; 944 break;
945 } 945 }
946 946
947 // map Power Button short/long press to F34/F35 947 // map Power Button short/long press to F34/F35
948 case Key_SysReq: { 948 case Key_SysReq: {
949 if ( isPress ) { 949 if ( isPress ) {
950 if ( m_power_timer ) 950 if ( m_power_timer )
951 killTimer ( m_power_timer ); 951 killTimer ( m_power_timer );
952 m_power_timer = startTimer ( 500 ); 952 m_power_timer = startTimer ( 500 );
953 } 953 }
954 else if ( m_power_timer ) { 954 else if ( m_power_timer ) {
955 killTimer ( m_power_timer ); 955 killTimer ( m_power_timer );
956 m_power_timer = 0; 956 m_power_timer = 0;
957 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 957 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
958 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 958 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
959 } 959 }
960 newkeycode = Key_unknown; 960 newkeycode = Key_unknown;
961 break; 961 break;
962 } 962 }
963 } 963 }
964 964
965 if ( newkeycode != keycode ) { 965 if ( newkeycode != keycode ) {
966 if ( newkeycode != Key_unknown ) 966 if ( newkeycode != Key_unknown )
967 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 967 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
968 return true; 968 return true;
969 } 969 }
970 else 970 else
971 return false; 971 return false;
972} 972}
973 973
974void iPAQ::timerEvent ( QTimerEvent * ) 974void iPAQ::timerEvent ( QTimerEvent * )
975{ 975{
976 killTimer ( m_power_timer ); 976 killTimer ( m_power_timer );
977 m_power_timer = 0; 977 m_power_timer = 0;
978 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 978 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
979 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 979 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
980} 980}
981 981
982 982
983void iPAQ::alarmSound ( ) 983void iPAQ::alarmSound ( )
984{ 984{
985#ifndef QT_NO_SOUND 985#ifndef QT_NO_SOUND
986 static Sound snd ( "alarm" ); 986 static Sound snd ( "alarm" );
987 int fd; 987 int fd;
988 int vol; 988 int vol;
989 bool vol_reset = false; 989 bool vol_reset = false;
990 990
991 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 991 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
992 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 992 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
993 Config cfg ( "qpe" ); 993 Config cfg ( "qpe" );
994 cfg. setGroup ( "Volume" ); 994 cfg. setGroup ( "Volume" );
995 995
996 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 996 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
997 if ( volalarm < 0 ) 997 if ( volalarm < 0 )
998 volalarm = 0; 998 volalarm = 0;
999 else if ( volalarm > 100 ) 999 else if ( volalarm > 100 )
1000 volalarm = 100; 1000 volalarm = 100;
1001 volalarm |= ( volalarm << 8 ); 1001 volalarm |= ( volalarm << 8 );
1002 1002
1003 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1003 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1004 vol_reset = true; 1004 vol_reset = true;
1005 } 1005 }
1006 } 1006 }
1007 1007
1008 snd. play ( ); 1008 snd. play ( );
1009 while ( !snd. isFinished ( )) 1009 while ( !snd. isFinished ( ))
1010 qApp-> processEvents ( ); 1010 qApp-> processEvents ( );
1011 1011
1012 if ( fd >= 0 ) { 1012 if ( fd >= 0 ) {
1013 if ( vol_reset ) 1013 if ( vol_reset )
1014 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1014 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1015 ::close ( fd ); 1015 ::close ( fd );
1016 } 1016 }
1017#endif 1017#endif
1018} 1018}
1019 1019
1020 1020
1021bool iPAQ::setSoftSuspend ( bool soft ) 1021bool iPAQ::setSoftSuspend ( bool soft )
1022{ 1022{
1023 bool res = false; 1023 bool res = false;
1024 int fd; 1024 int fd;
1025 1025
1026 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 1026 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
1027 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1027 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1028 res = true; 1028 res = true;
1029 else 1029 else
1030 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1030 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1031 1031
1032 ::close ( fd ); 1032 ::close ( fd );
1033 } 1033 }
1034 else 1034 else
1035 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1035 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1036 1036
1037 return res; 1037 return res;
1038} 1038}
1039 1039
1040 1040
1041bool iPAQ::setDisplayBrightness ( int bright ) 1041bool iPAQ::setDisplayBrightness ( int bright )
1042{ 1042{
1043 bool res = false; 1043 bool res = false;
1044 int fd; 1044 int fd;
1045 1045
1046 if ( bright > 255 ) 1046 if ( bright > 255 )
1047 bright = 255; 1047 bright = 255;
1048 if ( bright < 0 ) 1048 if ( bright < 0 )
1049 bright = 0; 1049 bright = 0;
1050 1050
1051 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1051 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1052 FLITE_IN bl; 1052 FLITE_IN bl;
1053 bl. mode = 1; 1053 bl. mode = 1;
1054 bl. pwr = bright ? 1 : 0; 1054 bl. pwr = bright ? 1 : 0;
1055 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1055 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1056 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1056 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1057 ::close ( fd ); 1057 ::close ( fd );
1058 } 1058 }
1059 return res; 1059 return res;
1060} 1060}
1061 1061
1062int iPAQ::displayBrightnessResolution ( ) const 1062int iPAQ::displayBrightnessResolution ( ) const
1063{ 1063{
1064 switch ( model ( )) { 1064 switch ( model ( )) {
1065 case Model_iPAQ_H31xx: 1065 case Model_iPAQ_H31xx:
1066 case Model_iPAQ_H36xx: 1066 case Model_iPAQ_H36xx:
1067 case Model_iPAQ_H37xx: 1067 case Model_iPAQ_H37xx:
1068 return 128; // really 256, but >128 could damage the LCD 1068 return 128; // really 256, but >128 could damage the LCD
1069 1069
1070 case Model_iPAQ_H38xx: 1070 case Model_iPAQ_H38xx:
1071 case Model_iPAQ_H39xx: 1071 case Model_iPAQ_H39xx:
1072 return 64; 1072 return 64;
1073 1073
1074 default: 1074 default:
1075 return 2; 1075 return 2;
1076 } 1076 }
1077} 1077}
1078 1078
1079 1079
1080bool iPAQ::hasLightSensor ( ) const 1080bool iPAQ::hasLightSensor ( ) const
1081{ 1081{
1082 return true; 1082 return true;
1083} 1083}
1084 1084
1085int iPAQ::readLightSensor ( ) 1085int iPAQ::readLightSensor ( )
1086{ 1086{
1087 int fd; 1087 int fd;
1088 int val = -1; 1088 int val = -1;
1089 1089
1090 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1090 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1091 char buffer [8]; 1091 char buffer [8];
1092 1092
1093 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1093 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1094 char *endptr; 1094 char *endptr;
1095 1095
1096 buffer [4] = 0; 1096 buffer [4] = 0;
1097 val = ::strtol ( buffer + 2, &endptr, 16 ); 1097 val = ::strtol ( buffer + 2, &endptr, 16 );
1098 1098
1099 if ( *endptr != 0 ) 1099 if ( *endptr != 0 )
1100 val = -1; 1100 val = -1;
1101 } 1101 }
1102 ::close ( fd ); 1102 ::close ( fd );
1103 } 1103 }
1104 1104
1105 return val; 1105 return val;
1106} 1106}
1107 1107
1108int iPAQ::lightSensorResolution ( ) const 1108int iPAQ::lightSensorResolution ( ) const
1109{ 1109{
1110 return 256; 1110 return 256;
1111} 1111}
1112 1112
1113/************************************************** 1113/**************************************************
1114 * 1114 *
1115 * Zaurus 1115 * Zaurus
1116 * 1116 *
1117 **************************************************/ 1117 **************************************************/
1118 1118
1119 1119
1120 1120
1121void Zaurus::init ( ) 1121void Zaurus::init ( )
1122{ 1122{
1123 d-> m_vendorstr = "Sharp"; 1123 d-> m_vendorstr = "Sharp";
1124 d-> m_vendor = Vendor_Sharp; 1124 d-> m_vendor = Vendor_Sharp;
1125 1125
1126 QFile f ( "/proc/filesystems" ); 1126 QFile f ( "/proc/filesystems" );
1127 QString model; 1127 QString model;
1128 1128
1129 if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1129 if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
1130 d-> m_vendorstr = "OpenZaurus Team"; 1130 d-> m_vendorstr = "OpenZaurus Team";
1131 d-> m_systemstr = "OpenZaurus"; 1131 d-> m_systemstr = "OpenZaurus";
1132 d-> m_system = System_OpenZaurus; 1132 d-> m_system = System_OpenZaurus;
1133 1133
1134 f. close ( ); 1134 f. close ( );
1135 1135
1136 f. setName ( "/etc/oz_version" ); 1136 f. setName ( "/etc/oz_version" );
1137 if ( f. open ( IO_ReadOnly )) { 1137 if ( f. open ( IO_ReadOnly )) {
1138 QTextStream ts ( &f ); 1138 QTextStream ts ( &f );
1139 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1139 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1140 f. close ( ); 1140 f. close ( );
1141 } 1141 }
1142 } 1142 }
1143 else { 1143 else {
1144 d-> m_systemstr = "Zaurus"; 1144 d-> m_systemstr = "Zaurus";
1145 d-> m_system = System_Zaurus; 1145 d-> m_system = System_Zaurus;
1146 } 1146 }
1147 1147
1148 f. setName ( "/proc/cpuinfo" ); 1148 f. setName ( "/proc/cpuinfo" );
1149 if ( f. open ( IO_ReadOnly ) ) { 1149 if ( f. open ( IO_ReadOnly ) ) {
1150 QTextStream ts ( &f ); 1150 QTextStream ts ( &f );
1151 QString line; 1151 QString line;
1152 while( line = ts. readLine ( ) ) { 1152 while( line = ts. readLine ( ) ) {
1153 if ( line. left ( 8 ) == "Hardware" ) 1153 if ( line. left ( 8 ) == "Hardware" )
1154 break; 1154 break;
1155 } 1155 }
1156 int loc = line. find ( ":" ); 1156 int loc = line. find ( ":" );
1157 if ( loc != -1 ) 1157 if ( loc != -1 )
1158 model = line. mid ( loc + 2 ). simplifyWhitespace( ); 1158 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1159 } 1159 }
1160 1160
1161 if ( model == "SHARP Corgi" ) { 1161 if ( model == "SHARP Corgi" ) {
1162 d-> m_model = Model_Zaurus_SLC700; 1162 d-> m_model = Model_Zaurus_SLC700;
1163 d-> m_modelstr = "Zaurus SL-C700"; 1163 d-> m_modelstr = "Zaurus SL-C700";
1164 } else if ( model == "SHARP Poodle" ) { 1164 } else if ( model == "SHARP Poodle" ) {
1165 d-> m_model = Model_Zaurus_SLB600; 1165 d-> m_model = Model_Zaurus_SLB600;
1166 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1166 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1167 } else if ( model = "Sharp-Collie" ) { 1167 } else if ( model = "Sharp-Collie" ) {
1168 d-> m_model = Model_Zaurus_SL5500; 1168 d-> m_model = Model_Zaurus_SL5500;
1169 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1169 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1170 } else { 1170 } else {
1171 d-> m_model = Model_Zaurus_SL5500; 1171 d-> m_model = Model_Zaurus_SL5500;
1172 d-> m_modelstr = "Zaurus (Model unknown)"; 1172 d-> m_modelstr = "Zaurus (Model unknown)";
1173 } 1173 }
1174 1174
1175 bool flipstate = false; 1175 bool flipstate = false;
1176 switch ( d-> m_model ) { 1176 switch ( d-> m_model ) {
1177 case Model_Zaurus_SLA300: 1177 case Model_Zaurus_SLA300:
1178 d-> m_rotation = Rot0; 1178 d-> m_rotation = Rot0;
1179 break; 1179 break;
1180 case Model_Zaurus_SLC700: 1180 case Model_Zaurus_SLC700:
1181 // Note: need to 1) set flipstate based on physical screen orientation 1181 // Note: need to 1) set flipstate based on physical screen orientation
1182 // and 2) check to see if the user overrode the rotation direction 1182 // and 2) check to see if the user overrode the rotation direction
1183 // using appearance, and if so, remove that item from the Config to 1183 // using appearance, and if so, remove that item from the Config to
1184 // ensure the rotate applet flips us back to the previous state. 1184 // ensure the rotate applet flips us back to the previous state.
1185 if ( flipstate ) { 1185 if ( flipstate ) {
1186 // 480x640 1186 // 480x640
1187 d-> m_rotation = Rot0; 1187 d-> m_rotation = Rot0;
1188 d-> m_direction = CW; 1188 d-> m_direction = CW;
1189 } else { 1189 } else {
1190 // 640x480 1190 // 640x480
1191 d-> m_rotation = Rot270; 1191 d-> m_rotation = Rot270;
1192 d-> m_direction = CCW; 1192 d-> m_direction = CCW;
1193 } 1193 }
1194 break; 1194 break;
1195 case Model_Zaurus_SLB600: 1195 case Model_Zaurus_SLB600:
1196 case Model_Zaurus_SL5500: 1196 case Model_Zaurus_SL5500:
1197 case Model_Zaurus_SL5000: 1197 case Model_Zaurus_SL5000:
1198 default: 1198 default:
1199 d-> m_rotation = Rot270; 1199 d-> m_rotation = Rot270;
1200 break; 1200 break;
1201 } 1201 }
1202 m_leds [0] = Led_Off; 1202 m_leds [0] = Led_Off;
1203} 1203}
1204 1204
1205void Zaurus::initButtons ( ) 1205void Zaurus::initButtons ( )
1206{ 1206{
1207 if ( d-> m_buttons ) 1207 if ( d-> m_buttons )
1208 return; 1208 return;
1209 1209
1210 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 1210 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
1211 1211
1212 d-> m_buttons = new QValueList <ODeviceButton>; 1212 d-> m_buttons = new QValueList <ODeviceButton>;
1213 1213
1214 struct z_button * pz_buttons; 1214 struct z_button * pz_buttons;
1215 int buttoncount; 1215 int buttoncount;
1216 switch ( d-> m_model ) { 1216 switch ( d-> m_model ) {
1217 case Model_Zaurus_SLC700: 1217 case Model_Zaurus_SLC700:
1218 pz_buttons = z_buttons_c700; 1218 pz_buttons = z_buttons_c700;
1219 buttoncount = ARRAY_SIZE(z_buttons_c700); 1219 buttoncount = ARRAY_SIZE(z_buttons_c700);
1220 break; 1220 break;
1221 default: 1221 default:
1222 pz_buttons = z_buttons; 1222 pz_buttons = z_buttons;
1223 buttoncount = ARRAY_SIZE(z_buttons); 1223 buttoncount = ARRAY_SIZE(z_buttons);
1224 break; 1224 break;
1225 } 1225 }
1226 1226
1227 for ( int i = 0; i < buttoncount; i++ ) { 1227 for ( int i = 0; i < buttoncount; i++ ) {
1228 struct z_button *zb = pz_buttons + i; 1228 struct z_button *zb = pz_buttons + i;
1229 ODeviceButton b; 1229 ODeviceButton b;
1230 1230
1231 b. setKeycode ( zb-> code ); 1231 b. setKeycode ( zb-> code );
1232 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1232 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1233 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1233 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1234 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction )); 1234 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction ));
1235 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction )); 1235 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction ));
1236 1236
1237 d-> m_buttons-> append ( b ); 1237 d-> m_buttons-> append ( b );
1238 } 1238 }
1239 1239
1240 reloadButtonMapping ( ); 1240 reloadButtonMapping ( );
1241 1241
1242 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1242 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1243 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1243 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1244} 1244}
1245 1245
1246#include <unistd.h> 1246#include <unistd.h>
1247#include <fcntl.h> 1247#include <fcntl.h>
1248#include <sys/ioctl.h> 1248#include <sys/ioctl.h>
1249 1249
1250//#include <asm/sharp_char.h> // including kernel headers is evil ... 1250//#include <asm/sharp_char.h> // including kernel headers is evil ...
1251 1251
1252#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1252#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1253 1253
1254 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1254 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1255#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1255#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1256 1256
1257#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1257#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1258#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1258#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1259#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1259#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1260 1260
1261/* --- for SHARP_BUZZER device --- */ 1261/* --- for SHARP_BUZZER device --- */
1262 1262
1263 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1263 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1264//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1264//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1265 1265
1266#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1266#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1267#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1267#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1268#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1268#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1269#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1269#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1270#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1270#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1271 1271
1272//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1272//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1273//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1273//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1274 1274
1275//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1275//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1276//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1276//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1277//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1277//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1278//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1278//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1279//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1279//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1280//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1280//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1281//#define SHARP_PDA_APPSTART 9 /* application start */ 1281//#define SHARP_PDA_APPSTART 9 /* application start */
1282//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1282//#define SHARP_PDA_APPQUIT 10 /* application ends */
1283 1283
1284//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1284//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1285//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1285//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1286//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1286//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1287//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1287//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1288// 1288//
1289 1289
1290 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1290 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1291#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1291#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1292 1292
1293typedef struct sharp_led_status { 1293typedef struct sharp_led_status {
1294 int which; /* select which LED status is wanted. */ 1294 int which; /* select which LED status is wanted. */
1295 int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 1295 int status; /* set new led status if you call SHARP_LED_SETSTATUS */
1296} sharp_led_status; 1296} sharp_led_status;
1297 1297
1298#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1298#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1299 1299
1300#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 1300#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
1301#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 1301#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
1302#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 1302#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
1303 1303
1304// #include <asm/sharp_apm.h> // including kernel headers is evil ... 1304// #include <asm/sharp_apm.h> // including kernel headers is evil ...
1305 1305
1306#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 1306#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
1307#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 1307#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
1308#define APM_EVT_POWER_BUTTON (1 << 0) 1308#define APM_EVT_POWER_BUTTON (1 << 0)
1309 1309
1310#define FL_IOCTL_STEP_CONTRAST 100 1310#define FL_IOCTL_STEP_CONTRAST 100
1311 1311
1312 1312
1313void Zaurus::buzzer ( int sound ) 1313void Zaurus::buzzer ( int sound )
1314{ 1314{
1315 static int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1315 static int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1316 1316
1317 if ( fd >= 0 ) { 1317 if ( fd >= 0 ) {
1318 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1318 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1319 ::close ( fd ); 1319 ::close ( fd );
1320 } 1320 }
1321} 1321}
1322 1322
1323 1323
1324void Zaurus::alarmSound ( ) 1324void Zaurus::alarmSound ( )
1325{ 1325{
1326 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1326 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1327} 1327}
1328 1328
1329void Zaurus::touchSound ( ) 1329void Zaurus::touchSound ( )
1330{ 1330{
1331 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1331 buzzer ( SHARP_BUZ_TOUCHSOUND );
1332} 1332}
1333 1333
1334void Zaurus::keySound ( ) 1334void Zaurus::keySound ( )
1335{ 1335{
1336 buzzer ( SHARP_BUZ_KEYSOUND ); 1336 buzzer ( SHARP_BUZ_KEYSOUND );
1337} 1337}
1338 1338
1339 1339
1340QValueList <OLed> Zaurus::ledList ( ) const 1340QValueList <OLed> Zaurus::ledList ( ) const
1341{ 1341{
1342 QValueList <OLed> vl; 1342 QValueList <OLed> vl;
1343 vl << Led_Mail; 1343 vl << Led_Mail;
1344 return vl; 1344 return vl;
1345} 1345}
1346 1346
1347QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1347QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1348{ 1348{
1349 QValueList <OLedState> vl; 1349 QValueList <OLedState> vl;
1350 1350
1351 if ( l == Led_Mail ) 1351 if ( l == Led_Mail )
1352 vl << Led_Off << Led_On << Led_BlinkSlow; 1352 vl << Led_Off << Led_On << Led_BlinkSlow;
1353 return vl; 1353 return vl;
1354} 1354}
1355 1355
1356OLedState Zaurus::ledState ( OLed which ) const 1356OLedState Zaurus::ledState ( OLed which ) const
1357{ 1357{
1358 if ( which == Led_Mail ) 1358 if ( which == Led_Mail )
1359 return m_leds [0]; 1359 return m_leds [0];
1360 else 1360 else
1361 return Led_Off; 1361 return Led_Off;
1362} 1362}
1363 1363
1364bool Zaurus::setLedState ( OLed which, OLedState st ) 1364bool Zaurus::setLedState ( OLed which, OLedState st )
1365{ 1365{
1366 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 1366 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
1367 1367
1368 if ( which == Led_Mail ) { 1368 if ( which == Led_Mail ) {
1369 if ( fd >= 0 ) { 1369 if ( fd >= 0 ) {
1370 struct sharp_led_status leds; 1370 struct sharp_led_status leds;
1371 ::memset ( &leds, 0, sizeof( leds )); 1371 ::memset ( &leds, 0, sizeof( leds ));
1372 leds. which = SHARP_LED_MAIL_EXISTS; 1372 leds. which = SHARP_LED_MAIL_EXISTS;
1373 bool ok = true; 1373 bool ok = true;
1374 1374
1375 switch ( st ) { 1375 switch ( st ) {
1376 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 1376 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
1377 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 1377 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
1378 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 1378 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
1379 default : ok = false; 1379 default : ok = false;
1380 } 1380 }
1381 1381
1382 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 1382 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
1383 m_leds [0] = st; 1383 m_leds [0] = st;
1384 return true; 1384 return true;
1385 } 1385 }
1386 } 1386 }
1387 } 1387 }
1388 return false; 1388 return false;
1389} 1389}
1390 1390
1391bool Zaurus::setSoftSuspend ( bool soft ) 1391bool Zaurus::setSoftSuspend ( bool soft )
1392{ 1392{
1393 bool res = false; 1393 bool res = false;
1394 int fd; 1394 int fd;
1395 1395
1396 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) || 1396 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) ||
1397 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) { 1397 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) {
1398 1398
1399 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources 1399 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources
1400 1400
1401 if ( sources >= 0 ) { 1401 if ( sources >= 0 ) {
1402 if ( soft ) 1402 if ( soft )
1403 sources &= ~APM_EVT_POWER_BUTTON; 1403 sources &= ~APM_EVT_POWER_BUTTON;
1404 else 1404 else
1405 sources |= APM_EVT_POWER_BUTTON; 1405 sources |= APM_EVT_POWER_BUTTON;
1406 1406
1407 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources 1407 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources
1408 res = true; 1408 res = true;
1409 else 1409 else
1410 perror ( "APM_IOCGEVTSRC" ); 1410 perror ( "APM_IOCGEVTSRC" );
1411 } 1411 }
1412 else 1412 else
1413 perror ( "APM_IOCGEVTSRC" ); 1413 perror ( "APM_IOCGEVTSRC" );
1414 1414
1415 ::close ( fd ); 1415 ::close ( fd );
1416 } 1416 }
1417 else 1417 else
1418 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 1418 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
1419 1419
1420 return res; 1420 return res;
1421} 1421}
1422 1422
1423 1423
1424bool Zaurus::setDisplayBrightness ( int bright ) 1424bool Zaurus::setDisplayBrightness ( int bright )
1425{ 1425{
1426 bool res = false; 1426 bool res = false;
1427 int fd; 1427 int fd;
1428 1428
1429 if ( bright > 255 ) 1429 if ( bright > 255 )
1430 bright = 255; 1430 bright = 255;
1431 if ( bright < 0 ) 1431 if ( bright < 0 )
1432 bright = 0; 1432 bright = 0;
1433 1433
1434 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1434 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
1435 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 1435 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
1436 if ( bright && !bl ) 1436 if ( bright && !bl )
1437 bl = 1; 1437 bl = 1;
1438 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 1438 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
1439 ::close ( fd ); 1439 ::close ( fd );
1440 } 1440 }
1441 return res; 1441 return res;
1442} 1442}
1443 1443
1444 1444
1445int Zaurus::displayBrightnessResolution ( ) const 1445int Zaurus::displayBrightnessResolution ( ) const
1446{ 1446{
1447 return 5; 1447 return 5;
1448} 1448}
1449 1449
1450 1450