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

Commit 514de1cd authored by Michael Sun's avatar Michael Sun Committed by Automerger Merge Worker
Browse files

Merge "floss: avrcp: propagate media information through topshim" am: 16555181 am: e629fbeb

parents 8c8487e6 e629fbeb
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@ impl DBusArg for PlayerMetadata {
                    )?
                }
                "length" => {
                    metadata.length = i64::ref_arg_to_rust(
                    metadata.length_us = i64::ref_arg_to_rust(
                        variant.as_static_inner(0).unwrap(),
                        String::from("PlayerMetadata::Length"),
                    )?
@@ -244,7 +244,7 @@ impl IBluetoothMedia for IBluetoothMediaDBus {
    }

    #[dbus_method("SetPlayerPosition")]
    fn set_player_posistion(&mut self, position: i64) {
    fn set_player_position(&mut self, position_us: i64) {
        dbus_generated!()
    }

+23 −5
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ use bt_topshim::profiles::hfp::{
use bt_topshim::{metrics, topstack};
use bt_utils::uinput::UInput;

use log::{info, warn};
use log::{debug, info, warn};
use num_traits::cast::ToPrimitive;
use std::collections::{HashMap, HashSet};
use std::convert::TryFrom;
@@ -94,7 +94,7 @@ pub trait IBluetoothMedia {
    fn set_player_playback_status(&mut self, status: String);
    /// Set the position of the current media in microseconds. The method is a copy of the existing
    /// CRAS API, hence not following Floss API conventions.
    fn set_player_posistion(&mut self, position: i64);
    fn set_player_position(&mut self, position: i64);
    /// Set the media metadata, including title, artist, album, and length. The method is a
    /// copy of the existing CRAS API, hence not following Floss API conventions. PlayerMetadata is
    /// a custom data type that requires special handlng.
@@ -1315,7 +1315,25 @@ impl IBluetoothMedia for BluetoothMedia {
        }
    }

    fn set_player_playback_status(&mut self, _status: String) {}
    fn set_player_posistion(&mut self, _position: i64) {}
    fn set_player_metadata(&mut self, _metadata: PlayerMetadata) {}
    fn set_player_playback_status(&mut self, status: String) {
        debug!("AVRCP received player playback status: {}", status);
        match self.avrcp.as_mut() {
            Some(avrcp) => avrcp.set_playback_status(&status),
            None => warn!("Uninitialized AVRCP to set player playback status"),
        };
    }
    fn set_player_position(&mut self, position_us: i64) {
        debug!("AVRCP received player position: {}", position_us);
        match self.avrcp.as_mut() {
            Some(avrcp) => avrcp.set_position(position_us),
            None => warn!("Uninitialized AVRCP to set player position"),
        };
    }
    fn set_player_metadata(&mut self, metadata: PlayerMetadata) {
        debug!("AVRCP received player metadata: {:?}", metadata);
        match self.avrcp.as_mut() {
            Some(avrcp) => avrcp.set_metadata(&metadata),
            None => warn!("Uninitialized AVRCP to set player playback status"),
        };
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ namespace rust {
struct A2dpCodecConfig;
struct RustPresentationPosition;
struct RustRawAddress;
struct RustPlayStatus;

class A2dpIntf {
 public:
@@ -71,6 +72,11 @@ class AvrcpIntf {
  // interface for Audio server
  void set_volume(int8_t volume);

  void set_playback_status(const ::rust::String& status) {}
  void set_position(int64_t position_us) {}
  void set_metadata(
      const ::rust::String& title, const ::rust::String& artist, const ::rust::String& album, int64_t length_us) {}

 private:
  bluetooth::avrcp::ServiceInterface* intf_;
};
+30 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ pub struct PlayerMetadata {
    pub title: String,
    pub artist: String,
    pub album: String,
    pub length: i64,
    pub length_us: i64,
}

#[cxx::bridge(namespace = bluetooth::topshim::rust)]
@@ -33,6 +33,15 @@ pub mod ffi {
        fn connect(self: Pin<&mut AvrcpIntf>, bt_addr: RustRawAddress) -> u32;
        fn disconnect(self: Pin<&mut AvrcpIntf>, bt_addr: RustRawAddress) -> u32;
        fn set_volume(self: Pin<&mut AvrcpIntf>, volume: i8);
        fn set_playback_status(self: Pin<&mut AvrcpIntf>, status: &String);
        fn set_position(self: Pin<&mut AvrcpIntf>, position_us: i64);
        fn set_metadata(
            self: Pin<&mut AvrcpIntf>,
            title: &String,
            artist: &String,
            album: &String,
            length_us: i64,
        );

    }
    extern "Rust" {
@@ -184,4 +193,24 @@ impl Avrcp {
        self.internal.pin_mut().cleanup();
        true
    }

    #[profile_enabled_or]
    pub fn set_playback_status(&mut self, status: &String) {
        self.internal.pin_mut().set_playback_status(status);
    }

    #[profile_enabled_or]
    pub fn set_position(&mut self, position_us: i64) {
        self.internal.pin_mut().set_position(position_us);
    }

    #[profile_enabled_or]
    pub fn set_metadata(&mut self, metadata: &PlayerMetadata) {
        self.internal.pin_mut().set_metadata(
            &metadata.title,
            &metadata.artist,
            &metadata.album,
            metadata.length_us,
        );
    }
}