diff --git a/Cargo.lock b/Cargo.lock
index bc68e00..96563e8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3141,9 +3141,9 @@ dependencies = [
[[package]]
name = "phoxal"
-version = "0.5.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28e98fd325a693585a7ba0db4dfbffa940b913217630bd412c3e82f077f77ce4"
+checksum = "e03c85717b2412f60f950a7b9256b3deac56da6e72460154910cdddd5b4c418a"
dependencies = [
"anyhow",
"arc-swap",
diff --git a/Cargo.toml b/Cargo.toml
index 3adc032..51b2166 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -22,7 +22,7 @@ serde = { version = "1.0.228", features = ["derive"] }
tokio = { version = "1", features = ["macros", "rt", "rt-multi-thread", "time", "signal", "sync", "fs"] }
tracing = "0.1.44"
urdf-rs = "0.9.0"
-phoxal = { version = "0.5.0" }
+phoxal = { version = "0.6.0" }
[workspace.lints.rust]
unused = "warn"
@@ -64,3 +64,4 @@ urdf-rs = { workspace = true }
[lints]
workspace = true
+
diff --git a/src/capability/microphone.rs b/src/capability/microphone.rs
new file mode 100644
index 0000000..ea3640c
--- /dev/null
+++ b/src/capability/microphone.rs
@@ -0,0 +1,19 @@
+use anyhow::Result;
+use phoxal::api::v1::component::capability::microphone::Frame;
+use phoxal::bus::typed::Received;
+use rerun::{RecordingStream, Scalars};
+
+use crate::logging::helpers::set_logical_time;
+
+pub(crate) fn log(
+ rec: &RecordingStream,
+ capability_entity_path: &str,
+ received: &Received,
+) -> Result<()> {
+ set_logical_time(rec, received.at_ns);
+ rec.log(
+ format!("{capability_entity_path}/audio_bytes").as_str(),
+ &Scalars::new([received.value.data().len() as f64]),
+ )?;
+ Ok(())
+}
diff --git a/src/capability/mod.rs b/src/capability/mod.rs
index adf0c1a..0ef3a84 100644
--- a/src/capability/mod.rs
+++ b/src/capability/mod.rs
@@ -8,8 +8,10 @@ mod gyroscope;
mod imu;
mod lidar;
mod magnetometer;
+mod microphone;
mod mmwave;
mod range;
+mod speaker;
use crate::scene::SceneModel;
use anyhow::Result;
@@ -23,8 +25,10 @@ use phoxal::api::v1::component::capability::gyroscope::Sample as GyroscopeSample
use phoxal::api::v1::component::capability::imu::Sample as ImuSample;
use phoxal::api::v1::component::capability::lidar::Scan as LidarScan;
use phoxal::api::v1::component::capability::magnetometer::Sample as MagnetometerSample;
+use phoxal::api::v1::component::capability::microphone::Frame as MicrophoneFrame;
use phoxal::api::v1::component::capability::mmwave::Scan as MmwaveScan;
use phoxal::api::v1::component::capability::range::Sample as RangeSample;
+use phoxal::api::v1::component::capability::speaker::audio::Audio;
use phoxal::bus::typed::Received;
use rerun::RecordingStream;
@@ -141,3 +145,21 @@ pub(crate) fn log_mmwave(
) -> Result<()> {
mmwave::log(rec, scene.capability_entity_path(capability_id)?, received)
}
+
+pub(crate) fn log_microphone(
+ rec: &RecordingStream,
+ scene: &SceneModel,
+ capability_id: &str,
+ received: &Received,
+) -> Result<()> {
+ microphone::log(rec, scene.capability_entity_path(capability_id)?, received)
+}
+
+pub(crate) fn log_speaker_data(
+ rec: &RecordingStream,
+ scene: &SceneModel,
+ capability_id: &str,
+ received: &Received