comparison osx/include/lo/lo.h @ 118:a8541380d3e0

Ah, we've already done this. Merge, taking everything from the branch with the older commits.
author Chris Cannam <cannam@all-day-breakfast.com>
date Fri, 04 Jul 2014 10:37:37 +0100
parents 241db1b1eff2
children
comparison
equal deleted inserted replaced
111:585a7be09763 118:a8541380d3e0
1 /*
2 * Copyright (C) 2004 Steve Harris
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public License
6 * as published by the Free Software Foundation; either version 2.1
7 * of the License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
13 *
14 * $Id$
15 */
16
17 #ifndef LO_H
18 #define LO_H
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 /**
25 * \file lo.h The liblo main headerfile and high-level API functions.
26 */
27
28 #include "lo/lo_endian.h"
29 #include "lo/lo_types.h"
30 #include "lo/lo_osc_types.h"
31 #include "lo/lo_errors.h"
32 #include "lo/lo_lowlevel.h"
33
34 /**
35 * \defgroup liblo High-level OSC API
36 *
37 * Defines the high-level API functions necessary to implement OSC support.
38 * Should be adequate for most applications, but if you require lower level
39 * control you can use the functions defined in lo_lowlevel.h
40 * @{
41 */
42
43 /**
44 * \brief Declare an OSC destination, given IP address and port number.
45 * Same as lo_address_new_with_proto(), but using UDP.
46 *
47 * \param host An IP address or number, or NULL for the local machine.
48 * \param port a decimal port number or service name.
49 *
50 * The lo_address object may be used as the target of OSC messages.
51 *
52 * Note: if you wish to receive replies from the target of this address, you
53 * must first create a lo_server_thread or lo_server object which will receive
54 * the replies. The last lo_server(_thread) object creted will be the receiver.
55 */
56 lo_address lo_address_new(const char *host, const char *port);
57
58 /**
59 * \brief Declare an OSC destination, given IP address and port number,
60 * specifying protocol.
61 *
62 * \param proto The protocol to use, must be one of LO_UDP, LO_TCP or LO_UNIX.
63 * \param host An IP address or number, or NULL for the local machine.
64 * \param port a decimal port number or service name.
65 *
66 * The lo_address object may be used as the target of OSC messages.
67 *
68 * Note: if you wish to receive replies from the target of this address, you
69 * must first create a lo_server_thread or lo_server object which will receive
70 * the replies. The last lo_server(_thread) object creted will be the receiver.
71 */
72 lo_address lo_address_new_with_proto(int proto, const char *host, const char *port);
73
74 /**
75 * \brief Create a lo_address object from an OSC URL.
76 *
77 * example: \c "osc.udp://localhost:4444/my/path/"
78 */
79 lo_address lo_address_new_from_url(const char *url);
80
81 /**
82 * \brief Free the memory used by the lo_address object
83 */
84 void lo_address_free(lo_address t);
85
86 /**
87 * \brief Set the Time-to-Live value for a given target address.
88 *
89 * This is required for sending multicast UDP messages. A value of 1
90 * (the usual case) keeps the message within the subnet, while 255
91 * means a global, unrestricted scope.
92 *
93 * \param t An OSC address.
94 * \param ttl An integer specifying the scope of a multicast UDP message.
95 */
96 void lo_address_set_ttl(lo_address t, int ttl);
97
98 /**
99 * \brief Get the Time-to-Live value for a given target address.
100 *
101 * \param t An OSC address.
102 * \return An integer specifying the scope of a multicast UDP message.
103 */
104 int lo_address_get_ttl(lo_address t);
105
106 /**
107 * \brief Send a OSC formatted message to the address specified.
108 *
109 * \param targ The target OSC address
110 * \param path The OSC path the message will be delivered to
111 * \param type The types of the data items in the message, types are defined in
112 * lo_osc_types.h
113 * \param ... The data values to be transmitted. The types of the arguments
114 * passed here must agree with the types specified in the type parameter.
115 *
116 * example:
117 * \code
118 * lo_send(t, "/foo/bar", "ff", 0.1f, 23.0f);
119 * \endcode
120 *
121 * \return -1 on failure.
122 */
123 int lo_send(lo_address targ, const char *path, const char *type, ...);
124
125 /**
126 * \brief Send a OSC formatted message to the address specified,
127 * from the same socket as the specificied server.
128 *
129 * \param targ The target OSC address
130 * \param from The server to send message from (can be NULL to use new socket)
131 * \param ts The OSC timetag timestamp at which the message will be processed
132 * (can be LO_TT_IMMEDIATE if you don't want to attach a timetag)
133 * \param path The OSC path the message will be delivered to
134 * \param type The types of the data items in the message, types are defined in
135 * lo_osc_types.h
136 * \param ... The data values to be transmitted. The types of the arguments
137 * passed here must agree with the types specified in the type parameter.
138 *
139 * example:
140 * \code
141 * serv = lo_server_new(NULL, err);
142 * lo_server_add_method(serv, "/reply", "ss", reply_handler, NULL);
143 * lo_send_from(t, serv, LO_TT_IMMEDIATE, "/foo/bar", "ff", 0.1f, 23.0f);
144 * \endcode
145 *
146 * \return on success, the number of bytes sent, or -1 on failure.
147 */
148 int lo_send_from(lo_address targ, lo_server from, lo_timetag ts,
149 const char *path, const char *type, ...);
150
151 /**
152 * \brief Send a OSC formatted message to the address specified, scheduled to
153 * be dispatch at some time in the future.
154 *
155 * \param targ The target OSC address
156 * \param ts The OSC timetag timestamp at which the message will be processed
157 * \param path The OSC path the message will be delivered to
158 * \param type The types of the data items in the message, types are defined in
159 * lo_osc_types.h
160 * \param ... The data values to be transmitted. The types of the arguments
161 * passed here must agree with the types specified in the type parameter.
162 *
163 * example:
164 * \code
165 * lo_timetag now;<br>
166 * lo_timetag_now(&now);<br>
167 * lo_send_timestamped(t, now, "/foo/bar", "ff", 0.1f, 23.0f);
168 * \endcode
169 *
170 * \return on success, the number of bytes sent, or -1 on failure.
171 */
172 int lo_send_timestamped(lo_address targ, lo_timetag ts, const char *path,
173 const char *type, ...);
174
175 /**
176 * \brief Return the error number from the last failed lo_send() or
177 * lo_address_new() call
178 */
179 int lo_address_errno(lo_address a);
180
181 /**
182 * \brief Return the error string from the last failed lo_send() or
183 * lo_address_new() call
184 */
185 const char *lo_address_errstr(lo_address a);
186
187 /**
188 * \brief Create a new server thread to handle incoming OSC
189 * messages.
190 *
191 * Server threads take care of the message reception and dispatch by
192 * transparently creating a system thread to handle incoming messages.
193 * Use this if you do not want to handle the threading yourself.
194 *
195 * \param port If NULL is passed then an unused port will be chosen by the
196 * system, its number may be retrieved with lo_server_thread_get_port()
197 * so it can be passed to clients. Otherwise a decimal port number, service
198 * name or UNIX domain socket path may be passed.
199 * \param err_h A function that will be called in the event of an error being
200 * raised. The function prototype is defined in lo_types.h
201 */
202 lo_server_thread lo_server_thread_new(const char *port, lo_err_handler err_h);
203
204 /**
205 * \brief Create a new server thread to handle incoming OSC
206 * messages, and join a UDP multicast group.
207 *
208 * Server threads take care of the message reception and dispatch by
209 * transparently creating a system thread to handle incoming messages.
210 * Use this if you do not want to handle the threading yourself.
211 *
212 * \param group The multicast group to join. See documentation on IP
213 * multicast for the acceptable address range; e.g., http://tldp.org/HOWTO/Multicast-HOWTO-2.html
214 * \param port If NULL is passed then an unused port will be chosen by the
215 * system, its number may be retrieved with lo_server_thread_get_port()
216 * so it can be passed to clients. Otherwise a decimal port number, service
217 * name or UNIX domain socket path may be passed.
218 * \param err_h A function that will be called in the event of an error being
219 * raised. The function prototype is defined in lo_types.h
220 */
221 lo_server_thread lo_server_thread_new_multicast(const char *group, const char *port,
222 lo_err_handler err_h);
223
224 /**
225 * \brief Create a new server thread to handle incoming OSC
226 * messages, specifying protocol.
227 *
228 * Server threads take care of the message reception and dispatch by
229 * transparently creating a system thread to handle incoming messages.
230 * Use this if you do not want to handle the threading yourself.
231 *
232 * \param port If NULL is passed then an unused port will be chosen by the
233 * system, its number may be retrieved with lo_server_thread_get_port()
234 * so it can be passed to clients. Otherwise a decimal port number, service
235 * name or UNIX domain socket path may be passed.
236 * \param proto The protocol to use, should be one of LO_UDP, LO_TCP or LO_UNIX.
237 * \param err_h A function that will be called in the event of an error being
238 * raised. The function prototype is defined in lo_types.h
239 */
240 lo_server_thread lo_server_thread_new_with_proto(const char *port, int proto,
241 lo_err_handler err_h);
242
243 /**
244 * \brief Free memory taken by a server thread
245 *
246 * Frees the memory, and, if currently running will stop the associated thread.
247 */
248 void lo_server_thread_free(lo_server_thread st);
249
250 /**
251 * \brief Add an OSC method to the specifed server thread.
252 *
253 * \param st The server thread the method is to be added to.
254 * \param path The OSC path to register the method to. If NULL is passed the
255 * method will match all paths.
256 * \param typespec The typespec the method accepts. Incoming messages with
257 * similar typespecs (e.g. ones with numerical types in the same position) will
258 * be coerced to the typespec given here.
259 * \param h The method handler callback function that will be called it a
260 * matching message is received
261 * \param user_data A value that will be passed to the callback function, h,
262 * when its invoked matching from this method.
263 */
264 lo_method lo_server_thread_add_method(lo_server_thread st, const char *path,
265 const char *typespec, lo_method_handler h,
266 void *user_data);
267 /**
268 * \brief Delete an OSC method from the specifed server thread.
269 *
270 * \param st The server thread the method is to be removed from.
271 * \param path The OSC path of the method to delete. If NULL is passed the
272 * method will match the generic handler.
273 * \param typespec The typespec the method accepts.
274 */
275 void lo_server_thread_del_method(lo_server_thread st, const char *path,
276 const char *typespec);
277
278 /**
279 * \brief Start the server thread
280 *
281 * \param st the server thread to start.
282 * \return Less than 0 on failure, 0 on success.
283 */
284 int lo_server_thread_start(lo_server_thread st);
285
286 /**
287 * \brief Stop the server thread
288 *
289 * \param st the server thread to start.
290 * \return Less than 0 on failure, 0 on success.
291 */
292 int lo_server_thread_stop(lo_server_thread st);
293
294 /**
295 * \brief Return the port number that the server thread has bound to.
296 */
297 int lo_server_thread_get_port(lo_server_thread st);
298
299 /**
300 * \brief Return a URL describing the address of the server thread.
301 *
302 * Return value must be free()'d to reclaim memory.
303 */
304 char *lo_server_thread_get_url(lo_server_thread st);
305
306 /**
307 * \brief Return the lo_server for a lo_server_thread
308 *
309 * This function is useful for passing a thread's lo_server
310 * to lo_send_from().
311 */
312 lo_server lo_server_thread_get_server(lo_server_thread st);
313
314 /** \brief Return true if there are scheduled events (eg. from bundles) waiting
315 * to be dispatched by the thread */
316 int lo_server_thread_events_pending(lo_server_thread st);
317
318 /**
319 * \brief Create a new OSC blob type.
320 *
321 * \param size The amount of space to allocate in the blob structure.
322 * \param data The data that will be used to initialise the blob, should be
323 * size bytes long.
324 */
325 lo_blob lo_blob_new(int32_t size, const void *data);
326
327 /**
328 * \brief Free the memory taken by a blob
329 */
330 void lo_blob_free(lo_blob b);
331
332 /**
333 * \brief Return the amount of valid data in a lo_blob object.
334 *
335 * If you want to know the storage size, use lo_arg_size().
336 */
337 uint32_t lo_blob_datasize(lo_blob b);
338
339 /**
340 * \brief Return a pointer to the start of the blob data to allow contents to
341 * be changed.
342 */
343 void *lo_blob_dataptr(lo_blob b);
344
345 /** @} */
346
347 #include "lo/lo_macros.h"
348
349 #ifdef __cplusplus
350 }
351 #endif
352
353 #endif