X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=libserialport.h.in;h=67df3d7b9db6e00947909235849021d08184e588;hb=d9cc984fe7acc487d39366a98f1d3759f6129361;hp=8962ef8d942eb5fb6f368408b62feea9998a2a97;hpb=f1c916ede191ec398cbe53d7f978078311c25785;p=libserialport.git diff --git a/libserialport.h.in b/libserialport.h.in index 8962ef8..67df3d7 100644 --- a/libserialport.h.in +++ b/libserialport.h.in @@ -59,19 +59,34 @@ * to restructure things somewhat, or do without some specialised features. * For particular notes on porting existing code, see @ref Porting. * - * The following subsections will help explain the principles of the API. + * Examples + * -------- + * + * Some simple example programs using libserialport are included in the + * @c examples directory in the source package: + * + * - @ref list_ports.c - Getting a list of ports present on the system. + * - @ref port_info.c - Getting information on a particular serial port. + * + * These examples are linked with the API documentation. Each function + * in the API reference includes links to where it is used in an example + * program, and each appearance of a function in the examples links + * to that function's entry in the API reference. * * Headers * ------- * * To use libserialport functions in your code, you should include the - * libserialport.h header, i.e. "#include ". + * libserialport.h header, i.e. + * @code + * #include + * @endcode * * Namespace * --------- * * All identifiers defined by the public libserialport headers use the prefix - * sp_ (for functions and data types) or SP_ (for macros and constants). + * @c sp_ (for functions and data types) or @c SP_ (for macros and constants). * * Functions * --------- @@ -132,12 +147,12 @@ * numeric result, e.g. sp_blocking_read() or sp_blocking_write(). * * An error message is only available via sp_last_error_message() in the case - * where SP_ERR_FAIL was returned by the previous function call. The error + * where @ref SP_ERR_FAIL was returned by the previous function call. The error * message returned is that provided by the OS, using the current language * settings. It is an error to call sp_last_error_code() or * sp_last_error_message() except after a previous function call returned - * SP_ERR_FAIL. The library does not define its own error codes or messages - * to accompany other return codes. + * @ref SP_ERR_FAIL. The library does not define its own error codes or + * messages to accompany other return codes. * * Thread safety * ------------- @@ -178,7 +193,7 @@ * * The library can output extensive tracing and debugging information. The * simplest way to use this is to set the environment variable - * LIBSERIALPORT_DEBUG to any value; messages will then be output to the + * @c LIBSERIALPORT_DEBUG to any value; messages will then be output to the * standard error stream. * * This behaviour is implemented by a default debug message handling @@ -206,21 +221,21 @@ * libserialport provides only a raw binary channel with no special handling. * * The second relates to blocking versus non-blocking I/O behaviour. In - * Unix-like systems this is normally specified by setting the O_NONBLOCK - * flag on the file descriptor, affecting the semantics of subsequent read() - * and write() calls. + * Unix-like systems this is normally specified by setting the @c O_NONBLOCK + * flag on the file descriptor, affecting the semantics of subsequent @c read() + * and @c write() calls. * * In libserialport, blocking and nonblocking operations are both available at - * any time. If your existing code ѕets O_NONBLOCK, you should use + * any time. If your existing code ѕets @c O_NONBLOCK, you should use * sp_nonblocking_read() and sp_nonblocking_write() to get the same behaviour - * as your existing read() and write() calls. If it does not, you should use - * sp_blocking_read() and sp_blocking_write() instead. You may also find + * as your existing @c read() and @c write() calls. If it does not, you should + * use sp_blocking_read() and sp_blocking_write() instead. You may also find * sp_blocking_read_next() useful, which reproduces the semantics of a blocking - * read() with VTIME = 0 and VMIN = 1 set in termios. + * read() with @c VTIME=0 and @c VMIN=1 set in termios. * * Finally, you should take care if your program uses custom signal handlers. * The blocking calls provided by libserialport will restart system calls that - * return with EINTR, so you will need to make your own arrangements if you + * return with @c EINTR, so you will need to make your own arrangements if you * need to interrupt blocking operations when your signal handlers are called. * This is not an issue if you only use the default handlers. * @@ -231,23 +246,23 @@ * * If your program does not use overlapped I/O, you can simply use * sp_blocking_read() and sp_blocking_write() as direct equivalents for - * ReadFile() and WriteFile(). You may also find sp_blocking_read_next() - * useful, which reproduces the special semantics of ReadFile() with - * ReadIntervalTimeout and ReadTotalTimeoutMultiplier set to MAXDWORD - * and 0 < ReadTotalTimeoutConstant < MAXDWORD. + * @c ReadFile() and @c WriteFile(). You may also find sp_blocking_read_next() + * useful, which reproduces the special semantics of @c ReadFile() with + * @c ReadIntervalTimeout and @c ReadTotalTimeoutMultiplier set to @c MAXDWORD + * and @c ReadTotalTimeoutConstant set to between @c 1 and @c MAXDWORD-1 . * * If your program makes use of overlapped I/O to continue work while a serial * operation is in progress, then you can achieve the same results using * sp_nonblocking_read() and sp_nonblocking_write(). * * Generally, overlapped I/O is combined with either waiting for completion - * once there is no more background work to do (using WaitForSingleObject() or - * WaitForMultipleObjects()), or periodically checking for completion with - * GetOverlappedResult(). If the aim is to start a new operation for further - * data once the previous one has completed, you can instead simply call the - * nonblocking functions again with the next data. If you need to wait for - * completion, use sp_wait() to determine when the port is ready to send or - * receive further data. + * once there is no more background work to do (using @c WaitForSingleObject() + * or @c WaitForMultipleObjects()), or periodically checking for completion + * with @c GetOverlappedResult(). If the aim is to start a new operation for + * further data once the previous one has completed, you can instead simply + * call the nonblocking functions again with the next data. If you need to + * wait for completion, use sp_wait() to determine when the port is ready to + * send or receive further data. */ #ifndef LIBSERIALPORT_LIBSERIALPORT_H @@ -445,6 +460,8 @@ struct sp_event_set { * * Enumerating the serial ports of a system. * + * See @ref list_ports.c for a working example of port enumeration. + * * @{ */ @@ -534,6 +551,8 @@ void sp_free_port_list(struct sp_port **ports); * * Opening, closing and querying ports. * + * See @ref port_info.c for a working example of getting port information. + * * @{ */ @@ -1706,6 +1725,11 @@ const char *sp_get_lib_version_string(void); /** @} */ +/** + * @example list_ports.c Getting a list of ports present on the system. + * @example port_info.c Getting information on a particular serial port. +*/ + #ifdef __cplusplus } #endif