]> sigrok.org Git - libserialport.git/blob - README
Identify ports by sp_port structure, not name.
[libserialport.git] / README
1 ----------------------------------------------------------------
2 libserialport: cross-platform library for accessing serial ports
3 ----------------------------------------------------------------
4
5 libserialport is a minimal library written in C that is intended to take care
6 of the OS-specific details when writing software that uses serial ports.
7
8 By writing your serial code to use libserialport, you enable it to work
9 transparently on any platform supported by the library.
10
11 The operations that are supported are:
12
13 - Port enumeration (obtaining a list of serial ports on the system).
14 - Opening and closing ports.
15 - Setting port parameters (baud rate, parity, etc).
16 - Reading, writing and flushing data.
17 - Obtaining error information.
18
19 libserialport is an open source project released under the LGPL3+ license.
20
21 Status
22 ======
23
24 The library should build and work on any Windows or Unix-based system. If it
25 does not, please submit a bug.
26
27 Enumeration is currently only implemented on Windows, Mac OS X and Linux. On
28 other systems enumeration will return no results, but ports can still be opened
29 by name and then used.
30
31 If you know how to enumerate available ports on another OS, please submit a bug
32 with this information, or better still a patch implementing it.
33
34 Future
35 ======
36
37 Future versions will add additional API calls for obtaining metadata about a
38 port, e.g. for USB devices the USB VID and PID of the underlying device.
39
40 Dependencies
41 ============
42
43 On Linux, libudev is required. On other systems no other libraries are required.
44
45 The libudev dependency could be eliminated in favour of direct sysfs queries at
46 the cost of some brevity. This is not currently a priority but if you feel like
47 doing this feel free to submit a patch.
48
49 Building
50 ========
51
52 The package uses a GNU style build system and requires a Unix style shell.
53 On Windows it can be built with the MinGW toolchain and MSYS environment.
54
55 Run "./autogen.sh" to generate the build system, "./configure" to setup, then
56 "make" to build the library and "make install" to install it.
57
58 API
59 ===
60
61 The API is simple, and designed to be a minimal wrapper around the serial port
62 support in each OS.
63
64 Most functions take a pointer to a struct sp_port, which represents an serial
65 port. This structure is obtained from the array returned by sp_list_ports().
66
67 All functions can return only three possible error values. SP_ERR_ARG indicates
68 the function was called with invalid arguments. SP_ERR_FAIL indicates that the
69 OS reported a failure. SP_ERR_MEM indicates that a memory allocation failed.
70 Aoth these error values are negative.
71
72 When SP_ERR_FAIL is returned, an error code or string description of the error
73 can be obtained by calling sp_last_error_code() or sp_last_error_message(). The
74 error code or message is that provided by the OS; libserialport does not define
75 any error codes or messages of its own.
76
77 Functions calls that succeed return SP_OK, which is equal to zero, or where
78 otherwise documented a positive value.
79
80 The available functions are as follows:
81
82 Enumeration
83 -----------
84
85 struct sp_port **sp_list_ports();
86
87  Lists the serial ports available on the system. The value returned is an array
88  of pointers to sp_port structures, terminated by a NULL. It should be freed after
89  use by calling sp_free_port_list().
90
91 void sp_free_port_list(struct sp_port **list);
92
93  Frees the data structure returned by sp_list_ports().
94
95 Opening and closing ports
96 -------------------------
97
98 int sp_open(struct sp_port *port, int flags);
99
100  Opens the specified serial port.
101
102  Parameters:
103
104   port:      Pointer to port structure.
105   flags:     Flags to use when opening the serial port. Possible
106              flags are: SP_MODE_RDWR, SP_MODE_RDONLY, and SP_MODE_NONBLOCK.
107
108  Returns: SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
109           if an invalid port or name is passed.
110
111 int sp_close(struct sp_port *port);
112
113  Closes the specified serial port.
114
115  Returns: SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
116           if an invalid port is passed.
117
118 Setting port parameters
119 -----------------------
120
121 int sp_set_params(struct sp_port *port, int baudrate,
122                               int bits, int parity, int stopbits,
123                               int flowcontrol, int rts, int dtr);
124
125  Sets serial parameters for the specified serial port.
126
127  Parameters:
128
129   port:        Pointer to port structure.
130   baudrate:    Baud rate to set.
131   bits:        Number of data bits to use.
132   parity:      Parity setting to use
133                (SP_PARITY_NONE, SP_PARITY_EVEN or SP_PARITY_ODD)
134   stopbits:    Number of stop bits to use (1 or 2).
135   flowcontrol: Flow control setting to use
136                (SP_FLOW_NONE, SP_FLOW_HARDWARE or SP_FLOW_SOFTWARE)
137
138  Returns: SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
139           for invalid arguments.
140
141 Reading, writing and flushing data
142 ----------------------------------
143
144 int sp_read(struct sp_port *port, const void *buf, size_t count)
145
146  Reads a number of bytes from the specified serial port.
147
148  Parameters:
149
150   port:  Pointer to port structure.
151   buf:   Buffer in which to store the bytes read.
152   count: Number of bytes to read.
153
154  Returns: The number of bytes read, SP_ERR_FAIL on failure,
155           or SP_ERR_ARG for invalid arguments.
156
157 int sp_write(struct sp_port *port, const void *buf, size_t count)
158
159  Writes a number of bytes to the specified serial port.
160
161  Parameters:
162
163   port:  Pointer to port structure.
164   buf:   Buffer containing the bytes to write.
165   count: Number of bytes to write.
166
167  Returns: The number of bytes written, SP_ERR_FAIL on failure,
168           or SP_ERR_ARG for invalid arguments.
169
170 int sp_flush(struct sp_port *port);
171
172  Flushes serial port buffers.
173
174  Returns: SP_OK on success, SP_ERR_FAIL on failure, or SP_ERR_ARG
175           if an invalid port is passed.
176
177 Error handling
178 --------------
179
180 int sp_last_error_code();
181
182  Gets the error code for a failed operation.
183
184  In order to obtain the correct result, this function should be called
185  straight after the failure, before executing any other system operations.
186
187  Returns: The system's numeric code for the error that caused the last
188           operation to fail.
189
190 char *sp_last_error_message();
191
192  Gets the error message for failed operation.
193
194  In order to obtain the correct result, this function should be called
195  straight after the failure, before executing other system operations.
196
197  Returns: The system's message for the error that caused the last
198           operation to fail. This string may be allocated by the function,
199           and should be freed after use by calling sp_free_error_message.
200
201 void sp_free_error_message(char *message);
202
203  Frees the error message returned by sp_last_error_message().