-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[WIP][RFC] Test-case: Set PGAs to unity gain in script check-alsabat.sh #437
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,6 +42,12 @@ OPT_HAS_ARG['n']=1 OPT_VAL['n']=240000 | |
OPT_NAME['s']='sof-logger' OPT_DESC['s']="Open sof-logger trace the data will store at $LOG_ROOT" | ||
OPT_HAS_ARG['s']=0 OPT_VAL['s']=1 | ||
|
||
OPT_NAME['t']='tplg' OPT_DESC['f']='tplg file, default value is env TPLG: $''TPLG' | ||
OPT_HAS_ARG['t']=1 OPT_VAL['f']="$TPLG" | ||
|
||
TESTDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) | ||
TPLGREADER="$TESTDIR"/tools/sof-tplgreader.py | ||
|
||
func_opt_parse_option "$@" | ||
|
||
pcm_p=${OPT_VAL['p']} | ||
|
@@ -50,6 +56,7 @@ rate=${OPT_VAL['r']} | |
channel_c=${OPT_VAL['C']} | ||
frequency=${OPT_VAL['f']} | ||
frames=${OPT_VAL['n']} | ||
tplg=${OPT_VAL['t']} | ||
|
||
if [ "$pcm_p" = "" ]||[ "$pcm_c" = "" ]; | ||
then | ||
|
@@ -72,11 +79,83 @@ function __upload_wav_file | |
done | ||
} | ||
|
||
set_pga_to_unity_gain() | ||
{ | ||
tmp=$(amixer controls | grep "$1" | grep Volume) | ||
search="name=" | ||
cname=${tmp#*$search} | ||
|
||
# Get volume min and step to compute value for cset | ||
# for 0 dB gain. The amixer line looks like | ||
# "| dBscale-min=-50.00dB,step=1.00dB,mute=1" | ||
scale=$(amixer cget name="$cname" | grep "dBscale" || true) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
search="dBscale-min=" | ||
tmp=${scale#*$search} | ||
min_db="${tmp%%dB*}" | ||
search="step=" | ||
tmp=${scale#*$search} | ||
step_db="${tmp%%dB*}" | ||
|
||
# Get multiplied by 100 values by removing decimal dot | ||
min_x100="${min_db//.}" | ||
step_x100="${step_db//.}" | ||
val=$(printf %d "$(((-min_x100) / step_x100))") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit, this would be slightly easier to read with some spaces: val=$(printf %d "$(( (-min_x100) / step_x100))" ) Why do you need the printf at all? |
||
|
||
# Apply the computed value for requested gain | ||
amixer cset name="$cname" "$val" | ||
} | ||
|
||
set_pgas_list_to_unity_gain() | ||
{ | ||
for pga in "$@"; do | ||
dlogi "Set $pga" | ||
set_pga_to_unity_gain "$pga" | ||
done | ||
} | ||
|
||
get_snd_base() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
{ | ||
# Converts e.g. string hw:1,0 to /dev/snd/pcmC1D0 | ||
# the p or c for playback or capture is appended | ||
# in the calling function. | ||
tmp=${1#*"hw:"} | ||
ncard="${tmp%%,*}" | ||
ndevice="${tmp#*,}" | ||
singalsu marked this conversation as resolved.
Show resolved
Hide resolved
|
||
echo "/dev/snd/pcmC${ncard}D${ndevice}" | ||
} | ||
|
||
get_play_snd() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
{ | ||
tmp=$(get_snd_base "$1") | ||
echo "${tmp}"p | ||
} | ||
|
||
get_capture_snd() | ||
{ | ||
tmp=$(get_snd_base "$1") | ||
echo "${tmp}"c | ||
} | ||
|
||
# check the PCMs before alsabat test | ||
dlogi "check the PCMs before alsabat test" | ||
aplay -Dplug$pcm_p -d 1 /dev/zero -q || die "Failed to play on PCM: $pcm_p" | ||
arecord -Dplug$pcm_c -d 1 /dev/null -q || die "Failed to capture on PCM: $pcm_c" | ||
|
||
# Set PGAs for PCMs to 0 dB value | ||
test -n "$(command -v "$TPLGREADER")" || | ||
die "Command $TPLGREADER is not available." | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note #471 |
||
|
||
test -n "$tplg" || die "Use -t or set environment variable TPLG to current topology" | ||
singalsu marked this conversation as resolved.
Show resolved
Hide resolved
|
||
tplg_full_path=$(func_lib_get_tplg_path "$tplg") | ||
dlogi "Getting playback PGA information" | ||
play_snd=$(get_play_snd "$pcm_p") | ||
PLAY_PGAS=$($TPLGREADER "$tplg_full_path" -f "snd:$play_snd" -d pga -v) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. are we talking about the string "pga" in the kcontrol name here? Then There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When run on topology v1 files,
Note the blank lines stand for DMIC and other PCMs without a What would be the equivalent for topology v2? Is there a v2 compatibility issue with There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This device has at least 15 amixer controls with "Volu.." in the name ( That log shows a list of pipelines, 3 of them which have I don't see the connection. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @marc-hb i see your problem. Sorry I misundertood the PGA in the picture. Looks like that's the tplgtool printing that the PGA prefix for the kcontrols. So, yes there's no "pga" string in tplg2 kcontrol names. Infact we consciously removed the widget name from the kcontrol name as well so you have "gain" either. So the question is how to figure out which kcontrols to test? Can we do this during tplg parsing ie when as we parse the gain widgets, save the kcontrol names for the kcontrols associated with the widget and test only those? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Sounds like a plan. Let me take a look. EDIT: done in |
||
set_pgas_list_to_unity_gain $PLAY_PGAS | ||
dlogi "Getting capture PGA information" | ||
cap_snd=$(get_capture_snd "$pcm_c") | ||
CAP_PGAS=$($TPLGREADER "$tplg_full_path" -f "snd:$cap_snd" -d pga -v) | ||
set_pgas_list_to_unity_gain $CAP_PGAS | ||
|
||
# alsabat test | ||
# hardcode the channel number of playback to 2, as sof doesnot support mono wav. | ||
dlogc "alsabat -P$pcm_p --standalone -n $frames -r $rate -c 2 -F $frequency" | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As you use very generic variable names, this first line will avoid any collision: