+/*
+ * Copyright (C) 2006-2007 Andre Noll <maan@systemlinux.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
+ */
+
/** \file audiod.h symbols exported from audiod.c */
+
+
int num_filters(int audio_format_num);
int get_audio_format_num(char *name);
*/
enum {AUDIOD_OFF, AUDIOD_ON, AUDIOD_STANDBY};
+/** defines one command of para_audiod */
+struct audiod_command {
+ /** the name of the command */
+ const char *name;
+ /** pointer to the function that handles the command */
+ int (*handler)(int, int, char**);
+ /**
+ * if the command prefers to handle the full line (rather than the usual
+ * argv[] array), it stores a pointer to the corresponding line handling
+ * function here. In this case, the above \a handler pointer must be NULL.
+ */
+ int (*line_handler)(int, char*);
+ /** one-line description of the command */
+ const char *description;
+ /** summary of the command line options */
+ const char *synopsis;
+ /** the long help text */
+ const char *help;
+};
+
/**
* describes one instance of a receiver-filter-writer chain
*
#include "daemon.h"
#include "string.h"
#include "fd.h"
-
-/** defines one command of para_audiod */
-struct audiod_command {
- /** the name of the command */
- const char *name;
- /** pointer to the function that handles the command */
- int (*handler)(int, int, char**);
- /**
- * if the command prefers to handle the full line (rather than the usual
- * argv[] array), it stores a pointer to the corresponding line handling
- * function here. In this case, the above \a handler pointer must be NULL.
- */
- int (*line_handler)(int, char*);
- /** one-line description of the command */
- const char *description;
- /** summary of the command line options */
- const char *synopsis;
- /** the long help text */
- const char *help;
-};
-static int com_grab(int, char *);
-static int com_cycle(int, int, char **);
-static int com_help(int, int, char **);
-static int com_kill(int, int, char **);
-static int com_off(int, int, char **);
-static int com_on(int, int, char **);
-static int com_sb(int, int, char **);
-static int com_stat(int, int, char **);
-static int com_tasks(int, int, char **);
-static int com_term(int, int, char **);
-static struct audiod_command cmds[] = {
-{
-.name = "cycle",
-.handler = com_cycle,
-.description = "switch to next mode",
-.synopsis = "cycle",
-.help =
-
-"on -> standby -> off -> on\n"
-
-},
-{
-.name = "grab",
-.line_handler = com_grab,
-.description = "grab the audio stream",
-.synopsis = "-- grab [grab_options]",
-.help =
-
-"grab ('splice') the audio stream at any position in the filter \n"
-"chain and send that data back to the client. Try\n"
-"\t para_audioc -- grab -h\n"
-"for the list of available options.\n"
-},
-
-{
-.name = "help",
-.handler = com_help,
-.description = "display command list or help for given command",
-.synopsis = "help [command]",
-.help =
-
-"When I was younger, so much younger than today, I never needed\n"
-"anybody's help in any way. But now these days are gone, I'm not so\n"
-"self assured. Now I find I've changed my mind and opened up the doors.\n"
-"\n"
-" -- Beatles: Help\n"
-
-},
-{
-.name = "kill",
-.handler = com_kill,
-.description = "kill an active audiod task",
-.synopsis = "kill task_id [task_id ...]",
-.help =
-
-"call sched_unregister() and the event_handler of the given task(s)\n"
-
-},
-{
-.name = "off",
-.handler = com_off,
-.description = "deactivate para_audiod",
-.synopsis = "off",
-.help =
-
-"Close connection to para_server and stop all decoders.\n"
-
-},
-{
-.name = "on",
-.handler = com_on,
-.description = "activate para_audiod",
-.synopsis = "on",
-.help =
-
-"Establish connection to para_server, retrieve para_server's current\n"
-"status. If playing, start corresponding decoder. Otherwise stop\n"
-"all decoders.\n"
-
-},
-{
-.name = "sb",
-.handler = com_sb,
-.description = "enter standby mode",
-.synopsis = "sb",
-.help =
-
-"Stop all decoders but leave connection to para_server open.\n"
-
-},
-{
-.name = "stat",
-.handler = com_stat,
-.description = "print status information",
-.synopsis = "stat [item1 ...]",
-.help =
-
-"Dump given status items (all if none given) to stdout.\n"
-
-},
-{
-.name = "tasks",
-.handler = com_tasks,
-.description = "list current tasks",
-.synopsis = "tasks",
-.help =
-
-"print the list of task ids together with the status of each task\n"
-
-},
-{
-.name = "term",
-.handler = com_term,
-.description = "terminate audiod",
-.synopsis = "term",
-.help =
-
-"Stop all decoders, shut down connection to para_server and exit.\n"
-
-},
-{
-.name = NULL,
-}
-};
+#include "audiod_command_list.h"
/** iterate over the array of all audiod commands */
#define FOR_EACH_COMMAND(c) for (c = 0; cmds[c].name; c++)
* to each individual command to close the fd if necessary.
*/
-static int com_help(int fd, int argc, char **argv)
+int com_help(int fd, int argc, char **argv)
{
int i, ret;
char *buf;
return ret;
}
-static int com_tasks(int fd, __a_unused int argc, __a_unused char **argv)
+int com_tasks(int fd, __a_unused int argc, __a_unused char **argv)
{
char *tl = get_task_list();
int ret = 1;
return ret;
}
-static int com_kill(int fd, int argc, char **argv)
+int com_kill(int fd, int argc, char **argv)
{
int i, ret = 1;
if (argc < 2)
return ret;
}
-static int com_stat(int fd, __a_unused int argc, __a_unused char **argv)
+int com_stat(int fd, __a_unused int argc, __a_unused char **argv)
{
int i, ret;
char *buf = NULL;
return NULL;
}
-static int com_grab(int fd, char *cmdline)
+int com_grab(int fd, char *cmdline)
{
struct grab_client *gc;
struct filter_node *fn;
return 1;
}
-static int __noreturn com_term(int fd, __a_unused int argc, __a_unused char **argv)
+int __noreturn com_term(int fd, __a_unused int argc, __a_unused char **argv)
{
close(fd);
clean_exit(EXIT_SUCCESS, "terminating on user request");
}
-static int com_on(int fd, __a_unused int argc, __a_unused char **argv)
+int com_on(int fd, __a_unused int argc, __a_unused char **argv)
{
audiod_status = AUDIOD_ON;
close(fd);
return 1;
}
-static int com_off(int fd, __a_unused int argc, __a_unused char **argv)
+int com_off(int fd, __a_unused int argc, __a_unused char **argv)
{
audiod_status = AUDIOD_OFF;
close(fd);
return 1;
}
-static int com_sb(int fd, __a_unused int argc, __a_unused char **argv)
+int com_sb(int fd, __a_unused int argc, __a_unused char **argv)
{
audiod_status = AUDIOD_STANDBY;
close(fd);
return 1;
}
-static int com_cycle(int fd, int argc, char **argv)
+int com_cycle(int fd, int argc, char **argv)
{
switch (audiod_status) {
case AUDIOD_ON: