2 * This file is part of the libserialport project.
4 * Copyright (C) 2013 Martin Ling <martin-libserialport@earth.li>
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as
8 * published by the Free Software Foundation, either version 3 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
22 \mainpage libserialport API
27 libserialport is a minimal library written in C that is intended to take care
28 of the OS-specific details when writing software that uses serial ports.
30 By writing your serial code to use libserialport, you enable it to work
31 transparently on any platform supported by the library.
33 The operations that are supported are:
35 - Port enumeration (obtaining a list of serial ports on the system).
36 - Opening and closing ports.
37 - Setting port parameters (baud rate, parity, etc).
38 - Reading, writing and flushing data.
39 - Obtaining error information.
41 libserialport is an open source project released under the LGPL3+ license.
46 The API is simple, and designed to be a minimal wrapper around the serial port
49 Most functions take a pointer to a struct sp_port, which represents a serial
50 port. These structures are always allocated and freed by the library.
52 All functions can return only three possible error values. SP_ERR_ARG indicates
53 the function was called with invalid arguments. SP_ERR_FAIL indicates that the
54 OS reported a failure. SP_ERR_MEM indicates that a memory allocation failed.
55 All of these error values are negative.
57 When SP_ERR_FAIL is returned, an error code or string description of the error
58 can be obtained by calling sp_last_error_code() or sp_last_error_message(). The
59 error code or message is that provided by the OS; libserialport does not define
60 any error codes or messages of its own.
62 Function calls that succeed return SP_OK, which is equal to zero, or where
63 otherwise documented a positive value.
67 #ifndef LIBSERIALPORT_H
68 #define LIBSERIALPORT_H
79 /* Package version macros (e.g. for conditional compilation). */
80 #define SP_PACKAGE_VERSION_MAJOR @SP_PACKAGE_VERSION_MAJOR@
81 #define SP_PACKAGE_VERSION_MINOR @SP_PACKAGE_VERSION_MINOR@
82 #define SP_PACKAGE_VERSION_STRING "@SP_PACKAGE_VERSION@"
84 /* Library/libtool version macros (e.g. for conditional compilation). */
85 #define SP_LIB_VERSION_CURRENT @SP_LIB_VERSION_CURRENT@
86 #define SP_LIB_VERSION_REVISION @SP_LIB_VERSION_REVISION@
87 #define SP_LIB_VERSION_AGE @SP_LIB_VERSION_AGE@
88 #define SP_LIB_VERSION_STRING "@SP_LIB_VERSION@"
92 /** Name used to open the port */
95 /* OS-specific port handle */
104 /** Configuration for a serial port. */
105 struct sp_port_config {
106 /** Baud rate in bits per second. */
108 /** Number of data bits to use. Valid values are 5 to 8. */
110 /** Parity setting to use. */
112 /** Number of stop bits to use (1 or 2). */
122 /** XON/XOFF flow control mode. */
127 /** Return values. */
129 /** Operation completed successfully. */
131 /** Invalid arguments were passed to the function. */
133 /** A system error occured while executing the operation. */
135 /** A memory allocation failed while executing the operation. */
139 /** Port access modes. */
141 /** Open port for read/write access. */
143 /** Open port for read access only. */
145 /** Open port in non-blocking mode. */
146 SP_MODE_NONBLOCK = 4,
149 /** Parity settings. */
159 /** RTS pin behaviour. */
165 /** RTS used for flow control. */
166 SP_RTS_FLOW_CONTROL = 2
169 /** CTS pin behaviour. */
173 /** CTS used for flow control. */
174 SP_CTS_FLOW_CONTROL = 1
177 /** DTR pin behaviour. */
183 /** DTR used for flow control. */
184 SP_DTR_FLOW_CONTROL = 2
187 /** DSR pin behaviour. */
191 /** DSR used for flow control. */
192 SP_DSR_FLOW_CONTROL = 1
195 /** XON/XOFF flow control behaviour. */
197 /** XON/XOFF disabled. */
198 SP_XONXOFF_DISABLED = 0,
199 /** XON/XOFF enabled for input only. */
201 /** XON/XOFF enabled for output only. */
203 /** XON/XOFF enabled for input and output. */
207 /** Standard flow control combinations. */
209 /** No flow control. */
210 SP_FLOWCONTROL_NONE = 0,
211 /** Software flow control using XON/XOFF characters. */
212 SP_FLOWCONTROL_XONXOFF = 1,
213 /** Hardware flow control using RTS/CTS signals. */
214 SP_FLOWCONTROL_RTSCTS = 2,
215 /** Hardware flow control using DTR/DSR signals. */
216 SP_FLOWCONTROL_DTRDSR = 3
220 Obtains a pointer to a new sp_port structure representing the named port. The
221 user should allocate a variable of type "struct sp_port *" and pass a pointer
222 to this to receive the result.
224 The result should be freed after use by calling sp_free_port().
226 @return SP_OK on success, SP_ERR_FAIL on failure, SP_ERR_MEM on allocation
227 failure, or SP_ERR_ARG if an invalid pointer is passed. If any error
228 is returned, the variable pointed to by port_ptr will be set to NULL.
229 Otherwise, it will be set to point to the newly allocated port.
231 int sp_get_port_by_name(const char *portname, struct sp_port **port_ptr);
234 Frees a port structure obtained from sp_get_port_by_name() or sp_copy_port().
236 void sp_free_port(struct sp_port *port);
239 Lists the serial ports available on the system. The result obtained is an
240 array of pointers to sp_port structures, terminated by a NULL. The user should
241 allocate a variable of type "struct sp_port **" and pass a pointer to this to
244 The result should be freed after use by calling sp_free_port_list(). If a port
245 from the list is to be used after freeing the list, it must be copied first
246 using sp_copy_port().
248 @return SP_OK on success, SP_ERR_FAIL on failure, SP_ERR_MEM on allocation
249 failure, or SP_ERR_ARG if an invalid pointer is passed. If any error
250 is returned, the variable pointed to by list_ptr will be set to NULL.
251 Otherwise, it will be set to point to the newly allocated array.
253 int sp_list_ports(struct sp_port ***list_ptr);
256 Makes a new copy of a sp_port structure. The user should allocate a variable
257 of type "struct sp_port *" and pass a pointer to this to receive the result.
259 The copy should be freed after use by calling sp_free_port().
261 @return SP_OK on success, SP_ERR_MEM on allocation failure, or SP_ERR_ARG
262 if an invalid port or pointer is passed. If any error is returned,
263 the variable pointed to by copy_ptr will be set to NULL. Otherwise,
264 it will be set to point to the newly allocated copy.
266 int sp_copy_port(const struct sp_port *port, struct sp_port **copy_ptr);
269 Frees a port list obtained from sp_list_ports(). This will also free all
270 the sp_port structures referred to from the list; any that are to be retained
271 must be copied first using sp_copy_port().
273 void sp_free_port_list(struct sp_port **ports);
276 Opens the specified serial port.
278 @param port Pointer to port structure.
279 @param flags Flags to use when opening the serial port. Possible
280 flags are: SP_MODE_RDWR, SP_MODE_RDONLY, and
283 @return SP_OK on success, SP_ERR_FAIL on failure, SP_ERR_MEM on allocation
284 failure, or SP_ERR_ARG if an invalid port is passed.
286 int sp_open(struct sp_port *port, int flags);
289 Closes the specified serial port.
291 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
292 if an invalid port is passed.
294 int sp_close(struct sp_port *port);
297 Reads bytes from the specified serial port. Note that this function may
298 return after reading less than the specified number of bytes; it is the
299 user's responsibility to iterate as necessary in this case.
301 @param port Pointer to port structure.
302 @param buf Buffer in which to store the bytes read.
303 @param count Maximum number of bytes to read.
305 @return The number of bytes read, SP_ERR_FAIL on failure,
306 or SP_ERR_ARG for invalid arguments.
308 int sp_read(struct sp_port *port, void *buf, size_t count);
311 Write bytes to the specified serial port. Note that this function may
312 return after writing less than the specified number of bytes; it is the
313 user's responsibility to iterate as necessary in this case.
315 @param port Pointer to port structure.
316 @param buf Buffer containing the bytes to write.
317 @param count Maximum number of bytes to write.
319 @return The number of bytes written, SP_ERR_FAIL on failure,
320 or SP_ERR_ARG for invalid arguments.
322 int sp_write(struct sp_port *port, const void *buf, size_t count);
325 Flushes serial port buffers.
327 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
328 if an invalid port is passed.
330 int sp_flush(struct sp_port *port);
333 Gets current configuration of the specified serial port.
335 The user should allocate a struct sp_port_config, then pass a pointer to it
336 as the config parameter. The struct will be populated with the port
339 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
340 for invalid arguments.
342 int sp_get_config(struct sp_port *port, struct sp_port_config *config);
345 Sets all parameters for the specified serial port.
347 The user should populate a struct sp_port_config, then pass a pointer to it
348 as the config parameter.
350 To retain the current value of any setting, set the field to to a
353 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
354 for invalid arguments.
356 int sp_set_config(struct sp_port *port, const struct sp_port_config *config);
359 Sets the baud rate for the specified serial port.
361 @param port Pointer to port structure.
362 @param baud Baud rate in bits per second.
364 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
365 for invalid arguments.
367 int sp_set_baudrate(struct sp_port *port, int baudrate);
370 Sets the number of data bits for the specified serial port.
372 @param port Pointer to port structure.
373 @param bits Number of data bits to use. Valid values are 5 to 8.
375 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
376 for invalid arguments.
378 int sp_set_bits(struct sp_port *port, int bits);
381 Sets the parity for the specified serial port.
383 @param port Pointer to port structure.
384 @param parity Parity setting to use.
385 (SP_PARITY_NONE, SP_PARITY_EVEN or SP_PARITY_ODD)
387 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
388 for invalid arguments.
390 int sp_set_parity(struct sp_port *port, int parity);
393 Sets the number of stop bits for the specified port.
395 @param port Pointer to port structure.
396 @param stopbits Number of stop bits to use (1 or 2).
398 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
399 for invalid arguments.
401 int sp_set_stopbits(struct sp_port *port, int stopbits);
404 Sets the flow control type for the specified serial port.
406 This function is a wrapper that sets the RTS, CTS, DTR, DSR and
407 XON/XOFF settings as necessary for the specified flow control
408 type. For more fine-grained control of these settings, use their
409 individual configuration functions or the sp_set_config() function.
411 @param port Pointer to port structure.
412 @param flowcontrol Flow control setting to use. Valid settings are:
414 SP_FLOWCONTROL_NONE: No flow control.
415 SP_FLOWCONTROL_XONXOFF: Software flow control using XON/XOFF characters.
416 SP_FLOWCONTROL_RTSCTS: Hardware flow control using RTS/CTS signals.
417 SP_FLOWCONTROL_DTRDSR: Hardware flow control using DTR/DSR signals.
419 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
420 for invalid arguments.
422 int sp_set_flowcontrol(struct sp_port *port, int flowcontrol);
425 Sets the RTS pin behaviour for the specified port.
427 @param port Pointer to port structure.
428 @param rts RTS pin mode.
429 (SP_RTS_ON, SP_RTS_OFF or SP_RTS_FLOW_CONTROL)
431 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
432 for invalid arguments.
434 int sp_set_rts(struct sp_port *port, int rts);
437 Sets the CTS pin behaviour for the specified port.
439 @param port Pointer to port structure.
440 @param cts CTS pin mode.
441 (SP_CTS_IGNORE or SP_CTS_FLOW_CONTROL)
443 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
444 for invalid arguments.
446 int sp_set_cts(struct sp_port *port, int cts);
449 Sets the DTR pin behaviour for the specified port.
451 @param port Pointer to port structure.
452 @param dtr DTR pin mode.
453 (SP_DTR_ON, SP_DTR_OFF or SP_DTR_FLOW_CONTROL)
455 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
456 for invalid arguments.
458 int sp_set_dtr(struct sp_port *port, int dtr);
461 Sets the RTS pin behaviour for the specified port.
463 @param port Pointer to port structure.
464 @param dsr DSR pin mode.
465 (SP_DSR_IGNORE or SP_DSR_FLOW_CONTROL)
467 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
468 for invalid arguments.
470 int sp_set_dsr(struct sp_port *port, int dsr);
473 Configures XON/XOFF flow control for the specified port.
475 @param port Pointer to port structure.
476 @param xon_xoff XON/XOFF flow control mode.
477 (SP_XONXOFF_DISABLED, SP_XONXOFF_IN,
478 SP_XONXOFF_OUT or SP_XONXOFF_INOUT)
480 @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
481 for invalid arguments.
483 int sp_set_xon_xoff(struct sp_port *port, int xon_xoff);
486 Gets the error code for a failed operation.
488 In order to obtain the correct result, this function should be called
489 straight after the failure, before executing any other system operations.
491 @return The system's numeric code for the error that caused the last
494 int sp_last_error_code(void);
497 Gets the error message for a failed operation.
499 In order to obtain the correct result, this function should be called
500 straight after the failure, before executing other system operations.
502 @return The system's message for the error that caused the last
503 operation to fail. This string may be allocated by the function,
504 and should be freed after use by calling sp_free_error_message.
506 char *sp_last_error_message(void);
509 Frees an error message returned by sp_last_error_message().
511 void sp_free_error_message(char *message);
517 #endif /* LIBSERIALPORT_H */