Replace Util.pprint by Logs.pprint
[jack2.git] / example-clients / server_control.cpp
blobe131c73d42db7890a45910b54973275d0f888e3b
1 /*
2 Copyright (C) 2008 Grame
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 #include <stdio.h>
20 #include <errno.h>
21 #include <unistd.h>
22 #include <stdlib.h>
23 #include <string.h>
24 #include <getopt.h>
25 #include <jack/jack.h>
26 #include <jack/control.h>
28 static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, const char *driver_name)
30 const JSList * node_ptr = jackctl_server_get_drivers_list(server);
32 while (node_ptr) {
33 if (strcmp(jackctl_driver_get_name((jackctl_driver_t *)node_ptr->data), driver_name) == 0) {
34 return (jackctl_driver_t *)node_ptr->data;
36 node_ptr = jack_slist_next(node_ptr);
39 return NULL;
42 static jackctl_internal_t * jackctl_server_get_internal(jackctl_server_t *server, const char *internal_name)
44 const JSList * node_ptr = jackctl_server_get_internals_list(server);
46 while (node_ptr) {
47 if (strcmp(jackctl_internal_get_name((jackctl_internal_t *)node_ptr->data), internal_name) == 0) {
48 return (jackctl_internal_t *)node_ptr->data;
50 node_ptr = jack_slist_next(node_ptr);
53 return NULL;
56 #if 0
57 static jackctl_parameter_t *
58 jackctl_get_parameter(
59 const JSList * parameters_list,
60 const char * parameter_name)
62 while (parameters_list)
64 if (strcmp(jackctl_parameter_get_name((jackctl_parameter_t *)parameters_list->data), parameter_name) == 0)
66 return (jackctl_parameter_t *)parameters_list->data;
69 parameters_list = jack_slist_next(parameters_list);
72 return NULL;
74 #endif
76 static void print_value(union jackctl_parameter_value value, jackctl_param_type_t type)
78 switch (type) {
80 case JackParamInt:
81 printf("parameter value = %d\n", value.i);
82 break;
84 case JackParamUInt:
85 printf("parameter value = %u\n", value.ui);
86 break;
88 case JackParamChar:
89 printf("parameter value = %c\n", value.c);
90 break;
92 case JackParamString:
93 printf("parameter value = %s\n", value.str);
94 break;
96 case JackParamBool:
97 printf("parameter value = %d\n", value.b);
98 break;
102 static void print_parameters(const JSList * node_ptr)
104 while (node_ptr != NULL) {
105 jackctl_parameter_t * parameter = (jackctl_parameter_t *)node_ptr->data;
106 printf("\nparameter name = %s\n", jackctl_parameter_get_name(parameter));
107 printf("parameter id = %c\n", jackctl_parameter_get_id(parameter));
108 printf("parameter short decs = %s\n", jackctl_parameter_get_short_description(parameter));
109 printf("parameter long decs = %s\n", jackctl_parameter_get_long_description(parameter));
110 print_value(jackctl_parameter_get_default_value(parameter), jackctl_parameter_get_type(parameter));
111 node_ptr = jack_slist_next(node_ptr);
115 static void print_driver(jackctl_driver_t * driver)
117 printf("\n--------------------------\n");
118 printf("driver = %s\n", jackctl_driver_get_name(driver));
119 printf("-------------------------- \n");
120 print_parameters(jackctl_driver_get_parameters(driver));
123 static void print_internal(jackctl_internal_t * internal)
125 printf("\n-------------------------- \n");
126 printf("internal = %s\n", jackctl_internal_get_name(internal));
127 printf("-------------------------- \n");
128 print_parameters(jackctl_internal_get_parameters(internal));
131 static void usage()
133 fprintf (stderr, "\n"
134 "usage: jack_server_control \n"
135 " [ --driver OR -d driver_name ]\n"
136 " [ --client OR -c client_name ]\n"
140 int main(int argc, char *argv[])
142 jackctl_server_t * server;
143 const JSList * parameters;
144 const JSList * drivers;
145 const JSList * internals;
146 const JSList * node_ptr;
147 sigset_t signals;
148 int opt, option_index;
149 const char* driver_name = "dummy";
150 const char* client_name = "audioadapter";
152 const char *options = "d:c:";
153 struct option long_options[] = {
154 {"driver", 1, 0, 'd'},
155 {"client", 1, 0, 'c'},
158 while ((opt = getopt_long (argc, argv, options, long_options, &option_index)) != EOF) {
159 switch (opt) {
160 case 'd':
161 driver_name = optarg;
162 break;
163 case 'c':
164 client_name = optarg;
165 break;
166 default:
167 usage();
168 exit(0);
172 server = jackctl_server_create(NULL, NULL);
173 parameters = jackctl_server_get_parameters(server);
176 jackctl_parameter_t* param;
177 union jackctl_parameter_value value;
178 param = jackctl_get_parameter(parameters, "verbose");
179 if (param != NULL) {
180 value.b = true;
181 jackctl_parameter_set_value(param, &value);
185 printf("\n========================== \n");
186 printf("List of server parameters \n");
187 printf("========================== \n");
189 print_parameters(parameters);
191 printf("\n========================== \n");
192 printf("List of drivers \n");
193 printf("========================== \n");
195 drivers = jackctl_server_get_drivers_list(server);
196 node_ptr = drivers;
197 while (node_ptr != NULL) {
198 print_driver((jackctl_driver_t *)node_ptr->data);
199 node_ptr = jack_slist_next(node_ptr);
202 printf("\n========================== \n");
203 printf("List of internal clients \n");
204 printf("========================== \n");
206 internals = jackctl_server_get_internals_list(server);
207 node_ptr = internals;
208 while (node_ptr != NULL) {
209 print_internal((jackctl_internal_t *)node_ptr->data);
210 node_ptr = jack_slist_next(node_ptr);
213 // No error checking in this simple example...
215 jackctl_server_open(server, jackctl_server_get_driver(server, driver_name));
216 jackctl_server_start(server);
218 jackctl_server_load_internal(server, jackctl_server_get_internal(server, client_name));
221 // Switch master test
223 jackctl_driver_t* master;
225 usleep(5000000);
226 printf("jackctl_server_load_master\n");
227 master = jackctl_server_get_driver(server, "coreaudio");
228 jackctl_server_switch_master(server, master);
230 usleep(5000000);
231 printf("jackctl_server_load_master\n");
232 master = jackctl_server_get_driver(server, "dummy");
233 jackctl_server_switch_master(server, master);
237 signals = jackctl_setup_signals(0);
238 jackctl_wait_signals(signals);
239 jackctl_server_stop(server);
240 jackctl_server_close(server);
241 jackctl_server_destroy(server);
242 return 0;