车机音频参数下发流程

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

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

相关推荐
Yang-Never4 小时前
Kotlin协程 -> Job.join() 完整流程图与核心源码分析
android·开发语言·kotlin·android studio
一笑的小酒馆9 小时前
Android性能优化之截屏时黑屏卡顿问题
android
懒人村杂货铺12 小时前
Android BLE 扫描完整实战
android
TeleostNaCl14 小时前
如何安装 Google 通用的驱动以便使用 ADB 和 Fastboot 调试(Bootloader)设备
android·经验分享·adb·android studio·android-studio·android runtime
fatiaozhang952715 小时前
中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖
android·网络·电脑·电视盒子·刷机固件·机顶盒刷机
2501_9159184116 小时前
iOS 开发全流程实战 基于 uni-app 的 iOS 应用开发、打包、测试与上架流程详解
android·ios·小程序·https·uni-app·iphone·webview
lichong95116 小时前
【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之dist打包发布在Android工程asserts里
android·vue.js·iphone
Android出海16 小时前
Android 15重磅升级:16KB内存页机制详解与适配指南
android·人工智能·新媒体运营·产品运营·内容运营
一只修仙的猿16 小时前
毕业三年后,我离职了
android·面试
编程乐学17 小时前
安卓非原创--基于Android Studio 实现的新闻App
android·ide·android studio·移动端开发·安卓大作业·新闻app