summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
authorkergoth <kergoth>2003-04-20 21:58:05 (UTC)
committer kergoth <kergoth>2003-04-20 21:58:05 (UTC)
commit0da3e7316b90cfa0fd84b0de3c3b92cd3159b4e0 (patch) (unidiff)
tree44ea26ac04180526bc4a5a7c859b6f4bac5609a5 /libopie/odevice.cpp
parent258feac229c2e8b5016670c1edc442e923c58628 (diff)
downloadopie-0da3e7316b90cfa0fd84b0de3c3b92cd3159b4e0.zip
opie-0da3e7316b90cfa0fd84b0de3c3b92cd3159b4e0.tar.gz
opie-0da3e7316b90cfa0fd84b0de3c3b92cd3159b4e0.tar.bz2
Revamp the zaurus model detection to actually work on the C700.
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp41
1 files changed, 23 insertions, 18 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index cb7dd74..d78277f 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -999,297 +999,302 @@ void iPAQ::alarmSound ( )
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 1128
1128 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 )) {
1129 d-> m_vendorstr = "OpenZaurus Team"; 1130 d-> m_vendorstr = "OpenZaurus Team";
1130 d-> m_systemstr = "OpenZaurus"; 1131 d-> m_systemstr = "OpenZaurus";
1131 d-> m_system = System_OpenZaurus; 1132 d-> m_system = System_OpenZaurus;
1132 1133
1133 f. close ( ); 1134 f. close ( );
1134 1135
1135 f. setName ( "/etc/oz_version" ); 1136 f. setName ( "/etc/oz_version" );
1136 if ( f. open ( IO_ReadOnly )) { 1137 if ( f. open ( IO_ReadOnly )) {
1137 QTextStream ts ( &f ); 1138 QTextStream ts ( &f );
1138 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1139 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
1139 f. close ( ); 1140 f. close ( );
1140 } 1141 }
1141 } 1142 }
1142 else { 1143 else {
1143 d-> m_systemstr = "Zaurus"; 1144 d-> m_systemstr = "Zaurus";
1144 d-> m_system = System_Zaurus; 1145 d-> m_system = System_Zaurus;
1145 } 1146 }
1146 1147
1147 f. setName ( "/proc/deviceinfo/product" ); 1148 f. setName ( "/proc/cpuinfo" );
1148 if ( f. open ( IO_ReadOnly ) ) { 1149 if ( f. open ( IO_ReadOnly ) ) {
1149 QTextStream ts ( &f ); 1150 QTextStream ts ( &f );
1150 QString model = ts. readLine ( ); 1151 QString line;
1151 f. close ( ); 1152 while( line = ts. readLine ( ) ) {
1152 1153 if ( line. left ( 8 ) == "Hardware" )
1153 d-> m_modelstr = QString("Zaurus ") + model; 1154 break;
1154 if ( model == "SL-5500" ) 1155 }
1155 d-> m_model = Model_Zaurus_SL5500; 1156 int loc = line. find ( ":" );
1156 else if ( model == "SL-C700" ) 1157 if ( loc != -1 )
1157 d-> m_model = Model_Zaurus_SLC700; 1158 model = line. mid ( loc + 2 ). simplifyWhitespace( );
1158 else if ( model == "SL-A300" )
1159 d-> m_model = Model_Zaurus_SLA300;
1160 else if ( model == "SL-B600" || model == "SL-5600" )
1161 d-> m_model = Model_Zaurus_SLB600;
1162 else
1163 d-> m_model = Model_Zaurus_SL5000;
1164 } 1159 }
1165 else { 1160
1166 d-> m_model = Model_Zaurus_SL5000; 1161 if ( model == "SHARP Corgi" ) {
1167 d-> m_modelstr = "Zaurus (model unknown)"; 1162 d-> m_model = Model_Zaurus_SLC700;
1163 d-> m_modelstr = "Zaurus SL-C700";
1164 } else if ( model == "SHARP Poodle" ) {
1165 d-> m_model = Model_Zaurus_SLB600;
1166 d-> m_modelstr = "Zaurus SL-B500 or SL-5600";
1167 } else if ( model = "Sharp-Collie" ) {
1168 d-> m_model = Model_Zaurus_SL5500;
1169 d-> m_modelstr = "Zaurus SL-5500 or SL-5000d";
1170 } else {
1171 d-> m_model = Model_Zaurus_SL5500;
1172 d-> m_modelstr = "Zaurus (Model unknown)";
1168 } 1173 }
1169 1174
1170 bool flipstate = false; 1175 bool flipstate = false;
1171 switch ( d-> m_model ) { 1176 switch ( d-> m_model ) {
1172 case Model_Zaurus_SLA300: 1177 case Model_Zaurus_SLA300:
1173 d-> m_rotation = Rot0; 1178 d-> m_rotation = Rot0;
1174 break; 1179 break;
1175 case Model_Zaurus_SLC700: 1180 case Model_Zaurus_SLC700:
1176 // Note: need to 1) set flipstate based on physical screen orientation 1181 // Note: need to 1) set flipstate based on physical screen orientation
1177 // 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
1178 // 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
1179 // ensure the rotate applet flips us back to the previous state. 1184 // ensure the rotate applet flips us back to the previous state.
1180 if ( flipstate ) { 1185 if ( flipstate ) {
1181 // 480x640 1186 // 480x640
1182 d-> m_rotation = Rot0; 1187 d-> m_rotation = Rot0;
1183 d-> m_direction = CW; 1188 d-> m_direction = CW;
1184 } else { 1189 } else {
1185 // 640x480 1190 // 640x480
1186 d-> m_rotation = Rot270; 1191 d-> m_rotation = Rot270;
1187 d-> m_direction = CCW; 1192 d-> m_direction = CCW;
1188 } 1193 }
1189 break; 1194 break;
1190 case Model_Zaurus_SLB600: 1195 case Model_Zaurus_SLB600:
1191 case Model_Zaurus_SL5500: 1196 case Model_Zaurus_SL5500:
1192 case Model_Zaurus_SL5000: 1197 case Model_Zaurus_SL5000:
1193 default: 1198 default:
1194 d-> m_rotation = Rot270; 1199 d-> m_rotation = Rot270;
1195 break; 1200 break;
1196 } 1201 }
1197 m_leds [0] = Led_Off; 1202 m_leds [0] = Led_Off;
1198} 1203}
1199 1204
1200void Zaurus::initButtons ( ) 1205void Zaurus::initButtons ( )
1201{ 1206{
1202 if ( d-> m_buttons ) 1207 if ( d-> m_buttons )
1203 return; 1208 return;
1204 1209
1205 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 1210 d-> m_qwsserver = qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
1206 1211
1207 d-> m_buttons = new QValueList <ODeviceButton>; 1212 d-> m_buttons = new QValueList <ODeviceButton>;
1208 1213
1209 struct z_button * pz_buttons; 1214 struct z_button * pz_buttons;
1210 int buttoncount; 1215 int buttoncount;
1211 switch ( d-> m_model ) { 1216 switch ( d-> m_model ) {
1212 case Model_Zaurus_SLC700: 1217 case Model_Zaurus_SLC700:
1213 pz_buttons = z_buttons_c700; 1218 pz_buttons = z_buttons_c700;
1214 buttoncount = ARRAY_SIZE(z_buttons_c700); 1219 buttoncount = ARRAY_SIZE(z_buttons_c700);
1215 break; 1220 break;
1216 default: 1221 default:
1217 pz_buttons = z_buttons; 1222 pz_buttons = z_buttons;
1218 buttoncount = ARRAY_SIZE(z_buttons); 1223 buttoncount = ARRAY_SIZE(z_buttons);
1219 break; 1224 break;
1220 } 1225 }
1221 1226
1222 for ( int i = 0; i < buttoncount; i++ ) { 1227 for ( int i = 0; i < buttoncount; i++ ) {
1223 struct z_button *zb = pz_buttons + i; 1228 struct z_button *zb = pz_buttons + i;
1224 ODeviceButton b; 1229 ODeviceButton b;
1225 1230
1226 b. setKeycode ( zb-> code ); 1231 b. setKeycode ( zb-> code );
1227 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1232 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1228 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1233 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1229 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction )); 1234 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction ));
1230 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction )); 1235 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction ));
1231 1236
1232 d-> m_buttons-> append ( b ); 1237 d-> m_buttons-> append ( b );
1233 } 1238 }
1234 1239
1235 reloadButtonMapping ( ); 1240 reloadButtonMapping ( );
1236 1241
1237 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1242 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1238 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 & )));
1239} 1244}
1240 1245
1241#include <unistd.h> 1246#include <unistd.h>
1242#include <fcntl.h> 1247#include <fcntl.h>
1243#include <sys/ioctl.h> 1248#include <sys/ioctl.h>
1244 1249
1245//#include <asm/sharp_char.h> // including kernel headers is evil ... 1250//#include <asm/sharp_char.h> // including kernel headers is evil ...
1246 1251
1247#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 1252#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
1248 1253
1249 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1254 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1250#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1255#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1251 1256
1252#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1257#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1253#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1258#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1254#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1259#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1255 1260
1256/* --- for SHARP_BUZZER device --- */ 1261/* --- for SHARP_BUZZER device --- */
1257 1262
1258 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1263 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1259//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 1264//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
1260 1265
1261#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 1266#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
1262#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 1267#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
1263#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 1268#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
1264#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 1269#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
1265#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 1270#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
1266 1271
1267//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 1272//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
1268//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 1273//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
1269 1274
1270//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 1275//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
1271//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 1276//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
1272//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 1277//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
1273//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 1278//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
1274//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 1279//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
1275//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 1280//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
1276//#define SHARP_PDA_APPSTART 9 /* application start */ 1281//#define SHARP_PDA_APPSTART 9 /* application start */
1277//#define SHARP_PDA_APPQUIT 10 /* application ends */ 1282//#define SHARP_PDA_APPQUIT 10 /* application ends */
1278 1283
1279//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 1284//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
1280//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 1285//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
1281//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 1286//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
1282//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 1287//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
1283// 1288//
1284 1289
1285 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 1290 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
1286#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 1291#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
1287 1292
1288typedef struct sharp_led_status { 1293typedef struct sharp_led_status {
1289 int which; /* select which LED status is wanted. */ 1294 int which; /* select which LED status is wanted. */
1290 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 */
1291} sharp_led_status; 1296} sharp_led_status;
1292 1297
1293#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 1298#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
1294 1299
1295#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 */