summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opierec/device.cpp192
1 files changed, 96 insertions, 96 deletions
diff --git a/noncore/multimedia/opierec/device.cpp b/noncore/multimedia/opierec/device.cpp
index db2d63f..683f0a5 100644
--- a/noncore/multimedia/opierec/device.cpp
+++ b/noncore/multimedia/opierec/device.cpp
@@ -1,21 +1,18 @@
// device.cpp
#include "device.h"
-/* OPIE */
-#include <opie2/odebug.h>
#include <qpe/config.h>
#include <qpe/qcopenvelope_qws.h>
-using namespace Opie::Core;
/* STD */
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/soundcard.h>
#include <unistd.h>
#include <sys/wait.h>
#include <unistd.h>
#include <errno.h>
@@ -23,44 +20,127 @@ using namespace Opie::Core;
Device::Device( QObject * parent, const char * dsp, const char * mixr, bool record )
: QObject( parent)
{
dspstr = (char *)dsp;
mixstr = (char *)mixr;
devForm=-1;
devCh=-1;
devRate=-1;
if( !record){ //playing
- odebug << "setting up DSP for playing" << oendl;
+ qDebug( "setting up DSP for playing" );
flags = O_WRONLY;
} else { //recording
- odebug << "setting up DSP for recording" << oendl;
+ qDebug( "setting up DSP for recording" );
flags = O_RDWR;
// flags = O_RDONLY;
// selectMicInput();
}
}
bool Device::openDsp() {
if( openDevice( flags) == -1) {
perror("<<<<<<<<<<<<<<ioctl(\"Open device\")");
return false;
}
return true;
}
+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) {
+ perror("open(\"/dev/dsp\")");
+ QString errorMsg="Could not open audio device\n /dev/dsp\n"
+ +(QString)strerror(errno);
+ qDebug( "XXXXXXXXXXXXXXXXXXXXXXX "+errorMsg );
+ return -1;
+ }
+
+qDebug( "Opening mixer" );
+ int mixerHandle=0;
+ if (( mixerHandle = open("/dev/mixer",O_RDWR))<0) {
+ 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::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");
@@ -87,184 +167,102 @@ int Device::getInVolume() {
void Device::changedOutVolume(int vol) {
int level = (vol << 8) + vol;
int fd = 0;
if ((fd = open("/dev/mixer", O_RDWR))>=0) {
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;
- owarn << "changing output vol " << vol << "" << oendl;
+ qDebug("changing output vol %d" ,vol );
}
::close(fd);
}
void Device::changedInVolume(int vol ) {
int level = (vol << 8) + vol;
int fd = 0;
if ((fd = open("/dev/mixer", O_RDWR))>=0) {
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;
- owarn << "changing input volume " << vol << "" << oendl;
+ qDebug("changing input volume %d",vol);
}
::close(fd);
}
bool Device::selectMicInput() {
int md=0;
int info=MIXER_WRITE(SOUND_MIXER_MIC);
md = ::open( "/dev/mixer", O_RDWR );
if ( md == -1)
perror("open(\"/dev/mixer\")");
else {
if( ioctl( md, SOUND_MIXER_WRITE_RECSRC, &info) == -1)
perror("ioctl(\"SOUND_MIXER_WRITE_RECSRC\")");
::close(md);
return false;
}
::close(md);
return true;
}
-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: {
- */
-odebug << "Opening " << dspstr << "" << oendl;
- if (( sd = ::open( dspstr, flags)) == -1) {
- perror("open(\"/dev/dsp\")");
- QString errorMsg="Could not open audio device\n /dev/dsp\n"
- +(QString)strerror(errno);
- odebug << "XXXXXXXXXXXXXXXXXXXXXXX "+errorMsg << oendl;
- return -1;
- }
-
-odebug << "Opening mixer" << oendl;
- int mixerHandle=0;
- if (( mixerHandle = open("/dev/mixer",O_RDWR))<0) {
- perror("open(\"/dev/mixer\")");
- QString errorMsg="Could not open audio device\n /dev/dsp\n"
- +(QString)strerror(errno);
- odebug << "XXXXXXXXXXXXXXXXXXXXXX "+errorMsg << oendl;
- }
-
- 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]);
- // odebug << "" << soundDevice->sd << "" << oendl;
- _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);
-// odebug << "<<<<<<<<<<<<<>>>>>>>>>>>>"+s << oendl;
-
-// f2.close();
-// }
-::close(mixerHandle );
-// odebug << "open device " << dspstr << "" << oendl;
-// odebug << "success! " << sd << "" << oendl;
- return sd;
-}
-
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;
-// odebug << "closed dsp" << oendl;
+// qDebug( "closed dsp" );
return true;
}
bool Device::setDeviceFormat( int form) {
- odebug << "set device res " << form << " " << sd << "" << oendl;
+ qDebug( "set device res %d: %d ",form, sd );
if (ioctl( sd, SNDCTL_DSP_SETFMT, &form)==-1) { //set format
perror("ioctl(\"SNDCTL_DSP_SETFMT\")");
return false;
}
devRes=form;
return true;
}
bool Device::setDeviceChannels( int ch) {
- odebug << "set channels " << ch << " " << sd << "" << oendl;
+ qDebug( "set channels %d: %d",ch ,sd);
if (ioctl( sd, SNDCTL_DSP_CHANNELS, &ch)==-1) {
perror("ioctl(\"SNDCTL_DSP_CHANNELS\")");
return false;
}
devCh=ch;
return true;
}
bool Device::setDeviceRate( int rate) {
- odebug << "set rate " << rate << " " << sd << "" << oendl;
+ qDebug( "set rate %d: %d",rate,sd);
if (ioctl( sd, SNDCTL_DSP_SPEED, &rate) == -1) {
perror("ioctl(\"SNDCTL_DSP_SPEED\")");
return false;
}
devRate=rate;
return true;
}
int Device::getRes() {
return devRes;
@@ -309,50 +307,52 @@ int Device::getDeviceBits() {
int Device::getDeviceChannels() {
int dCh=0;
if (ioctl( sd, SOUND_PCM_READ_CHANNELS, &dCh) == -1) {
perror("ioctl(\"SNDCTL_PCM_READ_CHANNELS\")");
}
return dCh;
}
int Device::getDeviceFragSize() {
int frag_size;
if (ioctl( sd, SNDCTL_DSP_GETBLKSIZE, &frag_size) == -1) {
- odebug << "no fragsize" << oendl;
+ qDebug( "no fragsize" );
} else {
- odebug << "driver says frag size is " << frag_size << "" << oendl;
+ qDebug( "driver says frag size is %d",frag_size);
}
return frag_size;
}
bool Device::setFragSize(int frag) {
if (ioctl(sd, SNDCTL_DSP_SETFRAGMENT, &frag)) {
perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")");
return false;
}
return true;
}
bool Device::reset() {
closeDevice(true);
openDsp();
if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) {
perror("ioctl(\"SNDCTL_DSP_RESET\")");
return false;
}
return true;
}
int Device::devRead(int soundDescriptor, short *buf, int size) {
+ Q_UNUSED(soundDescriptor);
int number = 0;
number = ::read( sd /*soundDescriptor*/, (char *)buf, size);
return number;
}
int Device::devWrite(int soundDescriptor, short * buf, int size) {
- int bytesWritten = 0;
+ Q_UNUSED(soundDescriptor);
+ int bytesWritten = 0;
bytesWritten = ::write( sd /*soundDescriptor*/, buf, size);
return bytesWritten;
}