summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
authorzecke <zecke>2004-02-19 01:01:30 (UTC)
committer zecke <zecke>2004-02-19 01:01:30 (UTC)
commit3b4b9e070f84ce884a98b4112eaee2cef7530308 (patch) (unidiff)
treea63b57ec3368e41ea1482a37a41b4b9df2f30fd4 /libopie/odevice.cpp
parentab41e301eb7f06af0869844d197e38a7838f3f2d (diff)
downloadopie-3b4b9e070f84ce884a98b4112eaee2cef7530308.zip
opie-3b4b9e070f84ce884a98b4112eaee2cef7530308.tar.gz
opie-3b4b9e070f84ce884a98b4112eaee2cef7530308.tar.bz2
The hardware keys on the H5xxx are rotated by 270°
so rotate the key events
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 35d6cb4..c5a916b 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -949,777 +949,784 @@ void ODevice::reloadButtonMapping ( )
949 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( ); 949 pm = cfg. readEntry ( "PressedActionMessage" ). latin1 ( );
950 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 950 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
951 951
952 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( ); 952 hch = cfg. readEntry ( "HeldActionChannel" ). latin1 ( );
953 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 953 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
954 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 954 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
955 } 955 }
956 956
957 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 957 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
958 958
959 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 959 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
960 } 960 }
961} 961}
962 962
963void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 963void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
964{ 964{
965 initButtons ( ); 965 initButtons ( );
966 966
967 QString mb_chan; 967 QString mb_chan;
968 968
969 if ( button >= (int) d-> m_buttons-> count ( )) 969 if ( button >= (int) d-> m_buttons-> count ( ))
970 return; 970 return;
971 971
972 ODeviceButton &b = ( *d-> m_buttons ) [button]; 972 ODeviceButton &b = ( *d-> m_buttons ) [button];
973 b. setPressedAction ( action ); 973 b. setPressedAction ( action );
974 974
975 mb_chan=b. pressedAction ( ). channel ( ); 975 mb_chan=b. pressedAction ( ). channel ( );
976 976
977 Config buttonFile ( "ButtonSettings" ); 977 Config buttonFile ( "ButtonSettings" );
978 buttonFile. setGroup ( "Button" + QString::number ( button )); 978 buttonFile. setGroup ( "Button" + QString::number ( button ));
979 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 979 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
980 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 980 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
981 981
982 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 982 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
983 983
984 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 984 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
985} 985}
986 986
987void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 987void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
988{ 988{
989 initButtons ( ); 989 initButtons ( );
990 990
991 if ( button >= (int) d-> m_buttons-> count ( )) 991 if ( button >= (int) d-> m_buttons-> count ( ))
992 return; 992 return;
993 993
994 ODeviceButton &b = ( *d-> m_buttons ) [button]; 994 ODeviceButton &b = ( *d-> m_buttons ) [button];
995 b. setHeldAction ( action ); 995 b. setHeldAction ( action );
996 996
997 Config buttonFile ( "ButtonSettings" ); 997 Config buttonFile ( "ButtonSettings" );
998 buttonFile. setGroup ( "Button" + QString::number ( button )); 998 buttonFile. setGroup ( "Button" + QString::number ( button ));
999 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 999 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
1000 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 1000 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
1001 1001
1002 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 1002 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
1003 1003
1004 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 1004 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
1005} 1005}
1006void ODevice::virtual_hook(int, void* ){ 1006void ODevice::virtual_hook(int, void* ){
1007 1007
1008} 1008}
1009 1009
1010/************************************************** 1010/**************************************************
1011 * 1011 *
1012 * Yopy 3500/3700 1012 * Yopy 3500/3700
1013 * 1013 *
1014 **************************************************/ 1014 **************************************************/
1015 1015
1016bool Yopy::isYopy ( ) 1016bool Yopy::isYopy ( )
1017{ 1017{
1018 QFile f( "/proc/cpuinfo" ); 1018 QFile f( "/proc/cpuinfo" );
1019 if ( f. open ( IO_ReadOnly ) ) { 1019 if ( f. open ( IO_ReadOnly ) ) {
1020 QTextStream ts ( &f ); 1020 QTextStream ts ( &f );
1021 QString line; 1021 QString line;
1022 while( line = ts. readLine ( ) ) { 1022 while( line = ts. readLine ( ) ) {
1023 if ( line. left ( 8 ) == "Hardware" ) { 1023 if ( line. left ( 8 ) == "Hardware" ) {
1024 int loc = line. find ( ":" ); 1024 int loc = line. find ( ":" );
1025 if ( loc != -1 ) { 1025 if ( loc != -1 ) {
1026 QString model = 1026 QString model =
1027 line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1027 line. mid ( loc + 2 ). simplifyWhiteSpace( );
1028 return ( model == "Yopy" ); 1028 return ( model == "Yopy" );
1029 } 1029 }
1030 } 1030 }
1031 } 1031 }
1032 } 1032 }
1033 return false; 1033 return false;
1034} 1034}
1035 1035
1036void Yopy::init ( ) 1036void Yopy::init ( )
1037{ 1037{
1038 d-> m_vendorstr = "G.Mate"; 1038 d-> m_vendorstr = "G.Mate";
1039 d-> m_vendor = Vendor_GMate; 1039 d-> m_vendor = Vendor_GMate;
1040 d-> m_modelstr = "Yopy3700"; 1040 d-> m_modelstr = "Yopy3700";
1041 d-> m_model = Model_Yopy_3700; 1041 d-> m_model = Model_Yopy_3700;
1042 d-> m_rotation = Rot0; 1042 d-> m_rotation = Rot0;
1043 1043
1044 d-> m_systemstr = "Linupy"; 1044 d-> m_systemstr = "Linupy";
1045 d-> m_system = System_Linupy; 1045 d-> m_system = System_Linupy;
1046 1046
1047 QFile f ( "/etc/issue" ); 1047 QFile f ( "/etc/issue" );
1048 if ( f. open ( IO_ReadOnly )) { 1048 if ( f. open ( IO_ReadOnly )) {
1049 QTextStream ts ( &f ); 1049 QTextStream ts ( &f );
1050 ts.readLine(); 1050 ts.readLine();
1051 d-> m_sysverstr = ts. readLine ( ); 1051 d-> m_sysverstr = ts. readLine ( );
1052 f. close ( ); 1052 f. close ( );
1053 } 1053 }
1054} 1054}
1055 1055
1056void Yopy::initButtons ( ) 1056void Yopy::initButtons ( )
1057{ 1057{
1058 if ( d-> m_buttons ) 1058 if ( d-> m_buttons )
1059 return; 1059 return;
1060 1060
1061 d-> m_buttons = new QValueList <ODeviceButton>; 1061 d-> m_buttons = new QValueList <ODeviceButton>;
1062 1062
1063 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) { 1063 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) {
1064 1064
1065 yopy_button *ib = yopy_buttons + i; 1065 yopy_button *ib = yopy_buttons + i;
1066 1066
1067 ODeviceButton b; 1067 ODeviceButton b;
1068 1068
1069 b. setKeycode ( ib-> code ); 1069 b. setKeycode ( ib-> code );
1070 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1070 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1071 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1071 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1072 b. setFactoryPresetPressedAction 1072 b. setFactoryPresetPressedAction
1073 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction)); 1073 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction));
1074 b. setFactoryPresetHeldAction 1074 b. setFactoryPresetHeldAction
1075 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction)); 1075 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction));
1076 1076
1077 d-> m_buttons-> append ( b ); 1077 d-> m_buttons-> append ( b );
1078 } 1078 }
1079 reloadButtonMapping ( ); 1079 reloadButtonMapping ( );
1080 1080
1081 QCopChannel *sysch = new QCopChannel("QPE/System", this); 1081 QCopChannel *sysch = new QCopChannel("QPE/System", this);
1082 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )), 1082 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )),
1083 this, SLOT(systemMessage(const QCString &, const QByteArray & ))); 1083 this, SLOT(systemMessage(const QCString &, const QByteArray & )));
1084} 1084}
1085 1085
1086bool Yopy::suspend() 1086bool Yopy::suspend()
1087{ 1087{
1088 /* Opie for Yopy does not implement its own power management at the 1088 /* Opie for Yopy does not implement its own power management at the
1089 moment. The public version runs parallel to X, and relies on the 1089 moment. The public version runs parallel to X, and relies on the
1090 existing power management features. */ 1090 existing power management features. */
1091 return false; 1091 return false;
1092} 1092}
1093 1093
1094bool Yopy::setDisplayBrightness(int bright) 1094bool Yopy::setDisplayBrightness(int bright)
1095{ 1095{
1096 /* The code here works, but is disabled as the current version runs 1096 /* The code here works, but is disabled as the current version runs
1097 parallel to X, and relies on the existing backlight demon. */ 1097 parallel to X, and relies on the existing backlight demon. */
1098#if 0 1098#if 0
1099 if ( QFile::exists("/proc/sys/pm/light") ) { 1099 if ( QFile::exists("/proc/sys/pm/light") ) {
1100 int fd = ::open("/proc/sys/pm/light", O_WRONLY); 1100 int fd = ::open("/proc/sys/pm/light", O_WRONLY);
1101 if (fd >= 0 ) { 1101 if (fd >= 0 ) {
1102 if (bright) 1102 if (bright)
1103 ::write(fd, "1\n", 2); 1103 ::write(fd, "1\n", 2);
1104 else 1104 else
1105 ::write(fd, "0\n", 2); 1105 ::write(fd, "0\n", 2);
1106 ::close(fd); 1106 ::close(fd);
1107 return true; 1107 return true;
1108 } 1108 }
1109 } 1109 }
1110#endif 1110#endif
1111 return false; 1111 return false;
1112} 1112}
1113 1113
1114int Yopy::displayBrightnessResolution() const 1114int Yopy::displayBrightnessResolution() const
1115{ 1115{
1116 return 2; 1116 return 2;
1117} 1117}
1118 1118
1119/************************************************** 1119/**************************************************
1120 * 1120 *
1121 * iPAQ 1121 * iPAQ
1122 * 1122 *
1123 **************************************************/ 1123 **************************************************/
1124 1124
1125void iPAQ::init ( ) 1125void iPAQ::init ( )
1126{ 1126{
1127 d-> m_vendorstr = "HP"; 1127 d-> m_vendorstr = "HP";
1128 d-> m_vendor = Vendor_HP; 1128 d-> m_vendor = Vendor_HP;
1129 1129
1130 QFile f ( "/proc/hal/model" ); 1130 QFile f ( "/proc/hal/model" );
1131 1131
1132 if ( f. open ( IO_ReadOnly )) { 1132 if ( f. open ( IO_ReadOnly )) {
1133 QTextStream ts ( &f ); 1133 QTextStream ts ( &f );
1134 1134
1135 d-> m_modelstr = "H" + ts. readLine ( ); 1135 d-> m_modelstr = "H" + ts. readLine ( );
1136 1136
1137 if ( d-> m_modelstr == "H3100" ) 1137 if ( d-> m_modelstr == "H3100" )
1138 d-> m_model = Model_iPAQ_H31xx; 1138 d-> m_model = Model_iPAQ_H31xx;
1139 else if ( d-> m_modelstr == "H3600" ) 1139 else if ( d-> m_modelstr == "H3600" )
1140 d-> m_model = Model_iPAQ_H36xx; 1140 d-> m_model = Model_iPAQ_H36xx;
1141 else if ( d-> m_modelstr == "H3700" ) 1141 else if ( d-> m_modelstr == "H3700" )
1142 d-> m_model = Model_iPAQ_H37xx; 1142 d-> m_model = Model_iPAQ_H37xx;
1143 else if ( d-> m_modelstr == "H3800" ) 1143 else if ( d-> m_modelstr == "H3800" )
1144 d-> m_model = Model_iPAQ_H38xx; 1144 d-> m_model = Model_iPAQ_H38xx;
1145 else if ( d-> m_modelstr == "H3900" ) 1145 else if ( d-> m_modelstr == "H3900" )
1146 d-> m_model = Model_iPAQ_H39xx; 1146 d-> m_model = Model_iPAQ_H39xx;
1147 else if ( d-> m_modelstr == "H5400" ) 1147 else if ( d-> m_modelstr == "H5400" )
1148 d-> m_model = Model_iPAQ_H5xxx; 1148 d-> m_model = Model_iPAQ_H5xxx;
1149 else 1149 else
1150 d-> m_model = Model_Unknown; 1150 d-> m_model = Model_Unknown;
1151 1151
1152 f. close ( ); 1152 f. close ( );
1153 } 1153 }
1154 1154
1155 switch ( d-> m_model ) { 1155 switch ( d-> m_model ) {
1156 case Model_iPAQ_H31xx: 1156 case Model_iPAQ_H31xx:
1157 case Model_iPAQ_H38xx: 1157 case Model_iPAQ_H38xx:
1158 d-> m_rotation = Rot90; 1158 d-> m_rotation = Rot90;
1159 break; 1159 break;
1160 case Model_iPAQ_H36xx: 1160 case Model_iPAQ_H36xx:
1161 case Model_iPAQ_H37xx: 1161 case Model_iPAQ_H37xx:
1162 case Model_iPAQ_H39xx: 1162 case Model_iPAQ_H39xx:
1163 1163
1164 default: 1164 default:
1165 d-> m_rotation = Rot270; 1165 d-> m_rotation = Rot270;
1166 break; 1166 break;
1167 case Model_iPAQ_H5xxx: 1167 case Model_iPAQ_H5xxx:
1168 d-> m_rotation = Rot0; 1168 d-> m_rotation = Rot0;
1169 } 1169 }
1170 1170
1171 f. setName ( "/etc/familiar-version" ); 1171 f. setName ( "/etc/familiar-version" );
1172 if ( f. open ( IO_ReadOnly )) { 1172 if ( f. open ( IO_ReadOnly )) {
1173 d-> m_systemstr = "Familiar"; 1173 d-> m_systemstr = "Familiar";
1174 d-> m_system = System_Familiar; 1174 d-> m_system = System_Familiar;
1175 1175
1176 QTextStream ts ( &f ); 1176 QTextStream ts ( &f );
1177 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 1177 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
1178 1178
1179 f. close ( ); 1179 f. close ( );
1180 } else { 1180 } else {
1181 f. setName ( "/etc/oz_version" ); 1181 f. setName ( "/etc/oz_version" );
1182 1182
1183 if ( f. open ( IO_ReadOnly )) { 1183 if ( f. open ( IO_ReadOnly )) {
1184 d-> m_systemstr = "OpenEmbedded/iPaq"; 1184 d-> m_systemstr = "OpenEmbedded/iPaq";
1185 d-> m_system = System_Familiar; 1185 d-> m_system = System_Familiar;
1186 1186
1187 QTextStream ts ( &f ); 1187 QTextStream ts ( &f );
1188 ts.setDevice ( &f ); 1188 ts.setDevice ( &f );
1189 d-> m_sysverstr = ts. readLine ( ); 1189 d-> m_sysverstr = ts. readLine ( );
1190 f. close ( ); 1190 f. close ( );
1191 } 1191 }
1192 } 1192 }
1193 1193
1194 1194
1195 1195
1196 1196
1197 1197
1198 m_leds [0] = m_leds [1] = Led_Off; 1198 m_leds [0] = m_leds [1] = Led_Off;
1199 1199
1200 m_power_timer = 0; 1200 m_power_timer = 0;
1201 1201
1202} 1202}
1203 1203
1204void iPAQ::initButtons ( ) 1204void iPAQ::initButtons ( )
1205{ 1205{
1206 if ( d-> m_buttons ) 1206 if ( d-> m_buttons )
1207 return; 1207 return;
1208 1208
1209 if ( isQWS( ) ) 1209 if ( isQWS( ) )
1210 QWSServer::setKeyboardFilter ( this ); 1210 QWSServer::setKeyboardFilter ( this );
1211 1211
1212 d-> m_buttons = new QValueList <ODeviceButton>; 1212 d-> m_buttons = new QValueList <ODeviceButton>;
1213 1213
1214 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 1214 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
1215 i_button *ib = ipaq_buttons + i; 1215 i_button *ib = ipaq_buttons + i;
1216 ODeviceButton b; 1216 ODeviceButton b;
1217 1217
1218 if (( ib-> model & d-> m_model ) == d-> m_model ) { 1218 if (( ib-> model & d-> m_model ) == d-> m_model ) {
1219 b. setKeycode ( ib-> code ); 1219 b. setKeycode ( ib-> code );
1220 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1220 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1221 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1221 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1222 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 1222 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
1223 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 1223 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
1224 1224
1225 d-> m_buttons-> append ( b ); 1225 d-> m_buttons-> append ( b );
1226 } 1226 }
1227 } 1227 }
1228 reloadButtonMapping ( ); 1228 reloadButtonMapping ( );
1229 1229
1230 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1230 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1231 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1231 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1232} 1232}
1233 1233
1234 1234
1235//#include <linux/h3600_ts.h> // including kernel headers is evil ... 1235//#include <linux/h3600_ts.h> // including kernel headers is evil ...
1236 1236
1237typedef struct { 1237typedef struct {
1238 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 1238 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
1239 unsigned char TotalTime; /* Units of 5 seconds */ 1239 unsigned char TotalTime; /* Units of 5 seconds */
1240 unsigned char OnTime; /* units of 100m/s */ 1240 unsigned char OnTime; /* units of 100m/s */
1241 unsigned char OffTime; /* units of 100m/s */ 1241 unsigned char OffTime; /* units of 100m/s */
1242} LED_IN; 1242} LED_IN;
1243 1243
1244typedef struct { 1244typedef struct {
1245 unsigned char mode; 1245 unsigned char mode;
1246 unsigned char pwr; 1246 unsigned char pwr;
1247 unsigned char brightness; 1247 unsigned char brightness;
1248} FLITE_IN; 1248} FLITE_IN;
1249 1249
1250#define LED_ON OD_IOW( 'f', 5, LED_IN ) 1250#define LED_ON OD_IOW( 'f', 5, LED_IN )
1251#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 1251#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
1252 1252
1253 1253
1254QValueList <OLed> iPAQ::ledList ( ) const 1254QValueList <OLed> iPAQ::ledList ( ) const
1255{ 1255{
1256 QValueList <OLed> vl; 1256 QValueList <OLed> vl;
1257 vl << Led_Power; 1257 vl << Led_Power;
1258 1258
1259 if ( d-> m_model == Model_iPAQ_H38xx ) 1259 if ( d-> m_model == Model_iPAQ_H38xx )
1260 vl << Led_BlueTooth; 1260 vl << Led_BlueTooth;
1261 return vl; 1261 return vl;
1262} 1262}
1263 1263
1264QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 1264QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
1265{ 1265{
1266 QValueList <OLedState> vl; 1266 QValueList <OLedState> vl;
1267 1267
1268 if ( l == Led_Power ) 1268 if ( l == Led_Power )
1269 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 1269 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
1270 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 1270 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
1271 vl << Led_Off; // << Led_On << ??? 1271 vl << Led_Off; // << Led_On << ???
1272 1272
1273 return vl; 1273 return vl;
1274} 1274}
1275 1275
1276OLedState iPAQ::ledState ( OLed l ) const 1276OLedState iPAQ::ledState ( OLed l ) const
1277{ 1277{
1278 switch ( l ) { 1278 switch ( l ) {
1279 case Led_Power: 1279 case Led_Power:
1280 return m_leds [0]; 1280 return m_leds [0];
1281 case Led_BlueTooth: 1281 case Led_BlueTooth:
1282 return m_leds [1]; 1282 return m_leds [1];
1283 default: 1283 default:
1284 return Led_Off; 1284 return Led_Off;
1285 } 1285 }
1286} 1286}
1287 1287
1288bool iPAQ::setLedState ( OLed l, OLedState st ) 1288bool iPAQ::setLedState ( OLed l, OLedState st )
1289{ 1289{
1290 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 1290 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
1291 1291
1292 if ( l == Led_Power ) { 1292 if ( l == Led_Power ) {
1293 if ( fd >= 0 ) { 1293 if ( fd >= 0 ) {
1294 LED_IN leds; 1294 LED_IN leds;
1295 ::memset ( &leds, 0, sizeof( leds )); 1295 ::memset ( &leds, 0, sizeof( leds ));
1296 leds. TotalTime = 0; 1296 leds. TotalTime = 0;
1297 leds. OnTime = 0; 1297 leds. OnTime = 0;
1298 leds. OffTime = 1; 1298 leds. OffTime = 1;
1299 leds. OffOnBlink = 2; 1299 leds. OffOnBlink = 2;
1300 1300
1301 switch ( st ) { 1301 switch ( st ) {
1302 case Led_Off : leds. OffOnBlink = 0; break; 1302 case Led_Off : leds. OffOnBlink = 0; break;
1303 case Led_On : leds. OffOnBlink = 1; break; 1303 case Led_On : leds. OffOnBlink = 1; break;
1304 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 1304 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
1305 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 1305 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
1306 } 1306 }
1307 1307
1308 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 1308 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
1309 m_leds [0] = st; 1309 m_leds [0] = st;
1310 return true; 1310 return true;
1311 } 1311 }
1312 } 1312 }
1313 } 1313 }
1314 return false; 1314 return false;
1315} 1315}
1316 1316
1317 1317
1318bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 1318bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
1319{ 1319{
1320 int newkeycode = keycode; 1320 int newkeycode = keycode;
1321 1321
1322 switch ( keycode ) { 1322 switch ( keycode ) {
1323 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 1323 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
1324 case HardKey_Menu: { 1324 case HardKey_Menu: {
1325 if (( d-> m_model == Model_iPAQ_H38xx ) || 1325 if (( d-> m_model == Model_iPAQ_H38xx ) ||
1326 ( d-> m_model == Model_iPAQ_H39xx ) || 1326 ( d-> m_model == Model_iPAQ_H39xx ) ||
1327 ( d-> m_model == Model_iPAQ_H5xxx)) { 1327 ( d-> m_model == Model_iPAQ_H5xxx)) {
1328 newkeycode = HardKey_Mail; 1328 newkeycode = HardKey_Mail;
1329 } 1329 }
1330 break; 1330 break;
1331 } 1331 }
1332 1332
1333 // Rotate cursor keys 180° 1333 // Rotate cursor keys 180° or 270°
1334 case Key_Left : 1334 case Key_Left :
1335 case Key_Right: 1335 case Key_Right:
1336 case Key_Up : 1336 case Key_Up :
1337 case Key_Down : { 1337 case Key_Down : {
1338
1338 if (( d-> m_model == Model_iPAQ_H31xx ) || 1339 if (( d-> m_model == Model_iPAQ_H31xx ) ||
1339 ( d-> m_model == Model_iPAQ_H38xx )) { 1340 ( d-> m_model == Model_iPAQ_H38xx )) {
1340 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 1341 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
1341 } 1342 }
1343 // Rotate the cursor keys by 270°
1344 // keycode - Key_Left = position of the button starting from left clockwise
1345 // add the rotation to it and modolo. No we've the original offset
1346 // add the offset to the Key_Left key
1347 if ( d-> m_model == Model_iPAQ_H5xxx )
1348 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
1342 break; 1349 break;
1343 } 1350 }
1344 1351
1345 // map Power Button short/long press to F34/F35 1352 // map Power Button short/long press to F34/F35
1346 case Key_SysReq: { 1353 case Key_SysReq: {
1347 if ( isPress ) { 1354 if ( isPress ) {
1348 if ( m_power_timer ) 1355 if ( m_power_timer )
1349 killTimer ( m_power_timer ); 1356 killTimer ( m_power_timer );
1350 m_power_timer = startTimer ( 500 ); 1357 m_power_timer = startTimer ( 500 );
1351 } 1358 }
1352 else if ( m_power_timer ) { 1359 else if ( m_power_timer ) {
1353 killTimer ( m_power_timer ); 1360 killTimer ( m_power_timer );
1354 m_power_timer = 0; 1361 m_power_timer = 0;
1355 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 1362 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
1356 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 1363 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
1357 } 1364 }
1358 newkeycode = Key_unknown; 1365 newkeycode = Key_unknown;
1359 break; 1366 break;
1360 } 1367 }
1361 } 1368 }
1362 1369
1363 if ( newkeycode != keycode ) { 1370 if ( newkeycode != keycode ) {
1364 if ( newkeycode != Key_unknown ) 1371 if ( newkeycode != Key_unknown )
1365 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 1372 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
1366 return true; 1373 return true;
1367 } 1374 }
1368 else 1375 else
1369 return false; 1376 return false;
1370} 1377}
1371 1378
1372void iPAQ::timerEvent ( QTimerEvent * ) 1379void iPAQ::timerEvent ( QTimerEvent * )
1373{ 1380{
1374 killTimer ( m_power_timer ); 1381 killTimer ( m_power_timer );
1375 m_power_timer = 0; 1382 m_power_timer = 0;
1376 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 1383 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
1377 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 1384 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
1378} 1385}
1379 1386
1380 1387
1381void iPAQ::alarmSound ( ) 1388void iPAQ::alarmSound ( )
1382{ 1389{
1383#ifndef QT_NO_SOUND 1390#ifndef QT_NO_SOUND
1384 static Sound snd ( "alarm" ); 1391 static Sound snd ( "alarm" );
1385 int fd; 1392 int fd;
1386 int vol; 1393 int vol;
1387 bool vol_reset = false; 1394 bool vol_reset = false;
1388 1395
1389 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1396 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1390 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1397 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1391 Config cfg ( "qpe" ); 1398 Config cfg ( "qpe" );
1392 cfg. setGroup ( "Volume" ); 1399 cfg. setGroup ( "Volume" );
1393 1400
1394 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1401 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1395 if ( volalarm < 0 ) 1402 if ( volalarm < 0 )
1396 volalarm = 0; 1403 volalarm = 0;
1397 else if ( volalarm > 100 ) 1404 else if ( volalarm > 100 )
1398 volalarm = 100; 1405 volalarm = 100;
1399 volalarm |= ( volalarm << 8 ); 1406 volalarm |= ( volalarm << 8 );
1400 1407
1401 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1408 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1402 vol_reset = true; 1409 vol_reset = true;
1403 } 1410 }
1404 } 1411 }
1405 1412
1406 snd. play ( ); 1413 snd. play ( );
1407 while ( !snd. isFinished ( )) 1414 while ( !snd. isFinished ( ))
1408 qApp-> processEvents ( ); 1415 qApp-> processEvents ( );
1409 1416
1410 if ( fd >= 0 ) { 1417 if ( fd >= 0 ) {
1411 if ( vol_reset ) 1418 if ( vol_reset )
1412 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1419 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1413 ::close ( fd ); 1420 ::close ( fd );
1414 } 1421 }
1415#endif 1422#endif
1416} 1423}
1417 1424
1418 1425
1419bool iPAQ::setSoftSuspend ( bool soft ) 1426bool iPAQ::setSoftSuspend ( bool soft )
1420{ 1427{
1421 bool res = false; 1428 bool res = false;
1422 int fd; 1429 int fd;
1423 1430
1424 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 1431 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
1425 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 1432 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
1426 res = true; 1433 res = true;
1427 else 1434 else
1428 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 1435 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
1429 1436
1430 ::close ( fd ); 1437 ::close ( fd );
1431 } 1438 }
1432 else 1439 else
1433 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 1440 ::perror ( "/proc/sys/ts/suspend_button_mode" );
1434 1441
1435 return res; 1442 return res;
1436} 1443}
1437 1444
1438 1445
1439bool iPAQ::setDisplayBrightness ( int bright ) 1446bool iPAQ::setDisplayBrightness ( int bright )
1440{ 1447{
1441 bool res = false; 1448 bool res = false;
1442 int fd; 1449 int fd;
1443 1450
1444 if ( bright > 255 ) 1451 if ( bright > 255 )
1445 bright = 255; 1452 bright = 255;
1446 if ( bright < 0 ) 1453 if ( bright < 0 )
1447 bright = 0; 1454 bright = 0;
1448 1455
1449 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 1456 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
1450 FLITE_IN bl; 1457 FLITE_IN bl;
1451 bl. mode = 1; 1458 bl. mode = 1;
1452 bl. pwr = bright ? 1 : 0; 1459 bl. pwr = bright ? 1 : 0;
1453 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255; 1460 bl. brightness = ( bright * ( displayBrightnessResolution ( ) - 1 ) + 127 ) / 255;
1454 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 1461 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
1455 ::close ( fd ); 1462 ::close ( fd );
1456 } 1463 }
1457 return res; 1464 return res;
1458} 1465}
1459 1466
1460int iPAQ::displayBrightnessResolution ( ) const 1467int iPAQ::displayBrightnessResolution ( ) const
1461{ 1468{
1462 switch ( model ( )) { 1469 switch ( model ( )) {
1463 case Model_iPAQ_H31xx: 1470 case Model_iPAQ_H31xx:
1464 case Model_iPAQ_H36xx: 1471 case Model_iPAQ_H36xx:
1465 case Model_iPAQ_H37xx: 1472 case Model_iPAQ_H37xx:
1466 return 128; // really 256, but >128 could damage the LCD 1473 return 128; // really 256, but >128 could damage the LCD
1467 1474
1468 case Model_iPAQ_H38xx: 1475 case Model_iPAQ_H38xx:
1469 case Model_iPAQ_H39xx: 1476 case Model_iPAQ_H39xx:
1470 return 64; 1477 return 64;
1471 case Model_iPAQ_H5xxx: 1478 case Model_iPAQ_H5xxx:
1472 return 255; 1479 return 255;
1473 1480
1474 default: 1481 default:
1475 return 2; 1482 return 2;
1476 } 1483 }
1477} 1484}
1478 1485
1479 1486
1480bool iPAQ::hasLightSensor ( ) const 1487bool iPAQ::hasLightSensor ( ) const
1481{ 1488{
1482 return true; 1489 return true;
1483} 1490}
1484 1491
1485int iPAQ::readLightSensor ( ) 1492int iPAQ::readLightSensor ( )
1486{ 1493{
1487 int fd; 1494 int fd;
1488 int val = -1; 1495 int val = -1;
1489 1496
1490 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 1497 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
1491 char buffer [8]; 1498 char buffer [8];
1492 1499
1493 if ( ::read ( fd, buffer, 5 ) == 5 ) { 1500 if ( ::read ( fd, buffer, 5 ) == 5 ) {
1494 char *endptr; 1501 char *endptr;
1495 1502
1496 buffer [4] = 0; 1503 buffer [4] = 0;
1497 val = ::strtol ( buffer + 2, &endptr, 16 ); 1504 val = ::strtol ( buffer + 2, &endptr, 16 );
1498 1505
1499 if ( *endptr != 0 ) 1506 if ( *endptr != 0 )
1500 val = -1; 1507 val = -1;
1501 } 1508 }
1502 ::close ( fd ); 1509 ::close ( fd );
1503 } 1510 }
1504 1511
1505 return val; 1512 return val;
1506} 1513}
1507 1514
1508int iPAQ::lightSensorResolution ( ) const 1515int iPAQ::lightSensorResolution ( ) const
1509{ 1516{
1510 return 256; 1517 return 256;
1511} 1518}
1512 1519
1513/************************************************** 1520/**************************************************
1514 * 1521 *
1515 * Zaurus 1522 * Zaurus
1516 * 1523 *
1517 **************************************************/ 1524 **************************************************/
1518 1525
1519// Check whether this device is the sharp zaurus.. 1526// Check whether this device is the sharp zaurus..
1520// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 1527// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
1521// class up into individual classes. We need three classes 1528// class up into individual classes. We need three classes
1522// 1529//
1523// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 1530// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
1524// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 1531// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
1525// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) 1532// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860)
1526// 1533//
1527// Only question right now is: Do we really need to do it? Because as soon 1534// Only question right now is: Do we really need to do it? Because as soon
1528// as the OpenZaurus kernel is ready, there will be a unified interface for all 1535// as the OpenZaurus kernel is ready, there will be a unified interface for all
1529// Zaurus models (concerning apm, backlight, buttons, etc.) 1536// Zaurus models (concerning apm, backlight, buttons, etc.)
1530// 1537//
1531// Comments? - mickeyl. 1538// Comments? - mickeyl.
1532 1539
1533bool Zaurus::isZaurus() 1540bool Zaurus::isZaurus()
1534{ 1541{
1535 1542
1536 // If the special devices by embedix exist, it is quite simple: it is a Zaurus ! 1543 // If the special devices by embedix exist, it is quite simple: it is a Zaurus !
1537 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){ 1544 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){
1538 return true; 1545 return true;
1539 } 1546 }
1540 1547
1541 // On non-embedix kernels, we have to look closer. 1548 // On non-embedix kernels, we have to look closer.
1542 bool is_zaurus = false; 1549 bool is_zaurus = false;
1543 QFile f ( "/proc/cpuinfo" ); 1550 QFile f ( "/proc/cpuinfo" );
1544 if ( f. open ( IO_ReadOnly ) ) { 1551 if ( f. open ( IO_ReadOnly ) ) {
1545 QString model; 1552 QString model;
1546 QFile f ( "/proc/cpuinfo" ); 1553 QFile f ( "/proc/cpuinfo" );
1547 1554
1548 QTextStream ts ( &f ); 1555 QTextStream ts ( &f );
1549 QString line; 1556 QString line;
1550 while( line = ts. readLine ( ) ) { 1557 while( line = ts. readLine ( ) ) {
1551 if ( line. left ( 8 ) == "Hardware" ) 1558 if ( line. left ( 8 ) == "Hardware" )
1552 break; 1559 break;
1553 } 1560 }
1554 int loc = line. find ( ":" ); 1561 int loc = line. find ( ":" );
1555 if ( loc != -1 ) 1562 if ( loc != -1 )
1556 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1563 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1557 1564
1558 if ( model == "Sharp-Collie" 1565 if ( model == "Sharp-Collie"
1559 || model == "Collie" 1566 || model == "Collie"
1560 || model == "SHARP Corgi" 1567 || model == "SHARP Corgi"
1561 || model == "SHARP Shepherd" 1568 || model == "SHARP Shepherd"
1562 || model == "SHARP Poodle" 1569 || model == "SHARP Poodle"
1563 || model == "SHARP Husky" 1570 || model == "SHARP Husky"
1564 ) 1571 )
1565 is_zaurus = true; 1572 is_zaurus = true;
1566 1573
1567 } 1574 }
1568 return is_zaurus; 1575 return is_zaurus;
1569} 1576}
1570 1577
1571 1578
1572void Zaurus::init ( ) 1579void Zaurus::init ( )
1573{ 1580{
1574 d-> m_vendorstr = "Sharp"; 1581 d-> m_vendorstr = "Sharp";
1575 d-> m_vendor = Vendor_Sharp; 1582 d-> m_vendor = Vendor_Sharp;
1576 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 1583 m_embedix = true; // Not openzaurus means: It has an embedix kernel !
1577 1584
1578 // QFile f ( "/proc/filesystems" ); 1585 // QFile f ( "/proc/filesystems" );
1579 QString model; 1586 QString model;
1580 1587
1581 // It isn't a good idea to check the system configuration to 1588 // It isn't a good idea to check the system configuration to
1582 // detect the distribution ! 1589 // detect the distribution !
1583 // Otherwise it may happen that any other distribution is detected as openzaurus, just 1590 // Otherwise it may happen that any other distribution is detected as openzaurus, just
1584 // because it uses a jffs2 filesystem.. 1591 // because it uses a jffs2 filesystem..
1585 // (eilers) 1592 // (eilers)
1586 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) { 1593 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
1587 QFile f ("/etc/oz_version"); 1594 QFile f ("/etc/oz_version");
1588 if ( f.exists() ){ 1595 if ( f.exists() ){
1589 d-> m_vendorstr = "OpenZaurus Team"; 1596 d-> m_vendorstr = "OpenZaurus Team";
1590 d-> m_systemstr = "OpenZaurus"; 1597 d-> m_systemstr = "OpenZaurus";
1591 d-> m_system = System_OpenZaurus; 1598 d-> m_system = System_OpenZaurus;
1592 1599
1593 if ( f. open ( IO_ReadOnly )) { 1600 if ( f. open ( IO_ReadOnly )) {
1594 QTextStream ts ( &f ); 1601 QTextStream ts ( &f );
1595 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1602 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1596 f. close ( ); 1603 f. close ( );
1597 } 1604 }
1598 1605
1599 // Openzaurus sometimes uses the embedix kernel! 1606 // Openzaurus sometimes uses the embedix kernel!
1600 // => Check whether this is an embedix kernel 1607 // => Check whether this is an embedix kernel
1601 FILE *uname = popen("uname -r", "r"); 1608 FILE *uname = popen("uname -r", "r");
1602 QString line; 1609 QString line;
1603 if ( f.open(IO_ReadOnly, uname) ) { 1610 if ( f.open(IO_ReadOnly, uname) ) {
1604 QTextStream ts ( &f ); 1611 QTextStream ts ( &f );
1605 line = ts. readLine ( ); 1612 line = ts. readLine ( );
1606 int loc = line. find ( "embedix" ); 1613 int loc = line. find ( "embedix" );
1607 if ( loc != -1 ) 1614 if ( loc != -1 )
1608 m_embedix = true; 1615 m_embedix = true;
1609 else 1616 else
1610 m_embedix = false; 1617 m_embedix = false;
1611 f. close ( ); 1618 f. close ( );
1612 } 1619 }
1613 pclose(uname); 1620 pclose(uname);
1614 } 1621 }
1615 else { 1622 else {
1616 d-> m_systemstr = "Zaurus"; 1623 d-> m_systemstr = "Zaurus";
1617 d-> m_system = System_Zaurus; 1624 d-> m_system = System_Zaurus;
1618 } 1625 }
1619 1626
1620 f. setName ( "/proc/cpuinfo" ); 1627 f. setName ( "/proc/cpuinfo" );
1621 if ( f. open ( IO_ReadOnly ) ) { 1628 if ( f. open ( IO_ReadOnly ) ) {
1622 QTextStream ts ( &f ); 1629 QTextStream ts ( &f );
1623 QString line; 1630 QString line;
1624 while( line = ts. readLine ( ) ) { 1631 while( line = ts. readLine ( ) ) {
1625 if ( line. left ( 8 ) == "Hardware" ) 1632 if ( line. left ( 8 ) == "Hardware" )
1626 break; 1633 break;
1627 } 1634 }
1628 int loc = line. find ( ":" ); 1635 int loc = line. find ( ":" );
1629 if ( loc != -1 ) 1636 if ( loc != -1 )
1630 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1637 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1631 } 1638 }
1632 1639
1633 if ( model == "SHARP Corgi" ) { 1640 if ( model == "SHARP Corgi" ) {
1634 d-> m_model = Model_Zaurus_SLC7x0; 1641 d-> m_model = Model_Zaurus_SLC7x0;
1635 d-> m_modelstr = "Zaurus SL-C700"; 1642 d-> m_modelstr = "Zaurus SL-C700";
1636 } else if ( model == "SHARP Shepherd" ) { 1643 } else if ( model == "SHARP Shepherd" ) {
1637 d-> m_model = Model_Zaurus_SLC7x0; 1644 d-> m_model = Model_Zaurus_SLC7x0;
1638 d-> m_modelstr = "Zaurus SL-C750"; 1645 d-> m_modelstr = "Zaurus SL-C750";
1639 } else if ( model == "SHARP Husky" ) { 1646 } else if ( model == "SHARP Husky" ) {
1640 d-> m_model = Model_Zaurus_SLC7x0; 1647 d-> m_model = Model_Zaurus_SLC7x0;
1641 d-> m_modelstr = "Zaurus SL-C760"; 1648 d-> m_modelstr = "Zaurus SL-C760";
1642 } else if ( model == "SHARP Poodle" ) { 1649 } else if ( model == "SHARP Poodle" ) {
1643 d-> m_model = Model_Zaurus_SLB600; 1650 d-> m_model = Model_Zaurus_SLB600;
1644 d-> m_modelstr = "Zaurus SL-B500 or SL-5600"; 1651 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1645 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 1652 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
1646 d-> m_model = Model_Zaurus_SL5500; 1653 d-> m_model = Model_Zaurus_SL5500;
1647 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d"; 1654 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1648 } else { 1655 } else {
1649 d-> m_model = Model_Zaurus_SL5500; 1656 d-> m_model = Model_Zaurus_SL5500;
1650 d-> m_modelstr = "Zaurus (Model unknown)"; 1657 d-> m_modelstr = "Zaurus (Model unknown)";
1651 } 1658 }
1652 1659
1653 bool flipstate = false; 1660 bool flipstate = false;
1654 switch ( d-> m_model ) { 1661 switch ( d-> m_model ) {
1655 case Model_Zaurus_SLA300: 1662 case Model_Zaurus_SLA300:
1656 d-> m_rotation = Rot0; 1663 d-> m_rotation = Rot0;
1657 break; 1664 break;
1658 case Model_Zaurus_SLC7x0: 1665 case Model_Zaurus_SLC7x0:
1659 d-> m_rotation = rotation(); 1666 d-> m_rotation = rotation();
1660 d-> m_direction = direction(); 1667 d-> m_direction = direction();
1661 break; 1668 break;
1662 case Model_Zaurus_SLB600: 1669 case Model_Zaurus_SLB600:
1663 case Model_Zaurus_SL5500: 1670 case Model_Zaurus_SL5500:
1664 case Model_Zaurus_SL5000: 1671 case Model_Zaurus_SL5000:
1665 default: 1672 default:
1666 d-> m_rotation = Rot270; 1673 d-> m_rotation = Rot270;
1667 break; 1674 break;
1668 } 1675 }
1669 m_leds [0] = Led_Off; 1676 m_leds [0] = Led_Off;
1670} 1677}
1671 1678
1672void Zaurus::initButtons ( ) 1679void Zaurus::initButtons ( )
1673{ 1680{
1674 if ( d-> m_buttons ) 1681 if ( d-> m_buttons )
1675 return; 1682 return;
1676 1683
1677 d-> m_buttons = new QValueList <ODeviceButton>; 1684 d-> m_buttons = new QValueList <ODeviceButton>;
1678 1685
1679 struct z_button * pz_buttons; 1686 struct z_button * pz_buttons;
1680 int buttoncount; 1687 int buttoncount;
1681 switch ( d-> m_model ) { 1688 switch ( d-> m_model ) {
1682 case Model_Zaurus_SLC7x0: 1689 case Model_Zaurus_SLC7x0:
1683 pz_buttons = z_buttons_c700; 1690 pz_buttons = z_buttons_c700;
1684 buttoncount = ARRAY_SIZE(z_buttons_c700); 1691 buttoncount = ARRAY_SIZE(z_buttons_c700);
1685 break; 1692 break;
1686 default: 1693 default:
1687 pz_buttons = z_buttons; 1694 pz_buttons = z_buttons;
1688 buttoncount = ARRAY_SIZE(z_buttons); 1695 buttoncount = ARRAY_SIZE(z_buttons);
1689 break; 1696 break;
1690 } 1697 }
1691 1698
1692 for ( int i = 0; i < buttoncount; i++ ) { 1699 for ( int i = 0; i < buttoncount; i++ ) {
1693 struct z_button *zb = pz_buttons + i; 1700 struct z_button *zb = pz_buttons + i;
1694 ODeviceButton b; 1701 ODeviceButton b;
1695 1702
1696 b. setKeycode ( zb-> code ); 1703 b. setKeycode ( zb-> code );
1697 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1704 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1698 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1705 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1699 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), 1706 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ),
1700 zb-> fpressedaction )); 1707 zb-> fpressedaction ));
1701 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), 1708 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ),
1702 zb-> fheldaction )); 1709 zb-> fheldaction ));
1703 1710
1704 d-> m_buttons-> append ( b ); 1711 d-> m_buttons-> append ( b );
1705 } 1712 }
1706 1713
1707 reloadButtonMapping ( ); 1714 reloadButtonMapping ( );
1708 1715
1709 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1716 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1710 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), 1717 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )),
1711 this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1718 this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1712} 1719}
1713 1720
1714#include <unistd.h> 1721#include <unistd.h>
1715#include <fcntl.h> 1722#include <fcntl.h>
1716#include <sys/ioctl.h> 1723#include <sys/ioctl.h>
1717 1724
1718//#include <asm/sharp_char.h> // including kernel headers is evil ... 1725//#include <asm/sharp_char.h> // including kernel headers is evil ...
1719 1726
1720#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1727#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1721 1728
1722 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1729 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1723#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1730#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1724 1731
1725#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1732#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */