常用工具:QPST, QACT, QDV
步骤:
0,手机拨打电话*cctpad#,调试模式,打开调试口;另外在设置中确认usb debug打开(默认是打开的)。
1,打开QPST configuration,连接service;
2,打开QDV,setup->hardware, map rptfile, 选择当前项目的vajra.rpt;
菜单,new text window,右键,edit subscription,选择name,选择一个需要监视的属性(电话说话的音量、录音机录入的音量是TX,电话听筒音量、录音机播放的音量是RX——这里的R和T均是从使用者的角度出发,而非机器)
3,使机器 【通过你想调试的方式】 播放/录入 声音。观察监视值的变化。
4,到voccal_M4000E.c中搜索该值,定位到某(几)个值。
重复上述步骤,在第4部中逐渐锁定某个值,然后可以对其修改了。
使用工具QACT2.0(qualcomm audio calibration tool), 打开multimedia M4000audioaudiocaldataaudio_cal.xml进行调试,音量大小在选项Gains中。
注意,数据修改之后立刻被写入手机(左下角出现data set to target successfully),但此时声音并不会立刻改变,需要在手机上切换一下发声模式,再换回来,才能看到效果,比如:手机正在外放音乐,此时修改了SND_DEVICE_HFK,这时声音不会立刻变化;此时可以先切换到电话,使用听筒,然后再外放音乐,这时就可以听到变化。
再例如,
1、使用3502WG样机进行耳机通话时听到背景音,修改:AGC FILTER -> VOC_SERVICE_UMTS & SND_DEVICE_HEADSET -> rx_agc_exp_thres(对应voccal_M3502WGICS.c中的3512行,voc_pcm_on_chip_1_cal_umts下的【#nodefined TFFA】编译开关下的agc_param数组第三项),从0x780增加为0x1100
注意第二级第一项应选择VOC_SERVICE_UMTS,若选了VOC_SERVICE_CDMA则修改后无反应。
2、使用3502WG样机进行耳机通话,听对方的声音太大声,修改:Gains -> VOC_SERVICE_UMTS & SND_DEVICE_HEADSET -> codec_rx_gain(对应voccal_M3502WGICS.c中的3417行,voc_pcm_on_chip_1_cal_umts下的【#nodefined TFFA】编译开关下的codec_rx_gain) 从0x7f62 减为0x3000.
3、使用3502WG样机进行耳机通话,对方能听到他自己的回音,修改Enhanced Echo Canceller -> VOC_SERVICE_UMTS & SND_DEVICE_HEADSET & SND_METHOD_VOICE & VOC_EC_HEADSET -> ec_params[1] -> instance1 -> DENS_NL_atten(对应.C中的367行,voc_cal_adv_ec_params_headset数组下的DENS_NL_atten), 200增加为600。
4、使用3502WG样机进行免提通话,听对方声音,断断续续。修改AGC_FILTER -> VOC_SERVICE_UMTS & SND_DEVICE_SPEAKER_PHONE & SND_METHOD_VOICE -> agc_param -> rx_agc_compr_thres(对应.C中第5254行,voc_pcm_on_chip_speaker_cal_umts数组下的【#nodefined T_FFA】编译开关下的agc_param,数组第五项)。0x1b0c 改为 0x0780.这个改动是不对的,因为rx_agc_compr_thres的减小会大大减小免提时听到对方的声音。应该将rx_agc_exp_thres降低。
5、分别使用3502WG样机进行免提和听筒通话,对方听到己方的声音较小声。
听筒:修改Gains -> VOC_SERVICE_UMTS & SND_DEVICE_HANDSET & SND_METHOD_VOICE -> codec_tx_gain(对应代码在1363行,数组voc_pcm_on_chip_0_cal_umts_qrd下的codec_tx_gain)。0x4000 改为 0x5000。
免提:修改Gains -> VOC_SERVICE_UMTS & SND_DEVICE_SPEAKER_PHONE & SND_METHOD_VOICE -> codec_tx_gain(对应代码在5158行,voc_pcm_on_chip_speaker_cal_umts下,编译开关no T_FFA下的codec_tx_gain) 。0x3ff0改为0x5000。
-------------------------------------------------------------
5月14日,针对上述修改后出现的问题再次修改
1、耳机仍有背景音,且己方和对方都听得到,3511行3512行,rx 1100 -> 1500, tx 780 -> 1500
2、免提通话听对方声音断断续续,上次改错了地方,导致免提听对方声音变小,5252行,compr_thres 0x780 改回 0x1b0c ,exp_thres 4000 -> 1500
3、免提,对方和己方听到的声音仍稍小声,5158行,dtmf_tx_gain 1000 ->4000; rx 3000 -> 4000
4、听筒通话,明显回音,326行,(EC type:ESEC) NL 200 -> 600
5、免提回音,449行,NL 200 -> 600
6、after all,三种模式的:
底噪音消除:(3511行-headset,5253行-speaker,1459行-handset)除了hand rx 1600,其它都是1500;注意第一行第三项才是rx,第二行第三项是tx的,即消除对方听到的底噪音
回音消除:(speaker 449行, handset 326行, headset 367行)DENS_NL_atten:600.
即 voc_pcm_on_chip_speaker_cal_umts{ ... else ...
蓝牙耳机-7215行:
修改之后保存,这将修改被打开的.XML文件,比较前后的文件,发现voc_pcm_on_chip_0_cal_cdma标签下的几个子标签被修改,于是定位到voccal_M4000E.c中的voc_pcm_on_chip_0_cal_cdma标签,在该源文件用全字搜索即可。然后修改该标签下的配置值。
--------------------------------------------------------
android2.3升级为android4.0,音频参数调试(以M3502WG为例)
参考代码:android2.3(chocolate)上的multimedia/audio/audiocal/sku3/voccal_sku3_H3501.c
目标代码:android4.0(milk)上的multimedia/audio/vocoder/src/voccal_M3502WGICS.c
下面是需要修改的结构:
另外,移植的时候注意在2.3版本中有17个数组元素,在4.0中只有14个,省略掉了前三个,所以拷贝过来的时候要删掉前三个。
-------------------------------------------------
有时,在步骤4中,搜索到的值多达上百个,这样很难定位。我的解决办法是写一个perl脚本,用1~n个自然数逐个替换这些数值相等的变量,然后烧进手机,再查看我需要调试的那个值变为多少,现在这个值在代码中是唯一的,于是可以准确定位到代码中的某个变量。用这种方法,1次烧写就可以准确定位在代码中有无数相同值的变量。
使用递增正整数逐个替换某关键字的perl脚本如下: