author | sandman <sandman> | 2002-06-18 12:46:11 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-06-18 12:46:11 (UTC) |
commit | 61e2f9e5eb634b17ef480d79bdbcbc3a715990cb (patch) (side-by-side diff) | |
tree | 013600ee0ababcc25f37ff98cede8f67cbdc9d2a | |
parent | e21322ab34a8df36344eece685e604abe4f83fc6 (diff) | |
download | opie-61e2f9e5eb634b17ef480d79bdbcbc3a715990cb.zip opie-61e2f9e5eb634b17ef480d79bdbcbc3a715990cb.tar.gz opie-61e2f9e5eb634b17ef480d79bdbcbc3a715990cb.tar.bz2 |
Moved platform specific things from custom-*.h #defines to virtual methods
in libopie/odevice.{h,cpp}
Minor fix in Sound + reformating
-rw-r--r-- | library/custom-ipaq.h | 60 | ||||
-rw-r--r-- | library/custom-sharp.h | 53 | ||||
-rw-r--r-- | library/sound.cpp | 63 |
3 files changed, 34 insertions, 142 deletions
diff --git a/library/custom-ipaq.h b/library/custom-ipaq.h index 2886940..553b571 100644 --- a/library/custom-ipaq.h +++ b/library/custom-ipaq.h @@ -1,80 +1,20 @@ /********************************************************************** ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** ** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ -#include <unistd.h> -#include <stdio.h> -#include <signal.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <linux/soundcard.h> -#include <qpe/resource.h> -#include <qsound.h> -#include <qpe/sound.h> - - -#ifndef QT_NO_SOUND - -#define CUSTOM_SOUND_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 ( ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) \ - vol_reset = true; \ - } \ - } \ - \ - Sound snd ( "alarm" ); \ - snd. play ( ); \ - while ( !snd. isFinished ( )) \ - qApp-> processEvents ( ); \ - \ - if ( fd >= 0 ) { \ - if ( vol_reset ) \ - ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); \ - ::close ( fd ); \ - } \ -} - -#define CUSTOM_SOUND_KEYCLICK { QSound::play ( Resource::findSound ( "keysound" )); } -#define CUSTOM_SOUND_TOUCH { QSound::play ( Resource::findSound ( "screensound" )); } - -#else - -#define CUSTOM_SOUND_ALARM { ; } -#define CUSTOM_SOUND_KEYCLICK { ; } -#define CUSTOM_SOUND_TOUCH { ; } - - -#endif diff --git a/library/custom-sharp.h b/library/custom-sharp.h index 08f8a6f..3dab34f 100644 --- a/library/custom-sharp.h +++ b/library/custom-sharp.h @@ -1,150 +1,97 @@ /********************************************************************** ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** ** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #define QPE_OWNAPM #define QPE_HAVE_TOGGLELIGHT #define QPE_NOCIBAUD #define QPE_STARTMENU #include <asm/sharp_apm.h> #ifndef APM_IOC_BATTERY_BACK_CHK #define APM_IOC_BATTERY_BACK_CHK _IO(APM_IOC_MAGIC, 32) #endif #ifndef APM_IOC_BATTERY_MAIN_CHK #define APM_IOC_BATTERY_MAIN_CHK _IO(APM_IOC_MAGIC, 33) #endif #include <unistd.h> #include <stdio.h> #include <signal.h> #include <fcntl.h> #include <sys/ioctl.h> -#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 - -/* --- for SHARP_BUZZER device --- */ -#define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) -#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) -#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) -#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) -#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) -#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) -#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) - -#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ -#define SHARP_BUZ_KEYSOUND 2 /* key sound */ -#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ -#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ -#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ -#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ -#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ -#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ -#define SHARP_PDA_APPSTART 9 /* application start */ -#define SHARP_PDA_APPQUIT 10 /* application ends */ -#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ -#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ -#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ -#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ - - -#define CUSTOM_BUZZER( sound ) \ -{ \ - static int fd = open( "/dev/sharp_buz", O_RDWR|O_NONBLOCK ); \ - ioctl( fd, SHARP_BUZZER_MAKESOUND, sound ); \ -} - -#define CUSTOM_SOUND_ALARM CUSTOM_BUZZER( SHARP_BUZ_SCHEDULE_ALARM ) -#define CUSTOM_SOUND_KEYCLICK CUSTOM_BUZZER( SHARP_BUZ_KEYSOUND ) -#define CUSTOM_SOUND_TOUCH CUSTOM_BUZZER( SHARP_BUZ_TOUCHSOUND ) - #include <sys/ioctl.h> #include <asm/sharp_char.h> -// a bit awkward, as this value is defined in emailclient.cpp aswell... -#define LED_MAIL 0 -#define SHARP_LED_MAIL 9 - -#define CUSTOM_LEDS( led, status ) \ -{ \ - if ( led == LED_MAIL ) \ - led = SHARP_LED_MAIL; \ - static int fd = open( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); \ - sharp_led_status leds; \ - memset(&leds, 0, sizeof(leds)); \ - leds.which = led; \ - leds.status = status; \ - ioctl( fd, SHARP_LED_SETSTATUS, (char*)&leds ); \ -} - #define QPE_HAVE_MEMALERTER #define QPE_MEMALERTER_IMPL \ static void sig_handler(int sig) \ { \ switch (sig) { \ case SIGHUP: \ memstate = VeryLow; \ break; \ case SIGUSR1: \ memstate = Normal; \ break; \ case SIGUSR2: \ memstate = Low; \ break; \ } \ } \ static void initMemalerter() \ { \ struct sigaction sa; \ memset(&sa, '\0', sizeof sa); \ sa.sa_handler = sig_handler; \ sa.sa_flags = SA_RESTART; \ if (sigaction(SIGHUP, &sa, NULL) < 0) { \ return; \ } \ if (sigaction(SIGUSR1, &sa, NULL) < 0) { \ return; \ } \ if (sigaction(SIGUSR2, &sa, NULL) < 0) { \ return; \ } \ FILE *fo = fopen("/proc/sys/vm/freepg_signal_proc", "w"); \ \ if (!fo) \ return; \ fprintf(fo, "qpe\n"); \ fclose(fo); \ } #define QPE_INITIAL_NUMLOCK_STATE \ { \ bool numLock = FALSE; \ sharp_kbdctl_modifstat st; \ int dev = ::open("/dev/sharp_kbdctl", O_RDWR); \ if( dev >= 0 ) { \ memset(&st, 0, sizeof(st)); \ st.which = 3; \ int ret = ioctl(dev, SHARP_KBDCTL_GETMODIFSTAT, (char*)&st); \ if( !ret ) \ numLock = (bool)st.stat; \ ::close(dev); \ } \ return numLock; \ } diff --git a/library/sound.cpp b/library/sound.cpp index 602fcf0..1ff3b3f 100644 --- a/library/sound.cpp +++ b/library/sound.cpp @@ -41,153 +41,158 @@ static int WAVsoundDuration(const QString& filename) QFile input(filename); if ( !input.open(IO_ReadOnly) ) return 0; struct QRiffChunk { char id[4]; Q_UINT32 size; char data[4/*size*/]; } chunk; struct { Q_INT16 formatTag; Q_INT16 channels; Q_INT32 samplesPerSec; Q_INT32 avgBytesPerSec; Q_INT16 blockAlign; Q_INT16 wBitsPerSample; } chunkdata; int total = 0; while(1) { // Keep reading chunks... const int n = sizeof(chunk)-sizeof(chunk.data); if ( input.readBlock((char*)&chunk,n) != n ) break; if ( qstrncmp(chunk.id,"data",4) == 0 ) { total += chunkdata.avgBytesPerSec ? chunk.size * 1000 / chunkdata.avgBytesPerSec : 0; //qDebug("%d bytes of PCM (%dms)", chunk.size,chunkdata.avgBytesPerSec ? chunk.size * 1000 / chunkdata.avgBytesPerSec : 0); input.at(input.at()+chunk.size-4); } else if ( qstrncmp(chunk.id,"RIFF",4) == 0 ) { char d[4]; if ( input.readBlock(d,4) != 4 ) return 0; if ( qstrncmp(d,"WAVE",4) != 0 ) { // skip //qDebug("skip %.4s RIFF chunk",d); if ( chunk.size < 10000000 ) (void)input.at(input.at()+chunk.size-4); } } else if ( qstrncmp(chunk.id,"fmt ",4) == 0 ) { if ( input.readBlock((char*)&chunkdata,sizeof(chunkdata)) != sizeof(chunkdata) ) return 0; #define WAVE_FORMAT_PCM 1 if ( chunkdata.formatTag != WAVE_FORMAT_PCM ) { //qDebug("WAV file: UNSUPPORTED FORMAT %d",chunkdata.formatTag); return 0; } } else { //qDebug("skip %.4s chunk",chunk.id); // ignored chunk if ( chunk.size < 10000000 ) (void)input.at(input.at()+chunk.size); } } //qDebug("%dms",total); return total; } class SoundData : public QSound { public: - SoundData(const QString& name) : - QSound(Resource::findSound(name)), - filename(Resource::findSound(name)) - { - loopsleft=0; - } + SoundData ( const QString& name ) : + QSound ( Resource::findSound ( name )), + filename ( Resource::findSound ( name )) + { + loopsleft=0; + ms = WAVsoundDuration(filename); + } - void playLoop(int loopcnt = -1) - { - // needs server support - loopsleft = loopcnt; + void playLoop ( int loopcnt = -1 ) + { + // needs server support + loopsleft = loopcnt; - int ms = WAVsoundDuration(filename); - if ( ms ) - startTimer(ms > 50 ? ms-50 : 0); // 50 for latency - play(); - } + if ( ms ) + startTimer ( ms > 50 ? ms-50 : 0 ); // 50 for latency + play ( ); + } void timerEvent ( QTimerEvent *e ) { - if (loopsleft >= 0) { - if (--loopsleft <= 0) - killTimer (e->timerId()); - return; - } - play(); - } + if ( loopsleft >= 0 ) { + if ( --loopsleft <= 0 ) { + killTimer ( e-> timerId ( )); + loopsleft = 0; + return; + } + } + play(); + } - bool isFinished ( ) const - { - return ( loopsleft == 0 ); - } + bool isFinished ( ) const + { + return ( loopsleft == 0 ); + } private: - QString filename; - int loopsleft; + QString filename; + int loopsleft; + int ms; }; + #endif Sound::Sound(const QString& name) { #ifndef QT_NO_SOUND d = new SoundData(name); #endif } Sound::~Sound() { #ifndef QT_NO_SOUND delete d; #endif } void Sound::play() { #ifndef QT_NO_SOUND - d->killTimers(); d->playLoop(1); #endif } void Sound::playLoop() { #ifndef QT_NO_SOUND d->killTimers(); d->playLoop(); #endif } void Sound::stop() { #ifndef QT_NO_SOUND d->killTimers(); #endif } bool Sound::isFinished() const { #ifndef QT_NO_SOUND return d->isFinished(); +#else + return true; #endif } void Sound::soundAlarm() { #ifndef QT_NO_COP QCopEnvelope( "QPE/TaskBar", "soundAlarm()" ); #endif } |