Martin Ling
e919e2efaa
Adjust headers and include ordering for MSVC support.
2020-01-24 05:39:12 +00:00
Martin Ling
060d1d8a73
windows: Loop over WriteFile() if write size exceeds limit.
...
Fixes #1469 .
2020-01-23 03:35:47 +00:00
Martin Ling
39acdc47db
Move timing routines to separate file.
2020-01-20 04:33:24 +00:00
Martin Ling
bd72614f08
Move commonly used start flag into timeout helpers.
2020-01-20 04:33:23 +00:00
Martin Ling
9d1ca7c855
Move special case for poll() timeout to call site.
2020-01-20 04:31:59 +00:00
Martin Ling
3317d678de
Support timing helpers on Windows.
2020-01-20 04:31:59 +00:00
Martin Ling
08eb25f53a
More generic solution for limiting per-call timeout.
2020-01-20 04:31:59 +00:00
Martin Ling
32dbe2d298
Move repetitive timeout code into helper functions.
2020-01-20 04:31:59 +00:00
Martin Ling
9a7945af84
Abstract all time handling operations.
2020-01-20 04:31:59 +00:00
Martin Ling
abd31fd9f9
android: Fix build compatibility with NDK platform 21 and up.
...
In platforms 21 and higher of the NDK, linux/serial.h is available,
which it was not before. This broke the build, because the configure
script would detect the availability of 'struct serial_struct' in that
header and set HAVE_STRUCT_SERIAL_STRUCT, but the #ifndef __ANDROID__
in libserialport_internal.h stopped us actually including the header.
This change fixes things to build with all versions of the NDK, and is
tested with builds for arm from versions 9 to 24.
Version 21 also added availability of tcdrain(), so we also use that
where available, and only use the direct ioctl() method on NDK < 21.
Fixes #1078 .
2020-01-04 23:00:17 +00:00
Christian Seiler
fa106ef155
Use O_CLOEXEC where available
...
Ensures that the file descriptor is (by default) not passed to
subprocesses spawned by applications using libserialport.
This fixes bug #1051 .
2020-01-04 18:21:35 +01:00
Uwe Hermann
bd0fb6094f
windows: Fix a build error.
...
serialport.c: In function 'get_time':
serialport.c:64:6: warning: implicit declaration of function 'clock_gettime' [-Wimplicit-function-declaration]
if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
^
serialport.c:64:20: error: 'CLOCK_MONOTONIC' undeclared (first use in this function)
if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
^
serialport.c:64:20: note: each undeclared identifier is reported only once for each function it appears in
serialport.c:65:17: error: 'CLOCK_REALTIME' undeclared (first use in this function)
clock_gettime(CLOCK_REALTIME, &ts);
^
serialport.c: At top level:
serialport.c:60:13: warning: 'get_time' defined but not used [-Wunused-function]
static void get_time(struct timeval *time)
^
2019-12-28 23:39:15 +01:00
Martin Ling
7fb9a7b0a7
Fall back to CLOCK_REALTIME if CLOCK_MONOTONIC not usable.
...
Sounds like this may be necessary on some older systems.
2019-12-28 22:02:19 +01:00
Martin Ling
192e77492a
Use mach_absolute_time() on OSX without clock_gettime().
...
This should fix #759 for OSX versions below 10.12.
2019-12-28 22:02:19 +01:00
Martin Ling
f40ea9d461
Use clock_gettime(CLOCK_MONOTONIC) if available.
...
Should fix #759 except on OSX versions below 10.12, which don't
have clock_gettime.
2019-12-28 22:02:19 +01:00
Martin Ling
573feabc63
Move all gettimeofday() calls into a wrapper function.
2019-12-28 22:02:19 +01:00
Martin Ling
b457865b8f
windows: Use architecture-specific size limit for WriteFile calls.
2019-12-28 20:43:22 +01:00
Martin Ling
39df7833f7
windows: Use an adaptively sized buffer for nonblocking writes.
2019-12-28 20:43:22 +01:00
Martin Ling
6bd6a8b520
windows: Await completion of previous write before changing config.
2019-12-28 20:43:22 +01:00
Martin Ling
55ab7e0b6b
unix: Fix handling of EAGAIN in sp_nonblocking_write().
2019-12-28 20:43:22 +01:00
Uwe Hermann
81243567bc
Random minor whitespace fixes.
2019-12-28 19:23:30 +01:00
Martin Ling
62ed9f801a
windows: Break out helper function for awaiting previous write completion.
2017-09-13 19:27:50 +02:00
Stefan Tauner
95bad38c5b
Canonicalize symlinks in portnames
...
This allows users to supply symlinks created e.g. by udev rules instead
of the actual device names.
2017-09-13 19:27:50 +02:00
Uwe Hermann
aee7d69195
Fix ERROR_SEM_TIMEOUT issue on Windows.
...
The sp_blocking_write() call was incorrectly returning an error upon
ERROR_SEM_TIMEOUT. It now returns 0 instead.
2016-01-27 12:35:45 +01:00
Uwe Hermann
888fb45d66
Fix sp_blocking_read_next() implementation on Windows.
...
A ReadFile() call needed to check the actual number of bytes read,
instead of assuming all requested bytes were read.
2016-01-22 15:32:00 +01:00
Martin Ling
8062087ab3
Change debug message to "Port not open" when a closed port is used.
...
Fixes bug #710 .
2015-12-29 13:30:30 +01:00
Martin Ling
ae2c5825e7
windows: Handle ERROR_IO_PENDING from ReadFile in sp_nonblocking_read().
...
This fixes bug #707 .
2015-12-09 12:43:11 +01:00
Martin Ling
127d8d0ce7
sp_wait: Avoid overflow of timeout parameter to poll().
2015-10-13 15:04:03 +01:00
Daniel Elstner
1a584c45b0
Build: Include config.h first in all source files
2015-09-13 20:04:31 +02:00
Martin Ling
f77bb46df5
Update copyright notices.
2015-05-31 18:26:53 +02:00
Martin Ling
6b8eee0682
Fix possible use of uninitialised variable in poll() setup.
2015-05-30 21:38:03 +02:00
Martin Ling
e5c2630eee
Add new sp_blocking_read_next() function.
2015-05-27 11:09:26 +02:00
Martin Ling
0188a545c7
windows: Always check and set ReadTotalTimeoutMultiplier.
...
This is not currently touched, but will be by the upcoming
sp_blocking_read_next() function.
2015-05-27 11:09:25 +02:00
Martin Ling
76222ee578
posix: Make sure blocking operations can't time out without trying.
2015-05-27 11:09:25 +02:00
Martin Ling
c3cee38c3b
posix: Consistent debug output when blocking operations time out.
2015-05-27 11:09:25 +02:00
Martin Ling
772c586133
posix: Move FD_ZERO() and FD_SET() calls outside loops.
2015-05-27 11:09:25 +02:00
Martin Ling
27911925c1
windows: Always check return value of GetOverlappedResult().
2015-05-27 11:09:25 +02:00
Martin Ling
bbe566fe1c
windows: Restructure if/else blocks with unnecessary indentation.
2015-05-27 11:09:25 +02:00
Martin Ling
8ebfaf8966
windows: restart_wait_if_needed(): Inline receive buffer check.
...
This removes all the debug spam arising from calling sp_input_waiting().
2015-05-27 11:09:25 +02:00
Martin Ling
21ae5ce197
windows: restart_wait_if_needed(): Skip buffer check if no bytes read.
2015-05-27 11:09:25 +02:00
Martin Ling
94a314a806
windows: Refactor duplicated code into a static function.
2015-05-27 11:09:25 +02:00
Martin Ling
27a58c0521
windows: Avoid unnecessary calls to SetCommTimeouts().
...
This fixes bug #586 .
2015-05-27 11:09:13 +02:00
Martin Ling
9a0c4bbdbe
windows: Strip CR/LF from end of system error messages.
...
This fixes bug #585 .
2015-05-27 11:08:30 +02:00
Uwe Hermann
6392641545
sp_list_ports(): Actually set list_ptr NULL as documented.
2015-05-06 17:06:06 +02:00
Uwe Hermann
6aad5bdd47
Fix a potential segfault in sp_get_config_*().
2015-05-06 17:06:06 +02:00
Uwe Hermann
5f64c28551
Fix a potential segfault in sp_get_port_handle().
2015-05-06 17:06:05 +02:00
Uwe Hermann
1b91c6eadb
Rename timeout to timeout_ms for clarity in a few places.
2015-04-19 19:01:08 +02:00
Uwe Hermann
f14809393a
Constify the sp_get_port_description() parameter.
2015-04-19 19:01:08 +02:00
Uwe Hermann
ad036cc8ef
Constify the sp_get_port_transport() parameter.
2015-04-19 18:28:10 +02:00
Uwe Hermann
23e7fa372a
Fix two compiler warnings on platforms without enumeration support.
...
serialport.c: In function 'sp_list_ports':
serialport.c:326:6: warning: unused variable 'ret' [-Wunused-variable]
int ret;
^
serialport.c:325:19: warning: unused variable 'list' [-Wunused-variable]
struct sp_port **list;
^
2015-04-03 22:11:07 +02:00