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

Commit 75979011 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes from topic "avrcp-addressed-player-changed"

* changes:
  Send addressed and available player change for PTS test
  Add respond track not selected interim when register notification
  Send UID 0 for track changed if there is no media ID
parents 823d5990 59561bbe
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -50,6 +50,9 @@ TRC_HID_DEV=2
# SMP Pair options (formatted as hex bytes) auth, io, ikey, rkey, ksize
#PTS_SmpOptions=0xD,0x4,0xf,0xf,0x10

# PTS AVRCP Test mode
#PTS_AvrcpTest=true

# SMP Certification Failure Cases
# Set any of the following SMP error values (from smp_api_types.h)
# to induce pairing failues for various PTS SMP test cases.
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ static const char STACK_CONFIG_MODULE[] = "stack_config_module";

typedef struct {
  bool (*get_trace_config_enabled)(void);
  bool (*get_pts_avrcp_test)(void);
  bool (*get_pts_secure_only_mode)(void);
  bool (*get_pts_conn_updates_disabled)(void);
  bool (*get_pts_crosskey_sdp_disable)(void);
+11 −7
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@

namespace {
const char* TRACE_CONFIG_ENABLED_KEY = "TraceConf";
const char* PTS_AVRCP_TEST = "PTS_AvrcpTest";
const char* PTS_SECURE_ONLY_MODE = "PTS_SecurePairOnly";
const char* PTS_LE_CONN_UPDATED_DISABLED = "PTS_DisableConnUpdates";
const char* PTS_DISABLE_SDP_LE_PAIR = "PTS_DisableSDPOnLEPair";
@@ -77,6 +78,11 @@ static bool get_trace_config_enabled(void) {
                         TRACE_CONFIG_ENABLED_KEY, false);
}

static bool get_pts_avrcp_test(void) {
  return config_get_bool(*config, CONFIG_DEFAULT_SECTION, PTS_AVRCP_TEST,
                         false);
}

static bool get_pts_secure_only_mode(void) {
  return config_get_bool(*config, CONFIG_DEFAULT_SECTION, PTS_SECURE_ONLY_MODE,
                         false);
@@ -104,12 +110,10 @@ static int get_pts_smp_failure_case(void) {

static config_t* get_all(void) { return config.get(); }

const stack_config_t interface = {get_trace_config_enabled,
                                  get_pts_secure_only_mode,
                                  get_pts_conn_updates_disabled,
                                  get_pts_crosskey_sdp_disable,
                                  get_pts_smp_options,
                                  get_pts_smp_failure_case,
                                  get_all};
const stack_config_t interface = {
    get_trace_config_enabled,     get_pts_avrcp_test,
    get_pts_secure_only_mode,     get_pts_conn_updates_disabled,
    get_pts_crosskey_sdp_disable, get_pts_smp_options,
    get_pts_smp_failure_case,     get_all};

const stack_config_t* stack_config_get_interface(void) { return &interface; }
+2 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ cc_library_static {
    host_supported: true,
    include_dirs: [
        "packages/modules/Bluetooth/system",
        "packages/modules/Bluetooth/system/btcore/include",
        "packages/modules/Bluetooth/system/internal_include",
        "packages/modules/Bluetooth/system/stack/include",
    ],
@@ -25,6 +26,7 @@ cc_test {
    host_supported: true,
    include_dirs: [
        "packages/modules/Bluetooth/system",
        "packages/modules/Bluetooth/system/btcore/include",
        "packages/modules/Bluetooth/system/internal_include",
        "packages/modules/Bluetooth/system/stack/include",
    ],
+61 −8
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@

#include "connection_handler.h"
#include "device.h"
#include "stack_config.h"

#include "packet/avrcp/avrcp_reject_packet.h"
#include "packet/avrcp/general_reject_packet.h"
@@ -233,7 +234,7 @@ void Device::HandleNotification(
      addr_player_changed_ = Notification(true, label);
      media_interface_->GetMediaPlayerList(
          base::Bind(&Device::AddressedPlayerNotificationResponse,
                     weak_ptr_factory_.GetWeakPtr(), label, false));
                     weak_ptr_factory_.GetWeakPtr(), label, true));
    } break;

    case Event::UIDS_CHANGED: {
@@ -366,6 +367,15 @@ void Device::TrackChangedNotificationResponse(uint8_t label, bool interim,
    }
  }

  if (curr_song_id == "") {
    DEVICE_LOG(WARNING) << "Empty media ID";
    uid = 0;
    if (stack_config_get_interface()->get_pts_avrcp_test()) {
      DEVICE_LOG(WARNING) << __func__ << ": pts test mode";
      uid = 0xffffffffffffffff;
    }
  }

  auto response = RegisterNotificationResponseBuilder::MakeTrackChangedBuilder(
      interim, uid);
  send_message_cb_.Run(label, false, std::move(response));
@@ -462,12 +472,28 @@ void Device::AddressedPlayerNotificationResponse(

  auto response =
      RegisterNotificationResponseBuilder::MakeAddressedPlayerBuilder(
          true, curr_player, 0x0000);
          interim, curr_player, 0x0000);
  send_message_cb_.Run(label, false, std::move(response));

  if (!interim) {
    active_labels_.erase(label);
    addr_player_changed_ = Notification(false, 0);
    RejectNotification();
  }
}

void Device::RejectNotification() {
  DEVICE_VLOG(1) << __func__;
  Notification* rejectNotification[] = {&play_status_changed_, &track_changed_,
                                        &play_pos_changed_,
                                        &now_playing_changed_};
  for (int i = 0; i < 4; i++) {
    uint8_t label = rejectNotification[i]->second;
    auto response = RejectBuilder::MakeBuilder(
        CommandPdu::REGISTER_NOTIFICATION, Status::ADDRESSED_PLAYER_CHANGED);
    send_message_cb_.Run(label, false, std::move(response));
    active_labels_.erase(label);
    rejectNotification[i] = new Notification(false, 0);
  }
}

@@ -1091,16 +1117,12 @@ void Device::SendFolderUpdate(bool available_players, bool addressed_player,
  DEVICE_VLOG(4) << __func__;

  if (available_players) {
    // TODO (apanicke): Right now this isn't needed since we only show one
    // player. Implement this in the future for a more complete
    // implementation though.
    HandleAvailablePlayerUpdate();
  }

  if (addressed_player) {
    // TODO (apanicke): See above TODO.
    HandleAddressedPlayerUpdate();
  }

  CHECK(false) << "NEED TO IMPLEMENT";
}

void Device::HandleTrackUpdate() {
@@ -1175,6 +1197,37 @@ void Device::HandlePlayPosUpdate() {
      play_pos_changed_.second, false));
}

void Device::HandleAvailablePlayerUpdate() {
  DEVICE_VLOG(1) << __func__;

  if (!avail_players_changed_.first) {
    LOG(WARNING) << "Device is not registered for available player updates";
    return;
  }

  auto response =
      RegisterNotificationResponseBuilder::MakeAvailablePlayersBuilder(false);
  send_message_cb_.Run(avail_players_changed_.second, false,
                       std::move(response));

  if (!avail_players_changed_.first) {
    active_labels_.erase(avail_players_changed_.second);
    avail_players_changed_ = Notification(false, 0);
  }
}

void Device::HandleAddressedPlayerUpdate() {
  DEVICE_VLOG(1) << __func__;
  if (!addr_player_changed_.first) {
    DEVICE_LOG(WARNING)
        << "Device is not registered for addressed player updates";
    return;
  }
  media_interface_->GetMediaPlayerList(base::Bind(
      &Device::AddressedPlayerNotificationResponse,
      weak_ptr_factory_.GetWeakPtr(), addr_player_changed_.second, false));
}

void Device::DeviceDisconnected() {
  DEVICE_LOG(INFO) << "Device was disconnected";
  play_pos_update_cb_.Cancel();
Loading