Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2745206f authored by Jeremy Wu's avatar Jeremy Wu Committed by Gerrit Code Review
Browse files

Merge changes I7a08231b,If1c94144,I71589890,Id98fd212,I80d609e1, ... into main

* changes:
  Floss: null-check on transport instance use
  Floss: expose DBus method |GetGroupStatus|
  Floss: make spamming LE audio logs verbose
  Floss: add csis to profile policy
  Floss: add volume_control to profile policy
  Floss: add le_audio to profile policy
  Floss: introduce |CreateBondWithRetry| to |Stack::Message|
  Floss: claim support of LeAudio in HAL as default
  Floss: use featured to query LeAudioOnly flag
  Floss: implement le_audio_shim
parents 3a0e4ecb 640b4eac
Loading
Loading
Loading
Loading
+91 −9
Original line number Diff line number Diff line
@@ -81,15 +81,30 @@ namespace le_audio {

// Invoked by audio server when it has audio data to stream.
bool HostStartRequest() {
  if (!host::le_audio::LeAudioSinkTransport::instance) {
    log::warn("instance is null");
    return false;
  }

  host::le_audio::LeAudioSinkTransport::instance->ResetPresentationPosition();
  return host::le_audio::LeAudioSinkTransport::instance->StartRequest();
}

void HostStopRequest() {
  if (!host::le_audio::LeAudioSinkTransport::instance) {
    log::warn("instance is null");
    return;
  }

  host::le_audio::LeAudioSinkTransport::instance->StopRequest();
}

btle_pcm_parameters GetHostPcmConfig() {
  if (!host::le_audio::LeAudioSinkTransport::instance) {
    log::warn("instance is null");
    return {};
  }

  auto pcm_params = host::le_audio::LeAudioSinkTransport::instance
                        ->LeAudioGetSelectedHalPcmConfig();

@@ -105,15 +120,30 @@ btle_pcm_parameters GetHostPcmConfig() {

// Invoked by audio server to request audio data streamed from the peer.
bool PeerStartRequest() {
  host::le_audio::LeAudioSinkTransport::instance->ResetPresentationPosition();
  if (!host::le_audio::LeAudioSourceTransport::instance) {
    log::warn("instance is null");
    return false;
  }

  host::le_audio::LeAudioSourceTransport::instance->ResetPresentationPosition();
  return host::le_audio::LeAudioSourceTransport::instance->StartRequest();
}

void PeerStopRequest() {
  if (!host::le_audio::LeAudioSourceTransport::instance) {
    log::warn("instance is null");
    return;
  }

  host::le_audio::LeAudioSourceTransport::instance->StopRequest();
}

btle_pcm_parameters GetPeerPcmConfig() {
  if (!host::le_audio::LeAudioSourceTransport::instance) {
    log::warn("instance is null");
    return {};
  }

  auto pcm_params = host::le_audio::LeAudioSourceTransport::instance
                        ->LeAudioGetSelectedHalPcmConfig();

@@ -136,16 +166,27 @@ bool GetPeerStreamStarted() {
}

void SourceMetadataChanged(const source_metadata_v7_t& metadata) {
  if (host::le_audio::LeAudioSourceTransport::instance) {
    host::le_audio::LeAudioSourceTransport::instance->SourceMetadataChanged(
        metadata);
  }

  if (host::le_audio::LeAudioSinkTransport::instance) {
    host::le_audio::LeAudioSinkTransport::instance->SourceMetadataChanged(
        metadata);
  }
}

void SinkMetadataChanged(const sink_metadata_v7_t& metadata) {
  if (host::le_audio::LeAudioSourceTransport::instance) {
    host::le_audio::LeAudioSourceTransport::instance->SinkMetadataChanged(
        metadata);
  host::le_audio::LeAudioSinkTransport::instance->SinkMetadataChanged(metadata);
  }

  if (host::le_audio::LeAudioSinkTransport::instance) {
    host::le_audio::LeAudioSinkTransport::instance->SinkMetadataChanged(
        metadata);
  }
}

OffloadCapabilities get_offload_capabilities() {
@@ -169,6 +210,11 @@ void LeAudioClientInterface::Sink::Cleanup() {

void LeAudioClientInterface::Sink::SetPcmParameters(
    const PcmParameters& params) {
  if (!host::le_audio::LeAudioSinkTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info(
      "sample_rate={}, bits_per_sample={}, channels_count={}, "
      "data_interval_us={}",
@@ -182,6 +228,11 @@ void LeAudioClientInterface::Sink::SetPcmParameters(
}

void LeAudioClientInterface::Sink::SetRemoteDelay(uint16_t delay_report_ms) {
  if (!host::le_audio::LeAudioSinkTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info("delay_report_ms={} msec", delay_report_ms);

  host::le_audio::LeAudioSinkTransport::instance->SetRemoteDelay(
@@ -201,6 +252,11 @@ void LeAudioClientInterface::Sink::StopSession() {
}

void LeAudioClientInterface::Sink::ConfirmStreamingRequest() {
  if (!host::le_audio::LeAudioSinkTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info("");

  auto instance = host::le_audio::LeAudioSinkTransport::instance;
@@ -233,6 +289,11 @@ void LeAudioClientInterface::Sink::ConfirmStreamingRequestV2() {
}

void LeAudioClientInterface::Sink::CancelStreamingRequest() {
  if (!host::le_audio::LeAudioSinkTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info("");

  auto instance = host::le_audio::LeAudioSinkTransport::instance;
@@ -278,7 +339,8 @@ size_t LeAudioClientInterface::Sink::Read(uint8_t* p_buf, uint32_t len) {
  uint32_t bytes_read = 0;
  bytes_read = UIPC_Read(*lea_uipc, UIPC_CH_ID_AV_AUDIO, p_buf, len);

  log::info("");
  // TODO(b/317682986): grab meaningful statistics for logs and metrics
  log::verbose("Read {} bytes", bytes_read);

  return bytes_read;
}
@@ -294,6 +356,11 @@ void LeAudioClientInterface::Source::Cleanup() {

void LeAudioClientInterface::Source::SetPcmParameters(
    const PcmParameters& params) {
  if (!host::le_audio::LeAudioSourceTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info(
      "sample_rate={}, bits_per_sample={}, channels_count={}, "
      "data_interval_us={}",
@@ -307,6 +374,11 @@ void LeAudioClientInterface::Source::SetPcmParameters(
}

void LeAudioClientInterface::Source::SetRemoteDelay(uint16_t delay_report_ms) {
  if (!host::le_audio::LeAudioSourceTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info("delay_report_ms={} msec", delay_report_ms);

  host::le_audio::LeAudioSourceTransport::instance->SetRemoteDelay(
@@ -326,6 +398,11 @@ void LeAudioClientInterface::Source::StopSession() {
}

void LeAudioClientInterface::Source::ConfirmStreamingRequest() {
  if (!host::le_audio::LeAudioSourceTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info("");

  auto instance = host::le_audio::LeAudioSourceTransport::instance;
@@ -358,6 +435,11 @@ void LeAudioClientInterface::Source::ConfirmStreamingRequestV2() {
}

void LeAudioClientInterface::Source::CancelStreamingRequest() {
  if (!host::le_audio::LeAudioSourceTransport::instance) {
    log::warn("instance is null");
    return;
  }

  log::info("");

  auto instance = host::le_audio::LeAudioSourceTransport::instance;
+3 −1
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@

#include "bta_le_audio_api.h"

bool LeAudioHalVerifier::SupportsLeAudio() { return false; }
// The HAL always supports LE audio.
// Disable LE audio in the policy level if needed.
bool LeAudioHalVerifier::SupportsLeAudio() { return true; }
bool LeAudioHalVerifier::SupportsLeAudioHardwareOffload() { return false; }
bool LeAudioHalVerifier::SupportsLeAudioBroadcast() { return false; }
bool LeAudioHalVerifier::SupportsStreamActiveApi() { return false; }
+31 −0
Original line number Diff line number Diff line
@@ -13,6 +13,10 @@ use crate::{ClientContext, GattRequest};
use bt_topshim::btif::{BtBondState, BtPropertyType, BtSspVariant, BtStatus, Uuid128Bit};
use bt_topshim::profiles::gatt::{AdvertisingStatus, GattStatus, LePhy};
use bt_topshim::profiles::hfp::HfpCodecId;
use bt_topshim::profiles::le_audio::{
    BtLeAudioDirection, BtLeAudioGroupNodeStatus, BtLeAudioGroupStatus, BtLeAudioGroupStreamStatus,
    BtLeAudioUnicastMonitorModeStatus,
};
use bt_topshim::profiles::sdp::BtSdpRecord;
use btstack::battery_manager::{BatterySet, IBatteryManagerCallback};
use btstack::bluetooth::{
@@ -1386,6 +1390,33 @@ fn timestamp_to_string(ts_in_us: u64) -> String {
}

impl IBluetoothMediaCallback for MediaCallback {
    // TODO(b/333341411): implement callbacks for client as necessary
    fn on_lea_group_connected(&mut self, _group_id: i32, _name: String) {}
    fn on_lea_group_disconnected(&mut self, _group_id: i32) {}
    fn on_lea_group_status(&mut self, _group_id: i32, _status: BtLeAudioGroupStatus) {}
    fn on_lea_group_node_status(
        &mut self,
        _addr: String,
        _group_id: i32,
        _status: BtLeAudioGroupNodeStatus,
    ) {
    }
    fn on_lea_audio_conf(
        &mut self,
        _direction: u8,
        _group_id: i32,
        _snk_audio_location: u32,
        _src_audio_location: u32,
        _avail_cont: u16,
    ) {
    }
    fn on_lea_unicast_monitor_mode_status(
        &mut self,
        _direction: BtLeAudioDirection,
        _status: BtLeAudioUnicastMonitorModeStatus,
    ) {
    }
    fn on_lea_group_stream_status(&mut self, _group_id: i32, _status: BtLeAudioGroupStreamStatus) {}
    fn on_bluetooth_audio_device_added(&mut self, _device: BluetoothAudioDevice) {}
    fn on_bluetooth_audio_device_removed(&mut self, _addr: String) {}
    fn on_absolute_volume_supported_changed(&mut self, _supported: bool) {}
+184 −0
Original line number Diff line number Diff line
@@ -12,6 +12,11 @@ use bt_topshim::profiles::avrcp::PlayerMetadata;
use bt_topshim::profiles::gatt::{AdvertisingStatus, GattStatus, LeDiscMode, LePhy};
use bt_topshim::profiles::hfp::{EscoCodingFormat, HfpCodecBitId, HfpCodecFormat};
use bt_topshim::profiles::hid_host::BthhReportType;
use bt_topshim::profiles::le_audio::{
    BtLeAudioContentType, BtLeAudioDirection, BtLeAudioGroupNodeStatus, BtLeAudioGroupStatus,
    BtLeAudioGroupStreamStatus, BtLeAudioSource, BtLeAudioUnicastMonitorModeStatus, BtLeAudioUsage,
    BtLePcmConfig,
};
use bt_topshim::profiles::sdp::{
    BtSdpDipRecord, BtSdpHeaderOverlay, BtSdpMasRecord, BtSdpMnsRecord, BtSdpMpsRecord,
    BtSdpOpsRecord, BtSdpPceRecord, BtSdpPseRecord, BtSdpRecord, BtSdpSapRecord, BtSdpType,
@@ -85,6 +90,14 @@ impl_dbus_arg_enum!(BtPropertyType);
impl_dbus_arg_enum!(BtSspVariant);
impl_dbus_arg_enum!(BtStatus);
impl_dbus_arg_enum!(BtTransport);
impl_dbus_arg_from_into!(BtLeAudioUsage, i32);
impl_dbus_arg_from_into!(BtLeAudioContentType, i32);
impl_dbus_arg_from_into!(BtLeAudioSource, i32);
impl_dbus_arg_from_into!(BtLeAudioGroupStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioGroupNodeStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioUnicastMonitorModeStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioDirection, i32);
impl_dbus_arg_from_into!(BtLeAudioGroupStreamStatus, i32);
impl_dbus_arg_enum!(GattStatus);
impl_dbus_arg_enum!(GattWriteRequestStatus);
impl_dbus_arg_enum!(GattWriteType);
@@ -575,6 +588,14 @@ struct PlayerMetadataDBus {
    length_us: i64,
}

#[dbus_propmap(BtLePcmConfig)]
pub struct BtLePcmConfigDBus {
    data_interval_us: u32,
    sample_rate: u32,
    bits_per_sample: u8,
    channels_count: u8,
}

struct IBluetoothCallbackDBus {}

impl RPCProxy for IBluetoothCallbackDBus {}
@@ -2609,6 +2630,46 @@ impl IBluetoothMedia for BluetoothMediaDBus {
        dbus_generated!()
    }

    #[dbus_method("ConnectLeaGroupByMemberAddress")]
    fn connect_lea_group_by_member_address(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectLeaGroupByMemberAddress")]
    fn disconnect_lea_group_by_member_address(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("ConnectLea")]
    fn connect_lea(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectLea")]
    fn disconnect_lea(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("ConnectVc")]
    fn connect_vc(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectVc")]
    fn disconnect_vc(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("ConnectCsis")]
    fn connect_csis(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectCsis")]
    fn disconnect_csis(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("SetActiveDevice")]
    fn set_active_device(&mut self, address: String) {
        dbus_generated!()
@@ -2708,6 +2769,89 @@ impl IBluetoothMedia for BluetoothMediaDBus {
    fn trigger_debug_dump(&mut self) {
        dbus_generated!()
    }

    #[dbus_method("GroupSetActive")]
    fn group_set_active(&mut self, group_id: i32) {
        dbus_generated!()
    }

    #[dbus_method("HostStartAudioRequest")]
    fn host_start_audio_request(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("HostStopAudioRequest")]
    fn host_stop_audio_request(&mut self) {
        dbus_generated!()
    }

    #[dbus_method("PeerStartAudioRequest")]
    fn peer_start_audio_request(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("PeerStopAudioRequest")]
    fn peer_stop_audio_request(&mut self) {
        dbus_generated!()
    }

    #[dbus_method("GetHostPcmConfig")]
    fn get_host_pcm_config(&mut self) -> BtLePcmConfig {
        dbus_generated!()
    }

    #[dbus_method("GetPeerPcmConfig")]
    fn get_peer_pcm_config(&mut self) -> BtLePcmConfig {
        dbus_generated!()
    }

    #[dbus_method("GetHostStreamStarted")]
    fn get_host_stream_started(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("GetPeerStreamStarted")]
    fn get_peer_stream_started(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("SourceMetadataChanged")]
    fn source_metadata_changed(
        &mut self,
        usage: BtLeAudioUsage,
        content_type: BtLeAudioContentType,
        gain: f64,
    ) -> bool {
        dbus_generated!()
    }

    #[dbus_method("SinkMetadataChanged")]
    fn sink_metadata_changed(&mut self, source: BtLeAudioSource, gain: f64) -> bool {
        dbus_generated!()
    }

    #[dbus_method("GetUnicastMonitorModeStatus")]
    fn get_unicast_monitor_mode_status(
        &mut self,
        direction: BtLeAudioDirection,
    ) -> BtLeAudioUnicastMonitorModeStatus {
        dbus_generated!()
    }

    #[dbus_method("GetGroupStreamStatus")]
    fn get_group_stream_status(&mut self, group_id: i32) -> BtLeAudioGroupStreamStatus {
        dbus_generated!()
    }

    #[dbus_method("GetGroupStatus")]
    fn get_group_status(&mut self, group_id: i32) -> BtLeAudioGroupStatus {
        dbus_generated!()
    }

    #[dbus_method("SetGroupVolume")]
    fn set_group_volume(&mut self, group_id: i32, volume: u8) {
        dbus_generated!()
    }
}

struct IBluetoothMediaCallbackDBus {}
@@ -2750,6 +2894,46 @@ impl IBluetoothMediaCallback for IBluetoothMediaCallbackDBus {
        pkt_status_in_binary: String,
    ) {
    }

    #[dbus_method("OnLeaGroupConnected")]
    fn on_lea_group_connected(&mut self, group_id: i32, name: String) {}

    #[dbus_method("OnLeaGroupDisconnected")]
    fn on_lea_group_disconnected(&mut self, group_id: i32) {}

    #[dbus_method("OnLeaGroupStatus")]
    fn on_lea_group_status(&mut self, group_id: i32, status: BtLeAudioGroupStatus) {}

    #[dbus_method("OnLeaGroupNodeStatus")]
    fn on_lea_group_node_status(
        &mut self,
        addr: String,
        group_id: i32,
        status: BtLeAudioGroupNodeStatus,
    ) {
    }

    #[dbus_method("OnLeaAudioConf")]
    fn on_lea_audio_conf(
        &mut self,
        direction: u8,
        group_id: i32,
        snk_audio_location: u32,
        src_audio_location: u32,
        avail_cont: u16,
    ) {
    }

    #[dbus_method("OnLeaUnicastMonitorModeStatus")]
    fn on_lea_unicast_monitor_mode_status(
        &mut self,
        direction: BtLeAudioDirection,
        status: BtLeAudioUnicastMonitorModeStatus,
    ) {
    }

    #[dbus_method("OnLeaGroupStreamStatus")]
    fn on_lea_group_stream_status(&mut self, group_id: i32, status: BtLeAudioGroupStreamStatus) {}
}

pub(crate) struct BatteryManagerDBusRPC {
+195 −0
Original line number Diff line number Diff line
@@ -4,6 +4,11 @@ use bt_topshim::profiles::a2dp::{
};
use bt_topshim::profiles::avrcp::PlayerMetadata;
use bt_topshim::profiles::hfp::{HfpCodecBitId, HfpCodecFormat};
use bt_topshim::profiles::le_audio::{
    BtLeAudioContentType, BtLeAudioDirection, BtLeAudioGroupNodeStatus, BtLeAudioGroupStatus,
    BtLeAudioGroupStreamStatus, BtLeAudioSource, BtLeAudioUnicastMonitorModeStatus, BtLeAudioUsage,
    BtLePcmConfig,
};
use btstack::bluetooth_media::{BluetoothAudioDevice, IBluetoothMedia, IBluetoothMediaCallback};
use btstack::RPCProxy;

@@ -47,8 +52,24 @@ pub struct BluetoothAudioDeviceDBus {
    absolute_volume: bool,
}

#[dbus_propmap(BtLePcmConfig)]
pub struct BtLePcmConfigDBus {
    data_interval_us: u32,
    sample_rate: u32,
    bits_per_sample: u8,
    channels_count: u8,
}

impl_dbus_arg_from_into!(HfpCodecBitId, i32);
impl_dbus_arg_from_into!(HfpCodecFormat, i32);
impl_dbus_arg_from_into!(BtLeAudioUsage, i32);
impl_dbus_arg_from_into!(BtLeAudioContentType, i32);
impl_dbus_arg_from_into!(BtLeAudioSource, i32);
impl_dbus_arg_from_into!(BtLeAudioGroupStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioGroupNodeStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioUnicastMonitorModeStatus, i32);
impl_dbus_arg_from_into!(BtLeAudioDirection, i32);
impl_dbus_arg_from_into!(BtLeAudioGroupStreamStatus, i32);
impl_dbus_arg_enum!(A2dpCodecIndex);
impl_dbus_arg_from_into!(A2dpCodecSampleRate, i32);
impl_dbus_arg_from_into!(A2dpCodecBitsPerSample, i32);
@@ -100,6 +121,57 @@ impl IBluetoothMediaCallback for BluetoothMediaCallbackDBus {
    ) {
        dbus_generated!()
    }

    #[dbus_method("OnLeaGroupConnected")]
    fn on_lea_group_connected(&mut self, group_id: i32, name: String) {
        dbus_generated!()
    }

    #[dbus_method("OnLeaGroupDisconnected")]
    fn on_lea_group_disconnected(&mut self, group_id: i32) {
        dbus_generated!()
    }

    #[dbus_method("OnLeaGroupStatus")]
    fn on_lea_group_status(&mut self, group_id: i32, status: BtLeAudioGroupStatus) {
        dbus_generated!()
    }

    #[dbus_method("OnLeaGroupNodeStatus")]
    fn on_lea_group_node_status(
        &mut self,
        addr: String,
        group_id: i32,
        status: BtLeAudioGroupNodeStatus,
    ) {
        dbus_generated!()
    }

    #[dbus_method("OnLeaAudioConf")]
    fn on_lea_audio_conf(
        &mut self,
        direction: u8,
        group_id: i32,
        snk_audio_location: u32,
        src_audio_location: u32,
        avail_cont: u16,
    ) {
        dbus_generated!()
    }

    #[dbus_method("OnLeaUnicastMonitorModeStatus")]
    fn on_lea_unicast_monitor_mode_status(
        &mut self,
        direction: BtLeAudioDirection,
        status: BtLeAudioUnicastMonitorModeStatus,
    ) {
        dbus_generated!()
    }

    #[dbus_method("OnLeaGroupStreamStatus")]
    fn on_lea_group_stream_status(&mut self, group_id: i32, status: BtLeAudioGroupStreamStatus) {
        dbus_generated!()
    }
}

#[allow(dead_code)]
@@ -198,6 +270,46 @@ impl IBluetoothMedia for IBluetoothMediaDBus {
        dbus_generated!()
    }

    #[dbus_method("ConnectLeaGroupByMemberAddress")]
    fn connect_lea_group_by_member_address(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectLeaGroupByMemberAddress")]
    fn disconnect_lea_group_by_member_address(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("ConnectLea")]
    fn connect_lea(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectLea")]
    fn disconnect_lea(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("ConnectVc")]
    fn connect_vc(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectVc")]
    fn disconnect_vc(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("ConnectCsis")]
    fn connect_csis(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("DisconnectCsis")]
    fn disconnect_csis(&mut self, address: String) {
        dbus_generated!()
    }

    #[dbus_method("SetActiveDevice")]
    fn set_active_device(&mut self, address: String) {
        dbus_generated!()
@@ -297,4 +409,87 @@ impl IBluetoothMedia for IBluetoothMediaDBus {
    fn trigger_debug_dump(&mut self) {
        dbus_generated!()
    }

    #[dbus_method("GroupSetActive")]
    fn group_set_active(&mut self, group_id: i32) {
        dbus_generated!()
    }

    #[dbus_method("HostStartAudioRequest")]
    fn host_start_audio_request(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("HostStopAudioRequest")]
    fn host_stop_audio_request(&mut self) {
        dbus_generated!()
    }

    #[dbus_method("PeerStartAudioRequest")]
    fn peer_start_audio_request(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("PeerStopAudioRequest")]
    fn peer_stop_audio_request(&mut self) {
        dbus_generated!()
    }

    #[dbus_method("GetHostPcmConfig")]
    fn get_host_pcm_config(&mut self) -> BtLePcmConfig {
        dbus_generated!()
    }

    #[dbus_method("GetPeerPcmConfig")]
    fn get_peer_pcm_config(&mut self) -> BtLePcmConfig {
        dbus_generated!()
    }

    #[dbus_method("GetHostStreamStarted")]
    fn get_host_stream_started(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("GetPeerStreamStarted")]
    fn get_peer_stream_started(&mut self) -> bool {
        dbus_generated!()
    }

    #[dbus_method("SourceMetadataChanged")]
    fn source_metadata_changed(
        &mut self,
        usage: BtLeAudioUsage,
        content_type: BtLeAudioContentType,
        gain: f64,
    ) -> bool {
        dbus_generated!()
    }

    #[dbus_method("SinkMetadataChanged")]
    fn sink_metadata_changed(&mut self, source: BtLeAudioSource, gain: f64) -> bool {
        dbus_generated!()
    }

    #[dbus_method("GetUnicastMonitorModeStatus")]
    fn get_unicast_monitor_mode_status(
        &mut self,
        direction: BtLeAudioDirection,
    ) -> BtLeAudioUnicastMonitorModeStatus {
        dbus_generated!()
    }

    #[dbus_method("GetGroupStreamStatus")]
    fn get_group_stream_status(&mut self, group_id: i32) -> BtLeAudioGroupStreamStatus {
        dbus_generated!()
    }

    #[dbus_method("GetGroupStatus")]
    fn get_group_status(&mut self, group_id: i32) -> BtLeAudioGroupStatus {
        dbus_generated!()
    }

    #[dbus_method("SetGroupVolume")]
    fn set_group_volume(&mut self, group_id: i32, volume: u8) {
        dbus_generated!()
    }
}
Loading