- FOR_EACH_SLOT(i) {
- struct slot_info *s = &slot[i];
- struct audio_format_info *a;
- struct receiver_node *rn = s->receiver_node;
- if (s->format < 0 || !rn)
- continue;
- a = &afi[s->format];
- ret = a->receiver->pre_select(rn, rfds, wfds, tv);
-// PARA_NOTICE_LOG("%s preselect: %d\n", a->receiver->name, ret);
- *max_fileno = MAX(*max_fileno, ret);
+void signal_pre_select(struct sched *s, struct task *t)
+{
+ struct signal_task *st = t->private_data;
+ t->ret = 1;
+ para_fd_set(st->fd, &s->rfds, &s->max_fileno);
+}
+
+void signal_post_select(struct sched *s, struct task *t)
+{
+ struct signal_task *st = t->private_data;
+ t->ret = 1;
+ if (!FD_ISSET(st->fd, &s->rfds))
+ return;
+ t->ret = -E_SIGNAL_CAUGHT;
+ st->signum = para_next_signal();
+}
+
+void signal_setup_default(struct signal_task *st)
+{
+ st->task.pre_select = signal_pre_select;
+ st->task.post_select = signal_post_select;
+ st->task.private_data = st;
+ st->task.flags = 0;
+ sprintf(st->task.status, "signal task");
+}
+
+static void command_pre_select(struct sched *s, struct task *t)
+{
+ struct command_task *ct = t->private_data;
+ para_fd_set(ct->fd, &s->rfds, &s->max_fileno);
+
+}
+
+static void command_post_select(struct sched *s, struct task *t)
+{
+ int ret;
+ struct command_task *ct = t->private_data;
+
+ if (audiod_status != AUDIOD_OFF)
+ audiod_status_dump();
+ t->ret = 1; /* always successful */
+ if (!FD_ISSET(ct->fd, &s->rfds))
+ return;
+ ret = handle_connect();
+ if (ret < 0)
+ PARA_ERROR_LOG("%s\n", PARA_STRERROR(-ret));
+}
+
+void init_command_task(struct command_task *ct)
+{
+ ct->task.pre_select = command_pre_select;
+ ct->task.post_select = command_post_select;
+ ct->task.private_data = ct;
+ ct->task.flags = 0;
+ sprintf(ct->task.status, "command task");
+}
+
+static void status_pre_select(struct sched *s, struct task *t)
+{
+ struct status_task *st = t->private_data;
+ t->ret = 1;
+ if (st->fd >= 0 && audiod_status == AUDIOD_OFF)
+ close_stat_pipe();
+ if (st->fd < 0 && audiod_status != AUDIOD_OFF) {
+ st->fd = open_stat_pipe();
+ st->loaded = 0;
+ st->buf[0] = '\0';