diff options
Diffstat (limited to 'cras/src/common/cras_types.h')
-rw-r--r-- | cras/src/common/cras_types.h | 723 |
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_ */ |