}
#define is_oss_pcm_class(fd) (fds[fd]->class == FD_OSS_DSP)
+#ifdef ENABLE_SEQUENCER
#define is_oss_seq_class(fd) (fds[fd]->class == FD_OSS_SEQ)
+#else
+#define is_oss_seq_class(fd) 0
+#endif /* ENABLE_SEQUENCER */
#define is_oss_pcm_or_seq_class(fd) (is_oss_pcm_class(fd) || is_oss_seq_class(fd))
static int is_dsp_device(const char *pathname)
return 0;
}
+#ifdef ENABLE_SEQUENCER
static int is_seq_device(const char *pathname)
{
if(!pathname) return 0;
if(strncmp(pathname,"/dev/music",10) == 0) return 1;
return 0;
}
+#else /* ENABLE_SEQUENCER */
+#define is_seq_device(pathname) 0
+#endif /* ENABLE_SEQUENCER */
static int oss_pcm_fcntl(int fd, int cmd, ...)
{
.mmap = bad_mmap,
.munmap = bad_munmap,
},
+#ifdef ENABLE_SEQUENCER
[FD_OSS_SEQ] = {
.close = lib_oss_seq_close,
.write = lib_oss_seq_write,
.mmap = bad_mmap,
.munmap = bad_munmap,
},
+#endif /* ENABLE_SEQUENCER */
};
static int dsp_open_helper(const char *file, int oflag)
return fd;
}
+#ifdef ENABLE_SEQUENCER
static int seq_open_helper(const char *file, int oflag)
{
int fd;
return fd;
}
+#define call_seq_poll_prepare lib_oss_seq_poll_prepare
+#define call_seq_poll_result lib_oss_seq_poll_result
+#define call_seq_poll_fds lib_oss_seq_poll_fds
+#define call_seq_select_prepare lib_oss_seq_select_prepare
+#define call_seq_select_result lib_oss_seq_select_result
+
+#else /* ENABLE_SEQUENCER */
+#define seq_open_helper(file, oflag) -1
+#define call_seq_poll_prepare(fd, ...) -1
+#define call_seq_poll_result(fd, ...) -1
+#define call_seq_poll_fds(fd, ...) -1
+#define call_seq_select_prepare(fd, ...) -1
+#define call_seq_select_result(fd, ...) -1
+#endif /* ENABLE_SEQUENCER */
+
#define DECL_OPEN(name, callback) \
int name(const char *file, int oflag, ...) \
{ \
if (is_oss_pcm_class(fd))
count = lib_oss_pcm_poll_prepare(fd, fmode, &pfds1[nfds1]);
else
- count = lib_oss_seq_poll_prepare(fd, fmode, &pfds1[nfds1]);
+ count = call_seq_poll_prepare(fd, fmode, &pfds1[nfds1]);
if (count < 0)
return -1;
nfds1 += count;
if (is_oss_pcm_class(fd))
result = lib_oss_pcm_poll_result(fd, &pfds1[nfds1]);
else
- result = lib_oss_seq_poll_result(fd, &pfds1[nfds1]);
+ result = call_seq_poll_result(fd, &pfds1[nfds1]);
revents = 0;
if (result < 0) {
revents |= POLLNVAL;
if (is_oss_pcm_class(fd))
nfds1 += lib_oss_pcm_poll_fds(fd);
else
- nfds1 += lib_oss_seq_poll_fds(fd);
+ nfds1 += call_seq_poll_fds(fd);
} else {
revents = pfds1[nfds1].revents;
nfds1++;
res = lib_oss_pcm_select_prepare(fd, fmode, rfds1, wfds1,
e ? efds1 : NULL);
else
- res = lib_oss_seq_select_prepare(fd, fmode, rfds1, wfds1,
- e ? efds1 : NULL);
+ res = call_seq_select_prepare(fd, fmode, rfds1, wfds1,
+ e ? efds1 : NULL);
if (res < 0)
return -1;
if (nfds1 < res + 1)
if (is_oss_pcm_class(fd))
result = lib_oss_pcm_select_result(fd, rfds1, wfds1, efds1);
else
- result = lib_oss_seq_select_result(fd, rfds1, wfds1, efds1);
+ result = call_seq_select_result(fd, rfds1, wfds1, efds1);
r1 = w1 = e1 = 0;
if (result < 0 && e) {
if (efds)
static int (*x_oss_mixer_close)(int fd);
int (*oss_mixer_ioctl)(int fd, unsigned long int request, ...);
+#ifdef ENABLE_SEQUENCER
static int (*x_oss_seq_open)(const char *pathname, int flags);
static int (*x_oss_seq_close)(int fd);
int (*oss_seq_nonblock)(int fd, int nonblock);
int (*oss_seq_poll_fds)(int fd);
int (*oss_seq_poll_prepare)(int fd, int fmode, struct pollfd *ufds);
int (*oss_seq_poll_result)(int fd, struct pollfd *ufds);
+#endif /* ENABLE_SEQUENCER */
static int native_pcm_nonblock(int fd, int nonblock)
{
return call_close(fd, x_oss_mixer_close);
}
+#ifdef ENABLE_SEQUENCER
int oss_seq_open(const char *pathname, int flags, ...)
{
return call_open(pathname, flags, x_oss_seq_open);
{
return call_close(fd, x_oss_seq_close);
}
+#endif /* ENABLE_SEQUENCER */
static void initialize(void)
{
oss_pcm_poll_prepare = native_pcm_poll_prepare;
oss_pcm_poll_result = native_pcm_poll_result;
oss_mixer_ioctl = ioctl;
+#ifdef ENABLE_SEQUENCER
/* reuse PCM helpers for sequencer */
oss_seq_nonblock = native_pcm_nonblock;
oss_seq_read = read;
oss_seq_poll_fds = native_pcm_poll_fds;
oss_seq_poll_prepare = native_pcm_poll_prepare;
oss_seq_poll_result = native_pcm_poll_result;
+#endif /* ENABLE_SEQUENCER */
} else {
dl_handle = dlopen(hal, RTLD_NOW);
if (dl_handle == NULL) {
x_oss_mixer_open = dlsym(dl_handle, "lib_oss_mixer_open");
x_oss_mixer_close = dlsym(dl_handle, "lib_oss_mixer_close");
oss_mixer_ioctl = dlsym(dl_handle, "lib_oss_mixer_ioctl");
+#ifdef ENABLE_SEQUENCER
x_oss_seq_open = dlsym(dl_handle, "lib_oss_seq_open");
x_oss_seq_close = dlsym(dl_handle, "lib_oss_seq_close");
oss_seq_nonblock = dlsym(dl_handle, "lib_oss_seq_nonblock");
oss_seq_poll_fds = dlsym(dl_handle, "lib_oss_seq_poll_fds");
oss_seq_poll_prepare = dlsym(dl_handle, "lib_oss_seq_poll_prepare");
oss_seq_poll_result = dlsym(dl_handle, "lib_oss_seq_poll_result");
+#endif /* ENABLE_SEQUENCER */
}
}