Qcom平台 ffbm/fct 使用mm-audio-ftm 测试audio流程分析

1:FFBM测试

1.1:测试应用界面

image-20220105103351981

由UI内容可知,audio相关的测试项有4个,分别是 speaker测试,已经2个mic到speaker的回环,以及一个耳机mic的回环;

它在ui中的配置是在:vendor/qcom/proprietary/commonsys/fastmmi/res/config/mmi.xml中

    <!-- default config for UI mode -->
    <modules>
        <module name="SPEAKER"
                lib_name="mmi_audio.so"
                enable="1"
                automation="0"
                display_name="loudspeaker"
                layout="layout_handset.xml"
                parameter="type:play;tc:1;volume:50;duration:4;file:/system/etc/mmi/qualsound.wav;"/>
        <module name="SPEAKER LOOP"
                lib_name="mmi_audio.so"
                enable="1"
                automation="0"
                display_name="audio_loudspeaker_play"
                layout="layout_loudspeaker.xml"
                parameter="type:loopback;tc:227;volume:30;duration:3;file:/mnt/vendor/persist/FTM_AP/speaker_record.wav;tc_play:1;"/>
    <!-- Loopback for headset -->
        <module name="HEADSET LOOP"
                lib_name="mmi_audio.so"
                enable="1"
                automation="0"
                display_name="audio_headset_loopback"
                layout="layout_headset.xml"
                parameter="type:loopback;tc:225;volume:45;duration:3;file:/mnt/vendor/persist/FTM_AP/headset_record.wav;tc_play:1;"/>
    <!-- BACK MIC -->
        <module name="NOISE MIC"
                lib_name="mmi_audio.so"
                enable="1"
                automation="0"
                display_name="audio_noise_mic"
                layout="layout_primary_mic.xml"
                parameter="type:mic;tc:226;volume:45;duration:3;file:/mnt/vendor/persist/FTM_AP/ftm_pcm_record.wav;tc_play:1;"/>

具体FCT相关的内容不做分析,只关注通过UI点击后,给测试命令传递的参数; 即parameter 后的参数,最终使用也是mm-audio-ftm 可执行程序;

1.2:FCT命令mm-audio-ftm

以下是常用的几个测试命令;

#测试扬声器
mm-audio-ftm -c /vendor/etc/ftm_test_config -tc 1 -d 10 -v 60 -file /system/etc/mmi/qualsound.wav
#测试耳机
headset:
left:
mm-audio-ftm -c /vendor/etc/ftm_test_config -tc 3 -d 10 -v 60 -file /system/etc/mmi/qualsound.wav
right:
mm-audio-ftm -c /vendor/etc/ftm_test_config -tc 4 -d 10 -v 60 -file /system/etc/mmi/qualsound.wav

#测试回环
mm-audio-ftm -c /vendor/etc/ftm_test_config -tc 225 -d 10 -v 50

mm-audio-ftm -c /vendor/etc/ftm_test_config -tc 226 -v 20 -d 5

mm-audio-ftm -c /vendor/etc/ftm_test_config -tc 227 -v 20

-c 后跟的参数,是配置文件,指定打开关闭一个通路所执行的配置命令集;

-tc 后跟的参数,是配置文件中标识对应测试项的 id;

-v 后跟的参数,配置测试过程中的音量设置;

-d 后跟的参数,是配置测试延时的时间,以s为单位;

-file 后跟的参数,配置测试过程中使用的音频文件的路径;

1.3:用例配置实例

1.3.1:Speaker

以/vendor/etc/ftm_test_config 中 tc 1 Left Speaker测试用例为例:

tc 1
#Left Speaker
!Playback
Rxdevice:0

enable
RX_CDC_DMA_RX_1 Channels:One
RX_MACRO RX2 MUX:AIF2_PB
RX INT2_1 MIX1 INP0:RX2
AUX_RDAC Switch:1
RX_CDC_DMA_RX_1 Audio Mixer MultiMedia1:1

disable
RX_MACRO RX2 MUX:ZERO
RX INT2_1 MIX1 INP0:ZERO
AUX_RDAC Switch:0
RX_CDC_DMA_RX_1 Audio Mixer MultiMedia1:0

1.3.2:Loop back

以/vendor/etc/ftm_test_config 中 tc 225 Headset loop back测试用例为例:

tc 225
#AMIC2 to HPH_LR AFE loopback
!AfeLoop
Txdevice:31
Rxdevice:30

enable
RX_MACRO RX0 MUX:AIF1_PB
RX_MACRO RX1 MUX:AIF1_PB
RX_CDC_DMA_RX_0 Channels:Two
RX INT0_1 MIX1 INP0:RX0
RX INT1_1 MIX1 INP0:RX1
RX INT0 DEM MUX:CLSH_DSM_OUT
RX INT1 DEM MUX:CLSH_DSM_OUT
RX_COMP1 Switch:1
RX_COMP2 Switch:1
HPHL_RDAC Switch:1
HPHR_RDAC Switch:1
HPHL_COMP Switch:1
HPHR_COMP Switch:1
RX_RX0 Digital Volume:62
RX_RX1 Digital Volume:62

TX DEC0 MUX:SWR_MIC
TX SMIC MUX0:SWR_MIC4
TX_CDC_DMA_TX_3 Channels:One
TX_AIF1_CAP Mixer DEC0:1
ADC2_MIXER Switch:1
ADC2 MUX:INP2
ADC2 Volume:62

RX_CDC_DMA_RX_0_DL_HL Switch:1
RX_CDC_DMA_RX_0 Port Mixer TX_CDC_DMA_TX_3:1

disable

RX_MACRO RX0 MUX:ZERO
RX_MACRO RX1 MUX:ZERO
RX INT0_1 MIX1 INP0:ZERO
RX INT1_1 MIX1 INP0:ZERO
RX INT0 DEM MUX:NORMAL_DSM_OUT
RX INT1 DEM MUX:NORMAL_DSM_OUT
RX_COMP1 Switch:0
RX_COMP2 Switch:0
HPHL_RDAC Switch:0
HPHR_RDAC Switch:0
HPHL_COMP Switch:0
HPHR_COMP Switch:0
RX_RX0 Digital Volume:0
RX_RX1 Digital Volume:0
TX DEC0 MUX:MSM_DMIC
TX SMIC MUX0:ZERO
TX_AIF1_CAP Mixer DEC0:0
ADC2_MIXER Switch:0
ADC2 MUX:ZERO
ADC2 Volume:62

RX_CDC_DMA_RX_0_DL_HL Switch:0
RX_CDC_DMA_RX_0 Port Mixer TX_CDC_DMA_TX_3:0

测试过程是以可执行命令mm-audio-ftm 进入执行的,下面对执行过程的细节进一步分析;

2:mm-audio-ftm分析

文件:

  • code/vendor/qcom/proprietary/mm-audio/ftm_audio_main.c
  • code/vendor/qcom/proprietary/mm-audio/ftm_audio_dispatch.c

2.1:main函数

(以上面测试命令为例, 其他测试情况忽略,仅分析主要流程)

int main(int argc, char *argv[])
{
   
//.....
  char filename[100], *pfilename = NULL;
  int codec = 0, total_test = INT_MAX, result, test_case;
  int volume = 0, duration = 3, fl = 300, fh = 4000, count = 0;
  int tx_volume = 0, rx_volume = 0;
//.....
#ifdef MSM8960_ALSA
    FILE *fp;
    FILE *fp_config;
    char soundCardInfo[200];
    char soundCardName[200];
    char config_path[200] = {
   0};
    g_config_test = 0;
    if((fp = fopen("/proc/asound/cards","r")) == NULL) {
   
      printf("Cannot open /proc/asound/cards file to get sound card info\n");
      return -1;
    } else {
        //跳过/proc/asound/cards 声卡name的第一行  获取到 snd card name
        if((fgets(soundCardInfo, sizeof(soundCardInfo), fp) == NULL)) {
   
            printf("/proc/asound/cards is empty. Abort\n");
            return -1;
        }
        while((fgets(soundCardInfo, sizeof(soundCardInfo), fp) != NULL)) {
   
            printf("SoundCardInfo %s", soundCardInfo);
            sscanf(soundCardInfo, "%s", soundCardName);
            printf("\nsoundCardName %s\n", soundCardName);
            snprintf(config_path, sizeof(config_path), "%s_%s",
                "/vendor/etc/ftm_test_config", soundCardName);      //指定的这个config文件就用这个测试
 		//......
            } else if ((fp_config = fopen("/vendor/etc/ftm_test_config","r")) != NULL) {
   
                printf("Use the codec ftm_test_config file\n");
                codec = CODEC_CONFIG_SUPPORT;
                fclose(fp_config);
                fp_config = NULL;
                /* use default config file( ftm_test_config) as last resort. */
                snprintf(config_path, sizeof(config_path), "/vendor/etc/ftm_test_config");
                break;
            } else {
   
 		//......
        }
        fclose(fp);
        fp = NULL;
    }
 
    if (argc == 1) {
   
	//......  忽略
    }else if(argc == 3) {
   
 	//......  忽略
    } else if (argc >= 5) {
     	//有5个参数的通过文件指定的,采用的是这种
        count = argc;
        fp = NULL;
        int i = 1;
        test_case = -1;
        /* Support only for codecs with config.txt support */
        if (codec != CODEC_CONFIG_SUPPORT) {
   
            printf("Command to enter: mm-audio-ftm -tc <tc number>\n");
            return -1;
        }
        while((i + 1) < count) {
   
           if (!strncmp(argv[i], "-tc", 3)) {
   
                i++;
                test_case = atoi(argv[i++]);
                printf("\n Test case number %d", test_case);
           } else if (!strncmp(argv[i], "-c", 2)) {
                 // "-c  指定了 config文件 路径"
                i++;
                printf("\n Conf file name %s", argv[i]);
                if (!(fp = fopen(argv[i++],"rb"))) {
   
                    printf("\n Failed to open file");
                    return -1;
                }
                g_config_test = 1;
           } else if (!strncmp(argv[i], "-v", 2)) {
                // "-v" 配置 音量volume
                i++;
                volume = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值