playersd.h
00001 /*
00002  *  Player - One Hell of a Robot Server
00003  *  Copyright (C) 2007
00004  *     Brian Gerkey
00005  *                      
00006  *
00007  *  This program is free software; you can redistribute it and/or modify
00008  *  it under the terms of the GNU General Public License as published by
00009  *  the Free Software Foundation; either version 2 of the License, or
00010  *  (at your option) any later version.
00011  *
00012  *  This program is distributed in the hope that it will be useful,
00013  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  *  GNU General Public License for more details.
00016  *
00017  *  You should have received a copy of the GNU General Public License
00018  *  along with this program; if not, write to the Free Software
00019  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00020  *
00021  */
00022 /*
00023  *  Player - One Hell of a Robot Server
00024  *  Copyright (C) 2007
00025  *     Brian Gerkey
00026  *                      
00027  *
00028  *  This library is free software; you can redistribute it and/or
00029  *  modify it under the terms of the GNU Lesser General Public
00030  *  License as published by the Free Software Foundation; either
00031  *  version 2.1 of the License, or (at your option) any later version.
00032  *
00033  *  This library is distributed in the hope that it will be useful,
00034  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00035  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00036  *  Lesser General Public License for more details.
00037  *
00038  *  You should have received a copy of the GNU Lesser General Public
00039  *  License along with this library; if not, write to the Free Software
00040  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00041  */
00042 
00043 /*
00044  * Interface to libplayersd
00045  *
00046  * $Id: playersd.h 8004 2009-07-13 14:03:44Z thjc $
00047  */
00048 
00058 #ifndef _PLAYER_SD_H
00059 #define _PLAYER_SD_H
00060 
00061 #ifdef __cplusplus
00062 extern "C" {
00063 #endif
00064 
00065 #include <libplayerinterface/player.h>
00066 
00067 #define PLAYER_SD_SERVICENAME "_player21._tcp"
00068 #define PLAYER_SD_DEVICE_TXTNAME "device"
00069 #define PLAYER_SD_NAME_MAXLEN 256
00070 #define PLAYER_SD_TXT_MAXLEN 256
00071 
00073 typedef struct player_sd_dev
00074 {
00075   // Is this entry valid?
00076   uint8_t valid;
00077   // Name of the device
00078   char name[PLAYER_SD_NAME_MAXLEN];
00079   // Is the address valid?
00080   uint8_t addr_valid;
00081   // Did address resolution fail?
00082   uint8_t addr_fail;
00083   // Player address components
00084   char hostname[PLAYER_SD_NAME_MAXLEN];
00085   uint32_t robot;
00086   uint16_t interf;
00087   uint16_t index;
00088 } player_sd_dev_t;
00089 
00091 typedef struct player_sd
00092 {
00095   void* sdRef;
00097   player_sd_dev_t* devs;
00099   size_t devs_len;
00100 } player_sd_t;
00101 
00104 player_sd_t* player_sd_init(void);
00105 
00107 void player_sd_fini(player_sd_t* sd);
00108 
00110 void player_sd_lock(player_sd_t* sd);
00111 
00113 void player_sd_unlock(player_sd_t* sd);
00114 
00117 int player_sd_register(player_sd_t* sd, 
00118                        const char* name, 
00119                        player_devaddr_t addr);
00120 
00123 int player_sd_unregister(player_sd_t* sd, 
00124                          const char* name);
00125 
00128 typedef void (*player_sd_browse_callback_fn_t)(player_sd_t* sd,
00129                                                player_sd_dev_t* dev);
00130 
00143 int player_sd_browse(player_sd_t* sd,
00144                      double timeout, 
00145                      int keepalive,
00146                      player_sd_browse_callback_fn_t cb);
00147 
00157 int player_sd_update(player_sd_t* sd, double timeout);
00158 
00160 int player_sd_browse_stop(player_sd_t* sd);
00161 
00163 // Common functions, implemented in playersd.c
00164 
00167 player_sd_dev_t* player_sd_get_device(player_sd_t* sd, const char* name);
00168 
00184 int player_sd_find_devices(player_sd_t* sd, 
00185                            player_sd_dev_t* result,
00186                            size_t result_len,
00187                            const char* name,
00188                            const char* hostname,
00189                            int robot,
00190                            int interf,
00191                            int index);
00192 
00195 player_sd_dev_t* _player_sd_add_device(player_sd_t* sd, const char* name);
00196 
00198 void player_sd_printcache(player_sd_t* sd);
00199 
00200 #ifdef __cplusplus
00201 }
00202 #endif
00203 
00206 #endif