Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 191a8a9815631149211a94f0cdc8f64d > files > 116

libnjb-devel-2.2.7-1.fc14.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libnjb: /builddir/build/BUILD/libnjb-2.2.7/src/protocol.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">libnjb&#160;<span id="projectnumber">2.2.7</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="dir_55a6aa4feb4da29582c8781b5e808e47.html">src</a>      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#define-members">Defines</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle">
<div class="title">protocol.c File Reference</div>  </div>
</div>
<div class="contents">
<div class="textblock"><code>#include &quot;config.h&quot;</code><br/>
<code>#include &lt;unistd.h&gt;</code><br/>
<code>#include &lt;stdio.h&gt;</code><br/>
<code>#include &lt;stdlib.h&gt;</code><br/>
<code>#include &lt;fcntl.h&gt;</code><br/>
<code>#include &lt;string.h&gt;</code><br/>
<code>#include &lt;errno.h&gt;</code><br/>
<code>#include &quot;<a class="el" href="libnjb_8h_source.html">libnjb.h</a>&quot;</code><br/>
<code>#include &quot;protocol.h&quot;</code><br/>
<code>#include &quot;byteorder.h&quot;</code><br/>
<code>#include &quot;njb_error.h&quot;</code><br/>
<code>#include &quot;usb_io.h&quot;</code><br/>
<code>#include &quot;ioutil.h&quot;</code><br/>
<code>#include &quot;defs.h&quot;</code><br/>
<code>#include &quot;base.h&quot;</code><br/>
<code>#include &quot;eax.h&quot;</code><br/>
<code>#include &quot;songid.h&quot;</code><br/>
<code>#include &quot;datafile.h&quot;</code><br/>
<code>#include &quot;njbtime.h&quot;</code><br/>
<code>#include &quot;playlist.h&quot;</code><br/>
</div><table class="memberdecls">
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>(a, b)</td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#a41a4352e7fba316a9eb6262546e05e4a">njb_init_state</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#a1d6bdb13a1de6c49b04a081502bcf9d4">njb_set_library_counter</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int64_t count)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#ad4c55baa3faa179396f2f76ce9fbd5ca">njb_get_library_counter</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjblibctr__t.html">njblibctr_t</a> *lcount)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#ae959b6717b8bd6b3bcd61447e8ddda17">njb_ping</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#ae5ea9fbb3859ec50540bcd9cf4a3f328">njb_verify_last_command</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#aded817a86b7cee20247ebae531626574">njb_capture</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, int which)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#ab71c71bdf6131d176ad3572e72ef190b">njb_get_track_tag_header</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbttaghdr__t.html">njbttaghdr_t</a> *tagh, int cmd)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3609e13e4b3529219bf081b5fe45bed9"></a><!-- doxytag: member="protocol.c::njb_get_track_tag" ref="a3609e13e4b3529219bf081b5fe45bed9" args="(njb_t *njb, njbttaghdr_t *tagh)" -->
<a class="el" href="structnjb__songid__struct.html">njb_songid_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>njb_get_track_tag</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbttaghdr__t.html">njbttaghdr_t</a> *tagh)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#afb3d4c4e2f9fe7de9786aa47bc92da12">njb_get_playlist_header</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbplhdr__t.html">njbplhdr_t</a> *plh, int cmd)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae96bd29ac7ca0221d3978483c0393a64"></a><!-- doxytag: member="protocol.c::njb_get_playlist" ref="ae96bd29ac7ca0221d3978483c0393a64" args="(njb_t *njb, njbplhdr_t *plh)" -->
<a class="el" href="structnjb__playlist__struct.html">njb_playlist_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>njb_get_playlist</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbplhdr__t.html">njbplhdr_t</a> *plh)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#a7f0a8d1560f23483fe722fb51f634fe8">njb_get_disk_usage</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int64_t *total, u_int64_t *free_bytes)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1c4d1b619e143a817df8699ffe625a1f"></a><!-- doxytag: member="protocol.c::njb_get_owner_string" ref="a1c4d1b619e143a817df8699ffe625a1f" args="(njb_t *njb, owner_string name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_get_owner_string</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="libnjb_8h.html#aed0d26175297ce40dc5e81f9248c44a5">owner_string</a> name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a657ce995c4b9fa5330705af71c2a1eef"></a><!-- doxytag: member="protocol.c::njb_set_owner_string" ref="a657ce995c4b9fa5330705af71c2a1eef" args="(njb_t *njb, owner_string name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_set_owner_string</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="libnjb_8h.html#aed0d26175297ce40dc5e81f9248c44a5">owner_string</a> name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#a1bd23c272154f003bd55075b352be5fc">njb_get_datafile_header</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbdfhdr__t.html">njbdfhdr_t</a> *dfh, int cmd)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a45153920c77cdbd2ea34f017db117c9f"></a><!-- doxytag: member="protocol.c::njb_get_datafile_tag" ref="a45153920c77cdbd2ea34f017db117c9f" args="(njb_t *njb, njbdfhdr_t *dfh)" -->
<a class="el" href="structnjb__datafile__struct.html">njb_datafile_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>njb_get_datafile_tag</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbdfhdr__t.html">njbdfhdr_t</a> *dfh)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">u_int32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#af1b5132b6c3f0c9f408a77cdc5e64f58">njb_receive_file_block</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t offset, u_int32_t bsize, void *bp)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a06c6da30c10cfd7073e923128f78f700"></a><!-- doxytag: member="protocol.c::njb_request_file" ref="a06c6da30c10cfd7073e923128f78f700" args="(njb_t *njb, u_int32_t fileid)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_request_file</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t fileid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a535fb967481cce0ab36736cf16425807"></a><!-- doxytag: member="protocol.c::njb_transfer_complete" ref="a535fb967481cce0ab36736cf16425807" args="(njb_t *njb)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_transfer_complete</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5642f1b72cc2bca1756a16e891e625ba"></a><!-- doxytag: member="protocol.c::njb_send_track_tag" ref="a5642f1b72cc2bca1756a16e891e625ba" args="(njb_t *njb, njbttaghdr_t *tagh, void *tag)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_send_track_tag</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbttaghdr__t.html">njbttaghdr_t</a> *tagh, void *tag)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a307cebb4f060584a789fec4251d46fc9"></a><!-- doxytag: member="protocol.c::njb_send_datafile_tag" ref="a307cebb4f060584a789fec4251d46fc9" args="(njb_t *njb, njbdfhdr_t *dfh, void *tag)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_send_datafile_tag</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbdfhdr__t.html">njbdfhdr_t</a> *dfh, void *tag)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98d4b0e19eb96fffd2483cf161175d46"></a><!-- doxytag: member="protocol.c::njb_send_file_block" ref="a98d4b0e19eb96fffd2483cf161175d46" args="(njb_t *njb, void *data, u_int32_t blocksize)" -->
u_int32_t&#160;</td><td class="memItemRight" valign="bottom"><b>njb_send_file_block</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, void *data, u_int32_t blocksize)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e7c0dbb3313038d3fbba2601ec71083"></a><!-- doxytag: member="protocol.c::njb_stop_play" ref="a1e7c0dbb3313038d3fbba2601ec71083" args="(njb_t *njb)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_stop_play</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef62ca7173935b2a757692c8e3671c09"></a><!-- doxytag: member="protocol.c::njb_get_eax_size" ref="aef62ca7173935b2a757692c8e3671c09" args="(njb_t *njb, u_int32_t *size)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_get_eax_size</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t *size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#afe8b51e10cf1a2a5d313a4c273133278">njb_read_eaxtypes</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t size)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structnjb__eax__struct.html">njb_eax_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#ad9259496f4562d52937c0296d8a6812c">njb_get_nexteax</a> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42a3928004c71e9c2ef1f3a7a6eaa7a9"></a><!-- doxytag: member="protocol.c::njb_get_time" ref="a42a3928004c71e9c2ef1f3a7a6eaa7a9" args="(njb_t *njb)" -->
<a class="el" href="structnjb__time__struct.html">njb_time_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>njb_get_time</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7e0f2f087cf0d48c57243a45e55f989e"></a><!-- doxytag: member="protocol.c::njb_set_time" ref="a7e0f2f087cf0d48c57243a45e55f989e" args="(njb_t *njb, njb_time_t *time)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_set_time</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjb__time__struct.html">njb_time_t</a> *time)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3be9651166f9196520d1176bb410e28c"></a><!-- doxytag: member="protocol.c::njb_create_playlist" ref="a3be9651166f9196520d1176bb410e28c" args="(njb_t *njb, char *name, u_int32_t *plid)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_create_playlist</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, char *name, u_int32_t *plid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa820e84f075d20c2bf5f7ee0842e764c"></a><!-- doxytag: member="protocol.c::njb_delete_playlist" ref="aa820e84f075d20c2bf5f7ee0842e764c" args="(njb_t *njb, u_int32_t plid)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_delete_playlist</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t plid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a11b3f1e5f7377969b13fc9e2c62de51a"></a><!-- doxytag: member="protocol.c::njb_rename_playlist" ref="a11b3f1e5f7377969b13fc9e2c62de51a" args="(njb_t *njb, u_int32_t plid, char *name)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_rename_playlist</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t plid, char *name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a291bc9536a7398c04698e05dbe5b3183"></a><!-- doxytag: member="protocol.c::njb_add_track_to_playlist" ref="a291bc9536a7398c04698e05dbe5b3183" args="(njb_t *njb, u_int32_t plid, u_int32_t trid)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_add_track_to_playlist</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t plid, u_int32_t trid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9df6b2a790fc605e438679fea5a0dbb7"></a><!-- doxytag: member="protocol.c::njb_add_multiple_tracks_to_playlist" ref="a9df6b2a790fc605e438679fea5a0dbb7" args="(njb_t *njb, u_int32_t plid, u_int32_t *trids, u_int16_t ntracks)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_add_multiple_tracks_to_playlist</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t plid, u_int32_t *trids, u_int16_t ntracks)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a74a7c26c79dc01f2c2d0df3e7fbaf03a"></a><!-- doxytag: member="protocol.c::njb_delete_track" ref="a74a7c26c79dc01f2c2d0df3e7fbaf03a" args="(njb_t *njb, u_int32_t trackid)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_delete_track</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t trackid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6217774df8d7882441876538a775e5c0"></a><!-- doxytag: member="protocol.c::njb_delete_datafile" ref="a6217774df8d7882441876538a775e5c0" args="(njb_t *njb, u_int32_t fileid)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_delete_datafile</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t fileid)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2d1382cfd9ed878d24c0a3358306b9d"></a><!-- doxytag: member="protocol.c::njb_play_or_queue" ref="aa2d1382cfd9ed878d24c0a3358306b9d" args="(njb_t *njb, u_int32_t trackid, int cmd)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_play_or_queue</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int32_t trackid, int cmd)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a385e3038c0bf270d0f1b58d000b817d7"></a><!-- doxytag: member="protocol.c::njb_elapsed_time" ref="a385e3038c0bf270d0f1b58d000b817d7" args="(njb_t *njb, u_int16_t *elapsed, int *change)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_elapsed_time</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int16_t *elapsed, int *change)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41859540c6580c0e7deff489dcc35318"></a><!-- doxytag: member="protocol.c::njb_replace_track_tag" ref="a41859540c6580c0e7deff489dcc35318" args="(njb_t *njb, njbttaghdr_t *tagh, void *tag)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_replace_track_tag</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, <a class="el" href="structnjbttaghdr__t.html">njbttaghdr_t</a> *tagh, void *tag)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1173ecd2403e2ac96e5ddaf7a89d43b5"></a><!-- doxytag: member="protocol.c::njb_adjust_sound" ref="a1173ecd2403e2ac96e5ddaf7a89d43b5" args="(njb_t *njb, u_int8_t effect, int16_t value)" -->
int&#160;</td><td class="memItemRight" valign="bottom"><b>njb_adjust_sound</b> (<a class="el" href="structnjb__struct.html">njb_t</a> *njb, u_int8_t effect, int16_t value)</td></tr>
<tr><td colspan="2"><h2><a name="var-members"></a>
Variables</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="protocol_8c.html#a60db410c9e82d9e61b1bf0be607922ed">__sub_depth</a></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>This file contains the major parts of the NJB1 (OaSIS) protocol for all jukebox functionality. </p>
</div><hr/><h2>Define Documentation</h2>
<a class="anchor" id="a892c9eb5d494fde6084ddb736f307a29"></a><!-- doxytag: member="protocol.c::NJB_STATUS" ref="a892c9eb5d494fde6084ddb736f307a29" args="(a, b)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define NJB_STATUS</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">a, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">b&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">{ \
        <span class="keywordtype">char</span> *s = njb_status_string(b);\
        njb_error_add_string(a,subroutinename,s);\
        free (s); \
}
</pre></div><p>This returns the string representing an internal NJB1 error code. </p>

<p>Referenced by <a class="el" href="protocol_8c.html#a1bd23c272154f003bd55075b352be5fc">njb_get_datafile_header()</a>, <a class="el" href="protocol_8c.html#a7f0a8d1560f23483fe722fb51f634fe8">njb_get_disk_usage()</a>, <a class="el" href="protocol_8c.html#ad4c55baa3faa179396f2f76ce9fbd5ca">njb_get_library_counter()</a>, <a class="el" href="protocol_8c.html#afb3d4c4e2f9fe7de9786aa47bc92da12">njb_get_playlist_header()</a>, <a class="el" href="protocol_8c.html#ab71c71bdf6131d176ad3572e72ef190b">njb_get_track_tag_header()</a>, <a class="el" href="protocol_8c.html#ae959b6717b8bd6b3bcd61447e8ddda17">njb_ping()</a>, <a class="el" href="protocol_8c.html#afe8b51e10cf1a2a5d313a4c273133278">njb_read_eaxtypes()</a>, <a class="el" href="protocol_8c.html#af1b5132b6c3f0c9f408a77cdc5e64f58">njb_receive_file_block()</a>, and <a class="el" href="protocol_8c.html#ae5ea9fbb3859ec50540bcd9cf4a3f328">njb_verify_last_command()</a>.</p>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="aded817a86b7cee20247ebae531626574"></a><!-- doxytag: member="protocol.c::njb_capture" ref="aded817a86b7cee20247ebae531626574" args="(njb_t *njb, int which)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_capture </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>which</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This function captures the NJB1 device.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>is a pointer to the jukebox object to use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, -1 on failure. </dd></dl>

<p>References <a class="el" href="group__errors.html#ga5c208b472a9c60a87594ce1bfb242dc2">EO_BADSTATUS</a>, <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="group__basic.html#ga023eb258743b5961ec1b85cbd62a55cb">NJB_Capture()</a>, and <a class="el" href="group__basic.html#ga69d4034384f1bd033ed2c9ba7a9b32d4">NJB_Release()</a>.</p>

</div>
</div>
<a class="anchor" id="a1bd23c272154f003bd55075b352be5fc"></a><!-- doxytag: member="protocol.c::njb_get_datafile_header" ref="a1bd23c272154f003bd55075b352be5fc" args="(njb_t *njb, njbdfhdr_t *dfh, int cmd)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_get_datafile_header </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structnjbdfhdr__t.html">njbdfhdr_t</a> *&#160;</td>
          <td class="paramname"><em>dfh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cmd</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Retrieves a datafile header from the NJB1</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on OK, -1 on error, -2 means the last header has already been returned. </dd></dl>

<p>References <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#afc49aa397ec35bd1d608d2afbdfeded1">njb1_bytes_to_32bit()</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

</div>
</div>
<a class="anchor" id="a7f0a8d1560f23483fe722fb51f634fe8"></a><!-- doxytag: member="protocol.c::njb_get_disk_usage" ref="a7f0a8d1560f23483fe722fb51f634fe8" args="(njb_t *njb, u_int64_t *total, u_int64_t *free_bytes)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_get_disk_usage </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u_int64_t *&#160;</td>
          <td class="paramname"><em>total</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u_int64_t *&#160;</td>
          <td class="paramname"><em>free_bytes</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get disk usage for the NJB1</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on OK, -1 on failure, -2 means "try again" </dd></dl>

<p>References <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#a493611d5663d3a79767c8a11b7b601e7">njb1_bytes_to_64bit()</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="group__basic.html#gab45cd3177a295ea8604423080e7e62ed">NJB_Get_Disk_Usage()</a>, and <a class="el" href="group__datatagapi.html#ga31c21abd0c41827557fa14b13b496d5e">NJB_Send_File()</a>.</p>

</div>
</div>
<a class="anchor" id="ad4c55baa3faa179396f2f76ce9fbd5ca"></a><!-- doxytag: member="protocol.c::njb_get_library_counter" ref="ad4c55baa3faa179396f2f76ce9fbd5ca" args="(njb_t *njb, njblibctr_t *lcount)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_get_library_counter </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structnjblibctr__t.html">njblibctr_t</a> *&#160;</td>
          <td class="paramname"><em>lcount</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This function gets the library counter from the device. The library counter is sent back and forth to the device to indicate if something in the library as changed.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>is a pointer to the jukebox object to use.  is a pointer to the current library counter to get from the device. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, -1 on failure. </dd></dl>

<p>References <a class="el" href="ioutil_8c.html#ab37e1a214ef2b2e62314d95f68e216a4">data_dump()</a>, <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#a493611d5663d3a79767c8a11b7b601e7">njb1_bytes_to_64bit()</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="group__basic.html#ga023eb258743b5961ec1b85cbd62a55cb">NJB_Capture()</a>, and <a class="el" href="procedure_8c.html#af77a8af68d57e51d6b7959d696954e07">NJB_Handshake()</a>.</p>

</div>
</div>
<a class="anchor" id="ad9259496f4562d52937c0296d8a6812c"></a><!-- doxytag: member="protocol.c::njb_get_nexteax" ref="ad9259496f4562d52937c0296d8a6812c" args="(njb_t *njb)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structnjb__eax__struct.html">njb_eax_t</a>* njb_get_nexteax </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This retrieves an EAX effect from the list of effects read in by the previous functions.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>a pointer to the NJB object to use </td></tr>
  </table>
  </dd>
</dl>

<p>References <a class="el" href="structnjb__eax__struct.html#a533be0dfe083727c31caf49e2ef3d33e">njb_eax_struct::next</a>, and <a class="el" href="structnjb__struct.html#a9c34c2b8e18cdf2c494f2cfe2e1e4f5f">njb_struct::protocol_state</a>.</p>

<p>Referenced by <a class="el" href="group__eaxapi.html#gaa9146994b5fdcf249d094067f5059431">NJB_Get_EAX_Type()</a>.</p>

</div>
</div>
<a class="anchor" id="afb3d4c4e2f9fe7de9786aa47bc92da12"></a><!-- doxytag: member="protocol.c::njb_get_playlist_header" ref="afb3d4c4e2f9fe7de9786aa47bc92da12" args="(njb_t *njb, njbplhdr_t *plh, int cmd)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_get_playlist_header </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structnjbplhdr__t.html">njbplhdr_t</a> *&#160;</td>
          <td class="paramname"><em>plh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cmd</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Gets a playlist header.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on OK, -1 on error, -2 means "retry", -3 means "not found" or "last playlist already retrieved". </dd></dl>

<p>References <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#afc49aa397ec35bd1d608d2afbdfeded1">njb1_bytes_to_32bit()</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

</div>
</div>
<a class="anchor" id="ab71c71bdf6131d176ad3572e72ef190b"></a><!-- doxytag: member="protocol.c::njb_get_track_tag_header" ref="ab71c71bdf6131d176ad3572e72ef190b" args="(njb_t *njb, njbttaghdr_t *tagh, int cmd)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_get_track_tag_header </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structnjbttaghdr__t.html">njbttaghdr_t</a> *&#160;</td>
          <td class="paramname"><em>tagh</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cmd</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get a track header from the NJB1.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on OK, -1 on error, -2 if the last header has been retrieved. </dd></dl>

<p>References <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#afc49aa397ec35bd1d608d2afbdfeded1">njb1_bytes_to_32bit()</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

</div>
</div>
<a class="anchor" id="a41a4352e7fba316a9eb6262546e05e4a"></a><!-- doxytag: member="protocol.c::njb_init_state" ref="a41a4352e7fba316a9eb6262546e05e4a" args="(njb_t *njb)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_init_state </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Initializes the basic state of the njb-&gt;protocol_state for the NJB1-device.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>is a pointer to the jukebox object to use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, -1 on failure. </dd></dl>

<p>References <a class="el" href="structnjb__state__t.html#ac1237d7c88781a7b366e8ba4a1c507d2">njb_state_t::power</a>, <a class="el" href="structnjb__struct.html#a9c34c2b8e18cdf2c494f2cfe2e1e4f5f">njb_struct::protocol_state</a>, and <a class="el" href="structnjb__state__t.html#abc1703f019eda99b2a53714249b14ffc">njb_state_t::sdmiid</a>.</p>

<p>Referenced by <a class="el" href="group__basic.html#gaa631536b597d8f8cb73eeb47eff6640a">NJB_Open()</a>.</p>

</div>
</div>
<a class="anchor" id="ae959b6717b8bd6b3bcd61447e8ddda17"></a><!-- doxytag: member="protocol.c::njb_ping" ref="ae959b6717b8bd6b3bcd61447e8ddda17" args="(njb_t *njb)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_ping </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This function pings the NJB1 device to see if it is up and running, and ready for action. This is done every now and then.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>is a pointer to the jukebox object to use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, -1 on failure. </dd></dl>

<p>References <a class="el" href="ioutil_8c.html#ab37e1a214ef2b2e62314d95f68e216a4">data_dump()</a>, <a class="el" href="group__errors.html#ga8de17ff66996c8931a20cfe89d11ccdd">EO_RDSHORT</a>, <a class="el" href="group__errors.html#ga97318c787753893aeb11144235d44528">EO_USBBLK</a>, <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="structnjb__state__t.html#a8913dcd2ee685b21b3b8f623bdc84520">njb_state_t::fwMajor</a>, <a class="el" href="structnjb__state__t.html#a17451bea8bb539d6f91e25b527b1c3aa">njb_state_t::fwMinor</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, <a class="el" href="structnjb__state__t.html#ac1237d7c88781a7b366e8ba4a1c507d2">njb_state_t::power</a>, <a class="el" href="structnjb__state__t.html#a8a05f4170dcadb42b8b7771be85a544a">njb_state_t::productName</a>, <a class="el" href="structnjb__struct.html#a9c34c2b8e18cdf2c494f2cfe2e1e4f5f">njb_struct::protocol_state</a>, <a class="el" href="structnjb__state__t.html#abc1703f019eda99b2a53714249b14ffc">njb_state_t::sdmiid</a>, <a class="el" href="usb__io_8c.html#a8c28681c955500d111dcf28ff9532b94">usb_pipe_read()</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="procedure_8c.html#af77a8af68d57e51d6b7959d696954e07">NJB_Handshake()</a>, and <a class="el" href="group__basic.html#ga14869c6979a66b0aa0e6d35081bb2fc9">NJB_Ping()</a>.</p>

</div>
</div>
<a class="anchor" id="afe8b51e10cf1a2a5d313a4c273133278"></a><!-- doxytag: member="protocol.c::njb_read_eaxtypes" ref="afe8b51e10cf1a2a5d313a4c273133278" args="(njb_t *njb, u_int32_t size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void njb_read_eaxtypes </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u_int32_t&#160;</td>
          <td class="paramname"><em>size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This reads in the block with EAX types. It is a byte chunk which is then interpreted and the EAX effects are added to a list of effects which is then retrieved by calls to the <code><a class="el" href="protocol_8c.html#ad9259496f4562d52937c0296d8a6812c">njb_get_nexteax()</a></code> function.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>a pointer to the NJB object to use </td></tr>
    <tr><td class="paramname">size</td><td>the previously determined size of the EAX block </td></tr>
  </table>
  </dd>
</dl>

<p>References <a class="el" href="eax_8c.html#a618df2014818da5cdef1764186d825e6">eax_unpack()</a>, <a class="el" href="group__errors.html#ga2ab3784c31667eb7bd6dbc4296818720">EO_NOMEM</a>, <a class="el" href="group__errors.html#ga8de17ff66996c8931a20cfe89d11ccdd">EO_RDSHORT</a>, <a class="el" href="group__errors.html#ga97318c787753893aeb11144235d44528">EO_USBBLK</a>, <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#a8eb4ff18d984c00c4de64215e8ec56c3">from_32bit_to_njb1_bytes()</a>, <a class="el" href="byteorder_8c.html#afc49aa397ec35bd1d608d2afbdfeded1">njb1_bytes_to_32bit()</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, <a class="el" href="structnjb__struct.html#a9c34c2b8e18cdf2c494f2cfe2e1e4f5f">njb_struct::protocol_state</a>, <a class="el" href="usb__io_8c.html#a8c28681c955500d111dcf28ff9532b94">usb_pipe_read()</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="group__eaxapi.html#ga4d59282ecca52bb7bfcd78c5f21c4a47">NJB_Reset_Get_EAX_Type()</a>.</p>

</div>
</div>
<a class="anchor" id="af1b5132b6c3f0c9f408a77cdc5e64f58"></a><!-- doxytag: member="protocol.c::njb_receive_file_block" ref="af1b5132b6c3f0c9f408a77cdc5e64f58" args="(njb_t *njb, u_int32_t offset, u_int32_t bsize, void *bp)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">u_int32_t njb_receive_file_block </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u_int32_t&#160;</td>
          <td class="paramname"><em>offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u_int32_t&#160;</td>
          <td class="paramname"><em>bsize</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>bp</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>offset is the offset into the file, starting at 0. bsize indicates the recieved buffer max size. bp points to the recieve buffer (atleast NJB_XFER_BLOCK_SIZE + NJB_XFER_BLOCK_HEADER_SIZE) lastsort indicates if last transfer was short (ended before requested number of bytes were recieved).</p>
<p>If lastshort == 1, the last call to this function returned a a short read. In that case, a new setup command shall not be sent, the bus shall just keep retrieveing buffer contents from the bulk pipe. </p>

<p>References <a class="el" href="group__errors.html#gac3a1bc8a48d37a7e5266e61a38a9ac47">EO_TOOBIG</a>, <a class="el" href="group__errors.html#ga97318c787753893aeb11144235d44528">EO_USBBLK</a>, <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#a8eb4ff18d984c00c4de64215e8ec56c3">from_32bit_to_njb1_bytes()</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, <a class="el" href="usb__io_8c.html#a8c28681c955500d111dcf28ff9532b94">usb_pipe_read()</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="group__tagapi.html#gab99507fb41c1527e58a449812a5d99e6">NJB_Get_Track_fd()</a>.</p>

</div>
</div>
<a class="anchor" id="a1d6bdb13a1de6c49b04a081502bcf9d4"></a><!-- doxytag: member="protocol.c::njb_set_library_counter" ref="a1d6bdb13a1de6c49b04a081502bcf9d4" args="(njb_t *njb, u_int64_t count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_set_library_counter </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">u_int64_t&#160;</td>
          <td class="paramname"><em>count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This function sets the library counter on the device. The library counter is sent back and forth to the device to indicate if something in the library has changed.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>is a pointer to the jukebox object to use. </td></tr>
    <tr><td class="paramname">count</td><td>is the current library counter to set on the device. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, -1 on failure. </dd></dl>

<p>References <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="byteorder_8c.html#a83b8d3a440aa6cdc77b5c47989664a23">from_64bit_to_njb1_bytes()</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="procedure_8c.html#af77a8af68d57e51d6b7959d696954e07">NJB_Handshake()</a>.</p>

</div>
</div>
<a class="anchor" id="ae5ea9fbb3859ec50540bcd9cf4a3f328"></a><!-- doxytag: member="protocol.c::njb_verify_last_command" ref="ae5ea9fbb3859ec50540bcd9cf4a3f328" args="(njb_t *njb)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int njb_verify_last_command </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structnjb__struct.html">njb_t</a> *&#160;</td>
          <td class="paramname"><em>njb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This function verifies if the last command was successful or not.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">njb</td><td>is a pointer to the jukebox object to use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, -1 on failure. </dd></dl>

<p>References <a class="el" href="group__errors.html#ga7eddf4c1f01a0d4576d3446c1c934e86">EO_USBCTL</a>, <a class="el" href="protocol_8c.html#a892c9eb5d494fde6084ddb736f307a29">NJB_STATUS</a>, and <a class="el" href="usb__io_8c.html#ab032ff44f65d3d873b2200e71ecfcf5e">usb_setup()</a>.</p>

<p>Referenced by <a class="el" href="group__tagapi.html#gab99507fb41c1527e58a449812a5d99e6">NJB_Get_Track_fd()</a>, <a class="el" href="procedure_8c.html#af77a8af68d57e51d6b7959d696954e07">NJB_Handshake()</a>, <a class="el" href="group__playapi.html#ga92cc70e7805c6fc0934017f81b72b80d">NJB_Play_Track()</a>, <a class="el" href="group__playapi.html#ga5c31fd1b835a7c2ea247de0d42767594">NJB_Queue_Track()</a>, <a class="el" href="group__basic.html#gac24779b3f78bf1290d09a2b80db49a3d">NJB_Set_Owner_String()</a>, <a class="el" href="group__timeapi.html#ga257a1f0973dc7e3ed779eb55978de2a7">NJB_Set_Time()</a>, and <a class="el" href="group__playlistapi.html#gae1873045c0cd0eb27465992c3479b975">NJB_Update_Playlist()</a>.</p>

</div>
</div>
<hr/><h2>Variable Documentation</h2>
<a class="anchor" id="a60db410c9e82d9e61b1bf0be607922ed"></a><!-- doxytag: member="protocol.c::__sub_depth" ref="a60db410c9e82d9e61b1bf0be607922ed" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="usb__io_8c.html#a60db410c9e82d9e61b1bf0be607922ed">__sub_depth</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The current subroutine depth for all of libnjb (global) </p>

</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Sat Jun 25 2011 for libnjb by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>