playersd.h
1 /*
2  * Player - One Hell of a Robot Server
3  * Copyright (C) 2007
4  * Brian Gerkey
5  *
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  *
21  */
22 /*
23  * Player - One Hell of a Robot Server
24  * Copyright (C) 2007
25  * Brian Gerkey
26  *
27  *
28  * This library is free software; you can redistribute it and/or
29  * modify it under the terms of the GNU Lesser General Public
30  * License as published by the Free Software Foundation; either
31  * version 2.1 of the License, or (at your option) any later version.
32  *
33  * This library is distributed in the hope that it will be useful,
34  * but WITHOUT ANY WARRANTY; without even the implied warranty of
35  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
36  * Lesser General Public License for more details.
37  *
38  * You should have received a copy of the GNU Lesser General Public
39  * License along with this library; if not, write to the Free Software
40  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
41  */
42 
43 /*
44  * Interface to libplayersd
45  *
46  * $Id: playersd.h 9120 2013-01-07 00:18:52Z jpgr87 $
47  */
48 
58 #ifndef _PLAYER_SD_H
59 #define _PLAYER_SD_H
60 
61 #ifdef __cplusplus
62 extern "C" {
63 #endif
64 
65 #include <libplayerinterface/player.h>
66 
67 #define PLAYER_SD_SERVICENAME "_player31._tcp"
68 #define PLAYER_SD_DEVICE_TXTNAME "device"
69 #define PLAYER_SD_NAME_MAXLEN 256
70 #define PLAYER_SD_TXT_MAXLEN 256
71 
73 typedef struct player_sd_dev
74 {
75  // Is this entry valid?
76  uint8_t valid;
77  // Name of the device
78  char name[PLAYER_SD_NAME_MAXLEN];
79  // Is the address valid?
80  uint8_t addr_valid;
81  // Did address resolution fail?
82  uint8_t addr_fail;
83  // Player address components
84  char hostname[PLAYER_SD_NAME_MAXLEN];
85  uint32_t robot;
86  uint16_t interf;
87  uint16_t index;
89 
91 typedef struct player_sd
92 {
95  void* sdRef;
99  size_t devs_len;
100 } player_sd_t;
101 
105 
107 void player_sd_fini(player_sd_t* sd);
108 
110 void player_sd_lock(player_sd_t* sd);
111 
113 void player_sd_unlock(player_sd_t* sd);
114 
118  const char* name,
119  player_devaddr_t addr);
120 
124  const char* name);
125 
129  player_sd_dev_t* dev);
130 
144  double timeout,
145  int keepalive,
147 
157 int player_sd_update(player_sd_t* sd, double timeout);
158 
161 
163 // Common functions, implemented in playersd.c
164 
167 player_sd_dev_t* player_sd_get_device(player_sd_t* sd, const char* name);
168 
185  player_sd_dev_t* result,
186  size_t result_len,
187  const char* name,
188  const char* hostname,
189  int robot,
190  int interf,
191  int index);
192 
195 player_sd_dev_t* _player_sd_add_device(player_sd_t* sd, const char* name);
196 
199 
200 #ifdef __cplusplus
201 }
202 #endif
203 
206 #endif
void player_sd_lock(player_sd_t *sd)
Lock access to playersd structures, such as the local device cache.
player_sd_dev_t * devs
List of devices discovered by browsing.
Definition: playersd.h:97
int player_sd_find_devices(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)
Find a device in the local cache that matches the given criteria.
A device address.
Definition: player.h:145
Service discovery object.
Definition: playersd.h:91
int player_sd_register(player_sd_t *sd, const char *name, player_devaddr_t addr)
Register the named device.
int player_sd_browse_stop(player_sd_t *sd)
Stop browsing. Returns 0 on success, non-zero on error.
player_sd_dev_t * player_sd_get_device(player_sd_t *sd, const char *name)
Look up a device by name.
struct player_sd_dev player_sd_dev_t
A device, represented by its name and address.
int player_sd_update(player_sd_t *sd, double timeout)
Check for new device updates, waiting for timeout s.
int player_sd_browse(player_sd_t *sd, double timeout, int keepalive, player_sd_browse_callback_fn_t cb)
Browse for player devices.
struct player_sd player_sd_t
Service discovery object.
void(* player_sd_browse_callback_fn_t)(player_sd_t *sd, player_sd_dev_t *dev)
Prototype for a callback function that can be invoked when devices are added or removed.
Definition: playersd.h:128
size_t devs_len
Number of devices discovered.
Definition: playersd.h:99
void * sdRef
Opaque pointer to underlying zeroconf client object.
Definition: playersd.h:95
player_sd_dev_t * _player_sd_add_device(player_sd_t *sd, const char *name)
Add a device to the local cache.
void player_sd_unlock(player_sd_t *sd)
Unlock access to playersd structures, such as the local device cache.
A device, represented by its name and address.
Definition: playersd.h:73
void player_sd_printcache(player_sd_t *sd)
Print the contents of the local device cache to the console.
player_sd_t * player_sd_init(void)
Initialize service discovery, passing back a pointer that will be passed into all future calls...
#define PLAYER_SD_NAME_MAXLEN
A device, represented by its name and address.
Definition: playersd.h:69
void player_sd_fini(player_sd_t *sd)
Finalize service discovery, freeing associated resources.
int player_sd_unregister(player_sd_t *sd, const char *name)
Unregister (terminate) the named device.