Diffstat (limited to 'noncore/multimedia/opierec/device.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/multimedia/opierec/device.cpp | 220 |
1 files changed, 61 insertions, 159 deletions
diff --git a/noncore/multimedia/opierec/device.cpp b/noncore/multimedia/opierec/device.cpp index cb47b77..e7e0f4b 100644 --- a/noncore/multimedia/opierec/device.cpp +++ b/noncore/multimedia/opierec/device.cpp @@ -5,6 +5,8 @@ #include <qpe/config.h> #include <qpe/qcopenvelope_qws.h> +#include <opie2/odebug.h> + /* STD */ #include <fcntl.h> #include <stdio.h> @@ -17,27 +19,52 @@ #include <errno.h> //extern QtRec *qperec; +#if defined(QT_QWS_SL5XXX) +///#if defined(QT_QWS_EBX) + +#define DSPSTROUT "/dev/dsp" +#define DSPSTRMIXEROUT "/dev/mixer" + +#ifdef SHARP +#define DSPSTRIN "/dev/dsp1" +#define DSPSTRMIXERIN "/dev/mixer1" +#else +#define DSPSTRIN "/dev/dsp" +#define DSPSTRMIXERIN "/dev/mixer" +#endif + +#else + +#ifdef QT_QWS_DEVFS +#define DSPSTROUT "/dev/sound/dsp" +#define DSPSTRIN "/dev/sound/dsp" +#define DSPSTRMIXERIN "/dev/sound/mixer" +#define DSPSTRMIXEROUT "/dev/sound/mixer" +#else +#define DSPSTROUT "/dev/dsp" +#define DSPSTRIN "/dev/dsp" +#define DSPSTRMIXERIN "/dev/mixer" +#define DSPSTRMIXEROUT "/dev/mixer" +#endif + +#endif -Device::Device( QObject * parent, const char * dsp, const char * mixr, bool record ) +Device::Device( QObject * parent, bool record ) : QObject( parent) { - dspstr = (char *)dsp; - mixstr = (char *)mixr; - +// dspstr = dsp; devForm=-1; devCh=-1; devRate=-1; if( !record){ //playing - qDebug( "setting up DSP for playing" ); + owarn << "setting up DSP for playing" << oendl; flags = O_WRONLY; } else { //recording - qDebug( "setting up DSP for recording" ); + owarn << "setting up DSP for recording" << oendl; flags = O_RDWR; // flags = O_RDONLY; - -// selectMicInput(); - + selectMicInput(); } } @@ -50,22 +77,9 @@ bool Device::openDsp() { } int Device::openDevice( int flags) { -/* pid_t pid; - int status; - int pipefd[2]; - char message[20]; - if (pipe(pipefd) == -1){ - perror ("Error creating pipe"); -exit(1); - } - switch (pid = fork()) { - case -1: - perror("The fork failed!"); - break; - case 0: { - */ -qDebug( "Opening %s",dspstr); - if (( sd = ::open( dspstr, flags)) == -1) { + owarn << "Opening"<< dspstr; + + if (( sd = ::open( DSPSTROUT, flags)) == -1) { perror("open(\"/dev/dsp\")"); QString errorMsg="Could not open audio device\n /dev/dsp\n" +(QString)strerror(errno); @@ -73,153 +87,58 @@ qDebug( "Opening %s",dspstr); return -1; } -qDebug( "Opening mixer" ); - int mixerHandle=0; -#ifdef QT_QWS_DEVFS - if (( mixerHandle = open("/dev/sound/mixer",O_RDWR))<0) { -#else - if (( mixerHandle = open("/dev/mixer",O_RDWR))<0) { -#endif - perror("open(\"/dev/mixer\")"); - QString errorMsg="Could not open audio device\n /dev/dsp\n" - +(QString)strerror(errno); - qDebug( "XXXXXXXXXXXXXXXXXXXXXX "+errorMsg ); - } - if(ioctl(sd,SNDCTL_DSP_RESET,0)<0){ perror("ioctl RESET"); } -// sprintf(message, "%d", sd); - -/* QFile f1("/pid"); - f1.open(IO_WriteOnly ); - f1.writeBlock(message, strlen(message)); - f1.close(); - */ - /* close(pipefd[0]); - write(pipefd[1], message, sizeof(message)); - close(pipefd[1]); - // qDebug( "" + soundDevice->sd ); - _exit(0); - } - default: - // pid greater than zero is parent getting the child's pid - printf("Child's pid is %d\n",pid); - QString s; - close(pipefd[1]); - read(pipefd[0], message, sizeof(message)); - s = message; - close(pipefd[0]); - -// while(wait(NULL)!=pid) - // ; - printf("child %ld terminated normally, return status is zero\n", (long) pid); - */ - // filePara.sd=(long) pid; - /* QFile f2("/pid"); - f2.open(IO_ReadOnly); - QTextStream t(&f2); - // for(int f=0; f < t.atEnd() ;f++) { - s = t.readLine(); - // } - */ -// bool ok; -// sd = s.toInt(&ok, 10); -// qDebug( "<<<<<<<<<<<<<>>>>>>>>>>>>"+s ); - -// f2.close(); -// } -::close(mixerHandle ); -// qDebug( "open device " + dspstr ); -// qDebug( "success! " + sd ); return sd; } +int Device::getInVolume() { + unsigned int volume = 0; + Config cfg("qpe"); + cfg.setGroup("Volume"); + + return cfg.readNumEntry("Mic"); +} int Device::getOutVolume( ) { unsigned int volume; - int mixerHandle = open( mixstr, O_RDWR ); - if ( mixerHandle >= 0 ) { - if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_VOLUME), &volume )==-1) - perror("<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")"); - ::close( mixerHandle ); - } else - perror("open(\"/dev/mixer\")"); - printf("<<<<<<<<<<<<<<<<<<<<output volume %d\n",volume); - Config cfg("qpe"); cfg.setGroup("Volume"); return cfg.readNumEntry("VolumePercent"); } -int Device::getInVolume() { - unsigned int volume=0; - int mixerHandle = ::open( mixstr, O_RDWR ); - if ( mixerHandle >= 0 ) { - if(ioctl( mixerHandle, MIXER_READ(SOUND_MIXER_MIC), &volume )==-1) - perror("<<<<<<<<<<<<<<<ioctl(\"MIXER_READ\")"); - ::close( mixerHandle ); - } else - perror("open(\"/dev/mixer\")"); - printf("<<<<<<<<<<<<<<input volume %d\n", volume ); + +void Device::changedInVolume(int vol ) { Config cfg("qpe"); cfg.setGroup("Volume"); - - return cfg.readNumEntry("Mic"); + cfg.writeEntry("Mic", QString::number(vol )); + QCopEnvelope( "QPE/System", "micChange(bool)" ) << false; } void Device::changedOutVolume(int vol) { - int level = (vol << 8) + vol; - int fd = 0; -#ifdef QT_QWS_DEVFS - if ((fd = open("/dev/sound/mixer", O_RDWR))>=0) { -#else - if ((fd = open("/dev/mixer", O_RDWR))>=0) { -#endif - if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_VOLUME), &level) == -1) - perror("ioctl(\"MIXER_IN_WRITE\")"); - Config cfg("qpe"); cfg.setGroup("Volume"); cfg.writeEntry("VolumePercent", QString::number( vol )); + QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << false; - qDebug("changing output vol %d" ,vol ); - } - ::close(fd); -} -void Device::changedInVolume(int vol ) { - int level = (vol << 8) + vol; - int fd = 0; -#ifdef QT_QWS_DEVFS - if ((fd = open("/dev/sound/mixer", O_RDWR))>=0) { -#else - if ((fd = open("/dev/mixer", O_RDWR))>=0) { -#endif - if(ioctl(fd, MIXER_WRITE(SOUND_MIXER_MIC), &level) == -1) - perror("ioctl(\"MIXER_IN_WRITE\")"); - Config cfg("qpe"); - cfg.setGroup("Volume"); - cfg.writeEntry("Mic", QString::number(vol )); - QCopEnvelope( "QPE/System", "micChange(bool)" ) << false; - qDebug("changing input volume %d",vol); - } - ::close(fd); + owarn << "changing output vol " << vol << oendl; } bool Device::selectMicInput() { int md=0; - int info=MIXER_WRITE(SOUND_MIXER_MIC); -#ifdef QT_QWS_DEVFS - md = ::open( "/dev/sound/mixer", O_RDWR ); -#else - md = ::open( "/dev/mixer", O_RDWR ); -#endif - if ( md == -1) - perror("open(\"/dev/mixer\")"); - else { + int info = SOUND_MASK_MIC;//MIXER_WRITE(SOUND_MIXER_MIC); + owarn << "sectMicInput" << oendl; + md = ::open( DSPSTRMIXEROUT, O_RDWR ); + + if ( md <= 0) { + QString err; + err.sprintf("open %s", DSPSTRMIXEROUT); + perror(err.latin1()); + } else { if( ioctl( md, SOUND_MIXER_WRITE_RECSRC, &info) == -1) perror("ioctl(\"SOUND_MIXER_WRITE_RECSRC\")"); ::close(md); @@ -231,20 +150,7 @@ bool Device::selectMicInput() { } bool Device::closeDevice( bool) { -// if(b) {//close now -// if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) { -// perror("ioctl(\"SNDCTL_DSP_RESET\")"); -// } -// } else { //let play -// if (ioctl( sd, SNDCTL_DSP_SYNC, 0) == -1) { -// perror("ioctl(\"SNDCTL_DSP_SYNC\")"); -// } -// } - ::close( sd); //close sound device -// sdfd=0; - // sd=0; -// qDebug( "closed dsp" ); return true; } @@ -312,11 +218,9 @@ int Device::getDeviceRate() { int Device::getDeviceBits() { int dBits=0; -#ifndef QT_QWS_EBX // zaurus doesnt have this if (ioctl( sd, SOUND_PCM_READ_BITS, &dBits) == -1) { perror("ioctl(\"SNDCTL_PCM_READ_BITS\")"); } -#endif return dBits; } @@ -370,5 +274,3 @@ int Device::devWrite(int soundDescriptor, short * buf, int size) { bytesWritten = ::write( sd /*soundDescriptor*/, buf, size); return bytesWritten; } - - |