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

Commit 4fba22bd authored by Jeremy Wu's avatar Jeremy Wu Committed by Automerger Merge Worker
Browse files

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

Merge changes I7a08231b,If1c94144,I71589890,Id98fd212,I80d609e1, ... into main am: 2745206f am: 59830dce

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/3099045



Change-Id: Ic86cf65a48af388138af3af92f614ee456bd611c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 28f6c685 59830dce
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