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

Commit bfcf8aab authored by Yuyang Huang's avatar Yuyang Huang Committed by Gerrit Code Review
Browse files

Merge "fix mix-use of tBTA_AG_PEER_CODEC between BTM_SCO_CODEC_XXX and UUID_CODEC_XXX" into main

parents d11ba907 ab408fbe
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -64,8 +64,8 @@ tBTA_AG_SCB* get_hfp_active_device_callback() {
  return cb;
  return cb;
}
}


std::unordered_map<int, ::hfp::sco_config> HfpTransport::GetHfpScoConfig(
std::unordered_map<tBTA_AG_UUID_CODEC, ::hfp::sco_config>
    SessionType sessionType) {
HfpTransport::GetHfpScoConfig(SessionType sessionType) {
  auto providerInfo =
  auto providerInfo =
      ::bluetooth::audio::aidl::ProviderInfo::GetProviderInfo(sessionType);
      ::bluetooth::audio::aidl::ProviderInfo::GetProviderInfo(sessionType);
  return providerInfo->GetHfpScoConfig();
  return providerInfo->GetHfpScoConfig();
+2 −2
Original line number Original line Diff line number Diff line
@@ -72,8 +72,8 @@ class HfpTransport {


  void LogBytesProcessed(size_t bytes_read);
  void LogBytesProcessed(size_t bytes_read);


  static std::unordered_map<int, ::hfp::sco_config> GetHfpScoConfig(
  static std::unordered_map<tBTA_AG_UUID_CODEC, ::hfp::sco_config>
      SessionType sessionType);
  GetHfpScoConfig(SessionType sessionType);


 private:
 private:
  tHFP_CTRL_CMD hfp_pending_cmd_;
  tHFP_CTRL_CMD hfp_pending_cmd_;
+7 −4
Original line number Original line Diff line number Diff line
@@ -58,20 +58,23 @@ ProviderInfo::ProviderInfo(SessionType sessionType,
    : codecInfos(std::move(codecs)) {
    : codecInfos(std::move(codecs)) {
  for (auto codecInfo : codecInfos) {
  for (auto codecInfo : codecInfos) {
    if (codecInfo.id == CodecId::Core::CVSD) {
    if (codecInfo.id == CodecId::Core::CVSD) {
      hfpScoConfigMap[UUID_CODEC_CVSD] = recordHfpCodecInfo(codecInfo);
      hfpScoConfigMap[tBTA_AG_UUID_CODEC::UUID_CODEC_CVSD] =
          recordHfpCodecInfo(codecInfo);
    } else if (codecInfo.id == CodecId::Core::MSBC) {
    } else if (codecInfo.id == CodecId::Core::MSBC) {
      hfpScoConfigMap[UUID_CODEC_MSBC] = recordHfpCodecInfo(codecInfo);
      hfpScoConfigMap[tBTA_AG_UUID_CODEC::UUID_CODEC_MSBC] =
          recordHfpCodecInfo(codecInfo);
    } else if (codecInfo.id == CodecId::Core::LC3) {
    } else if (codecInfo.id == CodecId::Core::LC3) {
      if (sessionType == SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH ||
      if (sessionType == SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH ||
          sessionType == SessionType::HFP_SOFTWARE_ENCODING_DATAPATH ||
          sessionType == SessionType::HFP_SOFTWARE_ENCODING_DATAPATH ||
          sessionType == SessionType::HFP_SOFTWARE_DECODING_DATAPATH) {
          sessionType == SessionType::HFP_SOFTWARE_DECODING_DATAPATH) {
        hfpScoConfigMap[UUID_CODEC_LC3] = recordHfpCodecInfo(codecInfo);
        hfpScoConfigMap[tBTA_AG_UUID_CODEC::UUID_CODEC_LC3] =
            recordHfpCodecInfo(codecInfo);
      }
      }
    }
    }
  }
  }
}
}


const std::unordered_map<int, ::hfp::sco_config>&
const std::unordered_map<tBTA_AG_UUID_CODEC, ::hfp::sco_config>&
ProviderInfo::GetHfpScoConfig() {
ProviderInfo::GetHfpScoConfig() {
  return hfpScoConfigMap;
  return hfpScoConfigMap;
}
}
+4 −2
Original line number Original line Diff line number Diff line
@@ -36,11 +36,13 @@ class ProviderInfo {


  ~ProviderInfo() = default;
  ~ProviderInfo() = default;


  const std::unordered_map<int, ::hfp::sco_config>& GetHfpScoConfig();
  const std::unordered_map<tBTA_AG_UUID_CODEC, ::hfp::sco_config>&
  GetHfpScoConfig();


 private:
 private:
  const std::vector<CodecInfo> codecInfos;
  const std::vector<CodecInfo> codecInfos;
  std::unordered_map<int /* HFP CODEC in UUID_CODEC_XXX */, ::hfp::sco_config>
  std::unordered_map<tBTA_AG_UUID_CODEC /* HFP CODEC in UUID_CODEC_XXX */,
                     ::hfp::sco_config>
      hfpScoConfigMap;
      hfpScoConfigMap;
};
};
}  // namespace bluetooth::audio::aidl
}  // namespace bluetooth::audio::aidl
+15 −9
Original line number Original line Diff line number Diff line
@@ -77,19 +77,25 @@ HfpConfiguration get_default_hfp_configuration() {
  return hfp_config;
  return hfp_config;
}
}


CodecId get_codec_id_by_peer_codec(tBTA_AG_PEER_CODEC sco_codec) {
CodecId sco_codec_to_hal_codec(tBTA_AG_UUID_CODEC sco_codec) {
  if (sco_codec & BTM_SCO_CODEC_LC3) return CodecId::Core::LC3;
  switch (sco_codec) {
  if (sco_codec & BTM_SCO_CODEC_MSBC) return CodecId::Core::MSBC;
    case tBTA_AG_UUID_CODEC::UUID_CODEC_LC3:
  if (sco_codec & BTM_SCO_CODEC_CVSD) return CodecId::Core::CVSD;
      return CodecId::Core::LC3;
  // Unknown vendor codec otherwise
    case tBTA_AG_UUID_CODEC::UUID_CODEC_MSBC:
  CodecId codec_id = CodecId::Vendor();
      return CodecId::Core::MSBC;
  return codec_id;
    case tBTA_AG_UUID_CODEC::UUID_CODEC_CVSD:
      return CodecId::Core::CVSD;
    default:
      log::warn("Unknown sco_codec {}, defaulting to vendor codec",
                bta_ag_uuid_codec_text(sco_codec));
      return CodecId::Vendor();
  }
}
}


AudioConfiguration offload_config_to_hal_audio_config(
AudioConfiguration offload_config_to_hal_audio_config(
    const ::hfp::offload_config& offload_config) {
    const ::hfp::offload_config& offload_config) {
  HfpConfiguration hfp_config{
  HfpConfiguration hfp_config{
      .codecId = get_codec_id_by_peer_codec(offload_config.sco_codec),
      .codecId = sco_codec_to_hal_codec(offload_config.sco_codec),
      .connectionHandle = offload_config.connection_handle,
      .connectionHandle = offload_config.connection_handle,
      .nrec = offload_config.is_nrec,
      .nrec = offload_config.is_nrec,
      .controllerCodec = offload_config.is_controller_codec,
      .controllerCodec = offload_config.is_controller_codec,
@@ -504,7 +510,7 @@ void HfpClientInterface::Offload::CancelStreamingRequest() {
  }
  }
}
}


std::unordered_map<int, ::hfp::sco_config>
std::unordered_map<tBTA_AG_UUID_CODEC, ::hfp::sco_config>
HfpClientInterface::Offload::GetHfpScoConfig() {
HfpClientInterface::Offload::GetHfpScoConfig() {
  return aidl::hfp::HfpTransport::GetHfpScoConfig(
  return aidl::hfp::HfpTransport::GetHfpScoConfig(
      aidl::SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH);
      aidl::SessionType::HFP_HARDWARE_OFFLOAD_DATAPATH);
Loading