<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <!-- $Id: header.html 8799 2010-06-28 04:12:42Z jpgr87 $ --> <HEAD> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=utf-8"> <meta name="keywords" content="stage, robot, simulation, player, player/stage"> <link href="doxygen.css" rel="stylesheet" type="text/css"> <style type="text/css"> .floatright { float: right; margin: 0 0 1em 1em; } body { font-family: sans-serif; #font-family: Geneva, Verdana, Helvetica, Arial, sans-serif; background-color: #FFF; color:#000; } a:link { color: #A00; } a:visited { color: #800; } a { text-decoration: none; } a:hover { text-decoration: underline; } .timestamp { text-align:right; background-color: #DDD; font-size:75%;} h1 { font-size:160%; } h2 { font-size:110%; #color: #FFF; #background-color: #666; #padding:3px; } h3 { text-align:left; } img { border: 0; } ul.menu { position:relative; left:-2.5em; margin-bottom:0px; margin-top:0px; } ul.menu1 { position:relative; left:-2.1em; margin-bottom:0px; margin-top:0px; } li.menu { list-style-type: none; position:relative; #left:-0.5em; } #sidebar { position: absolute; left:0px; padding:2em; top:0em; width:12em;} #content { position: absolute; left:12em; top:0em; padding-left:3em; padding-right:3em; padding-bottom:2em; margin-top:1em; margin-right:2em; } div.box { background-color:#EEE; border: 1px solid #000; padding: 0.5ex 0.4em 0.5ex 0.6em; margin:1em; } div.title { font-weight:bold; background-color:#eee; margin-bottom:2px;} div.topbar { position: absolute; top:0px; left:9em; margin:1em; } </style> <TITLE>Player Manual</TITLE> </HEAD> <body> <div id="sidebar"> <h2 style="text-align:center;"> <a href="index.html"> <img width=140 src="http://playerstage.sourceforge.net/images/player_button_v3.png" alt="Player logo"><br></a> </h2> <div class="box"> <div class=title>Player</div> <ul class=menu> <li class=menu><a href="index.html">Frontpage</a> <li class=menu><a href="modules.html">Contents</a> </ul> </div> <div class="box"> <div class=title>User</div> <ul class=menu> <li class=menu><a href="install.html">Installation</a> <li class=menu><a href="start.html">Quick start</a> <li class=menu><a href="supported_hardware.html">Supported devices</a> <li class=menu><a href="group__tutorials.html">Tutorials</a> <li class=menu><a href="group__utils.html">Utilities</a> <li class=menu><a href="group__clientlibs.html">Client libraries</a> <li class=menu><a href="http://playerstage.sourceforge.net/wiki/Basic_FAQ">FAQ</a> <li class=menu><a href="help.html">Help</a> </ul> </div> <div class=box> <div class="title">Developer</div> <ul class=menu> <li class=menu><a href="architecture.html">Architecture</a> <li class=menu><a href="group__libplayercore.html">libplayercore</a> <ul class=menu1> <li class=menu><a href="group__interfaces.html">interfaces</a></li> </ul> <li class=menu><a href="group__libplayerdrivers.html">libplayerdrivers</a> <ul class=menu1> <li class=menu><a href="group__drivers.html">drivers</a></li> </ul> <li class=menu><a href="group__libplayercommon.html">libplayercommon</a> <li class=menu><a href="group__libplayerutils.html">libplayerutils</a> <li class=menu><a href="group__libplayersd.html">libplayersd</a> <li class=menu><a href="group__libplayertcp.html">libplayertcp</a> <li class=menu><a href="group__libplayerxdr.html">libplayerxdr</a> <li class=menu><a href="todo.html">TODO</a> </ul> </div> <div class=box> <!-- <a href="http://sourceforge.net"><img border=0 src="http://sourceforge.net/sflogo.php?group_id=42445&type=1"></a> --> <div class="title">Online</div> <a href="http://playerstage.sourceforge.net">Homepage</a><br> <a href="http://sourceforge.net/project/showfiles.php?group_id=42445">Download</a><br> <a href="http://sourceforge.net/projects/playerstage">Project</a><br> <a href="http://sourceforge.net/tracker/?group_id=42445">Bugs</a><br> <a href="http://sourceforge.net/mail/?group_id=42445">Help</a> </div> </div> <div id="content" > <!-- Generated by Doxygen 1.7.1 --> <div class="header"> <div class="headertitle"> <h1>libplayersd</h1> </div> </div> <div class="contents"> <p>Player service discovery library. <a href="#_details">More...</a></p> <table class="memberdecls"> <tr><td colspan="2"><p><a class="anchor" id="amgrpd41d8cd98f00b204e9800998ecf8427e"></a> </p> <br/><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaf1e594af06d4528d1e4ec5129d7b2369"></a><!-- doxytag: member="libplayersd::PLAYER_SD_SERVICENAME" ref="gaf1e594af06d4528d1e4ec5129d7b2369" args="" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gaf1e594af06d4528d1e4ec5129d7b2369">PLAYER_SD_SERVICENAME</a> "_player21._tcp"</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A device, represented by its name and address. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga8194d7579221bdafd7b73412ed223296"></a><!-- doxytag: member="libplayersd::PLAYER_SD_DEVICE_TXTNAME" ref="ga8194d7579221bdafd7b73412ed223296" args="" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga8194d7579221bdafd7b73412ed223296">PLAYER_SD_DEVICE_TXTNAME</a> "device"</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A device, represented by its name and address. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga9c64d8ba807bb4245c0248ba042fa508"></a><!-- doxytag: member="libplayersd::PLAYER_SD_NAME_MAXLEN" ref="ga9c64d8ba807bb4245c0248ba042fa508" args="" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga9c64d8ba807bb4245c0248ba042fa508">PLAYER_SD_NAME_MAXLEN</a> 256</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A device, represented by its name and address. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gad95db6674f6fe83448b17f4b8810b6b1"></a><!-- doxytag: member="libplayersd::PLAYER_SD_TXT_MAXLEN" ref="gad95db6674f6fe83448b17f4b8810b6b1" args="" --> #define </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gad95db6674f6fe83448b17f4b8810b6b1">PLAYER_SD_TXT_MAXLEN</a> 256</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A device, represented by its name and address. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga666c0b366913fa0eb87d8fe943173620"></a><!-- doxytag: member="libplayersd::player_sd_dev_t" ref="ga666c0b366913fa0eb87d8fe943173620" args="" --> typedef struct <a class="el" href="structplayer__sd__dev.html">player_sd_dev</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga666c0b366913fa0eb87d8fe943173620">player_sd_dev_t</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A device, represented by its name and address. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga31f0007b85d04a749069ee6494be8ae5"></a><!-- doxytag: member="libplayersd::player_sd_t" ref="ga31f0007b85d04a749069ee6494be8ae5" args="" --> typedef struct <a class="el" href="structplayer__sd.html">player_sd</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga31f0007b85d04a749069ee6494be8ae5">player_sd_t</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Service discovery object. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gae9fbb34f6d6ffaa3939d3f50e822ef61">player_sd_browse_callback_fn_t</a> )(<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, <a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a> *dev)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Prototype for a callback function that can be invoked when devices are added or removed. <a href="#gae9fbb34f6d6ffaa3939d3f50e822ef61"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga7dcfc04e91b995d9e831a06f6883c97f">player_sd_init</a> (void)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize service discovery, passing back a pointer that will be passed into all future calls. <a href="#ga7dcfc04e91b995d9e831a06f6883c97f"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1e806097736fdc1073e85d8990dba982"></a><!-- doxytag: member="libplayersd::player_sd_fini" ref="ga1e806097736fdc1073e85d8990dba982" args="(player_sd_t *sd)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga1e806097736fdc1073e85d8990dba982">player_sd_fini</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Finalize service discovery, freeing associated resources. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga52b37990e82edeec68a425a22b80c1c0"></a><!-- doxytag: member="libplayersd::player_sd_lock" ref="ga52b37990e82edeec68a425a22b80c1c0" args="(player_sd_t *sd)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga52b37990e82edeec68a425a22b80c1c0">player_sd_lock</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Lock access to playersd structures, such as the local device cache. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4e1f4631e733c609ca47d63488cdace7"></a><!-- doxytag: member="libplayersd::player_sd_unlock" ref="ga4e1f4631e733c609ca47d63488cdace7" args="(player_sd_t *sd)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga4e1f4631e733c609ca47d63488cdace7">player_sd_unlock</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Unlock access to playersd structures, such as the local device cache. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gadacf4e2e00de739daf48e48f01b45bb9">player_sd_register</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, const char *name, <a class="el" href="structplayer__devaddr.html">player_devaddr_t</a> addr)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Register the named device. <a href="#gadacf4e2e00de739daf48e48f01b45bb9"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga1bafb01f77a70d6d6865dfbe260a3a9c">player_sd_unregister</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, const char *name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Unregister (terminate) the named device. <a href="#ga1bafb01f77a70d6d6865dfbe260a3a9c"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gaf0159fe328bd5fa04591c4801bcee468">player_sd_browse</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, double timeout, int keepalive, <a class="el" href="group__libplayersd.html#gae9fbb34f6d6ffaa3939d3f50e822ef61">player_sd_browse_callback_fn_t</a> cb)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Browse for player devices. <a href="#gaf0159fe328bd5fa04591c4801bcee468"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gaf114899e1ec83b62e2d3a940905eb82a">player_sd_update</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, double timeout)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Check for new device updates, waiting for timeout s. <a href="#gaf114899e1ec83b62e2d3a940905eb82a"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gac9e13041eacfd5615bf3e0a1cebe7e79"></a><!-- doxytag: member="libplayersd::player_sd_browse_stop" ref="gac9e13041eacfd5615bf3e0a1cebe7e79" args="(player_sd_t *sd)" --> int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gac9e13041eacfd5615bf3e0a1cebe7e79">player_sd_browse_stop</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Stop browsing. Returns 0 on success, non-zero on error. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#gae3db57f8fbbc595fcdf43bfda6f7e26d">player_sd_get_device</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, const char *name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Look up a device by name. <a href="#gae3db57f8fbbc595fcdf43bfda6f7e26d"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga429b3e87da0c1db34f268cb379431ade">player_sd_find_devices</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, <a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a> *result, size_t result_len, const char *name, const char *hostname, int robot, int interf, int index)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Find a device in the local cache that matches the given criteria. <a href="#ga429b3e87da0c1db34f268cb379431ade"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga814176b1114ebba2d63aef25ba953aa8">_player_sd_add_device</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, const char *name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Add a device to the local cache. <a href="#ga814176b1114ebba2d63aef25ba953aa8"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga4f3d9214a3dc863c1c4aa84e6f37923f"></a><!-- doxytag: member="libplayersd::player_sd_printcache" ref="ga4f3d9214a3dc863c1c4aa84e6f37923f" args="(player_sd_t *sd)" --> void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__libplayersd.html#ga4f3d9214a3dc863c1c4aa84e6f37923f">player_sd_printcache</a> (<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Print the contents of the local device cache to the console. <br/></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>Player service discovery library. </p> <p>This library provides service discovery capabilities for Player devices. This library is currently in an alpha state, and is not ready for regular use. </p> <hr/><h2>Typedef Documentation</h2> <a class="anchor" id="gae9fbb34f6d6ffaa3939d3f50e822ef61"></a><!-- doxytag: member="playersd.h::player_sd_browse_callback_fn_t" ref="gae9fbb34f6d6ffaa3939d3f50e822ef61" args=")(player_sd_t *sd, player_sd_dev_t *dev)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef void(* <a class="el" href="group__libplayersd.html#gae9fbb34f6d6ffaa3939d3f50e822ef61">player_sd_browse_callback_fn_t</a>)(<a class="el" href="structplayer__sd.html">player_sd_t</a> *sd, <a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a> *dev)</td> </tr> </table> </div> <div class="memdoc"> <p>Prototype for a callback function that can be invoked when devices are added or removed. </p> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="ga814176b1114ebba2d63aef25ba953aa8"></a><!-- doxytag: member="playersd.h::_player_sd_add_device" ref="ga814176b1114ebba2d63aef25ba953aa8" args="(player_sd_t *sd, const char *name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a>* _player_sd_add_device </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td> <td class="paramname"> <em>sd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>name</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Add a device to the local cache. </p> <p>The user should not call this function. It will be invoked by the playersd implementation. </p> </div> </div> <a class="anchor" id="gaf0159fe328bd5fa04591c4801bcee468"></a><!-- doxytag: member="playersd.h::player_sd_browse" ref="gaf0159fe328bd5fa04591c4801bcee468" args="(player_sd_t *sd, double timeout, int keepalive, player_sd_browse_callback_fn_t cb)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int player_sd_browse </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td> <td class="paramname"> <em>sd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double </td> <td class="paramname"> <em>timeout</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>keepalive</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="group__libplayersd.html#gae9fbb34f6d6ffaa3939d3f50e822ef61">player_sd_browse_callback_fn_t</a> </td> <td class="paramname"> <em>cb</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Browse for player devices. </p> <p>Browses for timeout s, accruing the results into the sd object. If keepalive is non-zero, then the browsing session is left open and can be updated by future calls to <a class="el" href="group__libplayersd.html#gaf114899e1ec83b62e2d3a940905eb82a" title="Check for new device updates, waiting for timeout s.">player_sd_update()</a>. Otherwise, the browsing session is closed before returning. If cb is non-NULL, then it is registered and invoked whenever new device notifications are received (call player_sd_update to give this a chance to happen).</p> <p>NOTE: Because device hostnames are resolved as they are discovered, this call may block for an unpredictable amount of time.</p> <p>Returns 0 on success, non-zero on error. </p> </div> </div> <a class="anchor" id="ga429b3e87da0c1db34f268cb379431ade"></a><!-- doxytag: member="playersd.h::player_sd_find_devices" ref="ga429b3e87da0c1db34f268cb379431ade" args="(player_sd_t *sd, player_sd_dev_t *result, size_t result_len, const char *name, const char *hostname, int robot, int interf, int index)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int player_sd_find_devices </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td> <td class="paramname"> <em>sd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a> * </td> <td class="paramname"> <em>result</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>result_len</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>name</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>hostname</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>robot</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>interf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>index</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Find a device in the local cache that matches the given criteria. </p> <ul> <li>sd: a player_sd_t* returned by <a class="el" href="group__libplayersd.html#ga7dcfc04e91b995d9e831a06f6883c97f" title="Initialize service discovery, passing back a pointer that will be passed into all future calls...">player_sd_init()</a></li> <li>result: a caller-supplied array to store the matching device(s) in</li> <li>result_len: the length of the result array</li> <li>name: the Zeroconf name of the device; NULL for don't care</li> <li>hostname: the hostname where the device resides; NULL for don't care</li> <li>robot: the 'robot' field of the Player address; -1 for don't care</li> <li>interf: the 'interf' field of the Player address; -1 for don't care</li> <li>index: the 'index' field of the Player address; -1 for don't care</li> </ul> <p>The first result_len devices in the local cache that match the criteria are copied into the result array.</p> <p>Returns: the number of devices copied into result. </p> </div> </div> <a class="anchor" id="gae3db57f8fbbc595fcdf43bfda6f7e26d"></a><!-- doxytag: member="playersd.h::player_sd_get_device" ref="gae3db57f8fbbc595fcdf43bfda6f7e26d" args="(player_sd_t *sd, const char *name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structplayer__sd__dev.html">player_sd_dev_t</a>* player_sd_get_device </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td> <td class="paramname"> <em>sd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>name</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Look up a device by name. </p> <p>This functions only consults the local cache of registered devices, which was filled by <a class="el" href="group__libplayersd.html#gaf0159fe328bd5fa04591c4801bcee468" title="Browse for player devices.">player_sd_browse()</a>. </p> </div> </div> <a class="anchor" id="ga7dcfc04e91b995d9e831a06f6883c97f"></a><!-- doxytag: member="playersd.h::player_sd_init" ref="ga7dcfc04e91b995d9e831a06f6883c97f" args="(void)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="structplayer__sd.html">player_sd_t</a>* player_sd_init </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Initialize service discovery, passing back a pointer that will be passed into all future calls. </p> <p>Returns NULL on failure. </p> </div> </div> <a class="anchor" id="gadacf4e2e00de739daf48e48f01b45bb9"></a><!-- doxytag: member="playersd.h::player_sd_register" ref="gadacf4e2e00de739daf48e48f01b45bb9" args="(player_sd_t *sd, const char *name, player_devaddr_t addr)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int player_sd_register </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td> <td class="paramname"> <em>sd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>name</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="structplayer__devaddr.html">player_devaddr_t</a> </td> <td class="paramname"> <em>addr</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Register the named device. </p> <p>Returns 0 on success, non-zero on error. Name may be automatically changed in case of conflict. </p> </div> </div> <a class="anchor" id="ga1bafb01f77a70d6d6865dfbe260a3a9c"></a><!-- doxytag: member="playersd.h::player_sd_unregister" ref="ga1bafb01f77a70d6d6865dfbe260a3a9c" args="(player_sd_t *sd, const char *name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int player_sd_unregister </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td> <td class="paramname"> <em>sd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"> <em>name</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Unregister (terminate) the named device. </p> <p>Returns 0 on success, non-zero on error. </p> </div> </div> <a class="anchor" id="gaf114899e1ec83b62e2d3a940905eb82a"></a><!-- doxytag: member="playersd.h::player_sd_update" ref="gaf114899e1ec83b62e2d3a940905eb82a" args="(player_sd_t *sd, double timeout)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int player_sd_update </td> <td>(</td> <td class="paramtype"><a class="el" href="structplayer__sd.html">player_sd_t</a> * </td> <td class="paramname"> <em>sd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">double </td> <td class="paramname"> <em>timeout</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Check for new device updates, waiting for timeout s. </p> <p>Contents of sd are updated, and if a callback was passed to player_sd_browse, then this function is also called for each discovered device. Only makes sense to call this function after a call to player_sd_browse.</p> <p>NOTE: Because device hostnames are resolved as they are discovered, this call may block for an unpredictable amount of time.</p> <p>Returns 0 on success, non-zero on error. </p> </div> </div> </div> <!-- render the modification time of the source file --> <div class="timestamp"> <hr> <table style="width:100%;"> <tr> <td style="text-align:left;"> Last updated 12 September 2005 21:38:45 <!-- <td style="text-align:right;"> <a href="http://validator.w3.org/check/referer"><img style="vertical-align:middle;border:0;width:88px;height:31px" src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!"></a> <a href="http://jigsaw.w3.org/css-validator/"> <img style="vertical-align:middle;border:0;width:88px;height:31px" src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!"> </a> --> </tr> </table> </div> </tr> </table> </BODY> </HTML>