summaryrefslogtreecommitdiff
authorsandman <sandman>2002-06-18 12:44:05 (UTC)
committer sandman <sandman>2002-06-18 12:44:05 (UTC)
commite21322ab34a8df36344eece685e604abe4f83fc6 (patch) (side-by-side diff)
tree199bf3f1b70b7d364d5ad836e01789ab6ce87d70
parent714133d7f0e2a0dafe55b280f93915765fc67fe3 (diff)
downloadopie-e21322ab34a8df36344eece685e604abe4f83fc6.zip
opie-e21322ab34a8df36344eece685e604abe4f83fc6.tar.gz
opie-e21322ab34a8df36344eece685e604abe4f83fc6.tar.bz2
Reimplemented OHwInfo as ODevice with enhanced capabilities
ODevice should replace custom-*.h in the future (iPAQ is finished)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/libopie.pro4
-rw-r--r--libopie/odevice.cpp469
-rw-r--r--libopie/odevice.h107
-rw-r--r--libopie/ohwinfo.cpp84
-rw-r--r--libopie/ohwinfo.h48
5 files changed, 578 insertions, 134 deletions
diff --git a/libopie/libopie.pro b/libopie/libopie.pro
index 49a7f49..d1cbe3e 100644
--- a/libopie/libopie.pro
+++ b/libopie/libopie.pro
@@ -2,4 +2,4 @@ TEMPLATE = lib
CONFIG += qte warn_on release
-HEADERS = ofontmenu.h ofileselector.h ofiledialog.h ofileview.h tododb.h todoevent.h todoresource.h todovcalresource.h xmltree.h colordialog.h colorpopupmenu.h oclickablelabel.h oprocctrl.h oprocess.h ohwinfo.h
-SOURCES = ofontmenu.cc ofileselector.cc ofiledialog.cc xmltree.cc tododb.cpp todoevent.cpp todovcalresource.cpp colordialog.cpp colorpopupmenu.cpp oclickablelabel.cpp oprocctrl.cpp oprocess.cpp ohwinfo.cpp
+HEADERS = ofontmenu.h ofileselector.h ofiledialog.h ofileview.h tododb.h todoevent.h todoresource.h todovcalresource.h xmltree.h colordialog.h colorpopupmenu.h oclickablelabel.h oprocctrl.h oprocess.h odevice.h
+SOURCES = ofontmenu.cc ofileselector.cc ofiledialog.cc xmltree.cc tododb.cpp todoevent.cpp todovcalresource.cpp colordialog.cpp colorpopupmenu.cpp oclickablelabel.cpp oprocctrl.cpp oprocess.cpp odevice.cpp
TARGET = opie
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
new file mode 100644
index 0000000..d952edf
--- a/dev/null
+++ b/libopie/odevice.cpp
@@ -0,0 +1,469 @@
+/* This file is part of the OPIE libraries
+ Copyright (C) 2002 Robert Griebl (sandman@handhelds.org)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#include <qfile.h>
+#include <qtextstream.h>
+
+
+#include "odevice.h"
+
+
+class ODeviceData {
+public:
+ QString m_vendorstr;
+ OVendor m_vendor;
+
+ QString m_modelstr;
+ OModel m_model;
+
+ QString m_systemstr;
+ OSystem m_system;
+
+ OLedState m_leds [4]; // just for convenience ...
+};
+
+class ODeviceIPAQ : public ODevice {
+protected:
+ virtual void init ( );
+
+public:
+ virtual void alarmSound ( );
+ virtual void keySound ( );
+ virtual void touchSound ( );
+
+ virtual uint hasLeds ( ) const;
+ virtual OLedState led ( uint which ) const;
+ virtual bool setLed ( uint which, OLedState st );
+};
+
+class ODeviceZaurus : public ODevice {
+protected:
+ virtual void init ( );
+
+public:
+ virtual void alarmSound ( );
+ virtual void keySound ( );
+ virtual void touchSound ( );
+
+ virtual uint hasLeds ( ) const;
+ virtual OLedState led ( uint which ) const;
+ virtual bool setLed ( uint which, OLedState st );
+
+protected:
+ virtual void buzzer ( int snd );
+};
+
+
+
+
+
+
+
+ODevice *ODevice::inst ( )
+{
+ static ODevice *dev = 0;
+
+ if ( !dev ) {
+ if ( QFile::exists ( "/proc/hal/model" ))
+ dev = new ODeviceIPAQ ( );
+ else if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ))
+ dev = new ODeviceZaurus ( );
+ else
+ dev = new ODevice ( );
+
+ dev-> init ( );
+ }
+ return dev;
+}
+
+ODevice::ODevice ( )
+{
+ d = new ODeviceData;
+
+ d-> m_modelstr = "Unknown";
+ d-> m_model = OMODEL_Unknown;
+ d-> m_vendorstr = "Unkown";
+ d-> m_vendor = OVENDOR_Unknown;
+ d-> m_systemstr = "Unkown";
+ d-> m_system = OSYSTEM_Unknown;
+}
+
+void ODevice::init ( )
+{
+}
+
+ODevice::~ODevice ( )
+{
+ delete d;
+}
+
+QString ODevice::vendorString ( )
+{
+ return d-> m_vendorstr;
+}
+
+OVendor ODevice::vendor ( )
+{
+ return d-> m_vendor;
+}
+
+QString ODevice::modelString ( )
+{
+ return d-> m_modelstr;
+}
+
+OModel ODevice::model ( )
+{
+ return d-> m_model;
+}
+
+QString ODevice::systemString ( )
+{
+ return d-> m_systemstr;
+}
+
+OSystem ODevice::system ( )
+{
+ return d-> m_system;
+}
+
+void ODevice::alarmSound ( )
+{
+}
+
+void ODevice::keySound ( )
+{
+}
+
+void ODevice::touchSound ( )
+{
+}
+
+uint ODevice::hasLeds ( ) const
+{
+ return 0;
+}
+
+OLedState ODevice::led ( uint /*which*/ ) const
+{
+ return OLED_Off;
+}
+
+bool ODevice::setLed ( uint /*which*/, OLedState /*st*/ )
+{
+ return false;
+}
+
+
+
+
+//#if defined( QT_QWS_IPAQ ) // IPAQ
+
+
+void ODeviceIPAQ::init ( )
+{
+ d-> m_vendorstr = "HP";
+ d-> m_vendor = OVENDOR_HP;
+
+ QFile f ( "/proc/hal/model" );
+
+ if ( f. open ( IO_ReadOnly )) {
+ QTextStream ts ( &f );
+
+ d-> m_modelstr = "H" + ts. readLine ( );
+
+ if ( d-> m_modelstr == "H3100" )
+ d-> m_model = OMODEL_iPAQ_H31xx;
+ else if ( d-> m_modelstr == "H3600" )
+ d-> m_model = OMODEL_iPAQ_H36xx;
+ else if ( d-> m_modelstr == "H3700" )
+ d-> m_model = OMODEL_iPAQ_H37xx;
+ else if ( d-> m_modelstr == "H3800" )
+ d-> m_model = OMODEL_iPAQ_H38xx;
+ else
+ d-> m_model = OMODEL_Unknown;
+
+ f. close ( );
+ }
+
+ if ( QFile::exists ( "/etc/familiar-version" )) {
+ d-> m_systemstr = "Familiar";
+ d-> m_system = OSYSTEM_Familiar;
+ }
+
+ d-> m_leds [0] = OLED_Off;
+}
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/soundcard.h>
+#include <qapplication.h>
+#include <qpe/resource.h>
+#include <qpe/config.h>
+#include <qpe/sound.h>
+
+//#include <linux/h3600_ts.h> // including kernel headers is evil ...
+
+typedef struct h3600_ts_led {
+ unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
+ unsigned char TotalTime; /* Units of 5 seconds */
+ unsigned char OnTime; /* units of 100m/s */
+ unsigned char OffTime; /* units of 100m/s */
+} LED_IN;
+
+
+// #define IOC_H3600_TS_MAGIC 'f'
+// #define LED_ON _IOW(IOC_H3600_TS_MAGIC, 5, struct h3600_ts_led)
+#define LED_ON (( 1<<30 ) | ( 'f'<<8 ) | ( 5 ) | ( sizeof(struct h3600_ts_led)<<16 )) // _IOW only defined in kernel headers :(
+
+
+void ODeviceIPAQ::alarmSound ( )
+{
+#ifndef QT_NO_SOUND
+ static Sound snd ( "alarm" );
+ int fd;
+ int vol;
+ bool vol_reset = false;
+
+ if ((( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) ||
+ (( fd = ::open ( "/dev/mixer", O_RDWR )) >= 0 )) {
+
+ if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
+ Config cfg ( "qpe" );
+ cfg. setGroup ( "Volume" );
+
+ int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
+ if ( volalarm < 0 )
+ volalarm = 0;
+ else if ( volalarm > 100 )
+ volalarm = 100;
+ volalarm |= ( volalarm << 8 );
+
+ if (( volalarm & 0xff ) > ( vol & 0xff )) {
+ if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
+ vol_reset = true;
+ }
+ }
+ }
+
+ snd. play ( );
+ while ( !snd. isFinished ( ))
+ qApp-> processEvents ( );
+
+ if ( fd >= 0 ) {
+ if ( vol_reset )
+ ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
+ ::close ( fd );
+ }
+#endif
+}
+
+void ODeviceIPAQ::touchSound ( )
+{
+#ifndef QT_NO_SOUND
+ static Sound snd ( "touchsound" );
+
+ if ( snd. isFinished ( ))
+ snd. play ( );
+#endif
+}
+
+void ODeviceIPAQ::keySound ( )
+{
+#ifndef QT_NO_SOUND
+ static Sound snd ( "keysound" );
+
+ if ( snd. isFinished ( ))
+ snd. play ( );
+#endif
+}
+
+
+uint ODeviceIPAQ::hasLeds ( ) const
+{
+ return 1;
+}
+
+OLedState ODeviceIPAQ::led ( uint which ) const
+{
+ if ( which == 0 )
+ return d-> m_leds [0];
+ else
+ return OLED_Off;
+}
+
+bool ODeviceIPAQ::setLed ( uint which, OLedState st )
+{
+ static int fd = ::open ( "/dev/touchscreen/0", O_RDWR|O_NONBLOCK );
+
+ if ( which == 0 ) {
+ if ( fd >= 0 ) {
+ struct h3600_ts_led leds;
+ ::memset ( &leds, 0, sizeof( leds ));
+ leds. TotalTime = 0;
+ leds. OnTime = 0;
+ leds. OffTime = 1;
+ leds. OffOnBlink = 2;
+
+ switch ( st ) {
+ case OLED_Off : leds. OffOnBlink = 0; break;
+ case OLED_On : leds. OffOnBlink = 1; break;
+ case OLED_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
+ case OLED_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
+ }
+
+ if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
+ d-> m_leds [0] = st;
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
+//#endif
+
+
+
+
+
+//#if defined( QT_QWS_CUSTOM ) // Zaurus
+
+void ODeviceZaurus::init ( )
+{
+ d-> m_modelstr = "Zaurus SL5000";
+ d-> m_model = OMODEL_Zaurus_SL5000;
+ d-> m_vendorstr = "Sharp";
+ d-> m_vendor = OVENDOR_Sharp;
+
+ QFile f ( "/proc/filesystems" );
+
+ if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read ( ). find ( "\tjffs2\n" ) >= 0 )) {
+ d-> m_systemstr = "OpenZaurus";
+ d-> m_system = OSYSTEM_OpenZaurus;
+
+ f. close ( );
+ }
+ else {
+ d-> m_systemstr = "Zaurus";
+ d-> m_system = OSYSTEM_Zaurus;
+ }
+
+ d-> m_leds [0] = OLED_Off;
+}
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+
+//#include <asm/sharp_char.h> // including kernel headers is evil ...
+
+#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
+
+#define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
+#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
+
+#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
+#define SHARP_BUZ_KEYSOUND 2 /* key sound */
+#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
+
+
+#define SHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
+#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
+
+typedef struct sharp_led_status {
+ int which; /* select which LED status is wanted. */
+ int status; /* set new led status if you call SHARP_LED_SETSTATUS */
+} sharp_led_status;
+
+#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
+
+#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
+#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
+#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
+
+
+
+void ODeviceZaurus::buzzer ( int sound )
+{
+ static int fd = ::open ( "/dev/sharp_buz", O_RDWR|O_NONBLOCK );
+
+ if ( fd >= 0 )
+ ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
+}
+
+
+void ODeviceZaurus::alarmSound ( )
+{
+ buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
+}
+
+void ODeviceZaurus::touchSound ( )
+{
+ buzzer ( SHARP_BUZ_TOUCHSOUND );
+}
+
+void ODeviceZaurus::keySound ( )
+{
+ buzzer ( SHARP_BUZ_KEYSOUND );
+}
+
+
+uint ODeviceZaurus::hasLeds ( ) const
+{
+ return 1;
+}
+
+OLedState ODeviceZaurus::led ( uint which ) const
+{
+ if ( which == 0 )
+ return d-> m_leds [0];
+ else
+ return OLED_Off;
+}
+
+bool ODeviceZaurus::setLed ( uint which, OLedState st )
+{
+ static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
+
+ if ( which == 0 ) {
+ if ( fd >= 0 ) {
+ struct sharp_led_status leds;
+ ::memset ( &leds, 0, sizeof( leds ));
+ leds. which = SHARP_LED_MAIL_EXISTS;
+
+ switch ( st ) {
+ case OLED_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
+ case OLED_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
+ case OLED_BlinkSlow:
+ case OLED_BlinkFast: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
+ }
+
+ if ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 ) {
+ d-> m_leds [0] = st;
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+//#endif
diff --git a/libopie/odevice.h b/libopie/odevice.h
new file mode 100644
index 0000000..793becc
--- a/dev/null
+++ b/libopie/odevice.h
@@ -0,0 +1,107 @@
+/* This file is part of the OPIE libraries
+ Copyright (C) 2002 Robert Griebl (sandman@handhelds.org)
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+*/
+
+#ifndef _LIBOPIE_ODEVICE_H_
+#define _LIBOPIE_ODEVICE_H_
+
+#include <qstring.h>
+
+
+class ODeviceData;
+
+enum OModel {
+ OMODEL_Unknown,
+
+ OMODEL_iPAQ_H31xx,
+ OMODEL_iPAQ_H36xx,
+ OMODEL_iPAQ_H37xx,
+ OMODEL_iPAQ_H38xx,
+
+ OMODEL_Zaurus_SL5000
+};
+
+enum OVendor {
+ OVENDOR_Unknown,
+
+ OVENDOR_HP,
+ OVENDOR_Sharp,
+};
+
+enum OSystem {
+ OSYSTEM_Unknown,
+
+ OSYSTEM_Familiar,
+ OSYSTEM_Zaurus,
+ OSYSTEM_OpenZaurus
+};
+
+enum OLedState {
+ OLED_Off,
+ OLED_On,
+ OLED_BlinkSlow,
+ OLED_BlinkFast
+};
+
+
+class ODevice
+{
+public:
+
+public:
+ static ODevice *inst ( );
+
+
+// information
+
+ QString modelString ( );
+ OModel model ( );
+
+ QString vendorString ( );
+ OVendor vendor ( );
+
+ QString systemString ( );
+ OSystem system ( );
+
+
+// input / output
+
+ virtual void alarmSound ( );
+ virtual void keySound ( );
+ virtual void touchSound ( );
+
+ virtual uint hasLeds ( ) const;
+ virtual OLedState led ( uint which ) const;
+ virtual bool setLed ( uint which, OLedState st );
+
+ virtual ~ODevice ( );
+
+protected:
+ ODevice ( );
+ virtual void init ( );
+
+ ODeviceData *d;
+
+private:
+ ODevice ( const ODevice & );
+
+};
+
+#endif
+
+
diff --git a/libopie/ohwinfo.cpp b/libopie/ohwinfo.cpp
deleted file mode 100644
index 30c47c8..0000000
--- a/libopie/ohwinfo.cpp
+++ b/dev/null
@@ -1,84 +0,0 @@
-#include <qfile.h>
-#include <qtextstream.h>
-
-#include "ohwinfo.h"
-
-
-struct OHwInfoData {
- QString m_vendorstr;
- OHwVendor m_vendor;
-
- QString m_modelstr;
- OHwModel m_model;
-};
-
-
-OHwInfo *OHwInfo::inst ( )
-{
- static OHwInfo *inf = 0;
-
- if ( !inf ) {
- inf = new OHwInfo ( );
- }
- return inf;
-}
-
-OHwInfo::OHwInfo ( )
-{
- m_data = new OHwInfoData ( );
-
- QFile f ( "/proc/hal/model" );
-
- if ( f. open ( IO_ReadOnly )) {
- QTextStream ts ( &f );
- m_data-> m_modelstr = "H" + ts. readLine ( );
-
- if ( m_data-> m_modelstr == "H3100" )
- m_data-> m_model = OMODEL_iPAQ_H31xx;
- else if ( m_data-> m_modelstr == "H3600" )
- m_data-> m_model = OMODEL_iPAQ_H36xx;
- else if ( m_data-> m_modelstr == "H3700" )
- m_data-> m_model = OMODEL_iPAQ_H37xx;
- else if ( m_data-> m_modelstr == "H3800" )
- m_data-> m_model = OMODEL_iPAQ_H38xx;
- else
- m_data-> m_model = OMODEL_Unknown;
-
- m_data-> m_vendorstr = "HP";
- m_data-> m_vendor = OVENDOR_HP;
-
- f. close ( );
- }
- else {
- m_data-> m_modelstr = "Unknown";
- m_data-> m_model = OMODEL_Unknown;
- m_data-> m_vendorstr = "Unkown";
- m_data-> m_vendor = OVENDOR_Unknown;
- }
-}
-
-OHwInfo::~OHwInfo ( )
-{
- delete m_data;
-}
-
-QString OHwInfo::vendorString ( )
-{
- return m_data-> m_vendorstr;
-}
-
-OHwVendor OHwInfo::vendor ( )
-{
- return m_data-> m_vendor;
-}
-
-QString OHwInfo::modelString ( )
-{
- return m_data-> m_modelstr;
-}
-
-OHwModel OHwInfo::model ( )
-{
- return m_data-> m_model;
-}
-
diff --git a/libopie/ohwinfo.h b/libopie/ohwinfo.h
deleted file mode 100644
index e2106f3..0000000
--- a/libopie/ohwinfo.h
+++ b/dev/null
@@ -1,48 +0,0 @@
-#ifndef _LIBOPIE_OHWINFO_H_
-#define _LIBOPIE_OHWINFO_H_
-
-#include <qstring.h>
-
-enum OHwModel {
- OMODEL_Unknown,
-
- OMODEL_iPAQ_H31xx,
- OMODEL_iPAQ_H36xx,
- OMODEL_iPAQ_H37xx,
- OMODEL_iPAQ_H38xx,
-
- OMODEL_Zaurus_SL5000
-};
-
-enum OHwVendor {
- OVENDOR_Unknown,
-
- OVENDOR_HP,
- OVENDOR_Sharp,
-};
-
-class OHwInfoData;
-
-
-class OHwInfo
-{
-public:
- static OHwInfo *inst ( );
-
- QString modelString ( );
- OHwModel model ( );
-
- QString vendorString ( );
- OHwVendor vendor ( );
-
- virtual ~OHwInfo ( );
-
-private:
- OHwInfo ( );
- OHwInfo ( const OHwInfo & );
-
- OHwInfoData *m_data;
-};
-
-#endif
-