车机音频参数下发流程

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

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

相关推荐
157092511346 小时前
Android进阶之光:HTTP协议原理深度解析
android·网络协议·http
终端安全笔记7 小时前
安卓五品牌通道差在哪:监管通道拆解
android
v_34836087627 小时前
Android native端 堆栈打印
android·算法
一笑的小酒馆8 小时前
AndroidKMP之导航和WebView
android
2501_9327502611 小时前
Android BottomNavigationView 入门介绍
android
Godikov13 小时前
硬件异步事件下的业务一致性:智能柜领取/归还流程的竞态设计
android
Godikov13 小时前
不用 Netty:Android 手写 TCP 客户端实战——自定义协议帧、粘包处理与可靠重连
android
事圆则缓13 小时前
Java 面向对象如何落到 Android View 体系
android
iPad协议个微协议14 小时前
# 微信自动营销系统如何基于 WechatApi 做事件驱动设计
android·微信·企业微信·个人开发·wechatapi·微信个人号开发
AirDroid_cn14 小时前
隐私沙盒:第三方应用读取剪切板内容如何拦截?
android·gitee