车机音频参数下发流程

比如以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

  1. 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);

  1. 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);

  1. 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

  1. 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)

  1. 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));

=========================================================================

相关推荐
Harrison_zhu19 分钟前
Ubuntu18.04 编译 Android7.1代码报错
android
CYRUS STUDIO2 小时前
Unidbg Trace 反 OLLVM 控制流平坦化(fla)
android·汇编·算法·网络安全·逆向·ollvm
扫地的小何尚3 小时前
NVIDIA工业设施数字孪生中的机器人模拟
android·java·c++·链表·语言模型·机器人·gpu
顾林海4 小时前
深度解析ArrayList工作原理
android·java·面试
安静的海岸_AI4 小时前
Android端WIFI/流量共存技术方案
android
_一条咸鱼_5 小时前
Android Compose 框架进度指示器深入剖析(五十二)
android
张风捷特烈5 小时前
Flutter 伪 3D 绘制#02 | 地平面与透视
android·flutter
每次的天空5 小时前
Kotlin 作用域函数:apply、let、run、with、also
android·开发语言·kotlin
重生之我在写代码5 小时前
如何进行apk反编译
android·程序员·编译器
树豪5 小时前
跟着官网学 Lynx 之 搭建 Lynx todo-list app
android·前端