cras_types: Add CRAS_CLIENT_TYPE_ARCVM for arc in VM
Add a new client type for arc in VM for UMA and to separate it
from other linux VMs.
Changes:
- Add CRAS_CLIENT_TYPE_ARCVM for arc in VM
- Generate cras_sys from the latest codebase
- Add FromStr for CRAS_CLIENT_TYPE
- Expose cras_sys::Error in libcras as CrasSysError
- Add PluginVM and ARCVM to metrics_client_type_str for UMA
BUG=b:177393225
TEST=Apply full patch set and start audio in ARCVM with
`cras_test_client --dump_a`
Change-Id: I76960479431d34d9c1b311856eef8f64500bf654
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/adhd/+/2744525
Reviewed-by: Yu-Hsuan Hsu <yuhsuan@chromium.org>
Tested-by: Chih-Yang Hsia <paulhsia@chromium.org>
Commit-Queue: Chih-Yang Hsia <paulhsia@chromium.org>
diff --git a/cras/client/cras-sys/src/gen.rs b/cras/client/cras-sys/src/gen.rs
index 0375a0b..6fb4cdf 100644
--- a/cras/client/cras-sys/src/gen.rs
+++ b/cras/client/cras-sys/src/gen.rs
@@ -748,7 +748,9 @@
CRAS_CAPTURE = 2,
CRAS_VMS_LEGACY = 3,
CRAS_VMS_UNIFIED = 4,
- CRAS_NUM_CONN_TYPE = 5,
+ CRAS_PLUGIN_PLAYBACK = 5,
+ CRAS_PLUGIN_UNIFIED = 6,
+ CRAS_NUM_CONN_TYPE = 7,
}
#[repr(u32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
@@ -798,6 +800,9 @@
CRAS_CLIENT_TYPE_CROSVM = 6,
CRAS_CLIENT_TYPE_SERVER_STREAM = 7,
CRAS_CLIENT_TYPE_LACROS = 8,
+ CRAS_CLIENT_TYPE_PLUGIN = 9,
+ CRAS_CLIENT_TYPE_ARCVM = 10,
+ CRAS_NUM_CLIENT_TYPE = 11,
}
impl CRAS_STREAM_EFFECT {
pub const APM_ECHO_CANCELLATION: CRAS_STREAM_EFFECT = CRAS_STREAM_EFFECT(1);
@@ -914,24 +919,25 @@
BT_A2DP_START = 6,
BT_A2DP_SUSPENDED = 7,
BT_CODEC_SELECTION = 8,
- BT_DEV_CONNECTED_CHANGE = 9,
- BT_DEV_CONN_WATCH_CB = 10,
- BT_DEV_SUSPEND_CB = 11,
- BT_HFP_NEW_CONNECTION = 12,
- BT_HFP_REQUEST_DISCONNECT = 13,
- BT_HFP_SUPPORTED_FEATURES = 14,
- BT_HFP_HF_INDICATOR = 15,
- BT_HFP_SET_SPEAKER_GAIN = 16,
- BT_HFP_UPDATE_SPEAKER_GAIN = 17,
- BT_HSP_NEW_CONNECTION = 18,
- BT_HSP_REQUEST_DISCONNECT = 19,
- BT_NEW_AUDIO_PROFILE_AFTER_CONNECT = 20,
- BT_RESET = 21,
- BT_SCO_CONNECT = 22,
- BT_TRANSPORT_ACQUIRE = 23,
- BT_TRANSPORT_RELEASE = 24,
- BT_TRANSPORT_SET_VOLUME = 25,
- BT_TRANSPORT_UPDATE_VOLUME = 26,
+ BT_DEV_CONNECTED = 9,
+ BT_DEV_DISCONNECTED = 10,
+ BT_DEV_CONN_WATCH_CB = 11,
+ BT_DEV_SUSPEND_CB = 12,
+ BT_HFP_NEW_CONNECTION = 13,
+ BT_HFP_REQUEST_DISCONNECT = 14,
+ BT_HFP_SUPPORTED_FEATURES = 15,
+ BT_HFP_HF_INDICATOR = 16,
+ BT_HFP_SET_SPEAKER_GAIN = 17,
+ BT_HFP_UPDATE_SPEAKER_GAIN = 18,
+ BT_HSP_NEW_CONNECTION = 19,
+ BT_HSP_REQUEST_DISCONNECT = 20,
+ BT_NEW_AUDIO_PROFILE_AFTER_CONNECT = 21,
+ BT_RESET = 22,
+ BT_SCO_CONNECT = 23,
+ BT_TRANSPORT_ACQUIRE = 24,
+ BT_TRANSPORT_RELEASE = 25,
+ BT_TRANSPORT_SET_VOLUME = 26,
+ BT_TRANSPORT_UPDATE_VOLUME = 27,
}
#[repr(C, packed)]
#[derive(Debug, Copy, Clone)]
@@ -2117,12 +2123,15 @@
pub bt_wbs_enabled: i32,
pub deprioritize_bt_wbs_mic: i32,
pub main_thread_debug_info: main_thread_debug_info,
+ pub num_input_streams_with_permission: [u32; 11usize],
+ pub noise_cancellation_enabled: i32,
+ pub hotword_pause_at_suspend: i32,
}
#[test]
fn bindgen_test_layout_cras_server_state() {
assert_eq!(
::std::mem::size_of::<cras_server_state>(),
- 1414292usize,
+ 1414344usize,
concat!("Size of: ", stringify!(cras_server_state))
);
assert_eq!(
@@ -2520,6 +2529,45 @@
stringify!(main_thread_debug_info)
)
);
+ assert_eq!(
+ unsafe {
+ &(*(::std::ptr::null::<cras_server_state>())).num_input_streams_with_permission
+ as *const _ as usize
+ },
+ 1414292usize,
+ concat!(
+ "Offset of field: ",
+ stringify!(cras_server_state),
+ "::",
+ stringify!(num_input_streams_with_permission)
+ )
+ );
+ assert_eq!(
+ unsafe {
+ &(*(::std::ptr::null::<cras_server_state>())).noise_cancellation_enabled as *const _
+ as usize
+ },
+ 1414336usize,
+ concat!(
+ "Offset of field: ",
+ stringify!(cras_server_state),
+ "::",
+ stringify!(noise_cancellation_enabled)
+ )
+ );
+ assert_eq!(
+ unsafe {
+ &(*(::std::ptr::null::<cras_server_state>())).hotword_pause_at_suspend as *const _
+ as usize
+ },
+ 1414340usize,
+ concat!(
+ "Offset of field: ",
+ stringify!(cras_server_state),
+ "::",
+ stringify!(hotword_pause_at_suspend)
+ )
+ );
}
pub const cras_notify_device_action_CRAS_DEVICE_ACTION_ADD: cras_notify_device_action = 0;
pub const cras_notify_device_action_CRAS_DEVICE_ACTION_REMOVE: cras_notify_device_action = 1;
diff --git a/cras/client/cras-sys/src/lib.rs b/cras/client/cras-sys/src/lib.rs
index 8128575..2b3d21e 100644
--- a/cras/client/cras-sys/src/lib.rs
+++ b/cras/client/cras-sys/src/lib.rs
@@ -10,6 +10,7 @@
use std::fmt;
use std::iter::FromIterator;
use std::os::raw::c_char;
+use std::str::FromStr;
use std::time::Duration;
#[allow(dead_code)]
@@ -47,6 +48,7 @@
pub enum Error {
InvalidChannel(i8),
InvalidClientType(u32),
+ InvalidClientTypeStr,
InvalidStreamType(u32),
}
@@ -68,6 +70,7 @@
t,
CRAS_CLIENT_TYPE::CRAS_CLIENT_TYPE_SERVER_STREAM as u32 + 1
),
+ InvalidClientTypeStr => write!(f, "Invalid client type string"),
InvalidStreamType(t) => write!(
f,
"Stream type {} is not within valid range [0, {})",
@@ -426,6 +429,18 @@
}
}
+impl FromStr for CRAS_CLIENT_TYPE {
+ type Err = Error;
+ fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
+ use CRAS_CLIENT_TYPE::*;
+ match s {
+ "crosvm" => Ok(CRAS_CLIENT_TYPE_CROSVM),
+ "arcvm" => Ok(CRAS_CLIENT_TYPE_ARCVM),
+ _ => Err(Error::InvalidClientTypeStr),
+ }
+ }
+}
+
impl Default for audio_stream_debug_info {
fn default() -> Self {
Self {
diff --git a/cras/client/libcras/src/libcras.rs b/cras/client/libcras/src/libcras.rs
index 80d2cff..402a4a2 100644
--- a/cras/client/libcras/src/libcras.rs
+++ b/cras/client/libcras/src/libcras.rs
@@ -136,7 +136,7 @@
CRAS_CLIENT_TYPE as CrasClientType, CRAS_NODE_TYPE as CrasNodeType,
CRAS_STREAM_EFFECT as CrasStreamEffect,
};
-pub use cras_sys::{AudioDebugInfo, CrasIodevInfo, CrasIonodeInfo};
+pub use cras_sys::{AudioDebugInfo, CrasIodevInfo, CrasIonodeInfo, Error as CrasSysError};
use sys_util::{PollContext, PollToken, SharedMemory};
mod audio_socket;
diff --git a/cras/src/common/cras_types.h b/cras/src/common/cras_types.h
index 89e3b81..544ba02 100644
--- a/cras/src/common/cras_types.h
+++ b/cras/src/common/cras_types.h
@@ -169,6 +169,7 @@
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 */
};
@@ -213,6 +214,7 @@
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";
}
diff --git a/cras/src/server/cras_server_metrics.c b/cras/src/server/cras_server_metrics.c
index e03dfd9..f4f5409 100644
--- a/cras/src/server/cras_server_metrics.c
+++ b/cras/src/server/cras_server_metrics.c
@@ -306,6 +306,10 @@
return "ServerStream";
case CRAS_CLIENT_TYPE_LACROS:
return "LaCrOS";
+ case CRAS_CLIENT_TYPE_PLUGIN:
+ return "PluginVM";
+ case CRAS_CLIENT_TYPE_ARCVM:
+ return "ARCVM";
default:
return "InvalidType";
}