summaryrefslogtreecommitdiff
path: root/cras/src/common/cras_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'cras/src/common/cras_types.h')
-rw-r--r--cras/src/common/cras_types.h723
1 files changed, 0 insertions, 723 deletions
diff --git a/cras/src/common/cras_types.h b/cras/src/common/cras_types.h
deleted file mode 100644
index 544ba02c..00000000
--- a/cras/src/common/cras_types.h
+++ /dev/null
@@ -1,723 +0,0 @@
-/* Copyright (c) 2012 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.
- */
-
-/*
- * Types commonly used in the client and server are defined here.
- */
-#ifndef CRAS_TYPES_H_
-#define CRAS_TYPES_H_
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#include "cras_audio_format.h"
-#include "cras_iodev_info.h"
-#include "packet_status_logger.h"
-
-/* Architecture independent timespec */
-struct __attribute__((__packed__)) cras_timespec {
- int64_t tv_sec;
- int64_t tv_nsec;
-};
-
-/* Some special device index values. */
-enum CRAS_SPECIAL_DEVICE {
- NO_DEVICE,
- SILENT_RECORD_DEVICE,
- SILENT_PLAYBACK_DEVICE,
- SILENT_HOTWORD_DEVICE,
- MAX_SPECIAL_DEVICE_IDX
-};
-
-/*
- * Types of test iodevs supported.
- */
-enum TEST_IODEV_TYPE {
- TEST_IODEV_HOTWORD,
-};
-
-/* Commands for test iodevs. */
-enum CRAS_TEST_IODEV_CMD {
- TEST_IODEV_CMD_HOTWORD_TRIGGER,
-};
-
-/* CRAS client connection types. */
-enum CRAS_CONNECTION_TYPE {
- CRAS_CONTROL, // For legacy client.
- CRAS_PLAYBACK, // For playback client.
- CRAS_CAPTURE, // For capture client.
- CRAS_VMS_LEGACY, // For legacy client in vms.
- CRAS_VMS_UNIFIED, // For unified client in vms.
- CRAS_PLUGIN_PLAYBACK, // For playback client in vms/plugin.
- CRAS_PLUGIN_UNIFIED, // For unified client in vms/plugin.
- CRAS_NUM_CONN_TYPE,
-};
-
-static inline bool
-cras_validate_connection_type(enum CRAS_CONNECTION_TYPE conn_type)
-{
- return 0 <= conn_type && conn_type < CRAS_NUM_CONN_TYPE;
-}
-
-/* Directions of audio streams.
- * Input, Output, or loopback.
- *
- * Note that we use enum CRAS_STREAM_DIRECTION to access the elements in
- * num_active_streams in cras_server_state. For example,
- * num_active_streams[CRAS_STREAM_OUTPUT] is the number of active
- * streams with direction CRAS_STREAM_OUTPUT.
- */
-enum CRAS_STREAM_DIRECTION {
- CRAS_STREAM_OUTPUT,
- CRAS_STREAM_INPUT,
- CRAS_STREAM_UNDEFINED,
- CRAS_STREAM_POST_MIX_PRE_DSP,
- CRAS_NUM_DIRECTIONS
-};
-
-/* Bitmask for supporting all CRAS_STREAM_DIRECTION. */
-#define CRAS_STREAM_ALL_DIRECTION ((1 << CRAS_NUM_DIRECTIONS) - 1)
-
-/* Converts CRAS_STREAM_DIRECTION to bitmask.
- * Args:
- * dir - An enum CRAS_STREAM_DIRECTION.
- *
- * Returns:
- * bitmask for the given direction on success, negative on failure.
- */
-static inline int
-cras_stream_direction_mask(const enum CRAS_STREAM_DIRECTION dir)
-{
- if (0 <= dir && dir < CRAS_NUM_DIRECTIONS)
- return (1 << dir);
- return -EINVAL;
-}
-
-/*
- * Flags for stream types.
- * BULK_AUDIO_OK - This stream is OK with receiving up to a full shm of samples
- * in a single callback.
- * USE_DEV_TIMING - Don't wake up based on stream timing. Only wake when the
- * device is ready. Input streams only.
- * HOTWORD_STREAM - This stream is used only to listen for hotwords such as "OK
- * Google". Hardware will wake the device when this phrase is heard.
- * TRIGGER_ONLY - This stream only wants to receive when the data is available
- * and does not want to receive data. Used with HOTWORD_STREAM.
- * SERVER_ONLY - This stream doesn't associate to a client. It's used mainly
- * for audio data to flow from hardware through iodev's dsp pipeline.
- */
-enum CRAS_INPUT_STREAM_FLAG {
- BULK_AUDIO_OK = 0x01,
- USE_DEV_TIMING = 0x02,
- HOTWORD_STREAM = BULK_AUDIO_OK | USE_DEV_TIMING,
- TRIGGER_ONLY = 0x04,
- SERVER_ONLY = 0x08,
-};
-
-/*
- * Types of Loopback stream.
- */
-enum CRAS_LOOPBACK_TYPE {
- LOOPBACK_POST_MIX_PRE_DSP,
- LOOPBACK_POST_DSP,
- LOOPBACK_NUM_TYPES,
-};
-
-static inline int cras_stream_uses_output_hw(enum CRAS_STREAM_DIRECTION dir)
-{
- return dir == CRAS_STREAM_OUTPUT;
-}
-
-static inline int cras_stream_uses_input_hw(enum CRAS_STREAM_DIRECTION dir)
-{
- return dir == CRAS_STREAM_INPUT;
-}
-
-static inline int cras_stream_has_input(enum CRAS_STREAM_DIRECTION dir)
-{
- return dir != CRAS_STREAM_OUTPUT;
-}
-
-static inline int cras_stream_is_loopback(enum CRAS_STREAM_DIRECTION dir)
-{
- return dir == CRAS_STREAM_POST_MIX_PRE_DSP;
-}
-
-/* Types of audio streams. */
-enum CRAS_STREAM_TYPE {
- CRAS_STREAM_TYPE_DEFAULT,
- CRAS_STREAM_TYPE_MULTIMEDIA,
- CRAS_STREAM_TYPE_VOICE_COMMUNICATION,
- CRAS_STREAM_TYPE_SPEECH_RECOGNITION,
- CRAS_STREAM_TYPE_PRO_AUDIO,
- CRAS_STREAM_TYPE_ACCESSIBILITY,
- CRAS_STREAM_NUM_TYPES,
-};
-
-/* Types of audio clients. */
-enum CRAS_CLIENT_TYPE {
- CRAS_CLIENT_TYPE_UNKNOWN, /* Unknown client */
- CRAS_CLIENT_TYPE_LEGACY, /* A client with old craslib (CRAS_PROTO_VER = 3) */
- CRAS_CLIENT_TYPE_TEST, /* cras_test_client */
- CRAS_CLIENT_TYPE_PCM, /* A client using CRAS via pcm, like aplay */
- CRAS_CLIENT_TYPE_CHROME, /* Chrome, UI */
- CRAS_CLIENT_TYPE_ARC, /* ARC++ */
- CRAS_CLIENT_TYPE_CROSVM, /* CROSVM */
- CRAS_CLIENT_TYPE_SERVER_STREAM, /* Server stream */
- CRAS_CLIENT_TYPE_LACROS, /* LaCrOS */
- CRAS_CLIENT_TYPE_PLUGIN, /* PluginVM */
- CRAS_CLIENT_TYPE_ARCVM, /* ARCVM */
- CRAS_NUM_CLIENT_TYPE, /* numbers of CRAS_CLIENT_TYPE */
-};
-
-static inline bool cras_validate_client_type(enum CRAS_CLIENT_TYPE client_type)
-{
- return 0 <= client_type && client_type < CRAS_NUM_CLIENT_TYPE;
-}
-
-#define ENUM_STR(x) \
- case x: \
- return #x;
-
-static inline const char *
-cras_stream_type_str(enum CRAS_STREAM_TYPE stream_type)
-{
- // clang-format off
- switch (stream_type) {
- ENUM_STR(CRAS_STREAM_TYPE_DEFAULT)
- ENUM_STR(CRAS_STREAM_TYPE_MULTIMEDIA)
- ENUM_STR(CRAS_STREAM_TYPE_VOICE_COMMUNICATION)
- ENUM_STR(CRAS_STREAM_TYPE_SPEECH_RECOGNITION)
- ENUM_STR(CRAS_STREAM_TYPE_PRO_AUDIO)
- ENUM_STR(CRAS_STREAM_TYPE_ACCESSIBILITY)
- default:
- return "INVALID_STREAM_TYPE";
- }
- // clang-format on
-}
-
-static inline const char *
-cras_client_type_str(enum CRAS_CLIENT_TYPE client_type)
-{
- // clang-format off
- switch (client_type) {
- ENUM_STR(CRAS_CLIENT_TYPE_UNKNOWN)
- ENUM_STR(CRAS_CLIENT_TYPE_LEGACY)
- ENUM_STR(CRAS_CLIENT_TYPE_TEST)
- ENUM_STR(CRAS_CLIENT_TYPE_PCM)
- ENUM_STR(CRAS_CLIENT_TYPE_CHROME)
- ENUM_STR(CRAS_CLIENT_TYPE_ARC)
- ENUM_STR(CRAS_CLIENT_TYPE_CROSVM)
- ENUM_STR(CRAS_CLIENT_TYPE_SERVER_STREAM)
- ENUM_STR(CRAS_CLIENT_TYPE_LACROS)
- ENUM_STR(CRAS_CLIENT_TYPE_PLUGIN)
- ENUM_STR(CRAS_CLIENT_TYPE_ARCVM)
- default:
- return "INVALID_CLIENT_TYPE";
- }
- // clang-format on
-}
-
-/* Effects that can be enabled for a CRAS stream. */
-enum CRAS_STREAM_EFFECT {
- APM_ECHO_CANCELLATION = (1 << 0),
- APM_NOISE_SUPRESSION = (1 << 1),
- APM_GAIN_CONTROL = (1 << 2),
- APM_VOICE_DETECTION = (1 << 3),
-};
-
-/* Information about a client attached to the server. */
-struct __attribute__((__packed__)) cras_attached_client_info {
- uint32_t id;
- int32_t pid;
- uint32_t uid;
- uint32_t gid;
-};
-
-/* Each ionode has a unique id. The top 32 bits are the device index, lower 32
- * are the node index. */
-typedef uint64_t cras_node_id_t;
-
-static inline cras_node_id_t cras_make_node_id(uint32_t dev_index,
- uint32_t node_index)
-{
- cras_node_id_t id = dev_index;
- return (id << 32) | node_index;
-}
-
-static inline uint32_t dev_index_of(cras_node_id_t id)
-{
- return (uint32_t)(id >> 32);
-}
-
-static inline uint32_t node_index_of(cras_node_id_t id)
-{
- return (uint32_t)id;
-}
-
-#define CRAS_MAX_IODEVS 20
-#define CRAS_MAX_IONODES 20
-#define CRAS_MAX_ATTACHED_CLIENTS 20
-#define CRAS_MAX_AUDIO_THREAD_SNAPSHOTS 10
-#define CRAS_MAX_HOTWORD_MODEL_NAME_SIZE 12
-#define MAX_DEBUG_DEVS 4
-#define MAX_DEBUG_STREAMS 8
-#define AUDIO_THREAD_EVENT_LOG_SIZE (1024 * 6)
-#define CRAS_BT_EVENT_LOG_SIZE 1024
-#define MAIN_THREAD_EVENT_LOG_SIZE 1024
-
-/* There are 8 bits of space for events. */
-enum AUDIO_THREAD_LOG_EVENTS {
- AUDIO_THREAD_WAKE,
- AUDIO_THREAD_SLEEP,
- AUDIO_THREAD_READ_AUDIO,
- AUDIO_THREAD_READ_AUDIO_TSTAMP,
- AUDIO_THREAD_READ_AUDIO_DONE,
- AUDIO_THREAD_READ_OVERRUN,
- AUDIO_THREAD_FILL_AUDIO,
- AUDIO_THREAD_FILL_AUDIO_TSTAMP,
- AUDIO_THREAD_FILL_AUDIO_DONE,
- AUDIO_THREAD_WRITE_STREAMS_WAIT,
- AUDIO_THREAD_WRITE_STREAMS_WAIT_TO,
- AUDIO_THREAD_WRITE_STREAMS_MIX,
- AUDIO_THREAD_WRITE_STREAMS_MIXED,
- AUDIO_THREAD_WRITE_STREAMS_STREAM,
- AUDIO_THREAD_FETCH_STREAM,
- AUDIO_THREAD_STREAM_ADDED,
- AUDIO_THREAD_STREAM_REMOVED,
- AUDIO_THREAD_A2DP_FLUSH,
- AUDIO_THREAD_A2DP_THROTTLE_TIME,
- AUDIO_THREAD_A2DP_WRITE,
- AUDIO_THREAD_DEV_STREAM_MIX,
- AUDIO_THREAD_CAPTURE_POST,
- AUDIO_THREAD_CAPTURE_WRITE,
- AUDIO_THREAD_CONV_COPY,
- AUDIO_THREAD_STREAM_FETCH_PENDING,
- AUDIO_THREAD_STREAM_RESCHEDULE,
- AUDIO_THREAD_STREAM_SLEEP_TIME,
- AUDIO_THREAD_STREAM_SLEEP_ADJUST,
- AUDIO_THREAD_STREAM_SKIP_CB,
- AUDIO_THREAD_DEV_SLEEP_TIME,
- AUDIO_THREAD_SET_DEV_WAKE,
- AUDIO_THREAD_DEV_ADDED,
- AUDIO_THREAD_DEV_REMOVED,
- AUDIO_THREAD_IODEV_CB,
- AUDIO_THREAD_PB_MSG,
- AUDIO_THREAD_ODEV_NO_STREAMS,
- AUDIO_THREAD_ODEV_START,
- AUDIO_THREAD_ODEV_LEAVE_NO_STREAMS,
- AUDIO_THREAD_ODEV_DEFAULT_NO_STREAMS,
- AUDIO_THREAD_FILL_ODEV_ZEROS,
- AUDIO_THREAD_UNDERRUN,
- AUDIO_THREAD_SEVERE_UNDERRUN,
- AUDIO_THREAD_CAPTURE_DROP_TIME,
- AUDIO_THREAD_DEV_DROP_FRAMES,
- AUDIO_THREAD_LOOPBACK_PUT,
- AUDIO_THREAD_LOOPBACK_GET,
- AUDIO_THREAD_LOOPBACK_SAMPLE_HOOK,
- AUDIO_THREAD_DEV_OVERRUN,
-};
-
-/* Important events in main thread.
- * MAIN_THREAD_DEV_CLOSE - When an iodev closes at stream removal.
- * MAIN_THREAD_DEV_DISABLE - When an iodev is removed from active dev list.
- * MAIN_THREAD_DEV_INIT - When an iodev opens when stream attachs.
- * MAIN_THREAD_DEV_REOPEN - When an iodev reopens for format change.
- * MAIN_THREAD_ADD_ACTIVE_NODE - When an iodev is set as an additional
- * active device.
- * MAIN_THREAD_SELECT_NODE - When UI selects an iodev as active.
- * MAIN_THREAD_NODE_PLUGGED - When a jack of iodev is plugged/unplugged.
- * MAIN_THREAD_ADD_TO_DEV_LIST - When iodev is added to list.
- * MAIN_THREAD_INPUT_NODE_GAIN - When input node gain changes.
- * MAIN_THREAD_OUTPUT_NODE_VOLUME - When output node volume changes.
- * MAIN_THREAD_SET_OUTPUT_USER_MUTE - When output mute state is set.
- * MAIN_THREAD_RESUME_DEVS - When system resumes and notifies CRAS.
- * MAIN_THREAD_SUSPEND_DEVS - When system suspends and notifies CRAS.
- * MAIN_THREAD_STREAM_ADDED - When an audio stream is added.
- * MAIN_THREAD_STREAM_REMOVED - When an audio stream is removed.
- */
-enum MAIN_THREAD_LOG_EVENTS {
- /* iodev related */
- MAIN_THREAD_DEV_CLOSE,
- MAIN_THREAD_DEV_DISABLE,
- MAIN_THREAD_DEV_INIT,
- MAIN_THREAD_DEV_REOPEN,
- MAIN_THREAD_ADD_ACTIVE_NODE,
- MAIN_THREAD_SELECT_NODE,
- MAIN_THREAD_NODE_PLUGGED,
- MAIN_THREAD_ADD_TO_DEV_LIST,
- MAIN_THREAD_INPUT_NODE_GAIN,
- MAIN_THREAD_OUTPUT_NODE_VOLUME,
- MAIN_THREAD_SET_OUTPUT_USER_MUTE,
- MAIN_THREAD_RESUME_DEVS,
- MAIN_THREAD_SUSPEND_DEVS,
- /* stream related */
- MAIN_THREAD_STREAM_ADDED,
- MAIN_THREAD_STREAM_REMOVED,
-};
-
-/* There are 8 bits of space for events. */
-enum CRAS_BT_LOG_EVENTS {
- BT_ADAPTER_ADDED,
- BT_ADAPTER_REMOVED,
- BT_AUDIO_GATEWAY_INIT,
- BT_AUDIO_GATEWAY_START,
- BT_AVAILABLE_CODECS,
- BT_A2DP_CONFIGURED,
- BT_A2DP_START,
- BT_A2DP_SUSPENDED,
- BT_CODEC_SELECTION,
- BT_DEV_CONNECTED,
- BT_DEV_DISCONNECTED,
- BT_DEV_CONN_WATCH_CB,
- BT_DEV_SUSPEND_CB,
- BT_HFP_NEW_CONNECTION,
- BT_HFP_REQUEST_DISCONNECT,
- BT_HFP_SUPPORTED_FEATURES,
- BT_HFP_HF_INDICATOR,
- BT_HFP_SET_SPEAKER_GAIN,
- BT_HFP_UPDATE_SPEAKER_GAIN,
- BT_HSP_NEW_CONNECTION,
- BT_HSP_REQUEST_DISCONNECT,
- BT_NEW_AUDIO_PROFILE_AFTER_CONNECT,
- BT_RESET,
- BT_SCO_CONNECT,
- BT_TRANSPORT_ACQUIRE,
- BT_TRANSPORT_RELEASE,
- BT_TRANSPORT_SET_VOLUME,
- BT_TRANSPORT_UPDATE_VOLUME,
-};
-
-struct __attribute__((__packed__)) audio_thread_event {
- uint32_t tag_sec;
- uint32_t nsec;
- uint32_t data1;
- uint32_t data2;
- uint32_t data3;
-};
-
-/* Ring buffer of log events from the audio thread. */
-struct __attribute__((__packed__)) audio_thread_event_log {
- uint64_t write_pos;
- uint64_t sync_write_pos;
- uint32_t len;
- struct audio_thread_event log[AUDIO_THREAD_EVENT_LOG_SIZE];
-};
-
-struct __attribute__((__packed__)) audio_dev_debug_info {
- char dev_name[CRAS_NODE_NAME_BUFFER_SIZE];
- uint32_t buffer_size;
- uint32_t min_buffer_level;
- uint32_t min_cb_level;
- uint32_t max_cb_level;
- uint32_t frame_rate;
- uint32_t num_channels;
- double est_rate_ratio;
- uint8_t direction;
- uint32_t num_underruns;
- uint32_t num_severe_underruns;
- uint32_t highest_hw_level;
- uint32_t runtime_sec;
- uint32_t runtime_nsec;
- uint32_t longest_wake_sec;
- uint32_t longest_wake_nsec;
- double software_gain_scaler;
-};
-
-struct __attribute__((__packed__)) audio_stream_debug_info {
- uint64_t stream_id;
- uint32_t dev_idx;
- uint32_t direction;
- uint32_t stream_type;
- uint32_t client_type;
- uint32_t buffer_frames;
- uint32_t cb_threshold;
- uint64_t effects;
- uint32_t flags;
- uint32_t frame_rate;
- uint32_t num_channels;
- uint32_t longest_fetch_sec;
- uint32_t longest_fetch_nsec;
- uint32_t num_missed_cb;
- uint32_t num_overruns;
- uint32_t is_pinned;
- uint32_t pinned_dev_idx;
- uint32_t runtime_sec;
- uint32_t runtime_nsec;
- double stream_volume;
- int8_t channel_layout[CRAS_CH_MAX];
-};
-
-/* Debug info shared from server to client. */
-struct __attribute__((__packed__)) audio_debug_info {
- uint32_t num_streams;
- uint32_t num_devs;
- struct audio_dev_debug_info devs[MAX_DEBUG_DEVS];
- struct audio_stream_debug_info streams[MAX_DEBUG_STREAMS];
- struct audio_thread_event_log log;
-};
-
-struct __attribute__((__packed__)) main_thread_event {
- uint32_t tag_sec;
- uint32_t nsec;
- uint32_t data1;
- uint32_t data2;
- uint32_t data3;
-};
-
-struct __attribute__((__packed__)) main_thread_event_log {
- uint32_t write_pos;
- uint32_t len;
- struct main_thread_event log[MAIN_THREAD_EVENT_LOG_SIZE];
-};
-
-struct __attribute__((__packed__)) main_thread_debug_info {
- struct main_thread_event_log main_log;
-};
-
-struct __attribute__((__packed__)) cras_bt_event {
- uint32_t tag_sec;
- uint32_t nsec;
- uint32_t data1;
- uint32_t data2;
-};
-
-struct __attribute__((__packed__)) cras_bt_event_log {
- uint32_t write_pos;
- uint32_t len;
- struct cras_bt_event log[CRAS_BT_EVENT_LOG_SIZE];
-};
-
-struct __attribute__((__packed__)) cras_bt_debug_info {
- struct cras_bt_event_log bt_log;
- struct packet_status_logger wbs_logger;
-};
-
-/*
- * All event enums should be less then AUDIO_THREAD_EVENT_TYPE_COUNT,
- * or they will be ignored by the handler.
- */
-enum CRAS_AUDIO_THREAD_EVENT_TYPE {
- AUDIO_THREAD_EVENT_A2DP_OVERRUN,
- AUDIO_THREAD_EVENT_A2DP_THROTTLE,
- AUDIO_THREAD_EVENT_BUSYLOOP,
- AUDIO_THREAD_EVENT_DEBUG,
- AUDIO_THREAD_EVENT_SEVERE_UNDERRUN,
- AUDIO_THREAD_EVENT_UNDERRUN,
- AUDIO_THREAD_EVENT_DROP_SAMPLES,
- AUDIO_THREAD_EVENT_DEV_OVERRUN,
- AUDIO_THREAD_EVENT_TYPE_COUNT,
-};
-
-/*
- * Structure of snapshot for audio thread.
- */
-struct __attribute__((__packed__)) cras_audio_thread_snapshot {
- struct timespec timestamp;
- enum CRAS_AUDIO_THREAD_EVENT_TYPE event_type;
- struct audio_debug_info audio_debug_info;
-};
-
-/*
- * Ring buffer for storing snapshots.
- */
-struct __attribute__((__packed__)) cras_audio_thread_snapshot_buffer {
- struct cras_audio_thread_snapshot
- snapshots[CRAS_MAX_AUDIO_THREAD_SNAPSHOTS];
- int pos;
-};
-
-/* The server state that is shared with clients.
- * state_version - Version of this structure.
- * volume - index from 0-100.
- * min_volume_dBFS - volume in dB * 100 when volume = 1.
- * max_volume_dBFS - volume in dB * 100 when volume = max.
- * mute - 0 = unmuted, 1 = muted by system (device switch, suspend, etc).
- * user_mute - 0 = unmuted, 1 = muted by user.
- * mute_locked - 0 = unlocked, 1 = locked.
- * suspended - 1 = suspended, 0 = resumed.
- * capture_gain - Capture gain in dBFS * 100.
- * capture_mute - 0 = unmuted, 1 = muted.
- * capture_mute_locked - 0 = unlocked, 1 = locked.
- * num_streams_attached - Total number of streams since server started.
- * num_output_devs - Number of available output devices.
- * num_input_devs - Number of available input devices.
- * output_devs - Output audio devices currently attached.
- * input_devs - Input audio devices currently attached.
- * num_output_nodes - Number of available output nodes.
- * num_input_nodes - Number of available input nodes.
- * output_nodes - Output nodes currently attached.
- * input_nodes - Input nodes currently attached.
- * num_attached_clients - Number of clients attached to server.
- * client_info - List of first 20 attached clients.
- * update_count - Incremented twice each time the struct is updated. Odd
- * during updates.
- * num_active_streams - An array containing numbers or active
- * streams of different directions.
- * last_active_stream_time - Time the last stream was removed. Can be used
- * to determine how long audio has been idle.
- * audio_debug_info - Debug data filled in when a client requests it. This
- * isn't protected against concurrent updating, only one client should
- * use it.
- * default_output_buffer_size - Default output buffer size in frames.
- * non_empty_status - Whether any non-empty audio is being
- * played/captured.
- * aec_supported - Flag to indicate if system aec is supported.
- * aec_group_id - Group ID for the system aec to use for separating aec
- * tunings.
- * snapshot_buffer - ring buffer for storing audio thread snapshots.
- * bt_debug_info - ring buffer for storing bluetooth event logs.
- * bt_wbs_enabled - Whether or not bluetooth wideband speech is enabled.
- * deprioritize_bt_wbs_mic - Whether Bluetooth wideband speech mic
- * should be deprioritized for selecting as default audio input.
- * main_thread_debug_info - ring buffer for storing main thread event logs.
- * num_input_streams_with_permission - An array containing numbers of input
- * streams with permission in each client type.
- * noise_cancellation_enabled - Whether or not Noise Cancellation is enabled.
- * hotword_pause_at_suspend - 1 = Pause hotword detection when the system
- * suspends. Hotword detection is resumed after system resumes.
- * 0 - Hotword detection is allowed to continue running after system
- * suspends, so a detected hotword can wake up the device.
- *
- */
-#define CRAS_SERVER_STATE_VERSION 2
-struct __attribute__((packed, aligned(4))) cras_server_state {
- uint32_t state_version;
- uint32_t volume;
- int32_t min_volume_dBFS;
- int32_t max_volume_dBFS;
- int32_t mute;
- int32_t user_mute;
- int32_t mute_locked;
- int32_t suspended;
- int32_t capture_gain;
- int32_t capture_mute;
- int32_t capture_mute_locked;
- uint32_t num_streams_attached;
- uint32_t num_output_devs;
- uint32_t num_input_devs;
- struct cras_iodev_info output_devs[CRAS_MAX_IODEVS];
- struct cras_iodev_info input_devs[CRAS_MAX_IODEVS];
- uint32_t num_output_nodes;
- uint32_t num_input_nodes;
- struct cras_ionode_info output_nodes[CRAS_MAX_IONODES];
- struct cras_ionode_info input_nodes[CRAS_MAX_IONODES];
- uint32_t num_attached_clients;
- struct cras_attached_client_info client_info[CRAS_MAX_ATTACHED_CLIENTS];
- uint32_t update_count;
- uint32_t num_active_streams[CRAS_NUM_DIRECTIONS];
- struct cras_timespec last_active_stream_time;
- struct audio_debug_info audio_debug_info;
- int32_t default_output_buffer_size;
- int32_t non_empty_status;
- int32_t aec_supported;
- int32_t aec_group_id;
- struct cras_audio_thread_snapshot_buffer snapshot_buffer;
- struct cras_bt_debug_info bt_debug_info;
- int32_t bt_wbs_enabled;
- int32_t deprioritize_bt_wbs_mic;
- struct main_thread_debug_info main_thread_debug_info;
- uint32_t num_input_streams_with_permission[CRAS_NUM_CLIENT_TYPE];
- int32_t noise_cancellation_enabled;
- int32_t hotword_pause_at_suspend;
-};
-
-/* Actions for card add/remove/change. */
-enum cras_notify_device_action {
- /* Must match gavd action definitions. */
- CRAS_DEVICE_ACTION_ADD = 0,
- CRAS_DEVICE_ACTION_REMOVE = 1,
- CRAS_DEVICE_ACTION_CHANGE = 2,
-};
-
-/* Information about an ALSA card to be added to the system.
- * card_type - Either internal card or a USB sound card.
- * card_index - Index ALSA uses to refer to the card. The X in "hw:X".
- * priority - Base priority to give devices found on this card. Zero is the
- * lowest priority. Non-primary devices on the card will be given a
- * lowered priority.
- * usb_vendor_id - vendor ID if the device is on the USB bus.
- * usb_product_id - product ID if the device is on the USB bus.
- * usb_serial_number - serial number if the device is on the USB bus.
- * usb_desc_checksum - the checksum of the USB descriptors if the device
- * is on the USB bus.
- */
-enum CRAS_ALSA_CARD_TYPE {
- ALSA_CARD_TYPE_INTERNAL,
- ALSA_CARD_TYPE_USB,
-};
-#define USB_SERIAL_NUMBER_BUFFER_SIZE 64
-struct __attribute__((__packed__)) cras_alsa_card_info {
- enum CRAS_ALSA_CARD_TYPE card_type;
- uint32_t card_index;
- uint32_t usb_vendor_id;
- uint32_t usb_product_id;
- char usb_serial_number[USB_SERIAL_NUMBER_BUFFER_SIZE];
- uint32_t usb_desc_checksum;
-};
-
-/* Unique identifier for each active stream.
- * The top 16 bits are the client number, lower 16 are the stream number.
- */
-typedef uint32_t cras_stream_id_t;
-/* Generates a stream id for client stream. */
-static inline cras_stream_id_t cras_get_stream_id(uint16_t client_id,
- uint16_t stream_id)
-{
- return (cras_stream_id_t)(((client_id & 0x0000ffff) << 16) |
- (stream_id & 0x0000ffff));
-}
-/* Verify if the stream_id fits the given client_id */
-static inline bool cras_valid_stream_id(cras_stream_id_t stream_id,
- uint16_t client_id)
-{
- return ((stream_id >> 16) ^ client_id) == 0;
-}
-
-enum CRAS_NODE_TYPE {
- /* These value can be used for output nodes. */
- CRAS_NODE_TYPE_INTERNAL_SPEAKER,
- CRAS_NODE_TYPE_HEADPHONE,
- CRAS_NODE_TYPE_HDMI,
- CRAS_NODE_TYPE_HAPTIC,
- CRAS_NODE_TYPE_LINEOUT,
- /* These value can be used for input nodes. */
- CRAS_NODE_TYPE_MIC,
- CRAS_NODE_TYPE_HOTWORD,
- CRAS_NODE_TYPE_POST_MIX_PRE_DSP,
- CRAS_NODE_TYPE_POST_DSP,
- /* Type for the legacy BT narrow band mic .*/
- CRAS_NODE_TYPE_BLUETOOTH_NB_MIC,
- /* These value can be used for both output and input nodes. */
- CRAS_NODE_TYPE_USB,
- CRAS_NODE_TYPE_BLUETOOTH,
- CRAS_NODE_TYPE_FALLBACK_NORMAL,
- CRAS_NODE_TYPE_FALLBACK_ABNORMAL,
- CRAS_NODE_TYPE_UNKNOWN,
- CRAS_NODE_TYPE_ECHO_REFERENCE,
- CRAS_NODE_TYPE_ALSA_LOOPBACK,
-};
-
-/* Position values to described where a node locates on the system.
- * NODE_POSITION_EXTERNAL - The node works only when peripheral
- * is plugged.
- * NODE_POSITION_INTERNAL - The node lives on the system and doesn't
- * have specific direction.
- * NODE_POSITION_FRONT - The node locates on the side of system that
- * faces user.
- * NODE_POSITION_REAR - The node locates on the opposite side of
- * the system that faces user.
- * NODE_POSITION_KEYBOARD - The node locates under the keyboard.
- */
-enum CRAS_NODE_POSITION {
- NODE_POSITION_EXTERNAL,
- NODE_POSITION_INTERNAL,
- NODE_POSITION_FRONT,
- NODE_POSITION_REAR,
- NODE_POSITION_KEYBOARD,
-};
-
-#endif /* CRAS_TYPES_H_ */