source: roaraudio/roard/roard.c @ 39:e3c8b57b6365

Last change on this file since 39:e3c8b57b6365 was 39:e3c8b57b6365, checked in by phi, 16 years ago

added some infos about our self client

File size: 4.8 KB
Line 
1//roard.c:
2
3#include "roard.h"
4
5void usage (void) {
6 printf("Usage: roard [OPTIONS]...\n\n");
7
8 printf("Audio Options:\n\n");
9 printf(
10        " -R  --rate   RATE     - Set server rate\n"
11        " -B  --bits   BITS     - Set server bits\n"
12        " -C  --chans  CHANNELS - Set server channels\n"
13       );
14
15 printf("\nDriver Options:\n\n");
16 printf(" -d  --driver DRV      - Set the driver, use '-d list' to get a list (default: %s)\n", ROAR_DRIVER_DEFAULT);
17 printf(" -D  --device DEV      - Set the device\n");
18 printf(" -dO OPTS              - Set output options\n");
19
20 printf("\nSource Options:\n\n");
21 printf(" -s  --source DRV      - Use DRV as input driver\n"
22        " -S           DEV      - Use DEV as input device\n"
23        " -sO          OPTS     - Use OPTS as input options\n"
24        " -sP                   - Make souce as primary\n"
25       );
26
27
28 printf("\nServer Options:\n\n");
29 printf(" -t  --tcp             - Use TCP listen socket\n"
30        " -u  --unix            - Use UNIX Domain listen socket (default)\n"
31        " -p  --port            - TCP Port to bind to\n"
32        " -b  --bind            - IP/Hostname to bind to\n"
33        " -s  --sock            - Filename for UNIX Domain Socket\n"
34       );
35// printf("\n Options:\n\n");
36 printf("\n");
37}
38
39int main (int argc, char * argv[]) {
40 int i;
41 char * k;
42 struct roar_audio_info sa;
43 char * driver = NULL;
44 char * device = NULL;
45 char * opts   = NULL;
46 char * server = ROAR_DEFAULT_HOST;
47 int      port = ROAR_DEFAULT_PORT;
48 int               drvid;
49 char * s_dev  = NULL;
50 char * s_con  = NULL;
51 char * s_opt  = NULL;
52 int    s_prim = 0;
53 DRIVER_USERDATA_T drvinst;
54 struct roar_client * self = NULL;
55
56 g_listen_socket = -1;
57 g_standby       =  0;
58
59 sa.bits     = ROAR_BITS_DEFAULT;
60 sa.channels = ROAR_CHANNELS_DEFAULT;
61 sa.rate     = ROAR_RATE_DEFAULT;
62 sa.codec    = ROAR_CODEC_DEFAULT;
63
64 g_sa = &sa;
65
66 if ( sources_init() == -1 ) {
67  ROAR_ERR("Can not init sources!");
68  return 1;
69 }
70
71 for (i = 1; i < argc; i++) {
72  k = argv[i];
73
74  if ( strcmp(k, "-h") == 0 || strcmp(k, "--help") == 0 ) {
75   usage();
76   return 0;
77
78  } else if ( strcmp(k, "-R") == 0 || strcmp(k, "--rate") == 0 ) {
79   sa.rate = atoi(argv[++i]);
80  } else if ( strcmp(k, "-B") == 0 || strcmp(k, "--bits") == 0 ) {
81   sa.bits = atoi(argv[++i]);
82  } else if ( strcmp(k, "-C") == 0 || strcmp(k, "--chans") == 0 ) {
83   sa.channels = atoi(argv[++i]);
84
85  } else if ( strcmp(k, "-d") == 0 || strcmp(k, "--driver") == 0 ) {
86   driver = argv[++i];
87   if ( strcmp(driver, "list") == 0 ) {
88    print_driverlist();
89   }
90  } else if ( strcmp(k, "-D") == 0 || strcmp(k, "--device") == 0 ) {
91   device = argv[++i];
92  } else if ( strcmp(k, "-dO") == 0 ) {
93   opts = argv[++i];
94
95  } else if ( strcmp(k, "-s") == 0 || strcmp(k, "--source") == 0 ) {
96   k = argv[++i];
97   if ( sources_add(k, s_dev, s_con, s_opt, s_prim) == -1 ) {
98    ROAR_ERR("main(*): adding source '%s' via '%s' failed!", s_dev, k);
99   }
100   s_opt = s_dev = s_con = NULL;
101   s_prim = 0;
102  } else if ( strcmp(k, "-S") == 0 ) {
103   s_dev = argv[++i];
104  } else if ( strcmp(k, "-sO") == 0 ) {
105   s_opt = argv[++i];
106  } else if ( strcmp(k, "-sC") == 0 ) {
107   s_con = argv[++i];
108  } else if ( strcmp(k, "-sP") == 0 ) {
109   s_prim = 1;
110
111  } else if ( strcmp(k, "-p") == 0 || strcmp(k, "--port") == 0 ) {
112   port = atoi(argv[++i]);
113  } else if ( strcmp(k, "-b") == 0 || strcmp(k, "--bind") == 0 ) {
114   server = argv[++i];
115
116  } else {
117   usage();
118   return 1;
119  }
120
121 }
122
123 ROAR_DBG("Server config: rate=%i, bits=%i, chans=%i", sa.rate, sa.bits, sa.channels);
124
125 if ( (g_listen_socket = roar_socket_listen(ROAR_SOCKET_TYPE_UNKNOWN, server, port)) == -1 ) {
126  ROAR_ERR("Can not open listen socket!");
127  return 1;
128 }
129
130 if ( output_buffer_init(&sa) == -1 ) {
131  ROAR_ERR("Can not init output buffer!");
132  return 1;
133 }
134
135 if ( driver_open(&drvinst, &drvid, driver, device, &sa) == -1 ) {
136  ROAR_ERR("Can not open output driver!");
137  return 1;
138 }
139
140 if ( clients_init() == -1 ) {
141  ROAR_ERR("Can not init clients!");
142  return 1;
143 }
144
145 if ( streams_init() == -1 ) {
146  ROAR_ERR("Can not nit streams!");
147  return 1;
148 }
149
150 signal(SIGINT,  on_sig_int);
151 signal(SIGPIPE, SIG_IGN);  // ignore broken pipes
152
153
154 if ( (g_self_client = clients_new()) == -1 ) {
155  ROAR_ERR("Can not create self client!");
156  return 1;
157 }
158
159 clients_set_pid(g_self_client, getpid());
160 clients_get(g_self_client, &self);
161
162 if ( self == NULL ) {
163  ROAR_ERR("Can not get self client!");
164  return 1;
165 }
166
167 strcpy(self->name, "RoarAudio demon internal");
168 // start main loop...
169 main_loop(drvid, drvinst, &sa);
170
171 // clean up.
172 clean_quit_prep();
173 driver_close(drvinst, drvid);
174 output_buffer_free();
175
176 return 0;
177}
178
179void clean_quit_prep (void) {
180 close(g_listen_socket);
181 sources_free();
182 streams_free();
183 clients_free();
184}
185
186void clean_quit (void) {
187 clean_quit_prep();
188// driver_close(drvinst, drvid);
189// output_buffer_free();
190 exit(0);
191}
192
193//ll
Note: See TracBrowser for help on using the repository browser.