-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathc_audioCapturePlayback.html
74 lines (74 loc) · 122 KB
/
c_audioCapturePlayback.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html data-context="" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<title>Sample code of audio playback and capture - Legato Docs</title>
<meta content="legato™ is an open source Linux-based embedded platform designed to simplify connected IoT application development" name="description"/>
<meta content="legato, iot" name="keywords"/>
<meta content="16.04.0-external-5-g7c8a4e3" name="legato-version"/>
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"/>
<link href="resources/images/legato.ico" rel="shortcut icon"/>
<link href="resources/images/legato.ico" rel="icon" type="image/x-icon"/>
<link href="resources/images/legato.ico" rel="shortcut icon" type="image/x-icon"/>
<link href="resources/images/legato.ico" rel="apple-touch-icon" type="image/x-icon"/>
<link href="resources/css/style.css" media="screen" rel="stylesheet" type="text/css"/>
<link href="resources/css/jqtree.css" rel="stylesheet" type="text/css"/>
<link href="resources/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<!--[if IE]>
<script src="resources/js/html5shiv.js"></script>
<![endif]-->
<script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
<script src="resources/js/main.js"></script>
<script src=""></script>
</head>
<body>
<noscript>
<input class="modal-closing-trick" id="modal-closing-trick" type="checkbox"/>
<div id="nojs">
<label for="modal-closing-trick">
<span>You seem to not have Javascript <a href="http://enable-javascript.com">enabled</a>, so site functionality like the search and navigation tree won't work.</span>
</label>
</div>
</noscript>
<div class="wrapper">
<div class="fa fa-bars documentation" id="menu-trigger"></div>
<div id="top">
<header>
<nav>
<a class="navlink" href="/index.html">Introduction</a><a class="navlink" href="buildAppsMain.html">Build Apps</a><a class="navlink" href="buildPlatformMain.html">Build Platform</a><a class="navlink" href="aboutMain.html">About</a>
</nav>
</header>
</div>
<div class="white" id="menudocumentation">
<header>
<a href="/"> <img alt="Back to Legato Homepage" id="logo" src="resources/images/legato_logo.png"/></a>
<h2>/ Legato Documentation</h2>
<nav class="secondary">
</nav>
<nav class="ui-front">
<i class="fa fa-search" id="search-icon"></i>
<input id="searchbox" placeholder="Search"/>
</nav>
</header>
</div>
<div id="resizable">
<div id="left">
<div id="tree1"></div>
</div>
</div>
<div class="content">
<div class="header">
<div class="headertitle">
<h1 class="title">Sample code of audio playback and capture </h1> </div>
</div><div class="contents">
<div class="textblock"><pre class="fragment"><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * This module is for unit of the audio playback/recorder</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment">* You must issue the following commands:</span></div><div class="line"><span class="comment">* @verbatim</span></div><div class="line"><span class="comment"> $ app start audioPlaybackRec</span></div><div class="line"><span class="comment"> $ execInApp audioPlaybackRec audioPlaybackRecTest <test case> [main audio path] [file's name] [option]</span></div><div class="line"><span class="comment"> @endverbatim</span></div><div class="line"><span class="comment"> * Copyright (C) Sierra Wireless Inc. Use of this work is subject to license.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"> </div><div class="line"><span class="preprocessor">#include "<a class="code" href="legato_8h.html">legato.h</a>"</span></div><div class="line"><span class="preprocessor">#include <stdio.h></span></div><div class="line"><span class="preprocessor">#include <pthread.h></span></div><div class="line"><span class="preprocessor">#include <unistd.h></span></div><div class="line"> </div><div class="line"><span class="preprocessor">#include "interfaces.h"</span></div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="comment">// Symbol and Enum definitions.</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="preprocessor">#define ID_RIFF 0x46464952</span></div><div class="line"><span class="preprocessor">#define ID_WAVE 0x45564157</span></div><div class="line"><span class="preprocessor">#define ID_FMT 0x20746d66</span></div><div class="line"><span class="preprocessor">#define ID_DATA 0x61746164</span></div><div class="line"><span class="preprocessor">#define FORMAT_PCM 1</span></div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="comment">// Data structures.</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">struct</span></div><div class="line">{</div><div class="line"> <span class="keyword">enum</span></div><div class="line"> {</div><div class="line"> STOP,</div><div class="line"> PLAY,</div><div class="line"> PAUSE,</div><div class="line"> RESUME,</div><div class="line"> RECORD,</div><div class="line"> DISCONNECT</div><div class="line"> } typeOption;</div><div class="line">} OptionContext;</div><div class="line"> </div><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"> uint32_t riffId; <span class="comment">///< "RIFF" constant. Marks the file as a riff file.</span></div><div class="line"><span class="comment"></span> uint32_t riffSize; <span class="comment">///< Size of the overall file - 8 bytes</span></div><div class="line"><span class="comment"></span> uint32_t riffFmt; <span class="comment">///< File Type Header. For our purposes, it always equals "WAVE".</span></div><div class="line"><span class="comment"></span> uint32_t fmtId; <span class="comment">///< Equals "fmt ". Format chunk marker. Includes trailing null</span></div><div class="line"><span class="comment"></span> uint32_t fmtSize; <span class="comment">///< Length of format data as listed above</span></div><div class="line"><span class="comment"></span> uint16_t audioFormat; <span class="comment">///< Audio format (PCM)</span></div><div class="line"><span class="comment"></span> uint16_t channelsCount; <span class="comment">///< Number of channels</span></div><div class="line"><span class="comment"></span> uint32_t sampleRate; <span class="comment">///< Sample frequency in Hertz</span></div><div class="line"><span class="comment"></span> uint32_t byteRate; <span class="comment">///< sampleRate * channelsCount * bps / 8</span></div><div class="line"><span class="comment"></span> uint16_t blockAlign; <span class="comment">///< channelsCount * bps / 8</span></div><div class="line"><span class="comment"></span> uint16_t bitsPerSample; <span class="comment">///< Bits per sample</span></div><div class="line"><span class="comment"></span> uint32_t dataId; <span class="comment">///< "data" chunk header. Marks the beginning of the data section.</span></div><div class="line"><span class="comment"></span> uint32_t dataSize; <span class="comment">///< Data size</span></div><div class="line"><span class="comment"></span>} WavHeader_t;</div><div class="line"> </div><div class="line"><span class="keyword">typedef</span> <span class="keyword">struct</span></div><div class="line">{</div><div class="line"> WavHeader_t hd;</div><div class="line"> uint32_t wroteLen;</div><div class="line"> <span class="keywordtype">int</span> pipefd[2];</div><div class="line"> <a class="code" href="le__thread_8h.html#a32121104c6b4ca39008eb79a4d6862f2">le_thread_Ref_t</a> mainThreadRef;</div><div class="line"> <span class="keywordtype">bool</span> playDone;</div><div class="line">}</div><div class="line">PbRecSamplesThreadCtx_t;</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="comment">// Static declarations</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#a9a46ff5a5afa61f1bc76120ab9e4da0a">le_audio_StreamRef_t</a> MdmRxAudioRef = NULL;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#a9a46ff5a5afa61f1bc76120ab9e4da0a">le_audio_StreamRef_t</a> MdmTxAudioRef = NULL;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#a9a46ff5a5afa61f1bc76120ab9e4da0a">le_audio_StreamRef_t</a> FeInRef = NULL;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#a9a46ff5a5afa61f1bc76120ab9e4da0a">le_audio_StreamRef_t</a> FeOutRef = NULL;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#a9a46ff5a5afa61f1bc76120ab9e4da0a">le_audio_StreamRef_t</a> FileAudioRef = NULL;</div><div class="line"> </div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#ab819480f4ce3f36e62b6a4e327668304">le_audio_ConnectorRef_t</a> AudioInputConnectorRef = NULL;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#ab819480f4ce3f36e62b6a4e327668304">le_audio_ConnectorRef_t</a> AudioOutputConnectorRef = NULL;</div><div class="line"> </div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#a390b011cbb6f745c46e861d315af0bbe">le_audio_MediaHandlerRef_t</a> MediaHandlerRef = NULL;</div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* AudioTestCase;</div><div class="line"><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* MainAudioSoundPath;</div><div class="line"><span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span>* AudioFilePath;</div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">int</span> AudioFileFd = -1;</div><div class="line"><span class="keyword">static</span> <span class="keywordtype">bool</span> PlayInLoop = <span class="keyword">false</span>;</div><div class="line"> </div><div class="line"><a class="code" href="le__timer_8h.html#a763fa6992488cdce3b5a820817094838">le_timer_Ref_t</a> OptionTimerRef;</div><div class="line"><a class="code" href="le__timer_8h.html#a763fa6992488cdce3b5a820817094838">le_timer_Ref_t</a> GainTimerRef = NULL;</div><div class="line"><a class="code" href="le__timer_8h.html#a763fa6992488cdce3b5a820817094838">le_timer_Ref_t</a> MuteTimerRef = NULL;</div><div class="line"> </div><div class="line"><span class="keyword">static</span> PbRecSamplesThreadCtx_t PbRecSamplesThreadCtx;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__thread_8h.html#a32121104c6b4ca39008eb79a4d6862f2">le_thread_Ref_t</a> RecPbThreadRef = NULL;</div><div class="line"> </div><div class="line"><span class="keyword">static</span> uint32_t ChannelsCount;</div><div class="line"><span class="keyword">static</span> uint32_t SampleRate;</div><div class="line"><span class="keyword">static</span> uint32_t BitsPerSample;</div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> DisconnectAllAudio(<span class="keywordtype">void</span>);</div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PlaySamples(<span class="keywordtype">void</span>* param1Ptr,<span class="keywordtype">void</span>* param2Ptr);</div><div class="line"><span class="keyword">static</span> uint8_t NextOptionArg;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#a0ad2f5012ed700af1892f82e4af5989d">le_audio_Format_t</a> AudioFormat;</div><div class="line"><span class="keyword">static</span> <span class="keywordtype">bool</span> DtxActivation;</div><div class="line"><span class="keyword">static</span> <a class="code" href="le__audio__interface_8h.html#accd7fae61b50dcd68bf722e243bc5cb7">le_audio_AmrMode_t</a> AmrMode;</div><div class="line"> </div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Timer handler function for volume playback test.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> GainTimerHandler</div><div class="line">(</div><div class="line"> <a class="code" href="le__timer_8h.html#a763fa6992488cdce3b5a820817094838">le_timer_Ref_t</a> timerRef</div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keyword">static</span> int32_t vol = 0, getVol = 0;</div><div class="line"> <span class="keyword">static</span> <span class="keywordtype">bool</span> increase = <span class="keyword">true</span>;</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> result;</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ( increase )</div><div class="line"> {</div><div class="line"> vol+=1;</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (vol == 100)</div><div class="line"> {</div><div class="line"> increase = <span class="keyword">false</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> vol-=1;</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (vol == 0)</div><div class="line"> {</div><div class="line"> increase = <span class="keyword">true</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Playback volume: vol %d"</span>, vol);</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#a65f11540e6af03a3494b6b9be76ba5fc">le_audio_SetGain</a>(FileAudioRef, vol);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (result != LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a54b4b07f5396e19a8d9fca74238f4795">LE_FATAL</a>(<span class="stringliteral">"le_audio_SetGain error : %d"</span>, result);</div><div class="line"> }</div><div class="line"> </div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#a365dede3aa7e895755f5812d89368f9f">le_audio_GetGain</a>(FileAudioRef, &getVol);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ((result != LE_OK) || (vol != getVol))</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a54b4b07f5396e19a8d9fca74238f4795">LE_FATAL</a>(<span class="stringliteral">"le_audio_GetGain error : %d read volume: %d"</span>, result, getVol);</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Timer handler function for volume playback MUTE test.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> MuteTimerHandler</div><div class="line">(</div><div class="line"> <a class="code" href="le__timer_8h.html#a763fa6992488cdce3b5a820817094838">le_timer_Ref_t</a> timerRef</div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keyword">static</span> <span class="keywordtype">bool</span> mute = <span class="keyword">false</span>;</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> result;</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ( mute )</div><div class="line"> {</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#adad24547293481964039efe56bc14e2b">le_audio_Unmute</a>(FileAudioRef);</div><div class="line"> mute = <span class="keyword">false</span>;</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Unmute audio Playback"</span>);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#a147e97c49dbc003f63df78f97d5fca32">le_audio_Mute</a>(FileAudioRef);</div><div class="line"> mute = <span class="keyword">true</span>;</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Mute audio Playback"</span>);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (result != LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a54b4b07f5396e19a8d9fca74238f4795">LE_FATAL</a>(<span class="stringliteral">"le_audio_Mute/le_audio_Unmute Failed %d"</span>, result);</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Rec Samples thread destructor.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> DestroyRecThread</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span> *contextPtr</div><div class="line">)</div><div class="line">{</div><div class="line"> PbRecSamplesThreadCtx_t *threadCtxPtr = (PbRecSamplesThreadCtx_t*) contextPtr;</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"wroteLen %d"</span>, threadCtxPtr->wroteLen);</div><div class="line"> close(AudioFileFd);</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Rec Samples thread.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span>* RecSamplesThread</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span>* contextPtr</div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keywordtype">int</span> pipefd[2];</div><div class="line"> int32_t len = 1024;</div><div class="line"> <span class="keywordtype">char</span> data[len];</div><div class="line"> uint32_t channelsCount;</div><div class="line"> uint32_t sampleRate;</div><div class="line"> uint32_t bitsPerSample;</div><div class="line"> PbRecSamplesThreadCtx_t *threadCtxPtr = (PbRecSamplesThreadCtx_t*) contextPtr;</div><div class="line"> </div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a65a8844fc6d2e1b7ed78f33bef1b9990">le_audio_ConnectService</a>();</div><div class="line"> </div><div class="line"> lseek(AudioFileFd, 0, SEEK_SET);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (pipe(pipefd) == -1)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to create the pipe"</span>);</div><div class="line"> <span class="keywordflow">return</span> NULL;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#aae7db9f0933119fb5a61162722b3274a">le_audio_SetSamplePcmChannelNumber</a>(FileAudioRef, ChannelsCount) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a04adfcc0e8f5796eca53c31cd5dd6528">le_audio_SetSamplePcmSamplingRate</a>(FileAudioRef, SampleRate) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#aae37b46c13f76144dd94c48bfe94998b">le_audio_SetSamplePcmSamplingResolution</a>(FileAudioRef, BitsPerSample) == LE_OK);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a40bf3633c3050a7526a100562edc97f9">le_audio_GetSamplePcmChannelNumber</a>(FileAudioRef, &channelsCount) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(channelsCount == ChannelsCount);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a80fb48632ce8f638cea4a3e5d333d66f">le_audio_GetSamplePcmSamplingRate</a>(FileAudioRef, &sampleRate) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(sampleRate == SampleRate);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a70b9f904ce225aad4fb80b8b24a1f92a">le_audio_GetSamplePcmSamplingResolution</a>(FileAudioRef, &bitsPerSample) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(bitsPerSample == BitsPerSample);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a9c55a59849afcbb2ccef88cd4265782e">le_audio_GetSamples</a>(FileAudioRef, pipefd[1]) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Start getting samples..."</span>);</div><div class="line"> </div><div class="line"> int32_t readLen;</div><div class="line"> </div><div class="line"> <span class="keywordflow">while</span> ((readLen = read( pipefd[0], data, len )))</div><div class="line"> {</div><div class="line"> int32_t len = write( AudioFileFd, data, readLen );</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (len < 0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"write error %d %d"</span>, readLen, len);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> threadCtxPtr->wroteLen += len;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">return</span> NULL;</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Rec Samples.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> RecSamples</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> memset(&PbRecSamplesThreadCtx,0,<span class="keyword">sizeof</span>(PbRecSamplesThreadCtx_t));</div><div class="line"> </div><div class="line"> RecPbThreadRef = <a class="code" href="le__thread_8h.html#a87e02a46f92e9e3e11ed28a2b265872f">le_thread_Create</a>(<span class="stringliteral">"RecSamples"</span>, RecSamplesThread, &PbRecSamplesThreadCtx);</div><div class="line"> </div><div class="line"> <a class="code" href="le__thread_8h.html#a671dbe2927a3b2a13c5150476398f34f">le_thread_AddChildDestructor</a>(RecPbThreadRef,</div><div class="line"> DestroyRecThread,</div><div class="line"> &PbRecSamplesThreadCtx);</div><div class="line"> </div><div class="line"> <a class="code" href="le__thread_8h.html#a38df3877ee5ab9fac17b2fc0be46c27e">le_thread_Start</a>(RecPbThreadRef);</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Play Samples thread destructor.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> DestroyPlayThread</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span> *contextPtr</div><div class="line">)</div><div class="line">{</div><div class="line"> PbRecSamplesThreadCtx_t *threadCtxPtr = (PbRecSamplesThreadCtx_t*) contextPtr;</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"DestroyPlayThread playDone %d PlayInLoop %d"</span>, threadCtxPtr->playDone, PlayInLoop);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>( threadCtxPtr->playDone && PlayInLoop )</div><div class="line"> {</div><div class="line"> <a class="code" href="le__event_loop_8h.html#a228da2d1f53ffa74517f108b0dcfa4d9">le_event_QueueFunctionToThread</a>(threadCtxPtr->mainThreadRef,</div><div class="line"> PlaySamples,</div><div class="line"> contextPtr,</div><div class="line"> NULL);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#af45667acfd1b4bdfdc4433db4947cd9e">LE_DEBUG</a>(<span class="stringliteral">"Close pipe Tx"</span>);</div><div class="line"> close(threadCtxPtr->pipefd[1]);</div><div class="line"> }</div><div class="line"> </div><div class="line"> RecPbThreadRef = NULL;</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Play Samples thread.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span>* PlaySamplesThread</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span>* contextPtr</div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keywordtype">char</span> data[1024];</div><div class="line"> int32_t len = 1;</div><div class="line"> uint32_t channelsCount;</div><div class="line"> uint32_t sampleRate;</div><div class="line"> uint32_t bitsPerSample;</div><div class="line"> PbRecSamplesThreadCtx_t *threadCtxPtr = (PbRecSamplesThreadCtx_t*) contextPtr;</div><div class="line"> </div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a65a8844fc6d2e1b7ed78f33bef1b9990">le_audio_ConnectService</a>();</div><div class="line"> </div><div class="line"> lseek(AudioFileFd, 0, SEEK_SET);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ( ( threadCtxPtr->pipefd[0] == -1 ) && ( threadCtxPtr->pipefd[1] == -1 ) )</div><div class="line"> {</div><div class="line"> <span class="keywordflow">if</span> (pipe(threadCtxPtr->pipefd) == -1)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to create the pipe"</span>);</div><div class="line"> <span class="keywordflow">return</span> NULL;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#aae7db9f0933119fb5a61162722b3274a">le_audio_SetSamplePcmChannelNumber</a>(FileAudioRef, ChannelsCount) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a04adfcc0e8f5796eca53c31cd5dd6528">le_audio_SetSamplePcmSamplingRate</a>(FileAudioRef, SampleRate) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#aae37b46c13f76144dd94c48bfe94998b">le_audio_SetSamplePcmSamplingResolution</a>(FileAudioRef, BitsPerSample) == LE_OK);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a40bf3633c3050a7526a100562edc97f9">le_audio_GetSamplePcmChannelNumber</a>(FileAudioRef, &channelsCount) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(channelsCount == ChannelsCount);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a80fb48632ce8f638cea4a3e5d333d66f">le_audio_GetSamplePcmSamplingRate</a>(FileAudioRef, &sampleRate) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(sampleRate == SampleRate);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a70b9f904ce225aad4fb80b8b24a1f92a">le_audio_GetSamplePcmSamplingResolution</a>(FileAudioRef, &bitsPerSample) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(bitsPerSample == BitsPerSample);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#afd37d59ab8207338da197554f49d7ff0">le_audio_PlaySamples</a>(FileAudioRef, threadCtxPtr->pipefd[0]) == LE_OK);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Start playing samples..."</span>);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">while</span> ((len = read(AudioFileFd, data, 1024)) > 0)</div><div class="line"> {</div><div class="line"> int32_t wroteLen = write( threadCtxPtr->pipefd[1], data, len );</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (wroteLen <= 0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"write error %d"</span>, wroteLen);</div><div class="line"> <span class="keywordflow">return</span> NULL;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> </div><div class="line"> threadCtxPtr->playDone = <span class="keyword">true</span>;</div><div class="line"> </div><div class="line"> <span class="keywordflow">return</span> NULL;</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Play Samples thread.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"> </div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PlaySamples</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span>* param1Ptr,</div><div class="line"> <span class="keywordtype">void</span>* param2Ptr</div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keywordflow">if</span> (RecPbThreadRef == NULL)</div><div class="line"> {</div><div class="line"> RecPbThreadRef = <a class="code" href="le__thread_8h.html#a87e02a46f92e9e3e11ed28a2b265872f">le_thread_Create</a>(<span class="stringliteral">"PlaySamples"</span>, PlaySamplesThread, param1Ptr);</div><div class="line"> </div><div class="line"> <a class="code" href="le__thread_8h.html#a671dbe2927a3b2a13c5150476398f34f">le_thread_AddChildDestructor</a>(RecPbThreadRef,</div><div class="line"> DestroyPlayThread,</div><div class="line"> param1Ptr);</div><div class="line"> </div><div class="line"> <a class="code" href="le__thread_8h.html#a38df3877ee5ab9fac17b2fc0be46c27e">le_thread_Start</a>(RecPbThreadRef);</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Execute next optional parameters</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ExecuteNextOption</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keywordtype">bool</span> nextOption = <span class="keyword">false</span>;</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ( NextOptionArg < <a class="code" href="le__args_8h.html#a6fbbeb423104e6eb92fe47ef42b7310a">le_arg_NumArgs</a>() )</div><div class="line"> {</div><div class="line"> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"STOP"</span>, 4) == 0 )</div><div class="line"> {</div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval={0};</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span>* stop = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (strlen(stop) > 5) <span class="comment">// higher than "STOP="</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"STOP will be done in %d seconds"</span>, atoi(stop+5));</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = atoi(stop+5);</div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(OptionTimerRef, interval);</div><div class="line"> OptionContext.typeOption = STOP;</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(OptionTimerRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"PLAY"</span>, 4) == 0 )</div><div class="line"> {</div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval={0};</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span>* play = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg);</div><div class="line"> <span class="keywordflow">if</span> (strlen(play) > 5) <span class="comment">// higher than "PLAY="</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"PLAY will be done in %d seconds"</span>, atoi(play+5));</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = atoi(play+5);</div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(OptionTimerRef, interval);</div><div class="line"> OptionContext.typeOption = PLAY;</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(OptionTimerRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"RECORD"</span>, 6) == 0 )</div><div class="line"> {</div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval={0};</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span>* play = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg);</div><div class="line"> <span class="keywordflow">if</span> (strlen(play) > 7) <span class="comment">// higher than "RECORD="</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"RECORD will be done in %d seconds"</span>, atoi(play+7));</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = atoi(play+7);</div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(OptionTimerRef, interval);</div><div class="line"> OptionContext.typeOption = RECORD;</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(OptionTimerRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"PAUSE"</span>, 5) == 0 )</div><div class="line"> {</div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval={0};</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span>* pause = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (strlen(pause) > 6) <span class="comment">// higher than "PAUSE="</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"PAUSE will be done in %d seconds"</span>, atoi(pause+6));</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = atoi(pause+6);</div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(OptionTimerRef, interval);</div><div class="line"> OptionContext.typeOption = PAUSE;</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(OptionTimerRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"RESUME"</span>, 6) == 0 )</div><div class="line"> {</div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval={0};</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span>* resume = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (strlen(resume) > 7) <span class="comment">// higher than "RESUME="</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"RESUME will be done in %d seconds"</span>, atoi(resume+7));</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = atoi(resume+7);</div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(OptionTimerRef, interval);</div><div class="line"> OptionContext.typeOption = RESUME;</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(OptionTimerRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"DISCONNECT"</span>, 10) == 0 )</div><div class="line"> {</div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval={0};</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span>* resume = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (strlen(resume) > 11) <span class="comment">// higher than "DISCONNECT="</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"DISCONNECT will be done in %d seconds"</span>, atoi(resume+11));</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = atoi(resume+11);</div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(OptionTimerRef, interval);</div><div class="line"> OptionContext.typeOption = DISCONNECT;</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(OptionTimerRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"LOOP"</span>, 4) == 0 )</div><div class="line"> {</div><div class="line"> PlayInLoop = <span class="keyword">true</span>;</div><div class="line"> nextOption = <span class="keyword">true</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg), <span class="stringliteral">"MUTE"</span>, 4) == 0 )</div><div class="line"> {</div><div class="line"> </div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval;</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = 1;</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#a8324bdde9199a09a47489a3f246f184c">usec</a> = 0;</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Test the MUTE function"</span>);</div><div class="line"> </div><div class="line"> MuteTimerRef = <a class="code" href="le__timer_8h.html#aee41169a210378b369f440cf99146522">le_timer_Create</a> ( <span class="stringliteral">"Mute timer"</span> );</div><div class="line"> <a class="code" href="le__timer_8h.html#a8fb341f11e0da2692453df997613cb8e">le_timer_SetHandler</a>(MuteTimerRef, MuteTimerHandler);</div><div class="line"> </div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(MuteTimerRef, interval);</div><div class="line"> <a class="code" href="le__timer_8h.html#a292b0a7d6dc0796a36a54fd04c6a7eeb">le_timer_SetRepeat</a>(MuteTimerRef,0);</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(MuteTimerRef);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( strncmp(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(NextOptionArg),<span class="stringliteral">"GAIN"</span>,4) == 0 )</div><div class="line"> {</div><div class="line"> <a class="code" href="structle__clk___time__t.html">le_clk_Time_t</a> interval;</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#ae28e527dbd551b3537edc1737611782f">sec</a> = 0;</div><div class="line"> interval.<a class="code" href="structle__clk___time__t.html#a8324bdde9199a09a47489a3f246f184c">usec</a> = 100000;</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Test the playback volume"</span>);</div><div class="line"> </div><div class="line"> GainTimerRef = <a class="code" href="le__timer_8h.html#aee41169a210378b369f440cf99146522">le_timer_Create</a> ( <span class="stringliteral">"Gain timer"</span> );</div><div class="line"> <a class="code" href="le__timer_8h.html#a8fb341f11e0da2692453df997613cb8e">le_timer_SetHandler</a>(GainTimerRef, GainTimerHandler);</div><div class="line"> </div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a65f11540e6af03a3494b6b9be76ba5fc">le_audio_SetGain</a>(FileAudioRef, 0);</div><div class="line"> <a class="code" href="le__timer_8h.html#a0a103d5cef5e83fc9088859d527bbd43">le_timer_SetInterval</a>(GainTimerRef, interval);</div><div class="line"> <a class="code" href="le__timer_8h.html#a292b0a7d6dc0796a36a54fd04c6a7eeb">le_timer_SetRepeat</a>(GainTimerRef,0);</div><div class="line"> <a class="code" href="le__timer_8h.html#ada2ce7f8cb1e76ed959e323ae94bbfc0">le_timer_Start</a>(GainTimerRef);</div><div class="line"> }</div><div class="line"> </div><div class="line"> NextOptionArg++;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (nextOption)</div><div class="line"> {</div><div class="line"> ExecuteNextOption();</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Timer handler for optional parameters</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keywordtype">void</span> OptionTimerHandler</div><div class="line">(</div><div class="line"> <a class="code" href="le__timer_8h.html#a763fa6992488cdce3b5a820817094838">le_timer_Ref_t</a> timerRef</div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> result;</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"timeout for %d"</span>, OptionContext.typeOption);</div><div class="line"> </div><div class="line"> <span class="keywordflow">switch</span> (OptionContext.typeOption)</div><div class="line"> {</div><div class="line"> <span class="keywordflow">case</span> STOP:</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#a4aebc6e8cdc4389c375e93418823af71">le_audio_Stop</a>(FileAudioRef);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Stop result %d"</span>, result);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (RecPbThreadRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__thread_8h.html#a0f1c1b98f354a96e6e31e55a71b58f6a">le_thread_Cancel</a>(RecPbThreadRef);</div><div class="line"> RecPbThreadRef = NULL;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ( strncmp(AudioTestCase,<span class="stringliteral">"PB_SAMPLES"</span>,10)==0 )</div><div class="line"> {</div><div class="line"> close(PbRecSamplesThreadCtx.pipefd[0]);</div><div class="line"> close(PbRecSamplesThreadCtx.pipefd[1]);</div><div class="line"> PbRecSamplesThreadCtx.pipefd[0] = -1;</div><div class="line"> PbRecSamplesThreadCtx.pipefd[1] = -1;</div><div class="line"> PbRecSamplesThreadCtx.playDone = 0;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> PLAY:</div><div class="line"> <span class="keywordflow">if</span> ( strncmp(AudioTestCase,<span class="stringliteral">"PB_SAMPLES"</span>,10)==0 )</div><div class="line"> {</div><div class="line"> PlaySamples(&PbRecSamplesThreadCtx, NULL);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#aea2c5d0b394cfab87503639c534300c9">le_audio_PlayFile</a>(FileAudioRef,<a class="code" href="le__audio__interface_8h.html#a374c2f62ec5b8a92dd1de6fcb449fafe">LE_AUDIO_NO_FD</a>);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Play result %d"</span>, result);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> RECORD:</div><div class="line"> <span class="keywordflow">if</span> ( strncmp(AudioTestCase,<span class="stringliteral">"REC_SAMPLES"</span>,11)==0 )</div><div class="line"> {</div><div class="line"> RecSamples();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#a393a26f6cff7fe05c1813fcafeef50f3">le_audio_RecordFile</a>(FileAudioRef,<a class="code" href="le__audio__interface_8h.html#a374c2f62ec5b8a92dd1de6fcb449fafe">LE_AUDIO_NO_FD</a>);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Record result %d"</span>, result);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> PAUSE:</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#a80343ca9800ab80f818bbe0361bb226b">le_audio_Pause</a>(FileAudioRef);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Pause result %d"</span>, result);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> RESUME:</div><div class="line"> result = <a class="code" href="le__audio__interface_8h.html#a1dba6618bd8fc9835869ee72c3fbd850">le_audio_Resume</a>(FileAudioRef);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Resume result %d"</span>, result);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">case</span> DISCONNECT:</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"disconnect all audio"</span>);</div><div class="line"> DisconnectAllAudio();</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">default</span>:</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> ExecuteNextOption();</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Handler function for Stream Event Notifications.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> MyMediaEventHandler</div><div class="line">(</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a9a46ff5a5afa61f1bc76120ab9e4da0a">le_audio_StreamRef_t</a> streamRef,</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#aaf870f5f30f4f6f65efb873c5d0cb5f1">le_audio_MediaEvent_t</a> event,</div><div class="line"> <span class="keywordtype">void</span>* contextPtr</div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keywordflow">if</span> (!streamRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Bad streamRef"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> </div><div class="line"> <span class="keywordflow">switch</span>(event)</div><div class="line"> {</div><div class="line"> <span class="keywordflow">case</span> <a class="code" href="le__audio__interface_8h.html#aaf870f5f30f4f6f65efb873c5d0cb5f1a7dbc0c9a2c3839d3db974c5aa5be344d">LE_AUDIO_MEDIA_ENDED</a>:</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"File event is LE_AUDIO_MEDIA_ENDED."</span>);</div><div class="line"> <span class="keywordflow">if</span> (PlayInLoop)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#aea2c5d0b394cfab87503639c534300c9">le_audio_PlayFile</a>(streamRef, <a class="code" href="le__audio__interface_8h.html#a374c2f62ec5b8a92dd1de6fcb449fafe">LE_AUDIO_NO_FD</a>);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> </div><div class="line"> <span class="keywordflow">case</span> <a class="code" href="le__audio__interface_8h.html#aaf870f5f30f4f6f65efb873c5d0cb5f1a5f7de6714ea54f09d036a87dd1c63a50">LE_AUDIO_MEDIA_ERROR</a>:</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"File event is LE_AUDIO_MEDIA_ERROR."</span>);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> </div><div class="line"> <span class="keywordflow">case</span> <a class="code" href="le__audio__interface_8h.html#aaf870f5f30f4f6f65efb873c5d0cb5f1a06883432159e9e69637fbe5eefd59159">LE_AUDIO_MEDIA_NO_MORE_SAMPLES</a>:</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"File event is LE_AUDIO_MEDIA_NO_MORE_SAMPLES."</span>);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> <span class="keywordflow">default</span>:</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"File event is %d."</span>, event);</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (GainTimerRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__timer_8h.html#af310daa378bd6ca39373a47e073f2243">le_timer_Stop</a> (GainTimerRef);</div><div class="line"> <a class="code" href="le__timer_8h.html#ae103f6736bf855e77e5e59bbad1e27a7">le_timer_Delete</a> (GainTimerRef);</div><div class="line"> GainTimerRef = NULL;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (MuteTimerRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__timer_8h.html#af310daa378bd6ca39373a47e073f2243">le_timer_Stop</a> (MuteTimerRef);</div><div class="line"> <a class="code" href="le__timer_8h.html#ae103f6736bf855e77e5e59bbad1e27a7">le_timer_Delete</a> (MuteTimerRef);</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#adad24547293481964039efe56bc14e2b">le_audio_Unmute</a>(FileAudioRef);</div><div class="line"> MuteTimerRef = NULL;</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Connect USB audio class to connectors</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ConnectAudioToUsb</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> res;</div><div class="line"> </div><div class="line"> <span class="comment">// Redirect audio to the USB.</span></div><div class="line"> FeOutRef = <a class="code" href="le__audio__interface_8h.html#adb38f11ac78cf99160c19f69b4db0eb8">le_audio_OpenUsbTx</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeOutRef==NULL), <span class="stringliteral">"OpenUsbTx returns NULL!"</span>);</div><div class="line"> FeInRef = <a class="code" href="le__audio__interface_8h.html#acd8be89289067cef9441a8ed1d891146">le_audio_OpenUsbRx</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeInRef==NULL), <span class="stringliteral">"OpenUsbRx returns NULL!"</span>);</div><div class="line"> </div><div class="line"> AudioInputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioInputConnectorRef==NULL), <span class="stringliteral">"AudioInputConnectorRef is NULL!"</span>);</div><div class="line"> AudioOutputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioOutputConnectorRef==NULL), <span class="stringliteral">"AudioOutputConnectorRef is NULL!"</span>);</div><div class="line"> {</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioInputConnectorRef, FeInRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect USB Rx on Input connector!"</span>);</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioOutputConnectorRef, FeOutRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect USB Tx on Output connector!"</span>);</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Connect player to connector</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ConnectAudioToFileLocalPlay</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> res;</div><div class="line"> <span class="keywordflow">if</span> ((AudioFileFd=open(AudioFilePath, O_RDONLY)) == -1)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Open file %s failure: errno.%d (%s)"</span>, AudioFilePath, errno, strerror(errno));</div><div class="line"> DisconnectAllAudio();</div><div class="line"> exit(0);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Open file %s with AudioFileFd.%d"</span>, AudioFilePath, AudioFileFd);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">// Play local on output connector.</span></div><div class="line"> FileAudioRef = <a class="code" href="le__audio__interface_8h.html#a92eb1b6377f50ff07b97c5b8546f01ec">le_audio_OpenPlayer</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FileAudioRef==NULL), <span class="stringliteral">"OpenFilePlayback returns NULL!"</span>);</div><div class="line"> </div><div class="line"> <a class="code" href="le__audio__interface_8h.html#adad24547293481964039efe56bc14e2b">le_audio_Unmute</a>(FileAudioRef);</div><div class="line"> </div><div class="line"> MediaHandlerRef = <a class="code" href="le__audio__interface_8h.html#a9996ac9d23333cf8219f28b69cac4f81">le_audio_AddMediaHandler</a>(FileAudioRef, MyMediaEventHandler, NULL);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (FileAudioRef && AudioOutputConnectorRef)</div><div class="line"> {</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioOutputConnectorRef, FileAudioRef);</div><div class="line"> <span class="keywordflow">if</span>(res != LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to connect FilePlayback on output connector!"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (strncmp(AudioTestCase,<span class="stringliteral">"PB_SAMPLES"</span>,10)==0)</div><div class="line"> {</div><div class="line"> memset(&PbRecSamplesThreadCtx,0,<span class="keyword">sizeof</span>(PbRecSamplesThreadCtx_t));</div><div class="line"> PbRecSamplesThreadCtx.pipefd[0] = -1;</div><div class="line"> PbRecSamplesThreadCtx.pipefd[1] = -1;</div><div class="line"> PbRecSamplesThreadCtx.mainThreadRef = <a class="code" href="le__thread_8h.html#a90a9d67db26f816fd1e1032d74a24fcd">le_thread_GetCurrent</a>();</div><div class="line"> </div><div class="line"> PlaySamples(&PbRecSamplesThreadCtx, NULL);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"FilePlayback is now connected."</span>);</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#aea2c5d0b394cfab87503639c534300c9">le_audio_PlayFile</a>(FileAudioRef, AudioFileFd);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(res != LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to play the file!"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"File is now playing"</span>);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> </div><div class="line"> ExecuteNextOption();</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Connect recorder to connector</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ConnectAudioToFileLocalRec</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> res;</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a65f11540e6af03a3494b6b9be76ba5fc">le_audio_SetGain</a>( FeInRef, 0x5000 ) == LE_OK);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ((AudioFileFd=open(AudioFilePath, O_WRONLY | O_CREAT | O_TRUNC)) == -1)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Open file %s failure: errno.%d (%s)"</span>, AudioFilePath, errno, strerror(errno));</div><div class="line"> DisconnectAllAudio();</div><div class="line"> exit(0);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Open file %s with AudioFileFd.%d"</span>, AudioFilePath, AudioFileFd);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">// Capture local on input connector.</span></div><div class="line"> FileAudioRef = <a class="code" href="le__audio__interface_8h.html#aeac35459c36748a4471b6d45f1ebeb24">le_audio_OpenRecorder</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FileAudioRef==NULL), <span class="stringliteral">"OpenFileRecording returns NULL!"</span>);</div><div class="line"> </div><div class="line"> MediaHandlerRef = <a class="code" href="le__audio__interface_8h.html#a9996ac9d23333cf8219f28b69cac4f81">le_audio_AddMediaHandler</a>(FileAudioRef, MyMediaEventHandler, NULL);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (FileAudioRef && AudioInputConnectorRef)</div><div class="line"> {</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioInputConnectorRef, FileAudioRef);</div><div class="line"> <span class="keywordflow">if</span>(res!=LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to connect FileRecording on input connector!"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Recorder is now connected."</span>);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ( strncmp(AudioTestCase,<span class="stringliteral">"REC_SAMPLES"</span>,11)==0 )</div><div class="line"> {</div><div class="line"> memset(&PbRecSamplesThreadCtx,0,<span class="keyword">sizeof</span>(PbRecSamplesThreadCtx_t));</div><div class="line"> </div><div class="line"> RecSamples();</div><div class="line"> </div><div class="line"> ExecuteNextOption();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#aead87ec16d317bb4e4a8e7e9ea37550b">le_audio_SetEncodingFormat</a>(FileAudioRef, AudioFormat);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(res!=LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to set audio format"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (AudioFormat == <a class="code" href="le__audio__interface_8h.html#a0ad2f5012ed700af1892f82e4af5989da51bd6de676a1d6a82923c7383b047893">LE_AUDIO_AMR</a>)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Set AMR mode %d"</span>, AmrMode);</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a18600cdbd3995c9c2ca24f9b15991f7d">le_audio_SetSampleAmrMode</a>(FileAudioRef, AmrMode);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(res!=LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to set AMR bitrate"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Set AMR DTX %d"</span>, DtxActivation);</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a5932f51fb1398cc2442c8bb765ca4071">le_audio_SetSampleAmrDtx</a>(FileAudioRef, DtxActivation);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(res!=LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to set DTX"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> </div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a393a26f6cff7fe05c1813fcafeef50f3">le_audio_RecordFile</a>(FileAudioRef, AudioFileFd);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(res!=LE_OK)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a3ee3d0451bd7351a6252c9487452d175">LE_ERROR</a>(<span class="stringliteral">"Failed to record the file"</span>);</div><div class="line"> <span class="keywordflow">return</span>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"File is now recording."</span>);</div><div class="line"> }</div><div class="line"> </div><div class="line"> sleep(1);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Try again to record"</span>);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#ac0dbbef91dc0fed449d0092ff0557b39">LE_ASSERT</a>(<a class="code" href="le__audio__interface_8h.html#a393a26f6cff7fe05c1813fcafeef50f3">le_audio_RecordFile</a>(FileAudioRef, <a class="code" href="le__audio__interface_8h.html#a374c2f62ec5b8a92dd1de6fcb449fafe">LE_AUDIO_NO_FD</a>) != LE_OK);</div><div class="line"> </div><div class="line"> ExecuteNextOption();</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="preprocessor">#ifdef ENABLE_CODEC</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Connect speaker and MIC to connectors</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ConnectAudioToCodec</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> res;</div><div class="line"> </div><div class="line"> <span class="comment">// Redirect audio to the in-built Microphone and Speaker.</span></div><div class="line"> FeOutRef = <a class="code" href="le__audio__interface_8h.html#a5c19afce44021c4abf6193707317f8de">le_audio_OpenSpeaker</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeOutRef==NULL), <span class="stringliteral">"OpenSpeaker returns NULL!"</span>);</div><div class="line"> FeInRef = <a class="code" href="le__audio__interface_8h.html#a74f1ef979329f6c2bd56ea622f4d05b2">le_audio_OpenMic</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeInRef==NULL), <span class="stringliteral">"OpenMic returns NULL!"</span>);</div><div class="line"> </div><div class="line"> AudioInputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioInputConnectorRef==NULL), <span class="stringliteral">"AudioInputConnectorRef is NULL!"</span>);</div><div class="line"> AudioOutputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioOutputConnectorRef==NULL), <span class="stringliteral">"AudioOutputConnectorRef is NULL!"</span>);</div><div class="line"> </div><div class="line"> {</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioInputConnectorRef, FeInRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect Mic on Input connector!"</span>);</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioOutputConnectorRef, FeOutRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect Speaker on Output connector!"</span>);</div><div class="line"> }</div><div class="line">}</div><div class="line"><span class="preprocessor">#endif</span></div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Connect PCM to connectors</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ConnectAudioToPcm</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> res;</div><div class="line"> </div><div class="line"> </div><div class="line"> <span class="comment">// Redirect audio to the PCM interface.</span></div><div class="line"> FeOutRef = <a class="code" href="le__audio__interface_8h.html#a5e112543e8525775aa670dc71b320766">le_audio_OpenPcmTx</a>(0);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeOutRef==NULL), <span class="stringliteral">"OpenPcmTx returns NULL!"</span>);</div><div class="line"> FeInRef = <a class="code" href="le__audio__interface_8h.html#aa0f0b5fcab8844c67a936d88fa050cf5">le_audio_OpenPcmRx</a>(0);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeInRef==NULL), <span class="stringliteral">"OpenPcmRx returns NULL!"</span>);</div><div class="line"> </div><div class="line"> AudioInputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioInputConnectorRef==NULL), <span class="stringliteral">"AudioInputConnectorRef is NULL!"</span>);</div><div class="line"> AudioOutputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioOutputConnectorRef==NULL), <span class="stringliteral">"AudioOutputConnectorRef is NULL!"</span>);</div><div class="line"> {</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioInputConnectorRef, FeInRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect PCM RX on Input connector!"</span>);</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioOutputConnectorRef, FeOutRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect PCM TX on Output connector!"</span>);</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Connect I2S to the connectors</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ConnectAudioToI2s</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__basics_8h.html#a1cca095ed6ebab24b57a636382a6c86c">le_result_t</a> res;</div><div class="line"> </div><div class="line"> <span class="comment">// Redirect audio to the I2S interface.</span></div><div class="line"> FeOutRef = <a class="code" href="le__audio__interface_8h.html#a2633c1368adf60e342d7cadbbfa6278b">le_audio_OpenI2sTx</a>(<a class="code" href="le__audio__interface_8h.html#a94794180ed71a84bd26a1f525858f252a6ce77f5f956b203e15f662900a5103dd">LE_AUDIO_I2S_STEREO</a>);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeOutRef==NULL), <span class="stringliteral">"OpenI2sTx returns NULL!"</span>);</div><div class="line"> FeInRef = <a class="code" href="le__audio__interface_8h.html#a9e7d0042c4f422554eb10d64535608e5">le_audio_OpenI2sRx</a>(<a class="code" href="le__audio__interface_8h.html#a94794180ed71a84bd26a1f525858f252a6ce77f5f956b203e15f662900a5103dd">LE_AUDIO_I2S_STEREO</a>);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((FeInRef==NULL), <span class="stringliteral">"OpenI2sRx returns NULL!"</span>);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Open I2s: FeInRef.%p FeOutRef.%p"</span>, FeInRef, FeOutRef);</div><div class="line"> </div><div class="line"> AudioInputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioInputConnectorRef==NULL), <span class="stringliteral">"AudioInputConnectorRef is NULL!"</span>);</div><div class="line"> AudioOutputConnectorRef = <a class="code" href="le__audio__interface_8h.html#a570aaf85086f00aca592acfbaaa237be">le_audio_CreateConnector</a>();</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((AudioOutputConnectorRef==NULL), <span class="stringliteral">"AudioOutputConnectorRef is NULL!"</span>);</div><div class="line"> {</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioInputConnectorRef, FeInRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect I2S RX on Input connector!"</span>);</div><div class="line"> res = <a class="code" href="le__audio__interface_8h.html#a338df65b2fb1ae0140d86880adbcf0de">le_audio_Connect</a>(AudioOutputConnectorRef, FeOutRef);</div><div class="line"> <a class="code" href="le__log_8h.html#aceaf11a11691d6c676e36dd317b38dbd">LE_ERROR_IF</a>((res!=LE_OK), <span class="stringliteral">"Failed to connect I2S TX on Output connector!"</span>);</div><div class="line"> }</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Open I2s: FeInRef.%p FeOutRef.%p"</span>, FeInRef, FeOutRef);</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Connect audio</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> ConnectAudio</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keywordflow">if</span> ((strncmp(AudioTestCase,<span class="stringliteral">"PB"</span>,2)==0) || (strncmp(AudioTestCase,<span class="stringliteral">"REC"</span>,3)==0))</div><div class="line"> {</div><div class="line"><span class="preprocessor">#ifdef ENABLE_CODEC</span></div><div class="line"> <span class="keywordflow">if</span> (strcmp(MainAudioSoundPath,<span class="stringliteral">"MIC"</span>)==0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Connect MIC and SPEAKER "</span>);</div><div class="line"> ConnectAudioToCodec();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"><span class="preprocessor">#endif</span></div><div class="line"> <span class="keywordflow">if</span> (strcmp(MainAudioSoundPath,<span class="stringliteral">"PCM"</span>)==0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Connect PCM "</span>);</div><div class="line"> ConnectAudioToPcm();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(MainAudioSoundPath,<span class="stringliteral">"I2S"</span>)==0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Connect I2S"</span>);</div><div class="line"> ConnectAudioToI2s();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(MainAudioSoundPath,<span class="stringliteral">"USB"</span>)==0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Connect USB "</span>);</div><div class="line"> ConnectAudioToUsb();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Error in format could not connect audio"</span>);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">// Connect SW-PCM</span></div><div class="line"> <span class="keywordflow">if</span> (strncmp(AudioTestCase,<span class="stringliteral">"PB"</span>,2)==0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Connect Local Play"</span>);</div><div class="line"> ConnectAudioToFileLocalPlay();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp(AudioTestCase,<span class="stringliteral">"REC"</span>,3)==0)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Connect Local Rec "</span>);</div><div class="line"> ConnectAudioToFileLocalRec();</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Error in format could not connect audio"</span>);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Error in format could not connect audio"</span>);</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Disconnect all streams and connectors</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> DisconnectAllAudio</div><div class="line">(</div><div class="line"> <span class="keywordtype">void</span></div><div class="line">)</div><div class="line">{</div><div class="line"> <span class="keywordflow">if</span> (AudioInputConnectorRef)</div><div class="line"> {</div><div class="line"> <span class="keywordflow">if</span>(FileAudioRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Disconnect %p from connector.%p"</span>, FileAudioRef, AudioInputConnectorRef);</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a6b88df9301038375701e4c15a4c8aaf0">le_audio_Disconnect</a>(AudioInputConnectorRef, FileAudioRef);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span> (FeInRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Disconnect %p from connector.%p"</span>, FeInRef, AudioInputConnectorRef);</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a6b88df9301038375701e4c15a4c8aaf0">le_audio_Disconnect</a>(AudioInputConnectorRef, FeInRef);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(MdmTxAudioRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Disconnect %p from connector.%p"</span>, MdmTxAudioRef, AudioInputConnectorRef);</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a6b88df9301038375701e4c15a4c8aaf0">le_audio_Disconnect</a>(AudioInputConnectorRef, MdmTxAudioRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(AudioOutputConnectorRef)</div><div class="line"> {</div><div class="line"> <span class="keywordflow">if</span>(FileAudioRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Disconnect %p from connector.%p"</span>, FileAudioRef, AudioOutputConnectorRef);</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a6b88df9301038375701e4c15a4c8aaf0">le_audio_Disconnect</a>(AudioOutputConnectorRef, FileAudioRef);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(FeOutRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Disconnect %p from connector.%p"</span>, FeOutRef, AudioOutputConnectorRef);</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a6b88df9301038375701e4c15a4c8aaf0">le_audio_Disconnect</a>(AudioOutputConnectorRef, FeOutRef);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(MdmRxAudioRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Disconnect %p from connector.%p"</span>, MdmRxAudioRef, AudioOutputConnectorRef);</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a6b88df9301038375701e4c15a4c8aaf0">le_audio_Disconnect</a>(AudioOutputConnectorRef, MdmRxAudioRef);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(AudioInputConnectorRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a3f40b13ff980040503927f59bb3e86a9">le_audio_DeleteConnector</a>(AudioInputConnectorRef);</div><div class="line"> AudioInputConnectorRef = NULL;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(AudioOutputConnectorRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#a3f40b13ff980040503927f59bb3e86a9">le_audio_DeleteConnector</a>(AudioOutputConnectorRef);</div><div class="line"> AudioOutputConnectorRef = NULL;</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(FileAudioRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#abafeb411da7b1a14b2d5777fc1d3e394">le_audio_Close</a>(FileAudioRef);</div><div class="line"> FeOutRef = NULL;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(FeInRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#abafeb411da7b1a14b2d5777fc1d3e394">le_audio_Close</a>(FeInRef);</div><div class="line"> FeInRef = NULL;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(FeOutRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#abafeb411da7b1a14b2d5777fc1d3e394">le_audio_Close</a>(FeOutRef);</div><div class="line"> FeOutRef = NULL;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(MdmRxAudioRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#abafeb411da7b1a14b2d5777fc1d3e394">le_audio_Close</a>(MdmRxAudioRef);</div><div class="line"> FeOutRef = NULL;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">if</span>(MdmTxAudioRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__audio__interface_8h.html#abafeb411da7b1a14b2d5777fc1d3e394">le_audio_Close</a>(MdmTxAudioRef);</div><div class="line"> FeOutRef = NULL;</div><div class="line"> }</div><div class="line"> </div><div class="line"> close(AudioFileFd);</div><div class="line"> </div><div class="line"> exit(0);</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Helper.</span></div><div class="line"><span class="comment"> *</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> PrintUsage()</div><div class="line">{</div><div class="line"> <span class="keywordtype">int</span> idx;</div><div class="line"> <span class="keywordtype">bool</span> sandboxed = (getuid() != 0);</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span> * usagePtr[] = {</div><div class="line"> <span class="stringliteral">"Usage of the audioPlaybackRec test is:"</span>,</div><div class="line"> <span class="stringliteral">" execInApp audioPlaybackRec audioPlaybackRecTest <test case>"</span></div><div class="line"> <span class="stringliteral">"[main audio path] [file's name] [option]"</span>,</div><div class="line"> <span class="stringliteral">""</span>,</div><div class="line"> <span class="stringliteral">"Test cases are:"</span>,</div><div class="line"> <span class="stringliteral">" - PB (for Local playback)"</span>,</div><div class="line"> <span class="stringliteral">" - REC (for Local recording)"</span>,</div><div class="line"> <span class="stringliteral">" - PB_SAMPLES (for Local samples play)"</span>,</div><div class="line"> <span class="stringliteral">" - REC_SAMPLES (for Local samples recording) [option]"</span>,</div><div class="line"> <span class="stringliteral">""</span>,</div><div class="line"> <span class="stringliteral">"Main audio paths are: (for file playback/recording only)"</span>,</div><div class="line"><span class="preprocessor">#if (ENABLE_CODEC == 1)</span></div><div class="line"> <span class="stringliteral">" - MIC (for mic/speaker)"</span>,</div><div class="line"><span class="preprocessor">#endif</span></div><div class="line"> <span class="stringliteral">" - PCM (for devkit's codec use, execute 'wm8940_demo --pcm' command)"</span>,</div><div class="line"> <span class="stringliteral">" - I2S (for devkit's codec use, execute 'wm8940_demo --i2s' command)"</span>,</div><div class="line"> <span class="stringliteral">" - USB (for USB)"</span>,</div><div class="line"> <span class="stringliteral">""</span>,</div><div class="line"> <span class="stringliteral">"Options are:"</span>,</div><div class="line"> <span class="stringliteral">" - ChannelNmbr SampleRate BitsPerSample (for REC_SAMPLES)"</span>,</div><div class="line"> <span class="stringliteral">" - AMR AmrMode DTX (for REC in AMR Narrowband format)"</span>,</div><div class="line"> <span class="stringliteral">" - WAV (for REC in WAV format)"</span>,</div><div class="line"> <span class="stringliteral">" - GAIN (for playback gain testing)"</span>,</div><div class="line"> <span class="stringliteral">" - LOOP (to replay a file in loop) (optional)"</span>,</div><div class="line"> <span class="stringliteral">" - PLAY=<timer value> (to replay a file after a delay) (optional)"</span>,</div><div class="line"> <span class="stringliteral">" - RECORD=<timer value> (to record a file after a delay) (optional)"</span>,</div><div class="line"> <span class="stringliteral">" - STOP=<timer value> (to stop a file playback/capture after a delay) (optional)"</span>,</div><div class="line"> <span class="stringliteral">" - PAUSE=<timer value> (to pause a file playback/capture after a delay) (optional)"</span>,</div><div class="line"> <span class="stringliteral">" - RESUME=<timer value> (to resume a file playback/capture after a delay) (optional)"</span>,</div><div class="line"> <span class="stringliteral">" - DISCONNECT=<timer value> (to disconnect connectors and streams"</span></div><div class="line"> <span class="stringliteral">" after a delay) (optional)"</span>,</div><div class="line"> <span class="stringliteral">" - MUTE (for playback MUTE testing)"</span>,</div><div class="line"> <span class="stringliteral">""</span>,</div><div class="line"> <span class="stringliteral">"File's name can be the complete file's path."</span>,</div><div class="line"> };</div><div class="line"> </div><div class="line"> <span class="keywordflow">for</span>(idx = 0; idx < <a class="code" href="le__basics_8h.html#a8d8f28a045f43b477cafb67a99894c07">NUM_ARRAY_MEMBERS</a>(usagePtr); idx++)</div><div class="line"> {</div><div class="line"> <span class="keywordflow">if</span>(sandboxed)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"%s"</span>, usagePtr[idx]);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> fprintf(stderr, <span class="stringliteral">"%s\n"</span>, usagePtr[idx]);</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * The signal event handler function for SIGINT/SIGTERM when process dies.</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> SigHandler</div><div class="line">(</div><div class="line"> <span class="keywordtype">int</span> sigNum</div><div class="line">)</div><div class="line">{</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Disconnect All Audio and end test"</span>);</div><div class="line"> <span class="keywordflow">if</span> (RecPbThreadRef)</div><div class="line"> {</div><div class="line"> <a class="code" href="le__thread_8h.html#a0f1c1b98f354a96e6e31e55a71b58f6a">le_thread_Cancel</a>(RecPbThreadRef);</div><div class="line"> RecPbThreadRef = NULL;</div><div class="line"> }</div><div class="line"> DisconnectAllAudio();</div><div class="line"> exit(EXIT_SUCCESS);</div><div class="line">}</div><div class="line"> </div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span><span class="comment"></span></div><div class="line"><span class="comment">/**</span></div><div class="line"><span class="comment"> * Initialize the test component.</span></div><div class="line"><span class="comment"> * Start application with 'app start audioPlaybackRec' command</span></div><div class="line"><span class="comment"> * Execute application with 'execInApp audioPlaybackRec audioPlaybackRecTest (see PrintUsage())'</span></div><div class="line"><span class="comment"> */</span></div><div class="line"><span class="comment">//--------------------------------------------------------------------------------------------------</span></div><div class="line"><a class="code" href="le__event_loop_8h.html#abdb9187a56836a93d19cc793cbd4b7ec">COMPONENT_INIT</a></div><div class="line">{</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"Init"</span>);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (<a class="code" href="le__args_8h.html#a6fbbeb423104e6eb92fe47ef42b7310a">le_arg_NumArgs</a>() >= 1)</div><div class="line"> {</div><div class="line"> <span class="comment">// Register a signal event handler for SIGINT when user interrupts/terminates process</span></div><div class="line"> signal(SIGINT, SigHandler);</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"======== Start Audio implementation Test (audioPlaybackRecTest) ========"</span>);</div><div class="line"> </div><div class="line"> AudioTestCase = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(0);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">" Test case.%s"</span>, AudioTestCase);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span>(<a class="code" href="le__args_8h.html#a6fbbeb423104e6eb92fe47ef42b7310a">le_arg_NumArgs</a>() >= 3)</div><div class="line"> {</div><div class="line"> MainAudioSoundPath = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(1);</div><div class="line"> AudioFilePath = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(2);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">" Main audio path.%s"</span>, MainAudioSoundPath);</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">" Audio file [%s]"</span>, AudioFilePath);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> ( (strncmp(AudioTestCase,<span class="stringliteral">"REC_SAMPLES"</span>,11)==0) ||</div><div class="line"> (strncmp(AudioTestCase,<span class="stringliteral">"PB_SAMPLES"</span>,10)==0) )</div><div class="line"> {</div><div class="line"> <span class="keywordflow">if</span>(<a class="code" href="le__args_8h.html#a6fbbeb423104e6eb92fe47ef42b7310a">le_arg_NumArgs</a>() < 6)</div><div class="line"> {</div><div class="line"> PrintUsage();</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"EXIT audioPlaybackRec"</span>);</div><div class="line"> exit(EXIT_FAILURE);</div><div class="line"> }</div><div class="line"> ChannelsCount = atoi(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(3));</div><div class="line"> SampleRate = atoi(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(4));</div><div class="line"> BitsPerSample = atoi(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(5));</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">" Get/Play PCM samples with ChannelsCount.%d SampleRate.%d BitsPerSample.%d"</span>,</div><div class="line"> ChannelsCount, SampleRate, BitsPerSample);</div><div class="line"> NextOptionArg = 6;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp(AudioTestCase,<span class="stringliteral">"REC"</span>, 3)==0)</div><div class="line"> {</div><div class="line"> <span class="keyword">const</span> <span class="keywordtype">char</span>* recFormat = <a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(3);</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (strncmp(recFormat,<span class="stringliteral">"WAV"</span>, 3)==0)</div><div class="line"> {</div><div class="line"> AudioFormat = <a class="code" href="le__audio__interface_8h.html#a0ad2f5012ed700af1892f82e4af5989daacfeef297c63db7626c586ebe4d5e1c2">LE_AUDIO_WAVE</a>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strncmp(recFormat,<span class="stringliteral">"AMR"</span>, 3)==0)</div><div class="line"> {</div><div class="line"> AudioFormat = <a class="code" href="le__audio__interface_8h.html#a0ad2f5012ed700af1892f82e4af5989da51bd6de676a1d6a82923c7383b047893">LE_AUDIO_AMR</a>;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> PrintUsage();</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"EXIT audioPlaybackRec"</span>);</div><div class="line"> exit(EXIT_FAILURE);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="keywordflow">if</span> (AudioFormat == <a class="code" href="le__audio__interface_8h.html#a0ad2f5012ed700af1892f82e4af5989daacfeef297c63db7626c586ebe4d5e1c2">LE_AUDIO_WAVE</a>)</div><div class="line"> {</div><div class="line"> NextOptionArg = 4;</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> AmrMode = atoi(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(4));</div><div class="line"> DtxActivation = atoi(<a class="code" href="le__args_8h.html#a5ebca8229facd069785639cb3c1e273a">le_arg_GetArg</a>(5));</div><div class="line"> NextOptionArg = 6;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> NextOptionArg = 3;</div><div class="line"> }</div><div class="line"> </div><div class="line"> </div><div class="line"> OptionTimerRef = <a class="code" href="le__timer_8h.html#aee41169a210378b369f440cf99146522">le_timer_Create</a>(<span class="stringliteral">"OptionTimer"</span>);</div><div class="line"> <a class="code" href="le__timer_8h.html#a8fb341f11e0da2692453df997613cb8e">le_timer_SetHandler</a>(OptionTimerRef, OptionTimerHandler);</div><div class="line"> </div><div class="line"> ConnectAudio();</div><div class="line"> </div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"======== Audio implementation Test (audioPlaybackRec) started successfully ========"</span>);</div><div class="line"> }</div><div class="line"> <span class="keywordflow">else</span></div><div class="line"> {</div><div class="line"> PrintUsage();</div><div class="line"> <a class="code" href="le__log_8h.html#a4ebab29f40ee8eaaa87205fe3f9aaa13">LE_INFO</a>(<span class="stringliteral">"EXIT audioPlaybackRec"</span>);</div><div class="line"> exit(EXIT_FAILURE);</div><div class="line"> }</div><div class="line">}</div><div class="line"> </div></pre><!-- fragment --> </div></div>
<br clear="left"/>
</div>
</div>
<script src="resources/js/tree.jquery.js" type="text/javascript"></script>
<script src="resources/js/jquery.cookie.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<link href="resources/css/perfect-scrollbar.min.css" rel="stylesheet"/>
<script src="resources/js/perfect-scrollbar.jquery.min.js"></script>
</body>
</html>