chromium/chromeos/ash/components/dbus/audio/audio_node.cc

// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chromeos/ash/components/dbus/audio/audio_node.h"

#include <stdint.h>

#include "base/check.h"
#include "base/format_macros.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "third_party/cros_system_api/dbus/service_constants.h"

namespace ash {

AudioNode::AudioNode() = default;

AudioNode::AudioNode(bool is_input,
                     uint64_t id,
                     bool has_v2_stable_device_id,
                     uint64_t stable_device_id_v1,
                     uint64_t stable_device_id_v2,
                     std::string device_name,
                     std::string type,
                     std::string name,
                     bool active,
                     uint64_t plugged_time,
                     uint32_t max_supported_channels,
                     uint32_t audio_effect,
                     int32_t number_of_volume_steps)
    : is_input(is_input),
      id(id),
      has_v2_stable_device_id(has_v2_stable_device_id),
      stable_device_id_v1(stable_device_id_v1),
      stable_device_id_v2(stable_device_id_v2),
      device_name(device_name),
      type(type),
      name(name),
      active(active),
      plugged_time(plugged_time),
      max_supported_channels(max_supported_channels),
      audio_effect(audio_effect),
      number_of_volume_steps(number_of_volume_steps) {
  DCHECK(!(audio_effect & (~(cras::EFFECT_TYPE_NOISE_CANCELLATION |
                             cras::EFFECT_TYPE_HFP_MIC_SR |
                             cras::EFFECT_TYPE_STYLE_TRANSFER))));
  if (!is_input && number_of_volume_steps <= 0) {
    this->number_of_volume_steps = NUMBER_OF_VOLUME_STEPS_DEFAULT;
  }
}

AudioNode::AudioNode(const AudioNode& other) = default;

AudioNode::~AudioNode() = default;

std::string AudioNode::ToString() const {
  std::string result;
  base::StringAppendF(&result, "is_input = %s ", is_input ? "true" : "false");
  base::StringAppendF(&result, "id = 0x%" PRIx64 " ", id);
  base::StringAppendF(&result, "stable_device_id_version = %d",
                      StableDeviceIdVersion());
  base::StringAppendF(&result, "stable_device_id_v1 = 0x%" PRIx64 " ",
                      stable_device_id_v1);
  base::StringAppendF(&result, "stable_device_id_v2 = 0x%" PRIx64 " ",
                      stable_device_id_v2);
  base::StringAppendF(&result, "device_name = %s ", device_name.c_str());
  base::StringAppendF(&result, "type = %s ", type.c_str());
  base::StringAppendF(&result, "name = %s ", name.c_str());
  base::StringAppendF(&result, "active = %s ", active ? "true" : "false");
  base::StringAppendF(&result, "plugged_time= %s ",
                      base::NumberToString(plugged_time).c_str());
  base::StringAppendF(&result, "max_supported_channels= %s ",
                      base::NumberToString(max_supported_channels).c_str());
  base::StringAppendF(&result, "audio_effect = 0x%" PRIx32 " ", audio_effect);
  base::StringAppendF(&result, "number_of_volume_steps= %s",
                      base::NumberToString(number_of_volume_steps).c_str());
  return result;
}

int AudioNode::StableDeviceIdVersion() const {
  return has_v2_stable_device_id ? 2 : 1;
}

uint64_t AudioNode::StableDeviceId() const {
  return has_v2_stable_device_id ? stable_device_id_v2 : stable_device_id_v1;
}

}  // namespace ash