Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > media > updates > by-pkgid > 18785641029f14f23cccc82925607ace > files > 6

libalsa2-docs-0.9.0-0.14rc7.1mdk.ppc.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Example Documentation</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindex" href="examples.html">Examples</a> &nbsp; </center>
<hr><h1>/test/timer.c</h1>
<p>
<a name="example_test_timer"></a>
<p>
<div class="fragment"><pre><span class="preprocessor">#include &lt;stdio.h&gt;</span>
<span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<span class="preprocessor">#include &lt;string.h&gt;</span>
<span class="preprocessor">#include &lt;sys/time.h&gt;</span>
<span class="preprocessor">#include "../include/asoundlib.h"</span>

<span class="keywordtype">void</span> show_status(<span class="keywordtype">void</span> *handle)
{
        <span class="keywordtype">int</span> err;
        <a class="code" href="group___timer.html#a3">snd_timer_status_t</a> *status;
        
        <a name="a0"></a><a class="code" href="group___timer.html#a77">snd_timer_status_alloca</a>(&amp;status);
        <span class="keywordflow">if</span> ((err = <a name="a1"></a><a class="code" href="group___timer.html#a22">snd_timer_status</a>(handle, status)) &lt; 0) {
                fprintf(stderr, <span class="stringliteral">"timer status %i (%s)\n"</span>, err, <a name="a2"></a><a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                <span class="keywordflow">return</span>;
        }
        printf(<span class="stringliteral">"STATUS:\n"</span>);
        printf(<span class="stringliteral">"  resolution = %li\n"</span>, <a name="a3"></a><a class="code" href="group___timer.html#a65">snd_timer_status_get_resolution</a>(status));
        printf(<span class="stringliteral">"  lost = %li\n"</span>, <a name="a4"></a><a class="code" href="group___timer.html#a66">snd_timer_status_get_lost</a>(status));
        printf(<span class="stringliteral">"  overrun = %li\n"</span>, <a name="a5"></a><a class="code" href="group___timer.html#a67">snd_timer_status_get_overrun</a>(status));
        printf(<span class="stringliteral">"  queue = %li\n"</span>, <a name="a6"></a><a class="code" href="group___timer.html#a68">snd_timer_status_get_queue</a>(status));
}

<span class="keywordtype">void</span> read_loop(<span class="keywordtype">void</span> *handle, <span class="keywordtype">int</span> master_ticks, <span class="keywordtype">int</span> timeout)
{
        <span class="keywordtype">int</span> count, err;
        <span class="keyword">struct </span>pollfd *fds;
        <a name="_a7"></a><a class="code" href="struct__snd__timer__read.html">snd_timer_read_t</a> tr;
        
        count = <a name="a8"></a><a class="code" href="group___timer.html#a17">snd_timer_poll_descriptors_count</a>(handle);
        fds = calloc(count, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> pollfd));
        <span class="keywordflow">if</span> (fds == NULL) {
                fprintf(stderr, <span class="stringliteral">"malloc error\n"</span>);
                exit(EXIT_FAILURE);
        }
        <span class="keywordflow">while</span> (master_ticks-- &gt; 0) {
                <span class="keywordflow">if</span> ((err = <a name="a9"></a><a class="code" href="group___timer.html#a18">snd_timer_poll_descriptors</a>(handle, fds, count)) &lt; 0) {
                        fprintf(stderr, <span class="stringliteral">"snd_timer_poll_descriptors error: %s\n"</span>, <a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                        exit(EXIT_FAILURE);
                }
                <span class="keywordflow">if</span> ((err = poll(fds, count, timeout)) &lt; 0) {
                        fprintf(stderr, <span class="stringliteral">"poll error %i (%s)\n"</span>, err, strerror(err));
                        exit(EXIT_FAILURE);
                }
                <span class="keywordflow">if</span> (err == 0) {
                        fprintf(stderr, <span class="stringliteral">"timer time out!!\n"</span>);
                        exit(EXIT_FAILURE);
                }
                <span class="keywordflow">while</span> (<a name="a10"></a><a class="code" href="group___timer.html#a26">snd_timer_read</a>(handle, &amp;tr, <span class="keyword">sizeof</span>(tr)) == <span class="keyword">sizeof</span>(tr)) {
                        printf(<span class="stringliteral">"TIMER: resolution = %u, ticks = %u\n"</span>,
                                tr.resolution, tr.ticks);
                }
        }
        free(fds);
}

<span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])
{
        <span class="keywordtype">int</span> idx, err;
        <span class="keywordtype">int</span> <span class="keyword">class </span>= <a class="code" href="group___timer.html#a78a21">SND_TIMER_CLASS_GLOBAL</a>;
        <span class="keywordtype">int</span> sclass = <a class="code" href="group___timer.html#a78a19">SND_TIMER_CLASS_NONE</a>;
        <span class="keywordtype">int</span> card = 0;
        <span class="keywordtype">int</span> device = <a class="code" href="group___timer.html#a71">SND_TIMER_GLOBAL_SYSTEM</a>;
        <span class="keywordtype">int</span> subdevice = 0;
        <span class="keywordtype">int</span> list = 0;
        snd_timer_t *handle;
        <a class="code" href="group___timer.html#a0">snd_timer_id_t</a> *id;
        <a class="code" href="group___timer.html#a1">snd_timer_info_t</a> *info;
        <a class="code" href="group___timer.html#a2">snd_timer_params_t</a> *params;
        <span class="keywordtype">char</span> timername[64];

        <a name="a11"></a><a class="code" href="group___timer.html#a74">snd_timer_id_alloca</a>(&amp;id);
        <a name="a12"></a><a class="code" href="group___timer.html#a75">snd_timer_info_alloca</a>(&amp;info);
        <a name="a13"></a><a class="code" href="group___timer.html#a76">snd_timer_params_alloca</a>(&amp;params);

        idx = 1;
        <span class="keywordflow">while</span> (idx &lt; argc) {
                <span class="keywordflow">if</span> (!strncmp(argv[idx], <span class="stringliteral">"class="</span>, 5)) {
                        <span class="keyword">class </span>= atoi(argv[idx]+6);
                } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strncmp(argv[idx], <span class="stringliteral">"sclass="</span>, 6)) {
                        sclass = atoi(argv[idx]+7);
                } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strncmp(argv[idx], <span class="stringliteral">"card="</span>, 5)) {
                        card = atoi(argv[idx]+5);
                } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strncmp(argv[idx], <span class="stringliteral">"device="</span>, 7)) {
                        device = atoi(argv[idx]+7);
                } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strncmp(argv[idx], <span class="stringliteral">"subdevice="</span>, 10)) {
                        subdevice = atoi(argv[idx]+10);
                } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!strcmp(argv[idx], <span class="stringliteral">"list"</span>)) {
                        list = 1;
                }
                idx++;
        }
        <span class="keywordflow">if</span> (<span class="keyword">class </span>== <a class="code" href="group___timer.html#a78a20">SND_TIMER_CLASS_SLAVE</a> &amp;&amp; sclass == <a class="code" href="group___timer.html#a79a25">SND_TIMER_SCLASS_NONE</a>) {
                fprintf(stderr, <span class="stringliteral">"slave class is not set\n"</span>);
                exit(EXIT_FAILURE);
        }
        <span class="keywordflow">if</span> (list) {
                snd_timer_query_t *qhandle;
                <span class="keywordflow">if</span> ((err = <a name="a14"></a><a class="code" href="group___timer.html#a10">snd_timer_query_open</a>(&amp;qhandle, <span class="stringliteral">"hw"</span>, 0)) &lt; 0) {
                        fprintf(stderr, <span class="stringliteral">"snd_timer_query_open error: %s\n"</span>, <a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                        exit(EXIT_FAILURE);
                }
                <a name="a15"></a><a class="code" href="group___timer.html#a31">snd_timer_id_set_class</a>(id, <a class="code" href="group___timer.html#a78a19">SND_TIMER_CLASS_NONE</a>);
                <span class="keywordflow">while</span> (1) {
                        <span class="keywordflow">if</span> ((err = <a name="a16"></a><a class="code" href="group___timer.html#a13">snd_timer_query_next_device</a>(qhandle, id)) &lt; 0) {
                                fprintf(stderr, <span class="stringliteral">"timer next device error: %s\n"</span>, <a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                                <span class="keywordflow">break</span>;
                        }
                        <span class="keywordflow">if</span> (<a name="a17"></a><a class="code" href="group___timer.html#a32">snd_timer_id_get_class</a>(id) &lt; 0)
                                <span class="keywordflow">break</span>;
                        printf(<span class="stringliteral">"Timer device: class %i, sclass %i, card %i, device %i, subdevice %i\n"</span>,
                                        <a class="code" href="group___timer.html#a32">snd_timer_id_get_class</a>(id),
                                        <a name="a18"></a><a class="code" href="group___timer.html#a34">snd_timer_id_get_sclass</a>(id),
                                        <a name="a19"></a><a class="code" href="group___timer.html#a36">snd_timer_id_get_card</a>(id),
                                        <a name="a20"></a><a class="code" href="group___timer.html#a38">snd_timer_id_get_device</a>(id),
                                        <a name="a21"></a><a class="code" href="group___timer.html#a40">snd_timer_id_get_subdevice</a>(id));
                }
                <a name="a22"></a><a class="code" href="group___timer.html#a12">snd_timer_query_close</a>(qhandle);
                exit(EXIT_SUCCESS);
        }
        sprintf(timername, <span class="stringliteral">"hw:CLASS=%i,SCLASS=%i,CARD=%i,DEV=%i,SUBDEV=%i"</span>, <span class="keyword">class</span>, sclass, card, device, subdevice);
        <span class="keywordflow">if</span> ((err = <a name="a23"></a><a class="code" href="group___timer.html#a14">snd_timer_open</a>(&amp;handle, timername, <a class="code" href="group___timer.html#a73">SND_TIMER_OPEN_NONBLOCK</a>))&lt;0) {
                fprintf(stderr, <span class="stringliteral">"timer open %i (%s)\n"</span>, err, <a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                exit(EXIT_FAILURE);
        }
        printf(<span class="stringliteral">"Using timer class %i, slave class %i, card %i, device %i, subdevice %i\n"</span>, <span class="keyword">class</span>, sclass, card, device, subdevice);
        <span class="keywordflow">if</span> ((err = <a name="a24"></a><a class="code" href="group___timer.html#a20">snd_timer_info</a>(handle, info)) &lt; 0) {
                fprintf(stderr, <span class="stringliteral">"timer info %i (%s)\n"</span>, err, <a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                exit(0);
        }
        printf(<span class="stringliteral">"Timer info:\n"</span>);
        printf(<span class="stringliteral">"  slave = %s\n"</span>, <a name="a25"></a><a class="code" href="group___timer.html#a45">snd_timer_info_is_slave</a>(info) ? <span class="stringliteral">"yes"</span> : <span class="stringliteral">"no"</span>);
        printf(<span class="stringliteral">"  card = %i\n"</span>, <a name="a26"></a><a class="code" href="group___timer.html#a46">snd_timer_info_get_card</a>(info));
        printf(<span class="stringliteral">"  id = '%s'\n"</span>, <a name="a27"></a><a class="code" href="group___timer.html#a47">snd_timer_info_get_id</a>(info));
        printf(<span class="stringliteral">"  name = '%s'\n"</span>, <a name="a28"></a><a class="code" href="group___timer.html#a48">snd_timer_info_get_name</a>(info));
        printf(<span class="stringliteral">"  max ticks = %li\n"</span>, <a name="a29"></a><a class="code" href="group___timer.html#a49">snd_timer_info_get_ticks</a>(info));
        printf(<span class="stringliteral">"  average resolution = %li\n"</span>, <a name="a30"></a><a class="code" href="group___timer.html#a50">snd_timer_info_get_resolution</a>(info));
        <a name="a31"></a><a class="code" href="group___timer.html#a55">snd_timer_params_set_auto_start</a>(params, 1);
        <span class="keywordflow">if</span> (!<a class="code" href="group___timer.html#a45">snd_timer_info_is_slave</a>(info)) {
                <a name="a32"></a><a class="code" href="group___timer.html#a56">snd_timer_params_set_ticks</a>(params, (1000000000 / <a class="code" href="group___timer.html#a50">snd_timer_info_get_resolution</a>(info)) / 50); <span class="comment">/* 50Hz */</span>
                <span class="keywordflow">if</span> (<a name="a33"></a><a class="code" href="group___timer.html#a57">snd_timer_params_get_ticks</a>(params) &lt; 1)
                        <a class="code" href="group___timer.html#a56">snd_timer_params_set_ticks</a>(params, 1);
                printf(<span class="stringliteral">"Using %li tick(s)\n"</span>, <a class="code" href="group___timer.html#a57">snd_timer_params_get_ticks</a>(params));
        } <span class="keywordflow">else</span> {
                <a class="code" href="group___timer.html#a56">snd_timer_params_set_ticks</a>(params, 1);
        }
        <span class="keywordflow">if</span> ((err = <a name="a34"></a><a class="code" href="group___timer.html#a21">snd_timer_params</a>(handle, params)) &lt; 0) {
                fprintf(stderr, <span class="stringliteral">"timer params %i (%s)\n"</span>, err, <a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                exit(0);
        }
        show_status(handle);
        <span class="keywordflow">if</span> ((err = <a name="a35"></a><a class="code" href="group___timer.html#a23">snd_timer_start</a>(handle)) &lt; 0) {
                fprintf(stderr, <span class="stringliteral">"timer start %i (%s)\n"</span>, err, <a class="code" href="group___error.html#a2">snd_strerror</a>(err));
                exit(EXIT_FAILURE);
        }
        read_loop(handle, 25, <a class="code" href="group___timer.html#a45">snd_timer_info_is_slave</a>(info) ? 10000 : 25);
        show_status(handle);
        <a name="a36"></a><a class="code" href="group___timer.html#a16">snd_timer_close</a>(handle);
        printf(<span class="stringliteral">"Done\n"</span>);
        <span class="keywordflow">return</span> EXIT_SUCCESS;
}
</pre></div><hr><address style="align: right;"><small>Generated on Wed Apr 2 16:06:31 2003 for ALSA project - the C library reference by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.18 </small></address>
</body>
</html>