version 1.27, 2011/10/12 07:20:04 |
version 1.28, 2011/11/20 22:54:51 |
|
|
wav_dbg(struct wav *f) |
wav_dbg(struct wav *f) |
{ |
{ |
static char *pstates[] = { "cfg", "ini", "sta", "rdy", "run", "mid" }; |
static char *pstates[] = { "cfg", "ini", "sta", "rdy", "run", "mid" }; |
struct aproc *midi = f->dev ? f->dev->midi : NULL; |
|
|
|
dbg_puts("wav("); |
dbg_puts("wav("); |
if (f->slot >= 0 && APROC_OK(midi)) { |
if (f->slot >= 0) { |
dbg_puts(midi->u.ctl.slot[f->slot].name); |
dbg_puts(f->dev->slot[f->slot].name); |
dbg_putu(midi->u.ctl.slot[f->slot].unit); |
dbg_putu(f->dev->slot[f->slot].unit); |
} else |
} else |
dbg_puts(f->pipe.file.name); |
dbg_puts(f->pipe.file.name); |
dbg_puts(")/"); |
dbg_puts(")/"); |
|
|
dbg_puts(": allocating buffers\n"); |
dbg_puts(": allocating buffers\n"); |
} |
} |
#endif |
#endif |
if (f->pstate == WAV_READY && ctl_slotstart(d->midi, f->slot)) |
if (f->pstate == WAV_READY && dev_slotstart(d, f->slot)) |
(void)wav_attach(f, 0); |
(void)wav_attach(f, 0); |
} |
} |
|
|
|
|
} |
} |
#endif |
#endif |
if (rbuf || wbuf) |
if (rbuf || wbuf) |
ctl_slotstop(f->dev->midi, f->slot); |
dev_slotstop(f->dev, f->slot); |
if (rbuf) |
if (rbuf) |
abuf_eof(rbuf); |
abuf_eof(rbuf); |
if (wbuf) |
if (wbuf) |
|
|
switch (f->pstate) { |
switch (f->pstate) { |
case WAV_START: |
case WAV_START: |
case WAV_READY: |
case WAV_READY: |
if (ctl_slotstart(f->dev->midi, f->slot)) |
if (dev_slotstart(f->dev, f->slot)) |
(void)wav_attach(f, 1); |
(void)wav_attach(f, 1); |
/* PASSTHROUGH */ |
/* PASSTHROUGH */ |
case WAV_RUN: |
case WAV_RUN: |
|
|
wav_midiattach(f); |
wav_midiattach(f); |
return 1; |
return 1; |
} |
} |
f->slot = ctl_slotnew(f->dev->midi, "wav", &ctl_wavops, f, 1); |
f->slot = dev_slotnew(f->dev, "wav", &ctl_wavops, f, 1); |
f->pstate = WAV_INIT; |
f->pstate = WAV_INIT; |
if ((f->mode & f->dev->mode) != f->mode) { |
if ((f->mode & f->dev->mode) != f->mode) { |
#ifdef DEBUG |
#ifdef DEBUG |
|
|
* don't make other stream wait for us |
* don't make other stream wait for us |
*/ |
*/ |
if (f->slot >= 0) |
if (f->slot >= 0) |
ctl_slotstart(f->dev->midi, f->slot); |
dev_slotstart(f->dev, f->slot); |
return 0; |
return 0; |
} |
} |
if (!pipe_seek(&f->pipe.file, f->mmcpos)) { |
if (!pipe_seek(&f->pipe.file, f->mmcpos)) { |
wav_exit(f); |
wav_exit(f); |
return 0; |
return 0; |
} |
} |
if (f->mode & MODE_RECMASK) |
if ((f->mode & MODE_RECMASK) && f->mmcpos > f->endpos) |
f->endpos = f->mmcpos; |
f->endpos = f->mmcpos; |
if (f->hdr == HDR_WAV) |
if (f->hdr == HDR_WAV) |
f->wbytes = WAV_DATAMAX - f->mmcpos; |
f->wbytes = WAV_DATAMAX - f->mmcpos; |
|
|
f->pstate = WAV_READY; |
f->pstate = WAV_READY; |
/* PASSTHROUGH */ |
/* PASSTHROUGH */ |
case WAV_READY: |
case WAV_READY: |
if (ctl_slotstart(f->dev->midi, f->slot)) |
if (dev_slotstart(f->dev, f->slot)) |
(void)wav_attach(f, 0); |
(void)wav_attach(f, 0); |
break; |
break; |
case WAV_RUN: |
case WAV_RUN: |
|
|
struct wav *f = (struct wav *)p->u.io.file; |
struct wav *f = (struct wav *)p->u.io.file; |
|
|
if (f->slot >= 0) |
if (f->slot >= 0) |
ctl_slotdel(f->dev->midi, f->slot); |
dev_slotdel(f->dev, f->slot); |
f->slot = -1; |
f->slot = -1; |
rfile_done(p); |
rfile_done(p); |
} |
} |
|
|
struct wav *f = (struct wav *)p->u.io.file; |
struct wav *f = (struct wav *)p->u.io.file; |
|
|
if (f->slot >= 0) |
if (f->slot >= 0) |
ctl_slotdel(f->dev->midi, f->slot); |
dev_slotdel(f->dev, f->slot); |
f->slot = -1; |
f->slot = -1; |
wfile_done(p); |
wfile_done(p); |
} |
} |