车机音频参数下发流程
比如以audioControlWrapper.setParametersToAmp(keyPairValues); 下发banlance为例,链路如下
=========================================================================
hal层
1. AudioControl.cpp hardware\interfaces\automotive\audiocontrol\aidl\default\AudioControl.cpp
ndk::ScopedAStatus AudioControl::setParametersToAmp(const std::string &keyPairValues)
ndk::ScopedAStatus AudioControl::gvmSetParameters(const hidl_string& key, const hidl_string& value) const
2. AudioDevice.cpp vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\AudioDevice.cpp
int AudioDevice::SetParameters(const char *kvpairs)
ret = dynaudio_control_interface_->setParameter((void *)kvpairs);
3. DynAudioControl.cpp vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\zeekr_audio\DynAudioControl\src\DynAudioControl.cpp
int32_t DynAudioControl::setParameter(void* params)
GVMWrapper pWrapper->setParameter(params);
4. GVMWrapper.cpp vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\zeekr_audio\DynAudioControl\Wrapper\GVMWrapper.cpp
int32_t GVMWrapper::setParameter(void *params)
auto iter = gSetParmsHandlerTable.find(key);
if (iter != gSetParmsHandlerTable.end()) {
auto s = Utils::splitString2Vector(value, DELIM_DEFAULT);
LOG_I("[%s]: Key is %s", __func__, iter->first.c_str());
ret = (this->*(iter->second))(s);
}
在 gSetParmsHandlerTable 中通过AC_KEY_AUDIO_SOURCE
调用 setBalance
5. GVMAudioLogic.cpp vendor\qcom\opensource\audio-hal-ar\primary-hal\hal-pal\zeekr_audio\DynAudioControl\AudioLogic\GVMAudioLogic.cpp
在int32_t GVMAudioLogic::setBalance(uint32_t source, int32_t step) 中调用sendAudioHalParam(AC_OP_SET_BALANCE, DOUBLE_PARAMS, source, step);
在 sendAudioHalParam 中通过audio_fdbus_client_->sendAudioMsg给qnx发消息
=========================================================================
qnx 层
1. faudiohal_server.cpp qnx_app\workspace\modules\audio\audio_manager_ipc\fdbus_server\src\faudiohal_server.cpp
void AudioFdbusService::onInvoke(CBaseJob::Ptr &msg_ref)
2. msg_switch_logic.cpp qnx_app\workspace\modules\audio\audio_manager_ipc\logic\src\msg_switch_logic.cpp
int32_t SwitchMsgHandler::sendAudioHALMsgToAudioManager(AudioFdbusMsg &audiohal_param)
return AudioManagerProxy::getInstance()->send(audiohal_param.operation_code, (void*)audiohal_param.params,
audiohal_param.params_count * sizeof(uint32_t));
=========================================================================