summaryrefslogtreecommitdiff
authorzecke <zecke>2003-10-07 13:02:55 (UTC)
committer zecke <zecke>2003-10-07 13:02:55 (UTC)
commit75f35445e9f3ec2f730f779d67f4189296bd9c5e (patch) (unidiff)
tree58d137879aefe506af087f5a75e29f60b5aaae0a
parentd72a9cfe61cbc0910373e4604220021ebbcedaeb (diff)
downloadopie-75f35445e9f3ec2f730f779d67f4189296bd9c5e.zip
opie-75f35445e9f3ec2f730f779d67f4189296bd9c5e.tar.gz
opie-75f35445e9f3ec2f730f779d67f4189296bd9c5e.tar.bz2
instead of testing for QWS_EBX we now define OPIE_NO_SOUND_PCM_READ_BITS.
If your platform does not have that ioctl define it
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/multimedia/opierec/device.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/noncore/multimedia/opierec/device.cpp b/noncore/multimedia/opierec/device.cpp
index f9a80c5..11071d8 100644
--- a/noncore/multimedia/opierec/device.cpp
+++ b/noncore/multimedia/opierec/device.cpp
@@ -1,53 +1,53 @@
1// device.cpp 1// device.cpp
2 2
3#include "device.h" 3#include "device.h"
4 4
5#include <qpe/config.h> 5#include <qpe/config.h>
6#include <qpe/qcopenvelope_qws.h> 6#include <qpe/qcopenvelope_qws.h>
7 7#include <qpe/custom.h>
8 8
9#include <fcntl.h> 9#include <fcntl.h>
10#include <stdio.h> 10#include <stdio.h>
11#include <stdlib.h> 11#include <stdlib.h>
12#include <sys/ioctl.h> 12#include <sys/ioctl.h>
13#include <sys/soundcard.h> 13#include <sys/soundcard.h>
14#include <unistd.h> 14#include <unistd.h>
15#include<sys/wait.h> 15#include<sys/wait.h>
16// #include <sys/stat.h> 16// #include <sys/stat.h>
17// #include <sys/time.h> 17// #include <sys/time.h>
18// #include <sys/types.h> 18// #include <sys/types.h>
19#include <unistd.h> 19#include <unistd.h>
20#include <errno.h> 20#include <errno.h>
21 21
22//extern QtRec *qperec; 22//extern QtRec *qperec;
23 23
24Device::Device( QObject * parent, const char * dsp, const char * mixr, bool record ) 24Device::Device( QObject * parent, const char * dsp, const char * mixr, bool record )
25 : QObject( parent) 25 : QObject( parent)
26{ 26{
27 dspstr = (char *)dsp; 27 dspstr = (char *)dsp;
28 mixstr = (char *)mixr; 28 mixstr = (char *)mixr;
29 29
30 devForm=-1; 30 devForm=-1;
31 devCh=-1; 31 devCh=-1;
32 devRate=-1; 32 devRate=-1;
33 33
34 if( !record){ //playing 34 if( !record){ //playing
35 qDebug("setting up DSP for playing"); 35 qDebug("setting up DSP for playing");
36 flags = O_WRONLY; 36 flags = O_WRONLY;
37 } else { //recording 37 } else { //recording
38 qDebug("setting up DSP for recording"); 38 qDebug("setting up DSP for recording");
39 flags = O_RDWR; 39 flags = O_RDWR;
40// flags = O_RDONLY; 40// flags = O_RDONLY;
41 selectMicInput(); 41 selectMicInput();
42 } 42 }
43} 43}
44 44
45bool Device::openDsp() { 45bool Device::openDsp() {
46 if( openDevice( flags) == -1) { 46 if( openDevice( flags) == -1) {
47 perror("<<<<<<<<<<<<<<ioctl(\"Open device\")"); 47 perror("<<<<<<<<<<<<<<ioctl(\"Open device\")");
48 return false; 48 return false;
49 } 49 }
50 return true; 50 return true;
51} 51}
52 52
53int Device::getOutVolume( ) { 53int Device::getOutVolume( ) {
@@ -123,104 +123,104 @@ bool Device::selectMicInput() {
123 if( ioctl( md, SOUND_MIXER_WRITE_RECSRC, &info) == -1) 123 if( ioctl( md, SOUND_MIXER_WRITE_RECSRC, &info) == -1)
124 perror("ioctl(\"SOUND_MIXER_WRITE_RECSRC\")"); 124 perror("ioctl(\"SOUND_MIXER_WRITE_RECSRC\")");
125 ::close(md); 125 ::close(md);
126 return false; 126 return false;
127 } 127 }
128 ::close(md); 128 ::close(md);
129*/ 129*/
130 return true; 130 return true;
131} 131}
132 132
133int Device::openDevice( int flags) { 133int Device::openDevice( int flags) {
134/* pid_t pid; 134/* pid_t pid;
135 int status; 135 int status;
136 int pipefd[2]; 136 int pipefd[2];
137 char message[20]; 137 char message[20];
138 if (pipe(pipefd) == -1){ 138 if (pipe(pipefd) == -1){
139 perror ("Error creating pipe"); 139 perror ("Error creating pipe");
140exit(1); 140exit(1);
141 } 141 }
142 switch (pid = fork()) { 142 switch (pid = fork()) {
143 case -1: 143 case -1:
144 perror("The fork failed!"); 144 perror("The fork failed!");
145 break; 145 break;
146 case 0: { 146 case 0: {
147 */ 147 */
148 if (( sd = ::open( dspstr, flags)) == -1) { 148 if (( sd = ::open( dspstr, flags)) == -1) {
149 perror("open(\"/dev/dsp\")"); 149 perror("open(\"/dev/dsp\")");
150 QString errorMsg="Could not open audio device\n /dev/dsp\n" 150 QString errorMsg="Could not open audio device\n /dev/dsp\n"
151 +(QString)strerror(errno); 151 +(QString)strerror(errno);
152 qDebug(errorMsg); 152 qDebug(errorMsg);
153 return -1; 153 return -1;
154 } 154 }
155 155
156 int mixerHandle=0; 156 int mixerHandle=0;
157 /* Set the input dsp device and its input gain the weird Zaurus way */ 157 /* Set the input dsp device and its input gain the weird Zaurus way */
158 if (( mixerHandle = open("/dev/mixer1",O_RDWR))<0) { 158 if (( mixerHandle = open("/dev/mixer1",O_RDWR))<0) {
159 perror("open(\"/dev/mixer1\")"); 159 perror("open(\"/dev/mixer1\")");
160 } 160 }
161 161
162 if(ioctl(sd,SNDCTL_DSP_RESET,0)<0){ 162 if(ioctl(sd,SNDCTL_DSP_RESET,0)<0){
163 perror("ioctl RESET"); 163 perror("ioctl RESET");
164 } 164 }
165// sprintf(message, "%d", sd); 165// sprintf(message, "%d", sd);
166 166
167/* QFile f1("/pid"); 167/* QFile f1("/pid");
168 f1.open(IO_WriteOnly ); 168 f1.open(IO_WriteOnly );
169 f1.writeBlock(message, strlen(message)); 169 f1.writeBlock(message, strlen(message));
170 f1.close(); 170 f1.close();
171 */ 171 */
172 /* close(pipefd[0]); 172 /* close(pipefd[0]);
173 write(pipefd[1], message, sizeof(message)); 173 write(pipefd[1], message, sizeof(message));
174 close(pipefd[1]); 174 close(pipefd[1]);
175 // qDebug("%d",soundDevice->sd ); 175 // qDebug("%d",soundDevice->sd );
176 _exit(0); 176 _exit(0);
177 } 177 }
178 default: 178 default:
179 // pid greater than zero is parent getting the child's pid 179 // pid greater than zero is parent getting the child's pid
180 printf("Child's pid is %d\n",pid); 180 printf("Child's pid is %d\n",pid);
181 QString s; 181 QString s;
182 close(pipefd[1]); 182 close(pipefd[1]);
183 read(pipefd[0], message, sizeof(message)); 183 read(pipefd[0], message, sizeof(message));
184 s = message; 184 s = message;
185 close(pipefd[0]); 185 close(pipefd[0]);
186 186
187// while(wait(NULL)!=pid) 187// while(wait(NULL)!=pid)
188 // ; 188 // ;
189 printf("child %ld terminated normally, return status is zero\n", (long) pid); 189 printf("child %ld terminated normally, return status is zero\n", (long) pid);
190 */ 190 */
191 // filePara.sd=(long) pid; 191 // filePara.sd=(long) pid;
192 /* QFile f2("/pid"); 192 /* QFile f2("/pid");
193 f2.open(IO_ReadOnly); 193 f2.open(IO_ReadOnly);
194 QTextStream t(&f2); 194 QTextStream t(&f2);
195 // for(int f=0; f < t.atEnd() ;f++) { 195 // for(int f=0; f < t.atEnd() ;f++) {
196 s = t.readLine(); 196 s = t.readLine();
197 // } 197 // }
198 */ 198 */
199// bool ok; 199// bool ok;
200// sd = s.toInt(&ok, 10); 200// sd = s.toInt(&ok, 10);
201// qDebug("<<<<<<<<<<<<<>>>>>>>>>>>>"+s); 201// qDebug("<<<<<<<<<<<<<>>>>>>>>>>>>"+s);
202 202
203// f2.close(); 203// f2.close();
204// } 204// }
205::close(mixerHandle ); 205::close(mixerHandle );
206 qDebug("open device %s", dspstr); 206 qDebug("open device %s", dspstr);
207 qDebug("success! %d",sd); 207 qDebug("success! %d",sd);
208 return sd; 208 return sd;
209} 209}
210 210
211bool Device::closeDevice( bool b) { 211bool Device::closeDevice( bool b) {
212// if(b) {//close now 212// if(b) {//close now
213// if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) { 213// if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) {
214// perror("ioctl(\"SNDCTL_DSP_RESET\")"); 214// perror("ioctl(\"SNDCTL_DSP_RESET\")");
215// } 215// }
216// } else { //let play 216// } else { //let play
217// if (ioctl( sd, SNDCTL_DSP_SYNC, 0) == -1) { 217// if (ioctl( sd, SNDCTL_DSP_SYNC, 0) == -1) {
218// perror("ioctl(\"SNDCTL_DSP_SYNC\")"); 218// perror("ioctl(\"SNDCTL_DSP_SYNC\")");
219// } 219// }
220// } 220// }
221 221
222 ::close( sd); //close sound device 222 ::close( sd); //close sound device
223// sdfd=0; 223// sdfd=0;
224 // sd=0; 224 // sd=0;
225 qDebug("closed dsp"); 225 qDebug("closed dsp");
226 return true; 226 return true;
@@ -269,67 +269,67 @@ int Device::getFormat() {
269int Device::getRate() { 269int Device::getRate() {
270 return devRate; 270 return devRate;
271} 271}
272 272
273int Device::getChannels() { 273int Device::getChannels() {
274 return devCh; 274 return devCh;
275} 275}
276 276
277int Device::getDeviceFormat() { 277int Device::getDeviceFormat() {
278 return 0; 278 return 0;
279} 279}
280 280
281 281
282int Device::getDeviceRate() { 282int Device::getDeviceRate() {
283 int dRate=0; 283 int dRate=0;
284 if (ioctl( sd, SOUND_PCM_READ_RATE, &dRate) == -1) { 284 if (ioctl( sd, SOUND_PCM_READ_RATE, &dRate) == -1) {
285 perror("ioctl(\"SNDCTL_PCM_READ_RATE\")"); 285 perror("ioctl(\"SNDCTL_PCM_READ_RATE\")");
286 } 286 }
287 return dRate; 287 return dRate;
288 288
289} 289}
290 290
291int Device::getDeviceBits() { 291int Device::getDeviceBits() {
292 int dBits=0; 292 int dBits=0;
293#ifndef QT_QWS_EBX // zaurus doesnt have this 293#if !defined(OPIE_NO_SOUND_PCM_READ_BITS) // zaurus doesnt have this
294 if (ioctl( sd, SOUND_PCM_READ_BITS, &dBits) == -1) { 294 if (ioctl( sd, SOUND_PCM_READ_BITS, &dBits) == -1) {
295 perror("ioctl(\"SNDCTL_PCM_READ_BITS\")"); 295 perror("ioctl(\"SNDCTL_PCM_READ_BITS\")");
296 } 296 }
297#endif 297#endif
298 return dBits; 298 return dBits;
299} 299}
300 300
301int Device::getDeviceChannels() { 301int Device::getDeviceChannels() {
302 int dCh=0; 302 int dCh=0;
303 if (ioctl( sd, SOUND_PCM_READ_CHANNELS, &dCh) == -1) { 303 if (ioctl( sd, SOUND_PCM_READ_CHANNELS, &dCh) == -1) {
304 perror("ioctl(\"SNDCTL_PCM_READ_CHANNELS\")"); 304 perror("ioctl(\"SNDCTL_PCM_READ_CHANNELS\")");
305 } 305 }
306 return dCh; 306 return dCh;
307} 307}
308 308
309int Device::getDeviceFragSize() { 309int Device::getDeviceFragSize() {
310 int frag_size; 310 int frag_size;
311 311
312 if (ioctl( sd, SNDCTL_DSP_GETBLKSIZE, &frag_size) == -1) { 312 if (ioctl( sd, SNDCTL_DSP_GETBLKSIZE, &frag_size) == -1) {
313 qDebug("no fragsize"); 313 qDebug("no fragsize");
314 } else 314 } else
315 qDebug("driver says frag size is %d", frag_size); 315 qDebug("driver says frag size is %d", frag_size);
316 return frag_size; 316 return frag_size;
317} 317}
318 318
319bool Device::setFragSize(int frag) { 319bool Device::setFragSize(int frag) {
320 if (ioctl(sd, SNDCTL_DSP_SETFRAGMENT, &frag)) { 320 if (ioctl(sd, SNDCTL_DSP_SETFRAGMENT, &frag)) {
321 perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")"); 321 perror("ioctl(\"SNDCTL_DSP_SETFRAGMENT\")");
322 return false; 322 return false;
323 } 323 }
324 return true; 324 return true;
325} 325}
326 326
327bool Device::reset() { 327bool Device::reset() {
328 closeDevice(true); 328 closeDevice(true);
329 openDsp(); 329 openDsp();
330 if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) { 330 if (ioctl( sd, SNDCTL_DSP_RESET, 0) == -1) {
331 perror("ioctl(\"SNDCTL_DSP_RESET\")"); 331 perror("ioctl(\"SNDCTL_DSP_RESET\")");
332 return false; 332 return false;
333 } 333 }
334 return true; 334 return true;
335} 335}