Use a common sleep implementation
Implement a common sleep function to eliminate some conditional compilation in the rest of the code.
This commit is contained in:
parent
a4d771956a
commit
752a064bb3
@ -398,6 +398,10 @@
|
|||||||
RelativePath="..\src\parser.c"
|
RelativePath="..\src\parser.c"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\platform.c"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\rbstream.c"
|
RelativePath="..\src\rbstream.c"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -64,7 +64,7 @@ libdivecomputer_la_SOURCES = \
|
|||||||
diverite_nitekq.h diverite_nitekq.c diverite_nitekq_parser.c \
|
diverite_nitekq.h diverite_nitekq.c diverite_nitekq_parser.c \
|
||||||
citizen_aqualand.h citizen_aqualand.c citizen_aqualand_parser.c \
|
citizen_aqualand.h citizen_aqualand.c citizen_aqualand_parser.c \
|
||||||
divesystem_idive.h divesystem_idive.c divesystem_idive_parser.c \
|
divesystem_idive.h divesystem_idive.c divesystem_idive_parser.c \
|
||||||
platform.h \
|
platform.h platform.c \
|
||||||
ringbuffer.h ringbuffer.c \
|
ringbuffer.h ringbuffer.c \
|
||||||
rbstream.h rbstream.c \
|
rbstream.h rbstream.c \
|
||||||
checksum.h checksum.c \
|
checksum.h checksum.c \
|
||||||
|
|||||||
@ -202,11 +202,7 @@ dc_irda_iterator_new (dc_iterator_t **out, dc_context_t *context, dc_descriptor_
|
|||||||
// modified by the previous getsockopt call.
|
// modified by the previous getsockopt call.
|
||||||
size = sizeof (data);
|
size = sizeof (data);
|
||||||
|
|
||||||
#ifdef _WIN32
|
dc_platform_sleep (1000);
|
||||||
Sleep (1000);
|
|
||||||
#else
|
|
||||||
sleep (1);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
S_CLOSE (fd);
|
S_CLOSE (fd);
|
||||||
|
|||||||
51
src/platform.c
Normal file
51
src/platform.c
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* libdivecomputer
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 Jef Driesen
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#define NOGDI
|
||||||
|
#include <windows.h>
|
||||||
|
#else
|
||||||
|
#include <time.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
dc_platform_sleep (unsigned int milliseconds)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
Sleep (milliseconds);
|
||||||
|
#else
|
||||||
|
struct timespec ts;
|
||||||
|
ts.tv_sec = (milliseconds / 1000);
|
||||||
|
ts.tv_nsec = (milliseconds % 1000) * 1000000;
|
||||||
|
|
||||||
|
while (nanosleep (&ts, &ts) != 0) {
|
||||||
|
if (errno != EINTR ) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@ -45,6 +45,8 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int dc_platform_sleep(unsigned int milliseconds);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
@ -30,7 +30,6 @@
|
|||||||
#include <fcntl.h> // fcntl
|
#include <fcntl.h> // fcntl
|
||||||
#include <termios.h> // tcgetattr, tcsetattr, cfsetispeed, cfsetospeed, tcflush, tcsendbreak
|
#include <termios.h> // tcgetattr, tcsetattr, cfsetispeed, cfsetospeed, tcflush, tcsendbreak
|
||||||
#include <sys/ioctl.h> // ioctl
|
#include <sys/ioctl.h> // ioctl
|
||||||
#include <time.h> // nanosleep
|
|
||||||
#ifdef HAVE_LINUX_SERIAL_H
|
#ifdef HAVE_LINUX_SERIAL_H
|
||||||
#include <linux/serial.h>
|
#include <linux/serial.h>
|
||||||
#endif
|
#endif
|
||||||
@ -59,6 +58,7 @@
|
|||||||
#include "iostream-private.h"
|
#include "iostream-private.h"
|
||||||
#include "iterator-private.h"
|
#include "iterator-private.h"
|
||||||
#include "descriptor-private.h"
|
#include "descriptor-private.h"
|
||||||
|
#include "platform.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
|
||||||
#define DIRNAME "/dev"
|
#define DIRNAME "/dev"
|
||||||
@ -995,16 +995,10 @@ dc_serial_get_lines (dc_iostream_t *abstract, unsigned int *value)
|
|||||||
static dc_status_t
|
static dc_status_t
|
||||||
dc_serial_sleep (dc_iostream_t *abstract, unsigned int timeout)
|
dc_serial_sleep (dc_iostream_t *abstract, unsigned int timeout)
|
||||||
{
|
{
|
||||||
struct timespec ts;
|
if (dc_platform_sleep (timeout) != 0) {
|
||||||
ts.tv_sec = (timeout / 1000);
|
|
||||||
ts.tv_nsec = (timeout % 1000) * 1000000;
|
|
||||||
|
|
||||||
while (nanosleep (&ts, &ts) != 0) {
|
|
||||||
int errcode = errno;
|
int errcode = errno;
|
||||||
if (errcode != EINTR ) {
|
SYSERROR (abstract->context, errcode);
|
||||||
SYSERROR (abstract->context, errcode);
|
return syserror (errcode);
|
||||||
return syserror (errcode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return DC_STATUS_SUCCESS;
|
return DC_STATUS_SUCCESS;
|
||||||
|
|||||||
@ -32,6 +32,7 @@
|
|||||||
#include "iostream-private.h"
|
#include "iostream-private.h"
|
||||||
#include "iterator-private.h"
|
#include "iterator-private.h"
|
||||||
#include "descriptor-private.h"
|
#include "descriptor-private.h"
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
static dc_status_t dc_serial_iterator_next (dc_iterator_t *iterator, void *item);
|
static dc_status_t dc_serial_iterator_next (dc_iterator_t *iterator, void *item);
|
||||||
static dc_status_t dc_serial_iterator_free (dc_iterator_t *iterator);
|
static dc_status_t dc_serial_iterator_free (dc_iterator_t *iterator);
|
||||||
@ -836,7 +837,11 @@ dc_serial_get_lines (dc_iostream_t *abstract, unsigned int *value)
|
|||||||
static dc_status_t
|
static dc_status_t
|
||||||
dc_serial_sleep (dc_iostream_t *abstract, unsigned int timeout)
|
dc_serial_sleep (dc_iostream_t *abstract, unsigned int timeout)
|
||||||
{
|
{
|
||||||
Sleep (timeout);
|
if (dc_platform_sleep (timeout) != 0) {
|
||||||
|
DWORD errcode = GetLastError ();
|
||||||
|
SYSERROR (abstract->context, errcode);
|
||||||
|
return syserror (errcode);
|
||||||
|
}
|
||||||
|
|
||||||
return DC_STATUS_SUCCESS;
|
return DC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
19
src/socket.c
19
src/socket.c
@ -20,6 +20,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
#include "common-private.h"
|
#include "common-private.h"
|
||||||
#include "context-private.h"
|
#include "context-private.h"
|
||||||
@ -357,21 +358,11 @@ dc_socket_ioctl (dc_iostream_t *abstract, unsigned int request, void *data, size
|
|||||||
dc_status_t
|
dc_status_t
|
||||||
dc_socket_sleep (dc_iostream_t *abstract, unsigned int timeout)
|
dc_socket_sleep (dc_iostream_t *abstract, unsigned int timeout)
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
if (dc_platform_sleep (timeout) != 0) {
|
||||||
Sleep (timeout);
|
s_errcode_t errcode = S_ERRNO;
|
||||||
#else
|
SYSERROR (abstract->context, errcode);
|
||||||
struct timespec ts;
|
return dc_socket_syserror(errcode);
|
||||||
ts.tv_sec = (timeout / 1000);
|
|
||||||
ts.tv_nsec = (timeout % 1000) * 1000000;
|
|
||||||
|
|
||||||
while (nanosleep (&ts, &ts) != 0) {
|
|
||||||
int errcode = errno;
|
|
||||||
if (errcode != EINTR ) {
|
|
||||||
SYSERROR (abstract->context, errcode);
|
|
||||||
return dc_socket_syserror (errcode);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return DC_STATUS_SUCCESS;
|
return DC_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user