No audio on call

Hi,

I’m using the le_mcc and le_audio APIs to establish a phone call and to play samples using le_audio_PlaySamples.

This works perfectly for the majority of the time, however I have observed occasions whereby the call is successfully established but no audio can be heard on the receiver phone. When the cell module is in this errored state, all future calls are silent until I reboot the module.

The issue seems to occur when a phone call is initiated too soon after a previous call is hung up.

I have managed to reproduce the issue using the example voiceCallApp by running the following bash command on the module and leaving it to run for a few minutes:

while true; do voice call <number> && voice hangup; done

I am using the WP76xx module with firmware version R16.1 and Legato Application Framework version 19.11.6.

Have you tried to add some delay?
Have you tried to issue “ath” to the AT command port before dialing a new call?

you can also try this application to see if there is any problem:

app start voiceCallService
app runProc voiceCallTest --exe=voiceCallTest -- 12345678

You can also make the stress test on “ATD12345678;” and “ATH” on USB AT command port and see if problem also exists on AT command port or just legato app problem

Hi @jyijyi,

Thank you for your reply.

My app already contains a 10 second delay after a call hang-up to allow another call to be made and sadly the silent call issue still occurs.

Sending the “ATH” AT command did not resolve the issue. Also, I ran:

while true; do echo "ATD<number>;" > /dev/ttyAT && echo "ATH" > /dev/ttyAT; done

I let this run for 30 seconds or so and then used the voiceCallApp and ran voice hold (which usually plays piano music on the call) and the audio was silent.

If you enter atd command to /dev/AT, does the peer side ring?

Seems your script is a bit strange, it did not wait for the other side to pick up the call

Yes the peer side does ring if I enter “ATD<number;”.

The script indeed doesn’t wait for the peer to pick up the call, but it does reproduce the symptom of silent audio for all subsequent calls.

How about adding delay like 15 seconds between atd and ath, also 15 seconds for next atd?

This makes the issue go away most of the time, but I still occasionally observe silent audio.

Is there any way to reset the modem, while leaving the linux OS running, when it enters this errored state?

do you see any special message in dmesg when problem happens?

Does the problem solve if you do AT+CFUN=0 and AT+CFUN=1 ?

Can you still play/record audio file to peer side during phone calls by AT!AVAUDIO command when problem happens?

Can you still play/record audio file locally by AT!AVAUDIO command when problem happens?

I see the following messages all the time, even when audio can be heard on the call


[   84.127767] voc_start_playback: Invalid session
[   84.131403] voc_start_playback: Invalid session
[   84.135783] voc_start_playback: Invalid session
[   84.140759] voc_start_playback: Invalid session
[   84.242427] afe_get_cal_topology_id: [AFE_TOPOLOGY_CAL] not initialized for this port 32773
[   84.260053] q6asm_callback: payload size of 8 is less than expected.
[   84.265921] q6asm_callback: cmd = 0x10da1 returned error = 0x3
[   84.271352] q6asm_send_cal: DSP returned error[3] audio audstrm cal send
[   84.297818] adm_callback: cmd = 0x10328 returned error = 0x3
[   84.302766] send_adm_cal_block: DSP returned error[ADSP_EUNSUPPORTED]
[   84.309840] adm_callback: cmd = 0x10328 returned error = 0x3
[   84.314712] send_adm_cal_block: DSP returned error[ADSP_EUNSUPPORTED]
[  103.910863] voc_end_voice_call: Error: End voice called in state 3

I only see the following error messages when the audio becomes silent:

[  287.047458]  MDM Media1: ASoC: no backend DAIs enabled for MDM Media1
[  287.058263] q6asm_callback: cmd = 0x10bcd returned error = 0x1
[  287.063322] __q6asm_cmd: DSP returned error[ADSP_EFAILED] opcode 68557

Sadly running AT+CFUN=0 and AT+CFUN=1 does not resolve the issue. When the cell modem is in this errored state, using “AT!AVAUDIO” does not produce audio either, whereas it successfully generates audio when the modem is not in the errored state

if you confirm that “AT!AVAUDIO” does not produce sound to peer side during voice call when problem happens, that means it is not related to the CODEC driver problem.
I guess purely problem in the qualcomm modem core.

I see, is there no way to resolve the issue, then?

how about setting another audio profile by
AT!AVSETPROFILE and AT!AVCFG

When the modem is not in the errored state, changing the audio profile works fine. Sadly changing the profile did not resolve the issue, however

if you adding more delay like 60 seconds between atd and ath, also 60 seconds for next atd, will it decrease the rate of reproducibility?

Yes it will decrease the rate of reproducibility, however the issue still occurs occasionally and there is no way to detect when it occurs in my legato application; if there were I could reboot the modem programmatically

I have an idea from this:

for i in {1..1659}; do amix $i; done

compare the above with the working environment and NOK environment.

See if there is any clue.

for loops like the one you gave only work in bash, which is not installed on the cell module, only the busybox shell is, so instead I ran for i in seq 1 1659; do amix $i; done when the modem was in a good state and again when the modem was in bad state (i.e. silent audio on calls).

I used “meld” to diff the two outputs and there was no difference whatsoever

As workaround, probably you can check this line in dmesg and reset the module accordingly

MDM Media1: ASoC: no backend DAIs enabled for MDM Media1

Good idea, although that error is not always printed when the audio becomes silent. It seems that the audio being silent is a symptom of several problems