mirror of https://github.com/thesofproject/sof.git
test: add a script for xrun injection test
This script is used to check the ability of alsa xrun handling Signed-off-by: Zhang Keqiao <keqiao.zhang@linux.intel.com>
This commit is contained in:
parent
03ababfb1c
commit
eca416ad79
|
@ -0,0 +1,115 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2019, Intel Corporation
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the Intel Corporation nor the
|
||||
# names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
# Author: Keqiao Zhang <keqiao.zhang@linux.intel.com>
|
||||
#
|
||||
# This script is used to test the ability of alsa xrun handling. To do this
|
||||
# you need to enable the xrun debugging in kernel driver first.
|
||||
# +CONFIG_SND_DEBUG=y
|
||||
# +CONFIG_SND_DEBUG_VERBOSE=y
|
||||
# +CONFIG_SND_PCM_XRUN_DEBUG=y
|
||||
|
||||
FORMAT=s16_le # sample format
|
||||
CHANNEL=2 # test channel number
|
||||
FREQUENCY=48000 # sample frequency
|
||||
INTERVAL=0.2 # interval time for each xrun injection
|
||||
MAXLOOP=10000 # max loop for xrun injection
|
||||
|
||||
usage(){
|
||||
echo "usage: $0 -t pcmid -r frequency -f format -c channel\
|
||||
-i interval -n loops -d audio_file"
|
||||
echo "eg: ./$0 -t pcm0p -r 48000 -f s16_le -c 2 -i 0.2\
|
||||
-n 1000 -d audio.wav"
|
||||
exit
|
||||
}
|
||||
|
||||
xrun_inject()
|
||||
{
|
||||
int=0
|
||||
while [ $int -lt $MAXLOOP ]
|
||||
do
|
||||
echo "XRUN injection: $int"
|
||||
echo 1 > /proc/asound/card0/$t_pcm/sub0/xrun_injection
|
||||
sleep $INTERVAL
|
||||
let int++
|
||||
# check the pcm status
|
||||
num=`ps -ef |grep "$PID"| grep -v "grep" |wc -l`
|
||||
if [ $num == 0 ]; then
|
||||
echo "$cmd is finished, stop the xrun injection"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if [ $# == 0 ]; then
|
||||
echo "Please specify the PCM to test."
|
||||
usage
|
||||
else
|
||||
while getopts :t:r:f:c:i:n:d OPT
|
||||
do
|
||||
case $OPT in
|
||||
t)
|
||||
t_pcm=$OPTARG
|
||||
pcmid=`echo $t_pcm |tr -cd "[0-9]"`
|
||||
test_type=`echo ${t_pcm: -1}`
|
||||
if [[ $test_type == 'p' || $test_type == "P" ]]; then
|
||||
cmd=aplay
|
||||
data=/dev/zero
|
||||
elif [[ $test_type == 'c' || $test_type == "C" ]]; then
|
||||
cmd=arecord
|
||||
data=/dev/null
|
||||
fi
|
||||
;;
|
||||
r)
|
||||
FREQUENCY=$OPTARG;;
|
||||
f)
|
||||
FORMAT=$OPTARG;;
|
||||
c)
|
||||
CHANNEL=$OPTARG;;
|
||||
i)
|
||||
INTERVAL=$OPTARG;;
|
||||
n)
|
||||
MAXLOOP=$OPTARG;;
|
||||
d)
|
||||
data=$OPTARG;;
|
||||
*)
|
||||
usage;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
[[ -z "$pcmid" ]] && usage
|
||||
$cmd -Dhw:0,$pcmid -f $FORMAT -r $FREQUENCY -c $CHANNEL $data &
|
||||
PID=$!
|
||||
|
||||
# do xrun injection
|
||||
xrun_inject
|
||||
|
||||
# stop the pcm after xrun injection is done
|
||||
kill $PID
|
||||
echo "XRUN injection test is done"
|
Loading…
Reference in New Issue