android4.1(QHD4500)声音驱动调试

源码:https://192.168.0.220:8443/svn/juice/trunk/

工具:QPST,QACT3.0

准备工作:手机连接电脑,端口找到Qualcomm HS-USB Diagnostics 9027;adb执行下列命令:adb root on;adb remount ;adb shell ;mount -t debugfs debugfs /sys/kernel/debug

步骤 :

1、打开QACT3.0,connect,选中dsp calibration,5个选项中table_globol不使用,TABLE_AudioVolume, TABLE_VoiceVolume很少使用;TABLE_Audio用于调试媒体音,TABLE_Voice用于调试电话音.

  具体issue修复记录:

  a、甲和乙通话,甲使用QHD4500,乙使用任意手机,甲用手提模式(包括蓝牙耳机的手提模式,非免提),乙说话时可以听到自己声音的回音。此时需要修改的QHD4500的参数是:TABLE_voice -> BT_SCO_MIC & HANDSET_MIC & HEADSET_MIC (注意这层中没有修改SPKR_...)  ->  ECHOCANCELLER_LVHF  -> DENS_NL_atten,这个值从0x600改为0x0800,回音立刻消失,效果显著。

注意:调试耳机听对方声音,应使用参数:HEADSET_SPKR_STEREO,  而HEADSET_SPKR_MONO是耳机模式下的免提,即插着耳机使用免提,很少用到。

2、上一步使用connect是修改手机中的即时数据,修改本地代码方法是打开文件(以4500为例):multimedia/andio/audcal/acdbdata/src/SKU5/....4500.c

3、编译:windows下执行modem_proc\build\ms\BuildM4500EShip.cmd

4、烧写:Images\M4000E\fat.amss.bin

---------------------------------------------------------

昨天与今天遇到一个问题,敏K把它叫叫做不生效:即用QACT3.0在代码中该变了相应的值,编译烧写后在线读值,却仍是原值;我反复核查,开始怀疑是编译、烧写的问题,后来怀疑是改错了值,直到把数据表中与那个原值相同的每一个值全部改变,读出来在线的仍是0x01c2。差点就要提case给高通了。再问了敏K一次,他突然说,你有没有改XXX,然后让我使用4500的.C文件,在这基础上改。我直接套用,改了个文件名,竟然,调试、测试,竟然直接成功,而且通话质量已然很高,说明4500和7026是可以套用音频文件的。后来发现免提通话模式有些许拖尾音,于是把NL从600改成800,done。

----------------------------------------------------------

2013.05.22

昨天见识了高通完善售后服务体系和系统的bug调试工具。

support.cdmatech.com/login

账号只有与高通有业务往来的公司才能申请,每个公司分为1个admin账号和若干分账号。每个账号都能提case,其case种类划分的细致程度绝对变态。提上去后,10+分钟就有回复,昨天与其互提comment七八个来回,虽然没有解决问题,但是已经可以推测到问题的原因。

高通生产的机器都可以用它们专用的软件,通过串口或USB抓log,昨天我用的是QXDM。对方给我一个环境,我把这个环境文件载入QXDM后,USB连上手机(通过QPST接口),它就开始打印log,量非常大。从这些log中,可以用QCAT这个工具解析出通话的音频文件。

-----------------------------------------------------------

2013.05.24

7026:免提通话时,己方不说话,对方能听到风声。注意己方不说话时对方能听到的噪音不属于尾音(echo),修改参数spk_mic_txAgc2 -> agc_exp_thores, 从1200改为1500,解决。

 ---------------------------------------------------------------

2013.06.05

Hi customer

请在AudioHardware_cad.cpp里面查看下面的代码是否被调用:

if (mDualMicEnabled && (mMode == AudioSystem::MODE_IN_CALL || mMode == AudioSystem::MODE_IN_COMMUNICATION)) {
char platform_name[20];
property_get("ro.hw_platform", platform_name, "msm8x25_sku5");

if (new_snd_device == SND_DEVICE_HANDSET) {
ALOGI("Routing audio to handset with DualMike enabled\n");
new_snd_device = SND_DEVICE_IN_S_SADC_OUT_HANDSET;
} else if (new_snd_device == SND_DEVICE_SPEAKER) {
if(strncasecmp(platform_name, "msm8x25_sku5", 12) != 0){
ALOGI("Routing audio to speakerphone with DualMike enabled\n");
new_snd_device = SND_DEVICE_IN_S_SADC_OUT_SPEAKER_PHONE;
}
}
}


你可以通过adb shell cat /sys/devices/system/soc/soc0/hw_platform 查看你们的ro.hw_platform,如果上面的代码没有被调用,请根据你们具体的ro.hw_platform做修改。

Thanks

原文地址:https://www.cnblogs.com/yiru/p/3071547.html