audio: Properly support external device port with static configs
External device ports might not have dynamic profiles, for example, ports for BT devices. Properly handle this case in the default implementation. Bug: 264712385 Test: atest VtsHalAudioCoreTargetTest Test: atest audiosystem_tests Change-Id: I8d4bcbf6ccf2ba05436e68e3ba94567fc7610eb7
This commit is contained in:
parent
8f28f8b8ea
commit
fcf980e586
1 changed files with 20 additions and 17 deletions
|
@ -454,16 +454,15 @@ ndk::ScopedAStatus Module::connectExternalDevice(const AudioPort& in_templateIdA
|
|||
LOG(ERROR) << __func__ << ": port id " << templateId << " is not a device port";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
|
||||
}
|
||||
if (!templateIt->profiles.empty()) {
|
||||
LOG(ERROR) << __func__ << ": port id " << templateId
|
||||
<< " does not have dynamic profiles";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
|
||||
}
|
||||
auto& templateDevicePort = templateIt->ext.get<AudioPortExt::Tag::device>();
|
||||
if (templateDevicePort.device.type.connection.empty()) {
|
||||
LOG(ERROR) << __func__ << ": port id " << templateId << " is permanently attached";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
|
||||
}
|
||||
if (mConnectedDevicePorts.find(templateId) != mConnectedDevicePorts.end()) {
|
||||
LOG(ERROR) << __func__ << ": port id " << templateId << " is a connected device port";
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
|
||||
}
|
||||
// Postpone id allocation until we ensure that there are no client errors.
|
||||
connectedPort = *templateIt;
|
||||
connectedPort.extraAudioDescriptors = in_templateIdAndAdditionalData.extraAudioDescriptors;
|
||||
|
@ -486,19 +485,23 @@ ndk::ScopedAStatus Module::connectExternalDevice(const AudioPort& in_templateIdA
|
|||
}
|
||||
}
|
||||
|
||||
if (!mDebug.simulateDeviceConnections) {
|
||||
RETURN_STATUS_IF_ERROR(populateConnectedDevicePort(&connectedPort));
|
||||
} else {
|
||||
auto& connectedProfiles = getConfig().connectedProfiles;
|
||||
if (auto connectedProfilesIt = connectedProfiles.find(templateId);
|
||||
connectedProfilesIt != connectedProfiles.end()) {
|
||||
connectedPort.profiles = connectedProfilesIt->second;
|
||||
}
|
||||
}
|
||||
if (connectedPort.profiles.empty()) {
|
||||
LOG(ERROR) << "Profiles of a connected port still empty after connecting external device "
|
||||
<< connectedPort.toString();
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
|
||||
if (!mDebug.simulateDeviceConnections) {
|
||||
RETURN_STATUS_IF_ERROR(populateConnectedDevicePort(&connectedPort));
|
||||
} else {
|
||||
auto& connectedProfiles = getConfig().connectedProfiles;
|
||||
if (auto connectedProfilesIt = connectedProfiles.find(templateId);
|
||||
connectedProfilesIt != connectedProfiles.end()) {
|
||||
connectedPort.profiles = connectedProfilesIt->second;
|
||||
}
|
||||
}
|
||||
if (connectedPort.profiles.empty()) {
|
||||
LOG(ERROR) << __func__
|
||||
<< ": profiles of a connected port still empty after connecting external "
|
||||
"device "
|
||||
<< connectedPort.toString();
|
||||
return ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_STATE);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto profile : connectedPort.profiles) {
|
||||
|
|
Loading…
Reference in a new issue