summaryrefslogtreecommitdiff
path: root/cras/src/tools/cras_monitor/cras_monitor.c
diff options
context:
space:
mode:
Diffstat (limited to 'cras/src/tools/cras_monitor/cras_monitor.c')
-rw-r--r--cras/src/tools/cras_monitor/cras_monitor.c309
1 files changed, 0 insertions, 309 deletions
diff --git a/cras/src/tools/cras_monitor/cras_monitor.c b/cras/src/tools/cras_monitor/cras_monitor.c
deleted file mode 100644
index 19252773..00000000
--- a/cras/src/tools/cras_monitor/cras_monitor.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <errno.h>
-#include <getopt.h>
-#include <inttypes.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdint.h>
-#include <string.h>
-#include <syslog.h>
-#include <sys/select.h>
-#include <unistd.h>
-
-#include "cras_client.h"
-#include "cras_types.h"
-#include "cras_util.h"
-#include "cras_version.h"
-
-static void output_volume_changed(void *context, int32_t volume)
-{
- printf("output volume: %d/100\n", volume);
-}
-
-static void output_mute_changed(void *context, int muted, int user_muted,
- int mute_locked)
-{
- printf("output mute: muted: %d, user_muted: %d, mute_locked: %d\n",
- muted, user_muted, mute_locked);
-}
-
-static void capture_mute_changed(void *context, int muted, int mute_locked)
-{
- printf("capture mute: muted: %d, mute_locked: %d\n", muted,
- mute_locked);
-}
-
-static void nodes_changed(void *context)
-{
- printf("nodes changed\n");
-}
-
-static const char *string_for_direction(enum CRAS_STREAM_DIRECTION dir)
-{
- switch (dir) {
- case CRAS_STREAM_OUTPUT:
- return "output";
- case CRAS_STREAM_INPUT:
- return "input";
- case CRAS_STREAM_POST_MIX_PRE_DSP:
- return "post_mix_pre_dsp";
- default:
- break;
- }
-
- return "undefined";
-}
-
-size_t node_array_index_of_node_id(struct cras_ionode_info *nodes,
- size_t num_nodes, cras_node_id_t node_id)
-{
- uint32_t dev_index = dev_index_of(node_id);
- uint32_t node_index = node_index_of(node_id);
- size_t i;
-
- for (i = 0; i < num_nodes; i++) {
- if (nodes[i].iodev_idx == dev_index &&
- nodes[i].ionode_idx == node_index)
- return i;
- }
- return CRAS_MAX_IONODES;
-}
-
-const char *node_name_for_node_id(struct cras_client *client,
- enum CRAS_STREAM_DIRECTION dir,
- cras_node_id_t node_id)
-{
- struct cras_ionode_info nodes[CRAS_MAX_IONODES];
- struct cras_iodev_info devs[CRAS_MAX_IODEVS];
- size_t num_devs = CRAS_MAX_IODEVS;
- size_t num_nodes = CRAS_MAX_IONODES;
- uint32_t iodev_idx = dev_index_of(node_id);
- size_t node_index;
- char buf[1024];
- int rc;
-
- if (node_id == 0) {
- return strdup("none");
- } else if (iodev_idx <= 2) {
- return strdup("fallback");
- } else if (dir == CRAS_STREAM_POST_MIX_PRE_DSP) {
- snprintf(buf, sizeof(buf), "%s node: %" PRIu64 "\n",
- string_for_direction(dir), node_id);
- return strdup(buf);
- } else if (dir == CRAS_STREAM_OUTPUT) {
- rc = cras_client_get_output_devices(client, devs, nodes,
- &num_devs, &num_nodes);
- } else if (dir == CRAS_STREAM_INPUT) {
- rc = cras_client_get_input_devices(client, devs, nodes,
- &num_devs, &num_nodes);
- } else {
- return strdup("unknown");
- }
-
- if (rc != 0) {
- syslog(LOG_ERR, "Couldn't get output devices: %s\n",
- strerror(-rc));
- snprintf(buf, sizeof(buf), "%u:%u", iodev_idx,
- node_index_of(node_id));
- return strdup(buf);
- }
- node_index = node_array_index_of_node_id(nodes, num_nodes, node_id);
- if (node_index >= num_nodes)
- snprintf(buf, sizeof(buf), "unknown: %zu >= %zu", node_index,
- num_nodes);
- else
- snprintf(buf, sizeof(buf), "%u:%u: %s",
- nodes[node_index].iodev_idx,
- nodes[node_index].ionode_idx, nodes[node_index].name);
- return strdup(buf);
-}
-
-static void active_node_changed(void *context, enum CRAS_STREAM_DIRECTION dir,
- cras_node_id_t node_id)
-{
- struct cras_client *client = (struct cras_client *)context;
- const char *node_name = node_name_for_node_id(client, dir, node_id);
- printf("active node (%s): %s\n", string_for_direction(dir), node_name);
- free((void *)node_name);
-}
-
-static void output_node_volume_changed(void *context, cras_node_id_t node_id,
- int32_t volume)
-{
- struct cras_client *client = (struct cras_client *)context;
- const char *node_name =
- node_name_for_node_id(client, CRAS_STREAM_OUTPUT, node_id);
- printf("output node '%s' volume: %d\n", node_name, volume);
- free((void *)node_name);
-}
-
-static void node_left_right_swapped_changed(void *context,
- cras_node_id_t node_id, int swapped)
-{
- struct cras_client *client = (struct cras_client *)context;
- const char *node_name =
- node_name_for_node_id(client, CRAS_STREAM_OUTPUT, node_id);
- printf("output node '%s' left-right swapped: %d\n", node_name, swapped);
- free((void *)node_name);
-}
-
-static void input_node_gain_changed(void *context, cras_node_id_t node_id,
- int32_t gain)
-{
- struct cras_client *client = (struct cras_client *)context;
- const char *node_name =
- node_name_for_node_id(client, CRAS_STREAM_INPUT, node_id);
- printf("input node '%s' gain: %d\n", node_name, gain);
- free((void *)node_name);
-}
-
-static void num_active_streams_changed(void *context,
- enum CRAS_STREAM_DIRECTION dir,
- uint32_t num_active_streams)
-{
- printf("num active %s streams: %u\n", string_for_direction(dir),
- num_active_streams);
-}
-
-static void server_connection_callback(struct cras_client *client,
- cras_connection_status_t status,
- void *user_arg)
-{
- const char *status_str = "undefined";
- switch (status) {
- case CRAS_CONN_STATUS_FAILED:
- status_str = "error";
- break;
- case CRAS_CONN_STATUS_DISCONNECTED:
- status_str = "disconnected";
- break;
- case CRAS_CONN_STATUS_CONNECTED:
- status_str = "connected";
- break;
- }
- printf("server %s\n", status_str);
-}
-
-static void print_usage(const char *command)
-{
- fprintf(stderr,
- "%s [options]\n"
- " Where [options] are:\n"
- " --sync|-s - Use the synchronous connection functions.\n"
- " --log-level|-l <n> - Set the syslog level (7 == "
- "LOG_DEBUG).\n",
- command);
-}
-
-int main(int argc, char **argv)
-{
- struct cras_client *client;
- int rc;
- int option_character;
- bool synchronous = false;
- int log_level = LOG_WARNING;
- static struct option long_options[] = {
- { "sync", no_argument, NULL, 's' },
- { "log-level", required_argument, NULL, 'l' },
- { NULL, 0, NULL, 0 },
- };
-
- while (true) {
- int option_index = 0;
-
- option_character = getopt_long(argc, argv, "sl:", long_options,
- &option_index);
- if (option_character == -1)
- break;
- switch (option_character) {
- case 's':
- synchronous = !synchronous;
- break;
- case 'l':
- log_level = atoi(optarg);
- if (log_level < 0)
- log_level = LOG_WARNING;
- else if (log_level > LOG_DEBUG)
- log_level = LOG_DEBUG;
- break;
- default:
- print_usage(argv[0]);
- return 1;
- }
- }
-
- if (optind < argc) {
- fprintf(stderr, "%s: Extra arguments.\n", argv[0]);
- print_usage(argv[0]);
- return 1;
- }
-
- openlog("cras_monitor", LOG_PERROR, LOG_USER);
- setlogmask(LOG_UPTO(log_level));
-
- rc = cras_client_create(&client);
- if (rc < 0) {
- syslog(LOG_ERR, "Couldn't create client.");
- return rc;
- }
-
- cras_client_set_connection_status_cb(client, server_connection_callback,
- NULL);
-
- if (synchronous) {
- rc = cras_client_connect(client);
- if (rc != 0) {
- syslog(LOG_ERR, "Could not connect to server.");
- return -rc;
- }
- }
-
- cras_client_set_output_volume_changed_callback(client,
- output_volume_changed);
- cras_client_set_output_mute_changed_callback(client,
- output_mute_changed);
- cras_client_set_capture_mute_changed_callback(client,
- capture_mute_changed);
- cras_client_set_nodes_changed_callback(client, nodes_changed);
- cras_client_set_active_node_changed_callback(client,
- active_node_changed);
- cras_client_set_output_node_volume_changed_callback(
- client, output_node_volume_changed);
- cras_client_set_node_left_right_swapped_changed_callback(
- client, node_left_right_swapped_changed);
- cras_client_set_input_node_gain_changed_callback(
- client, input_node_gain_changed);
- cras_client_set_num_active_streams_changed_callback(
- client, num_active_streams_changed);
- cras_client_set_state_change_callback_context(client, client);
-
- rc = cras_client_run_thread(client);
- if (rc != 0) {
- syslog(LOG_ERR, "Could not start thread.");
- return -rc;
- }
-
- if (!synchronous) {
- rc = cras_client_connect_async(client);
- if (rc) {
- syslog(LOG_ERR, "Couldn't connect to server.\n");
- goto destroy_exit;
- }
- }
-
- while (1) {
- int rc;
- char c;
- rc = read(STDIN_FILENO, &c, 1);
- if (rc < 0 || c == 'q')
- return 0;
- }
-
-destroy_exit:
- cras_client_destroy(client);
- return 0;
-}