Browse Source

Dynamically scan and print backend and internal names in jackd.

tags/v1.9.10
Stephane Letz 12 years ago
parent
commit
c4fb864e9f
1 changed files with 68 additions and 45 deletions
  1. +68
    -45
      common/Jackdmp.cpp

+ 68
- 45
common/Jackdmp.cpp View File

@@ -88,51 +88,12 @@ static void copyright(FILE* file)
{ {
fprintf(file, "jackdmp " VERSION "\n" fprintf(file, "jackdmp " VERSION "\n"
"Copyright 2001-2005 Paul Davis and others.\n" "Copyright 2001-2005 Paul Davis and others.\n"
"Copyright 2004-2012 Grame.\n"
"Copyright 2004-2013 Grame.\n"
"jackdmp comes with ABSOLUTELY NO WARRANTY\n" "jackdmp comes with ABSOLUTELY NO WARRANTY\n"
"This is free software, and you are welcome to redistribute it\n" "This is free software, and you are welcome to redistribute it\n"
"under certain conditions; see the file COPYING for details\n"); "under certain conditions; see the file COPYING for details\n");
} }


static void usage(FILE* file)
{
fprintf(file, "\n"
"usage: jackdmp [ --no-realtime OR -r ]\n"
" [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n"
" (the two previous arguments are mutually exclusive. The default is --realtime)\n"
" [ --name OR -n server-name ]\n"
" [ --timeout OR -t client-timeout-in-msecs ]\n"
" [ --loopback OR -L loopback-port-number ]\n"
" [ --port-max OR -p maximum-number-of-ports]\n"
" [ --slave-backend OR -X slave-backend-name ]\n"
" [ --internal-client OR -I internal-client-name ]\n"
" [ --verbose OR -v ]\n"
#ifdef __linux__
" [ --clocksource OR -c [ c(ycle) | h(pet) | s(ystem) ]\n"
#endif
" [ --replace-registry ]\n"
" [ --silent OR -s ]\n"
" [ --sync OR -S ]\n"
" [ --temporary OR -T ]\n"
" [ --version OR -V ]\n"
" -d master-backend-name [ ... master-backend args ... ]\n"
#ifdef __APPLE__
" Available master backends may include: coreaudio, dummy, net or netone.\n\n"
#endif
#ifdef WIN32
" Available master backends may include: portaudio, dummy, net or netone.\n\n"
#endif
#ifdef __linux__
" Available master backends may include: alsa, dummy, freebob, firewire, net or netone.\n\n"
#endif
#if defined(__sun__) || defined(sun)
" Available master backends may include: boomer, oss, dummy or net.\n\n"
#endif
" jackdmp -d master-backend-name --help\n"
" to display options for each master backend\n\n");
}

// To put in the control.h interface ??
static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, const char *driver_name) static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, const char *driver_name)
{ {
const JSList * node_ptr = jackctl_server_get_drivers_list(server); const JSList * node_ptr = jackctl_server_get_drivers_list(server);
@@ -147,6 +108,20 @@ static jackctl_driver_t * jackctl_server_get_driver(jackctl_server_t *server, co
return NULL; return NULL;
} }


static void print_server_drivers(jackctl_server_t *server, FILE* file)
{
const JSList * node_ptr = jackctl_server_get_drivers_list(server);

fprintf(file, "Available backends:\n");
while (node_ptr) {
jackctl_driver_t* driver = (jackctl_driver_t *)node_ptr->data;
fprintf(file, " %s (%s)\n", jackctl_driver_get_name(driver), (jackctl_driver_get_type(driver) == JackMaster) ? "master" : "slave");
node_ptr = jack_slist_next(node_ptr);
}
fprintf(file, "\n");
}

static jackctl_internal_t * jackctl_server_get_internal(jackctl_server_t *server, const char *internal_name) static jackctl_internal_t * jackctl_server_get_internal(jackctl_server_t *server, const char *internal_name)
{ {
const JSList * node_ptr = jackctl_server_get_internals_list(server); const JSList * node_ptr = jackctl_server_get_internals_list(server);
@@ -161,6 +136,20 @@ static jackctl_internal_t * jackctl_server_get_internal(jackctl_server_t *server
return NULL; return NULL;
} }


static void print_server_internals(jackctl_server_t *server, FILE* file)
{
const JSList * node_ptr = jackctl_server_get_internals_list(server);

fprintf(file, "Available internals:\n");
while (node_ptr) {
jackctl_internal_t* internal = (jackctl_internal_t *)node_ptr->data;
fprintf(file, " %s\n", jackctl_internal_get_name(internal));
node_ptr = jack_slist_next(node_ptr);
}
fprintf(file, "\n");
}

static jackctl_parameter_t * jackctl_get_parameter(const JSList * parameters_list, const char * parameter_name) static jackctl_parameter_t * jackctl_get_parameter(const JSList * parameters_list, const char * parameter_name)
{ {
while (parameters_list) { while (parameters_list) {
@@ -173,6 +162,38 @@ static jackctl_parameter_t * jackctl_get_parameter(const JSList * parameters_lis
return NULL; return NULL;
} }



static void usage(FILE* file, jackctl_server_t *server)
{
fprintf(file, "\n"
"usage: jackdmp [ --no-realtime OR -r ]\n"
" [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n"
" (the two previous arguments are mutually exclusive. The default is --realtime)\n"
" [ --name OR -n server-name ]\n"
" [ --timeout OR -t client-timeout-in-msecs ]\n"
" [ --loopback OR -L loopback-port-number ]\n"
" [ --port-max OR -p maximum-number-of-ports]\n"
" [ --slave-backend OR -X slave-backend-name ]\n"
" [ --internal-client OR -I internal-client-name ]\n"
" [ --verbose OR -v ]\n"
#ifdef __linux__
" [ --clocksource OR -c [ c(ycle) | h(pet) | s(ystem) ]\n"
#endif
" [ --replace-registry ]\n"
" [ --silent OR -s ]\n"
" [ --sync OR -S ]\n"
" [ --temporary OR -T ]\n"
" [ --version OR -V ]\n"
" -d master-backend-name [ ... master-backend args ... ]\n"
" jackdmp -d master-backend-name --help\n"
" to display options for each master backend\n\n");
if (server) {
print_server_drivers(server, file);
print_server_internals(server, file);
}
}

// Prototype to be found in libjackserver // Prototype to be found in libjackserver
extern "C" void silent_jack_error_callback(const char *desc); extern "C" void silent_jack_error_callback(const char *desc);


@@ -270,7 +291,7 @@ int main(int argc, char** argv)
value.ui = JACK_TIMER_SYSTEM_CLOCK; value.ui = JACK_TIMER_SYSTEM_CLOCK;
jackctl_parameter_set_value(param, &value); jackctl_parameter_set_value(param, &value);
} else { } else {
usage(stdout);
usage(stdout, NULL);
goto destroy_server; goto destroy_server;
} }
} }
@@ -379,7 +400,7 @@ int main(int argc, char** argv)
/*fallthru*/ /*fallthru*/


case 'h': case 'h':
usage(stdout);
usage(stdout, server_ctl);
goto destroy_server; goto destroy_server;
} }
} }
@@ -400,7 +421,7 @@ int main(int argc, char** argv)
} }


if (!master_driver_name) { if (!master_driver_name) {
usage(stderr);
usage(stderr, NULL);
goto destroy_server; goto destroy_server;
} }


@@ -524,15 +545,17 @@ int main(int argc, char** argv)
// Slave drivers // Slave drivers
for (it = slaves_list.begin(); it != slaves_list.end(); it++) { for (it = slaves_list.begin(); it != slaves_list.end(); it++) {
jackctl_driver_t * slave_driver_ctl = jackctl_server_get_driver(server_ctl, *it); jackctl_driver_t * slave_driver_ctl = jackctl_server_get_driver(server_ctl, *it);
if (slave_driver_ctl)
if (slave_driver_ctl) {
jackctl_server_remove_slave(server_ctl, slave_driver_ctl); jackctl_server_remove_slave(server_ctl, slave_driver_ctl);
}
} }


// Internal clients // Internal clients
for (it = internals_list.begin(); it != internals_list.end(); it++) { for (it = internals_list.begin(); it != internals_list.end(); it++) {
jackctl_internal_t * internal_driver_ctl = jackctl_server_get_internal(server_ctl, *it); jackctl_internal_t * internal_driver_ctl = jackctl_server_get_internal(server_ctl, *it);
if (internal_driver_ctl)
if (internal_driver_ctl) {
jackctl_server_unload_internal(server_ctl, internal_driver_ctl); jackctl_server_unload_internal(server_ctl, internal_driver_ctl);
}
} }
jackctl_server_close(server_ctl); jackctl_server_close(server_ctl);




Loading…
Cancel
Save