ssize_t snd_pcm_transfer_size(snd_pcm_t *handle, int channel);
ssize_t snd_pcm_write(snd_pcm_t *handle, const void *buffer, size_t size);
ssize_t snd_pcm_read(snd_pcm_t *handle, void *buffer, size_t size);
+ssize_t snd_pcm_writev(snd_pcm_t *pcm, const struct iovec *vector, int count);
+ssize_t snd_pcm_readv(snd_pcm_t *pcm, const struct iovec *vector, int count);
int snd_pcm_mmap(snd_pcm_t *handle, int channel, snd_pcm_mmap_control_t **control, void **buffer);
int snd_pcm_munmap(snd_pcm_t *handle, int channel);
return result;
}
+ssize_t snd_pcm_writev(snd_pcm_t *pcm, const struct iovec *vector, int count)
+{
+ ssize_t result;
+
+ if (!pcm || (!vector && count > 0) || count < 0)
+ return -EINVAL;
+ if (pcm->fd[SND_PCM_CHANNEL_PLAYBACK] < 0)
+ return -EINVAL;
+#if 0
+ result = writev(pcm->fd[SND_PCM_CHANNEL_PLAYBACK], vector, count);
+#else
+ {
+ snd_v_args_t args;
+ args.vector = vector;
+ args.count = count;
+ result = ioctl(pcm->fd[SND_PCM_CHANNEL_PLAYBACK], SND_IOCTL_WRITEV, &args);
+ }
+#endif
+ if (result < 0)
+ return -errno;
+ return result;
+}
+
ssize_t snd_pcm_read(snd_pcm_t *pcm, void *buffer, size_t size)
{
ssize_t result;
return result;
}
+ssize_t snd_pcm_readv(snd_pcm_t *pcm, const struct iovec *vector, int count)
+{
+ ssize_t result;
+
+ if (!pcm || (!vector && count > 0) || count < 0)
+ return -EINVAL;
+ if (pcm->fd[SND_PCM_CHANNEL_CAPTURE] < 0)
+ return -EINVAL;
+#if 0
+ result = readv(pcm->fd[SND_PCM_CHANNEL_CAPTURE], vector, count);
+#else
+ {
+ snd_v_args_t args;
+ args.vector = vector;
+ args.count = count;
+ result = ioctl(pcm->fd[SND_PCM_CHANNEL_CAPTURE], SND_IOCTL_READV, &args);
+ }
+#endif
+ if (result < 0)
+ return -errno;
+ return result;
+}
+
int snd_pcm_mmap(snd_pcm_t *pcm, int channel, snd_pcm_mmap_control_t **control, void **buffer)
{
snd_pcm_channel_info_t info;