]> sigrok.org Git - libserialport.git/blame - README
Identify ports by sp_port structure, not name.
[libserialport.git] / README
CommitLineData
0a16d4de
ML
1----------------------------------------------------------------
2libserialport: cross-platform library for accessing serial ports
3----------------------------------------------------------------
4
5libserialport is a minimal library written in C that is intended to take care
6of the OS-specific details when writing software that uses serial ports.
7
8By writing your serial code to use libserialport, you enable it to work
9transparently on any platform supported by the library.
10
11The 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
19libserialport is an open source project released under the LGPL3+ license.
20
21Status
22======
23
24The library should build and work on any Windows or Unix-based system. If it
25does not, please submit a bug.
26
27Enumeration is currently only implemented on Windows, Mac OS X and Linux. On
28other systems enumeration will return no results, but ports can still be opened
29by name and then used.
30
31If you know how to enumerate available ports on another OS, please submit a bug
32with this information, or better still a patch implementing it.
33
34Future
35======
36
37Future versions will add additional API calls for obtaining metadata about a
38port, e.g. for USB devices the USB VID and PID of the underlying device.
39
40Dependencies
41============
42
43On Linux, libudev is required. On other systems no other libraries are required.
44
45The libudev dependency could be eliminated in favour of direct sysfs queries at
46the cost of some brevity. This is not currently a priority but if you feel like
47doing this feel free to submit a patch.
48
49Building
50========
51
52The package uses a GNU style build system and requires a Unix style shell.
53On Windows it can be built with the MinGW toolchain and MSYS environment.
54
55Run "./autogen.sh" to generate the build system, "./configure" to setup, then
56"make" to build the library and "make install" to install it.
57
58API
59===
60
61The API is simple, and designed to be a minimal wrapper around the serial port
62support in each OS.
63
d54e9004
ML
64Most functions take a pointer to a struct sp_port, which represents an serial
65port. This structure is obtained from the array returned by sp_list_ports().
0a16d4de 66
e9a2f9c9 67All functions can return only three possible error values. SP_ERR_ARG indicates
0a16d4de 68the function was called with invalid arguments. SP_ERR_FAIL indicates that the
e9a2f9c9
ML
69OS reported a failure. SP_ERR_MEM indicates that a memory allocation failed.
70Aoth these error values are negative.
0a16d4de
ML
71
72When SP_ERR_FAIL is returned, an error code or string description of the error
73can be obtained by calling sp_last_error_code() or sp_last_error_message(). The
74error code or message is that provided by the OS; libserialport does not define
75any error codes or messages of its own.
76
77Functions calls that succeed return SP_OK, which is equal to zero, or where
78otherwise documented a positive value.
79
80The available functions are as follows:
81
82Enumeration
83-----------
84
d54e9004 85struct sp_port **sp_list_ports();
0a16d4de
ML
86
87 Lists the serial ports available on the system. The value returned is an array
d54e9004
ML
88 of pointers to sp_port structures, terminated by a NULL. It should be freed after
89 use by calling sp_free_port_list().
0a16d4de 90
d54e9004 91void sp_free_port_list(struct sp_port **list);
0a16d4de
ML
92
93 Frees the data structure returned by sp_list_ports().
94
95Opening and closing ports
96-------------------------
97
d54e9004 98int sp_open(struct sp_port *port, int flags);
0a16d4de
ML
99
100 Opens the specified serial port.
101
102 Parameters:
103
d54e9004 104 port: Pointer to port structure.
0a16d4de
ML
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
111int 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
118Setting port parameters
119-----------------------
120
121int 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
141Reading, writing and flushing data
142----------------------------------
143
144int 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
157int 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
170int 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
177Error handling
178--------------
179
180int 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
190char *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
201void sp_free_error_message(char *message);
202
203 Frees the error message returned by sp_last_error_message().