当前位置: 首页 > article >正文

车机音频参数下发流程

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

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


http://www.kler.cn/a/538002.html

相关文章:

  • 从大规模恶意攻击 DeepSeek 事件看 AI 创新隐忧:安全可观测体系建设刻不容缓
  • DeepSeek之Api的使用(将DeepSeek的api集成到程序中)
  • 【Java】线上故障排查实战
  • 多智能体协作架构模式:驱动传统公司向AI智能公司转型
  • C++SLT(五)——list
  • 【开发日记】Uniapp对指定DOM元素截长图
  • H2模拟mysql的存储过程
  • 视频采集卡接口
  • python脚本实现windows电脑内存监控内存清理(类似rammap清空工作集功能)
  • “现代C++ RAII库:设计、优化及实战应用“
  • Nacos + OpenFeign +Gateway
  • NO.9十六届蓝桥杯备战|4道习题|cin和cout(C++)
  • YOLOv11-ultralytics-8.3.67部分代码阅读笔记-tal.py
  • 百科词条创建审核不通过的原因有哪些?
  • RISCV基础知识
  • Matlab机械手碰撞检测应用
  • kubeadm构建k8s源码阅读环境
  • JAVA—SpringBoot—Vue篮球联赛校园管理系统
  • 激活函数篇 02 —— 双曲正切函数tanh
  • Eclipse IDE 快捷键大全
  • 镭速大文件传输软件如何邀请他人上传文件
  • 树和二叉树_6
  • Java序列化与反序列化:原理、实践与陷阱
  • Swift语言的云计算
  • 混合专家模型(MoE)概述:智能计算的新范式
  • Redis --- 使用HyperLogLog实现UV(访客量)