Changeset 5276:0eb24ca6810e in roaraudio for roard
- Timestamp:
- 11/20/11 18:36:49 (12 years ago)
- Branch:
- default
- Phase:
- public
- Location:
- roard
- Files:
-
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/container_framework.c
r4957 r5276 198 198 199 199 off_t cont_fw_lseek (struct roar_vio_calls * vio, off_t offset, int whence); 200 int cont_fw_nonblock(struct roar_vio_calls * vio, int state);201 200 202 201 int cont_fw_sync (struct roar_vio_calls * vio) { … … 245 244 vio->write = cont_pvio_write; 246 245 vio->lseek = cont_pvio_lseek; 247 vio->nonblock = cont_pvio_nonblock;248 246 vio->sync = cont_pvio_sync; 249 247 vio->ctl = cont_pvio_ctl; … … 264 262 off_t cont_pvio_lseek (struct roar_vio_calls * vio, off_t offset, int whence) { 265 263 return roar_vio_lseek(&(((struct cont_fw_parent_inst*)(vio->inst))->stream.stream->vio), offset, whence); 266 }267 268 int cont_pvio_nonblock(struct roar_vio_calls * vio, int state) {269 return roar_vio_nonblock(&(((struct cont_fw_parent_inst*)(vio->inst))->stream.stream->vio), state);270 264 } 271 265 -
roard/driver.c
r5274 r5276 317 317 #endif 318 318 319 int driver_dummy_nonblock(struct roar_vio_calls * vio, int state) { 320 if ( state == ROAR_SOCKET_BLOCK ) 321 return 0; 322 323 roar_err_set(ROAR_ERROR_NOTSUP); 324 return -1; 319 int driver_dummy_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 320 switch (cmd) { 321 case ROAR_VIO_CTL_NONBLOCK: 322 if ( *(const int*)data == ROAR_SOCKET_BLOCK ) 323 return 0; 324 325 roar_err_set(ROAR_ERROR_NOTSUP); 326 return -1; 327 break; 328 default: 329 roar_err_set(ROAR_ERROR_BADRQC); 330 return -1; 331 break; 332 } 325 333 } 326 334 -
roard/driver_alsa.c
r5012 r5276 231 231 inst->sync = driver_alsa_sync; 232 232 inst->ctl = driver_alsa_ctl; 233 inst->nonblock = driver_dummy_nonblock;234 233 235 234 ROAR_DBG("driver_alsa_open_vio(inst=%p, device='%s', info=%p, fh=%i, sstream=%p) = 0", inst, device, info, fh, sstream); … … 333 332 switch (cmd) { 334 333 case ROAR_VIO_CTL_GET_DELAY: 335 if ( snd_pcm_delay(device->handle, &alsa_delay) < 0 ) 334 if ( snd_pcm_delay(device->handle, &alsa_delay) < 0 ) 335 return -1; 336 else { 337 *(uint_least32_t *)data = snd_pcm_frames_to_bytes(device->handle, alsa_delay); 338 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_DELAY(0x%.8x), data=%p): %i bytes.", vio, cmd, data, (int)(*(uint_least32_t*)data)); 339 } 340 break; 341 342 case ROAR_VIO_CTL_SET_SSTREAMID: 343 device->ssid = *(int *)data; 344 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAMID(0x%.8x), data=%p): ssid=%i", vio, cmd, data, device->ssid); 345 break; 346 347 case ROAR_VIO_CTL_SET_SSTREAM: 348 device->sstream = data; 349 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAM(0x%.8x), data=%p): sstream=%p", vio, cmd, data, device->sstream); 350 break; 351 352 case ROAR_VIO_CTL_GET_AUINFO: 353 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 354 memcpy(data, &(device->info), sizeof(struct roar_audio_info)); 355 break; 356 357 case ROAR_VIO_CTL_SET_AUINFO: 358 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 359 memcpy(&(device->info), data, sizeof(struct roar_audio_info)); 360 return driver_alsa_reopen_device(device); 361 break; 362 363 case ROAR_VIO_CTL_NONBLOCK: 364 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 365 return 0; 366 roar_err_set(ROAR_ERROR_NOTSUP); 336 367 return -1; 337 else { 338 *(uint_least32_t *)data = snd_pcm_frames_to_bytes(device->handle, alsa_delay); 339 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_DELAY(0x%.8x), data=%p): %i bytes.", vio, cmd, data, (int)(*(uint_least32_t*)data)); 340 } 341 break; 342 343 case ROAR_VIO_CTL_SET_SSTREAMID: 344 device->ssid = *(int *)data; 345 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAMID(0x%.8x), data=%p): ssid=%i", vio, cmd, data, device->ssid); 346 break; 347 348 case ROAR_VIO_CTL_SET_SSTREAM: 349 device->sstream = data; 350 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_SSTREAM(0x%.8x), data=%p): sstream=%p", vio, cmd, data, device->sstream); 351 break; 352 353 case ROAR_VIO_CTL_GET_AUINFO: 354 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_GET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 355 memcpy(data, &(device->info), sizeof(struct roar_audio_info)); 356 break; 357 358 case ROAR_VIO_CTL_SET_AUINFO: 359 ROAR_DBG("driver_alsa_ctl(vio=%p, cmd=ROAR_VIO_CTL_SET_AUINFO(0x%.8x), data=%p) = ?", vio, cmd, data); 360 memcpy(&(device->info), data, sizeof(struct roar_audio_info)); 361 return driver_alsa_reopen_device(device); 368 break; 362 369 363 370 default: -
roard/driver_ao.c
r5056 r5276 134 134 inst->write = driver_ao_write; 135 135 inst->close = driver_ao_close; 136 inst-> nonblock = driver_dummy_nonblock;136 inst->ctl = driver_dummy_ctl; 137 137 138 138 return 0; -
roard/driver_artsc.c
r5108 r5276 124 124 inst->close = driver_artsc_close; 125 125 inst->ctl = driver_artsc_ctl; 126 inst->nonblock = driver_artsc_nonblock;127 126 128 127 ROAR_DBG("driver_artsc_open_vio(*) = 0"); … … 155 154 156 155 return driver_artsc_init_shutdown(SHUTDOWN); 157 }158 159 int driver_artsc_nonblock(struct roar_vio_calls * vio, int state) {160 struct roar_artsc * self = vio->inst;161 int ret;162 163 switch (state) {164 case ROAR_SOCKET_NONBLOCK:165 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 0);166 if ( ret == 0 )167 return 0;168 break;169 case ROAR_SOCKET_BLOCK:170 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 1);171 if ( ret == 1 )172 return 0;173 break;174 }175 176 return -1;177 156 } 178 157 … … 206 185 207 186 return 0; 187 case ROAR_VIO_CTL_NONBLOCK: 188 switch (*(int*)data) { 189 case ROAR_SOCKET_NONBLOCK: 190 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 0); 191 if ( ret == 0 ) 192 return 0; 193 return -1; 194 break; 195 case ROAR_SOCKET_BLOCK: 196 ret = arts_stream_set(self->stream, ARTS_P_BLOCKING, 1); 197 if ( ret == 1 ) 198 return 0; 199 return -1; 200 break; 201 } 202 break; 208 203 default: 209 204 return -1; -
roard/driver_jack.c
r5259 r5276 65 65 inst->write = driver_jack_write; 66 66 inst->lseek = NULL; // no seeking on this device 67 inst->nonblock = driver_jack_nonblock;68 67 inst->sync = driver_jack_sync; 69 68 inst->ctl = driver_jack_ctl; … … 157 156 } 158 157 159 int driver_jack_nonblock(struct roar_vio_calls * vio, int state) {160 struct driver_jack * self = vio->inst;161 // control if read and write calls should block untill all data is read or written.162 // state could be:163 // ROAR_SOCKET_BLOCK - Block untill the data is read or written164 // ROAR_SOCKET_NONBLOCK - Return as soon as possible165 return -1;166 }167 168 158 int driver_jack_sync (struct roar_vio_calls * vio) { 169 159 struct driver_jack * self = vio->inst; … … 200 190 return 0; 201 191 break; 202 case ROAR_VIO_CTL_GET_AUINFO: 203 case ROAR_VIO_CTL_SET_AUINFO: 192 case ROAR_VIO_CTL_NONBLOCK: 193 // control if read and write calls should block untill all data is read or written. 194 // state is in *(int*)data and could be: 195 // ROAR_SOCKET_BLOCK - Block untill the data is read or written 196 // ROAR_SOCKET_NONBLOCK - Return as soon as possible 197 break; 198 case ROAR_VIO_CTL_GET_AUINFO: 199 case ROAR_VIO_CTL_SET_AUINFO: 204 200 // get or set audio info, data is a struct roar_audio_info*. 205 201 return -1; 206 202 break; 207 208 203 case ROAR_VIO_CTL_GET_DBLKSIZE: 204 case ROAR_VIO_CTL_SET_DBLKSIZE: 209 205 // get or set block size used, data is uint_least32_t*, number of bytes. 210 206 return -1; 211 207 break; 212 213 208 case ROAR_VIO_CTL_GET_DBLOCKS: 209 case ROAR_VIO_CTL_SET_DBLOCKS: 214 210 // get or set number of blocks used, data is uint_least32_t*. 215 211 return -1; 216 212 break; 217 213 case ROAR_VIO_CTL_SET_SSTREAM: 218 214 // set server stream object for this stream, data is struct roar_stream_server* 219 215 return -1; 220 216 break; 221 217 case ROAR_VIO_CTL_SET_SSTREAMID: 222 218 // set stream ID for this stream, data is int* 223 219 return -1; 224 220 break; 225 221 case ROAR_VIO_CTL_SET_VOLUME: 226 222 // set volume for this device, data is struct roar_mixer_settings* 227 223 return -1; 228 224 break; 229 225 case ROAR_VIO_CTL_GET_DELAY: 230 226 // get delay of this stream, data is uint_least32_t*, in bytes 231 227 // there is more about delay. please ask. -
roard/driver_oss.c
r5055 r5276 38 38 vio->write = driver_oss_write; 39 39 vio->read = driver_oss_read; 40 vio->nonblock = driver_oss_nonblock;41 40 vio->sync = driver_oss_sync; 42 41 vio->ctl = driver_oss_ctl; … … 448 447 } 449 448 450 int driver_oss_nonblock(struct roar_vio_calls * vio, int state) {451 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = ?", vio, state);452 453 if ( roar_socket_nonblock(_get(vio,fh), state) == -1 ) {454 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = -1", vio, state);455 return -1;456 }457 458 if ( state == ROAR_SOCKET_NONBLOCK ) {459 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = 0", vio, state);460 return 0;461 }462 463 roar_vio_sync(vio);464 465 ROAR_DBG("driver_oss_nonblock(vio=%p, state=%i) = 0", vio, state);466 467 return 0;468 }469 470 449 int driver_oss_sync(struct roar_vio_calls * vio) { 471 450 #ifdef SNDCTL_DSP_SYNC … … 558 537 break; 559 538 #endif 539 case ROAR_VIO_CTL_NONBLOCK: 540 if ( roar_socket_nonblock(_get(vio,fh), *(int*)data) == -1 ) { 541 return -1; 542 } 543 544 if ( *(int*)data == ROAR_SOCKET_NONBLOCK ) { 545 return 0; 546 } 547 548 roar_vio_sync(vio); 549 break; 560 550 default: 561 551 return -1; -
roard/driver_portaudio.c
r5134 r5276 124 124 inst->close = driver_portaudio_close; 125 125 inst->write = driver_portaudio_write; 126 inst-> nonblock = driver_dummy_nonblock;126 inst->ctl = driver_dummy_ctl; 127 127 128 128 Pa_Initialize(); -
roard/driver_pulsesimple.c
r5056 r5276 127 127 inst->sync = driver_pulsesimple_sync; 128 128 inst->ctl = driver_pulsesimple_ctl; 129 inst->nonblock = driver_dummy_nonblock;130 129 131 130 return 0; … … 167 166 ROAR_DBG("driver_pulsesimple_ctl(vio=%p) = ?", vio); 168 167 168 switch (cmd) { 169 case ROAR_VIO_CTL_NONBLOCK: 170 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 171 return 0; 172 roar_err_set(ROAR_ERROR_NOTSUP); 173 return -1; 174 break; 175 } 176 177 roar_err_set(ROAR_ERROR_NOSYS); 169 178 return -1; 170 179 } -
roard/driver_pwmled.c
r4957 r5276 62 62 inst->write = driver_pwmled_write; 63 63 inst->lseek = NULL; 64 inst->nonblock = NULL;65 64 inst->sync = NULL; 66 65 inst->ctl = driver_pwmled_ctl; -
roard/driver_rsound.c
r5107 r5276 171 171 inst->close = driver_rsound_close; 172 172 inst->write = driver_rsound_write; 173 inst-> nonblock = driver_dummy_nonblock;173 inst->ctl = driver_dummy_ctl; 174 174 175 175 return 0; -
roard/driver_shout.c
r5012 r5276 202 202 inst->write = driver_shout_write; 203 203 inst->close = driver_shout_close; 204 inst-> nonblock = driver_dummy_nonblock;204 inst->ctl = driver_dummy_ctl; 205 205 206 206 return 0; -
roard/driver_sndio.c
r5105 r5276 265 265 return sio_setvol(self->shandle, d) == 0 ? -1 : 0; 266 266 break; 267 case ROAR_VIO_CTL_NONBLOCK: 268 if ( *(int*)data == ROAR_SOCKET_BLOCK ) 269 return 0; 270 roar_err_set(ROAR_ERROR_NOTSUP); 271 return -1; 272 break; 267 273 default: 268 274 return -1; -
roard/driver_sysclock.c
r5012 r5276 42 42 inst->inst = self; 43 43 inst->close = driver_sysclock_close; 44 inst->nonblock = driver_dummy_nonblock;45 44 inst->write = driver_sysclock_write; 45 inst->ctl = driver_dummy_ctl; 46 46 47 47 self->bps = roar_info2bitspersec(info)/8; -
roard/driver_wmm.c
r5062 r5276 191 191 inst->close = driver_wmm_close_vio; 192 192 inst->write = driver_wmm_write; 193 inst-> nonblock = driver_dummy_nonblock;193 inst->ctl = driver_dummy_ctl; 194 194 195 195 info->codec = ROAR_CODEC_PCM_S_LE; -
roard/include/driver.h
r5245 r5276 159 159 #endif 160 160 161 int driver_dummy_ nonblock(struct roar_vio_calls * vio, int state);161 int driver_dummy_ctl(struct roar_vio_calls * vio, int cmd, void * data); 162 162 163 163 #endif -
roard/include/driver_oss.h
r4815 r5276 46 46 ssize_t driver_oss_write (struct roar_vio_calls * vio, void *buf, size_t count); 47 47 ssize_t driver_oss_read (struct roar_vio_calls * vio, void *buf, size_t count); 48 int driver_oss_nonblock (struct roar_vio_calls * vio, int state);49 48 int driver_oss_close_vio(struct roar_vio_calls * vio); 50 49 int driver_oss_reopen_device(struct driver_oss * self); -
roard/include/midi.h
r5194 r5276 174 174 // dummys: 175 175 int midi_vio_set_dummy(int stream); 176 int midi_vio_ctl(struct roar_vio_calls * vio, int cmd, void * data); 176 177 int midi_vio_ok(struct roar_vio_calls * vio, ...); 177 178 -
roard/midi.c
r5210 r5276 1058 1058 ss->vio.write = NULL; 1059 1059 ss->vio.lseek = NULL; 1060 ss->vio.nonblock = (int (*)(struct roar_vio_calls * vio, int state))midi_vio_ok;1061 1060 ss->vio.sync = (int (*)(struct roar_vio_calls * vio))midi_vio_ok; 1062 ss->vio.ctl = NULL;1061 ss->vio.ctl = midi_vio_ctl; 1063 1062 ss->vio.close = (int (*)(struct roar_vio_calls * vio))midi_vio_ok; 1064 1063 … … 1066 1065 } 1067 1066 1067 int midi_vio_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 1068 if ( cmd == ROAR_VIO_CTL_NONBLOCK ) 1069 return 0; 1070 return -1; 1071 } 1072 1068 1073 int midi_vio_ok(struct roar_vio_calls * vio, ...) { 1069 1074 return 0; -
roard/sources.c
r5246 r5276 418 418 } 419 419 420 static int sources_radionoise_ctl(struct roar_vio_calls * vio, int cmd, void * data) { 421 if ( cmd == ROAR_VIO_CTL_NONBLOCK ) 422 return 0; 423 424 roar_err_set(ROAR_ERROR_BADRQC); 425 return -1; 426 } 427 420 428 int sources_add_radionoise (int stream, const char * device, int fh, const char * driver) { 421 429 struct roar_stream_server * ss; … … 437 445 ss->vio.close = sources_radionoise_return_zero; 438 446 ss->vio.sync = sources_radionoise_return_zero; 439 ss->vio. nonblock = (int (*)(struct roar_vio_calls * vio, int state))sources_radionoise_return_zero;447 ss->vio.ctl = sources_radionoise_ctl; 440 448 441 449 return streams_set_fh(stream, -2);
Note: See TracChangeset
for help on using the changeset viewer.