+
+/**
+ @}
+@defgroup Ports Opening & closing ports
+@{
+*/
+
+/**
+ Opens the specified serial port.
+
+ @param port Pointer to port structure.
+ @param flags Flags to use when opening the serial port.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, SP_ERR_MEM on allocation
+ failure, or SP_ERR_ARG if an invalid port is passed.
+*/
+enum sp_return sp_open(struct sp_port *port, enum sp_mode flags);
+
+/**
+ Closes the specified serial port.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ if an invalid port is passed.
+*/
+enum sp_return sp_close(struct sp_port *port);
+
+/**
+ @}
+@defgroup Configuration Setting port parameters
+@{
+*/
+
+/**
+ Gets current configuration of the specified serial port.
+
+ The user should allocate a struct sp_port_config, then pass a pointer to it
+ as the config parameter. The struct will be populated with the port
+ configuration.
+
+ Any setting that is in a state not recognised or supported by
+ libserialport will have its value set to -1 in the struct.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_get_config(struct sp_port *port, struct sp_port_config *config);
+
+/**
+ Sets configuration for the specified serial port.
+
+ The user should populate a struct sp_port_config, then pass a pointer to it
+ as the config parameter.
+
+ To retain the current value of any setting, set that field to -1.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_config(struct sp_port *port, const struct sp_port_config *config);
+
+/**
+ Sets the baud rate for the specified serial port.
+
+ @param port Pointer to port structure.
+ @param baudrate Baud rate in bits per second.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_baudrate(struct sp_port *port, int baudrate);
+
+/**
+ Sets the number of data bits for the specified serial port.
+
+ @param port Pointer to port structure.
+ @param bits Number of data bits to use. Valid values are 5 to 8.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_bits(struct sp_port *port, int bits);
+
+/**
+ Sets the parity for the specified serial port.
+
+ @param port Pointer to port structure.
+ @param parity Parity setting to use.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_parity(struct sp_port *port, enum sp_parity parity);
+
+/**
+ Sets the number of stop bits for the specified port.
+
+ @param port Pointer to port structure.
+ @param stopbits Number of stop bits to use (1 or 2).
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_stopbits(struct sp_port *port, int stopbits);
+
+/**
+ Sets the flow control type for the specified serial port.
+
+ This function is a wrapper that sets the RTS, CTS, DTR, DSR and
+ XON/XOFF settings as necessary for the specified flow control
+ type. For more fine-grained control of these settings, use their
+ individual configuration functions or the sp_set_config() function.
+
+ @param port Pointer to port structure.
+ @param flowcontrol Flow control setting to use.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_flowcontrol(struct sp_port *port, enum sp_flowcontrol flowcontrol);
+
+/**
+ Sets the RTS pin behaviour for the specified port.
+
+ @param port Pointer to port structure.
+ @param rts RTS pin mode.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_rts(struct sp_port *port, enum sp_rts rts);
+
+/**
+ Sets the CTS pin behaviour for the specified port.
+
+ @param port Pointer to port structure.
+ @param cts CTS pin mode.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_cts(struct sp_port *port, enum sp_cts cts);
+
+/**
+ Sets the DTR pin behaviour for the specified port.
+
+ @param port Pointer to port structure.
+ @param dtr DTR pin mode.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_dtr(struct sp_port *port, enum sp_dtr dtr);
+
+/**
+ Sets the RTS pin behaviour for the specified port.
+
+ @param port Pointer to port structure.
+ @param dsr DSR pin mode.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_dsr(struct sp_port *port, enum sp_dsr dsr);
+
+/**
+ Configures XON/XOFF flow control for the specified port.
+
+ @param port Pointer to port structure.
+ @param xon_xoff XON/XOFF flow control mode.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ for invalid arguments.
+*/
+enum sp_return sp_set_xon_xoff(struct sp_port *port, enum sp_xonxoff xon_xoff);
+
+/**
+ @}
+@defgroup Data Reading, writing & flushing data
+@{
+*/
+
+/**
+ Reads bytes from the specified serial port. Note that this function may
+ return after reading less than the specified number of bytes; it is the
+ user's responsibility to iterate as necessary in this case.
+
+ @param port Pointer to port structure.
+ @param buf Buffer in which to store the bytes read.
+ @param count Maximum number of bytes to read.
+
+ @return The number of bytes read, SP_ERR_FAIL on failure,
+ or SP_ERR_ARG for invalid arguments.
+*/
+enum sp_return sp_read(struct sp_port *port, void *buf, size_t count);
+
+/**
+ Write bytes to the specified serial port. Note that this function may
+ return after writing less than the specified number of bytes; it is the
+ user's responsibility to iterate as necessary in this case.
+
+ @param port Pointer to port structure.
+ @param buf Buffer containing the bytes to write.
+ @param count Maximum number of bytes to write.
+
+ @return The number of bytes written, SP_ERR_FAIL on failure,
+ or SP_ERR_ARG for invalid arguments.
+*/
+enum sp_return sp_write(struct sp_port *port, const void *buf, size_t count);
+
+/**
+ Flushes serial port buffers.
+
+ @return SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
+ if an invalid port is passed.
+*/
+enum sp_return sp_flush(struct sp_port *port);
+
+/**
+ @}
+@defgroup Errors Obtaining error information
+@{
+*/
+
+/**
+ Gets the error code for a failed operation.
+
+ In order to obtain the correct result, this function should be called
+ straight after the failure, before executing any other system operations.
+
+ @return The system's numeric code for the error that caused the last
+ operation to fail.
+*/