diff --git a/Makefile.dep b/Makefile.dep index 7439cc8e5e4d0949b6206fcbe1a6908f2de07b54..8d2327454f435f83f9cddc3f1cd579fc2d2aa12a 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -283,8 +283,7 @@ ifneq (,$(filter uart_stdio,$(USEMODULE))) endif ifneq (,$(filter posix,$(USEMODULE))) - USEMODULE += timex - USEMODULE += vtimer + USEMODULE += xtimer endif ifneq (,$(filter posix_semaphore,$(USEMODULE))) diff --git a/cpu/atmega_common/avr-libc-extra/unistd.h b/cpu/atmega_common/avr-libc-extra/unistd.h new file mode 100644 index 0000000000000000000000000000000000000000..a207def04b38fc5da2516c5938257a1ef663af05 --- /dev/null +++ b/cpu/atmega_common/avr-libc-extra/unistd.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +#ifndef UNISTD_H_ +#define UNISTD_H_ + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define STDIN_FILENO 0 ///< stdin file descriptor +#define STDOUT_FILENO 1 ///< stdout file descriptor +#define STDERR_FILENO 2 ///< stderr file descriptor + +int close(int fildes); + +typedef uint32_t useconds_t; +int usleep(useconds_t usec); +unsigned int sleep(unsigned int seconds); + +#ifdef __cplusplus +} +#endif + +#endif /* UNISTD_H_ */ diff --git a/cpu/msp430-common/include/unistd.h b/cpu/msp430-common/include/unistd.h new file mode 100644 index 0000000000000000000000000000000000000000..a207def04b38fc5da2516c5938257a1ef663af05 --- /dev/null +++ b/cpu/msp430-common/include/unistd.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +#ifndef UNISTD_H_ +#define UNISTD_H_ + +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +#define STDIN_FILENO 0 ///< stdin file descriptor +#define STDOUT_FILENO 1 ///< stdout file descriptor +#define STDERR_FILENO 2 ///< stderr file descriptor + +int close(int fildes); + +typedef uint32_t useconds_t; +int usleep(useconds_t usec); +unsigned int sleep(unsigned int seconds); + +#ifdef __cplusplus +} +#endif + +#endif /* UNISTD_H_ */ diff --git a/sys/include/posix_io.h b/sys/include/posix_io.h deleted file mode 100644 index 0f4e998b4422b39dc39ebeac1095fd007867b142..0000000000000000000000000000000000000000 --- a/sys/include/posix_io.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (C) 2013 INRIA. - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @ingroup posix - * @{ - * @file - * @brief POSIX-like IO - * - * @author Kaspar Schleiser <kaspar@schleiser.de> - * @author Stephan Zeisberg <zeisberg@mi.fu-berlin.de> - * @author Oliver Hahm <oleg@hobbykeller.org> - * @author Martine Lenders <mlenders@inf.fu-berlin.de> - */ -#ifndef __READ_H -#define __READ_H - -#include "kernel_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define OPEN 0 -#define CLOSE 1 -#define READ 2 -#define WRITE 3 - -/** - * @brief POSIX IO ringbuffer - */ -struct posix_iop_t { - /** number of bytes */ - int nbytes; - /** array for the ringbuffer */ - char *buffer; -}; - -/** - * @brief Opens a file descriptor - represented by a corresponding thread - * - * @param[in] pid The thread managing the fd to open - * @param[in] flags Access modes - * - * @return 0 on success - * @return a negative value in error case - */ -int posix_open(int pid, int flags); - -/** - * @brief Closes an open file descriptor - * - * @param[in] pid The opened thread - * - * @return 0 on success - * @return a negative value in error case - */ -int posix_close(int pid); - -/** - * @brief Reads from an open file descriptor - * - * @param[in] pid The thread managing the open fd - * @param[out] buffer Buffer to fill - * @param[in] bufsize Read up to that many bytes into @p buffer - * - * @return the number of read bytes - */ -int posix_read(int pid, char *buffer, int bufsize); - -/** - * @brief Writes to an open file descriptor - * - * @param[in] pid The thread managing the open fd - * @param[in] buffer Buffer to write - * @param[in] bufsize Write that many bytes from @p buffer - * - * @return the number of written bytes - */ -int posix_write(int pid, char *buffer, int bufsize); - -#ifdef __cplusplus -} -#endif - -/** @} */ -#endif /* __READ_H */ diff --git a/sys/posix/fd.c b/sys/posix/fd.c index 9a1580e73e84c05394e416dcffc18711a41da9fa..391e4eca9cade0e7a111c35a8611f0efcd0a900f 100644 --- a/sys/posix/fd.c +++ b/sys/posix/fd.c @@ -20,7 +20,6 @@ #include <stdlib.h> #include <string.h> -#include "posix_io.h" #include "unistd.h" #include "fd.h" diff --git a/sys/posix/include/unistd.h b/sys/posix/include/unistd.h deleted file mode 100644 index 3bda2a070e9dec19bbdda0ef0bf50826e99afcd5..0000000000000000000000000000000000000000 --- a/sys/posix/include/unistd.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright (C) 2013 Freie Universität Berlin - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - */ - -/** - * @addtogroup posix - * @{ - */ - -/** - * @file - * @brief standard symbolic constants and types - * @see <a href="http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/unistd.h.html"> - * The Open Group Base Specifications Issue 7, <unistd.h> - * </a> - * - * @author Martine Lenders <mlenders@inf.fu-berlin.de> - */ -#ifndef _UNISTD_H -#define _UNISTD_H - -#include <stdint.h> - -#include "timex.h" -#include "vtimer.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define STDIN_FILENO 0 ///< stdin file descriptor -#define STDOUT_FILENO 1 ///< stdout file descriptor -#define STDERR_FILENO 2 ///< stderr file descriptor - -/** - * @brief Close a file descriptor. - * @details shall deallocate the file descriptor indicated by *fildes*. To - * deallocate means to make the file descriptor available for return - * by subsequent calls to open() or other functions that allocate file - * descriptors. All outstanding record locks owned by the process on - * the file associated with the file descriptor shall be removed (that - * is, unlocked). - * - * @see <a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/close.html"> - * The Open Group Base Specification Issue 7, close - * </a> - * - * @param[in] fildes The file descriptor to the file which is to close. - * @return Upon successful completion, 0 shall be returned; otherwise, -1 - * shall be returned and errno set to indicate the error. - */ -int close(int fildes); - -/** - * @name Microseconds data type - * @{ - */ -#ifndef __USECONDS_T_TYPE -#if !(defined(__MACH__) || defined(__FreeBSD__)) -typedef unsigned long __USECONDS_T_TYPE; -typedef __USECONDS_T_TYPE __useconds_t; -#else -#ifdef __MACH__ -typedef __darwin_useconds_t __useconds_t; -#endif -#endif -#endif -typedef __useconds_t useconds_t; -/** @} */ - -/** - * @brief the caller will sleep for given amount of micro seconds - * @details The usleep() function will cause the calling thread to be - * suspended from execution until either the number of real-time microseconds - * specified by the argument useconds has elapsed or a signal is delivered to - * the calling thread and its action is to invoke a signal-catching function - * or to terminate the process. The suspension time may be longer than - * requested due to the scheduling of other activity by the system. - * - * @see <a href="http://pubs.opengroup.org/onlinepubs/7908799/xsh/usleep.html"> - * The Open Group Base Specification Issue 2, usleep - * </a> - * - * @param useconds time to sleep in micro seconds - * @return 0 on success - */ -int usleep(useconds_t useconds); - -/** - * @brief the caller will sleep for given amount of seconds - * @details The sleep() function shall cause the calling thread to be suspended - * from execution until either the number of realtime seconds - * specified by the argument seconds has elapsed or a signal is - * delivered to the calling thread and its action is to invoke a - * signal-catching function or to terminate the process. The - * suspension time may be longer than requested due to the scheduling - * of other activity by the system. - * - * @see <a href="http://pubs.opengroup.org/onlinepubs/009695399/functions/sleep.html"> - * The Open Group Base Specification Issue 6, sleep - * </a> - * - * @param seconds time to sleep in seconds - * @return 0 on success - */ -unsigned int sleep(unsigned int seconds); - -#ifdef __cplusplus -} -#endif - -/** - * @} - */ -#endif /* _UNISTD_H */ diff --git a/sys/posix/posix_io.c b/sys/posix/posix_io.c deleted file mode 100644 index d67ee6c55d77039b2cedd3b0f10e8a0af2cbc98c..0000000000000000000000000000000000000000 --- a/sys/posix/posix_io.c +++ /dev/null @@ -1,69 +0,0 @@ -/** - * POSIX implementation of basic IO operations. - * - * Copyright (C) 2013, INRIA. - * - * This file is subject to the terms and conditions of the GNU Lesser - * General Public License v2.1. See the file LICENSE in the top level - * directory for more details. - * - * @ingroup sys_posix - * @{ - * @file - * @brief Implementation of basic POSIX IO functionality. - * @author Kaspar Schleiser <kaspar@schleiser.de> - * @} - */ - -#include "thread.h" -#include "msg.h" - -#include "posix_io.h" - - -static int _posix_fileop(kernel_pid_t pid, int op, int flags) -{ - msg_t m; - m.type = op; - m.content.value = flags; - msg_send_receive(&m, &m, pid); - return m.content.value; -} - -static int _posix_fileop_data(kernel_pid_t pid, int op, char *buffer, int nbytes) -{ - struct posix_iop_t r; - r.nbytes = nbytes; - r.buffer = buffer; - - msg_t m; - m.type = op; - m.content.ptr = (char *) &r; - - msg_send_receive(&m, &m, pid); - - return r.nbytes; -} - -int posix_open(int pid, int flags) -{ - if (pid == KERNEL_PID_UNDEF) { - return -1; - } - return _posix_fileop((kernel_pid_t) pid, OPEN, flags); -} - -int posix_close(int pid) -{ - return _posix_fileop((kernel_pid_t) pid, CLOSE, 0); -} - -int posix_read(int pid, char *buffer, int bufsize) -{ - return _posix_fileop_data((kernel_pid_t) pid, READ, buffer, bufsize); -} - -int posix_write(int pid, char *buffer, int bufsize) -{ - return _posix_fileop_data((kernel_pid_t) pid, WRITE, buffer, bufsize); -} diff --git a/sys/posix/unistd.c b/sys/posix/unistd.c index abc89db0c46c97f07bad3e6c8d034ecb1daa71f3..c7f2fe7d393d05329ec69ebfa2118a89b77325f7 100644 --- a/sys/posix/unistd.c +++ b/sys/posix/unistd.c @@ -14,9 +14,9 @@ * @author Christian Mehlis <mehlis@inf.fu-berlin.de> */ #include <errno.h> +#include <unistd.h> #include "fd.h" -#include "unistd.h" int close(int fildes) { @@ -37,21 +37,6 @@ int close(int fildes) return 0; } -int usleep(useconds_t useconds) -{ - timex_t time = timex_set(0, useconds); - timex_normalize(&time); - vtimer_sleep(time); - return 0; -} - -unsigned int sleep(unsigned int seconds) -{ - timex_t time = timex_set(seconds, 0); - vtimer_sleep(time); - return 0; -} - /** * @} */ diff --git a/sys/xtimer/xtimer_posix.c b/sys/xtimer/xtimer_posix.c new file mode 100644 index 0000000000000000000000000000000000000000..80475a2b728371172ea9e7ca08d86f42446df036 --- /dev/null +++ b/sys/xtimer/xtimer_posix.c @@ -0,0 +1,30 @@ +/** + * Copyright (C) 2015 Kaspar Schleiser <kaspar@schleiser.de> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + * + * @ingroup xtimer + * @{ + * @file + * @brief xtimer posix wrapper + * @author Kaspar Schleiser <kaspar@schleiser.de> + * @} + */ + +#include <unistd.h> + +#include "xtimer.h" + +unsigned int sleep(unsigned int seconds) +{ + xtimer_usleep64(seconds*SEC_IN_USEC); + return 0; +} + +int usleep(useconds_t usec) +{ + xtimer_usleep64(usec); + return 0; +} diff --git a/tests/posix_sleep/Makefile b/tests/posix_sleep/Makefile index 32fefc14e52d4a81d848dc15331ce2e9bf2bf325..035d06fff2f2168a55d22ac54243fdfa2ed20458 100644 --- a/tests/posix_sleep/Makefile +++ b/tests/posix_sleep/Makefile @@ -1,12 +1,6 @@ APPLICATION = posix_sleep include ../Makefile.tests_common -BOARD_BLACKLIST := arduino-mega2560 -# arduino-mega2560: warning: iteration 2u invokes undefined behavior -# [-Waggressive-loop-optimizations] - USEMODULE += posix -DISABLE_MODULE += auto_init - include $(RIOTBASE)/Makefile.include diff --git a/tests/posix_sleep/main.c b/tests/posix_sleep/main.c index babb406cab7b389d8df1091d361d7ce0f0ca39ba..02c153766cbc44543c898806b1d7bce2d7d42c34 100644 --- a/tests/posix_sleep/main.c +++ b/tests/posix_sleep/main.c @@ -25,7 +25,7 @@ int main(void) { puts("usleep 1 x 1000*1000"); for (int i = 0; i < 10; i++) { - useconds_t us = i*1000*1000; + useconds_t us = i*1000u*1000u; printf("calling usleep(%u)\n", (unsigned int) us); usleep(us); puts("wake up"); diff --git a/tests/pthread/Makefile b/tests/pthread/Makefile index f94b94daf7a3b70ab278b66f70b71b96958b81e4..ba9e5aed5660d716f6bf6d6a1926ede8cf320a34 100644 --- a/tests/pthread/Makefile +++ b/tests/pthread/Makefile @@ -7,6 +7,4 @@ BOARD_BLACKLIST := arduino-mega2560 USEMODULE += posix USEMODULE += pthread -DISABLE_MODULE += auto_init - include $(RIOTBASE)/Makefile.include diff --git a/tests/pthread_cooperation/Makefile b/tests/pthread_cooperation/Makefile index 996c3fa30e6f1b54df69574c9c824baf33f0e8e5..e9f15d5469d0d7c36854ba4ef71657dddb1d2c62 100644 --- a/tests/pthread_cooperation/Makefile +++ b/tests/pthread_cooperation/Makefile @@ -7,6 +7,4 @@ BOARD_BLACKLIST := arduino-mega2560 USEMODULE += posix USEMODULE += pthread -DISABLE_MODULE += auto_init - include $(RIOTBASE)/Makefile.include diff --git a/tests/pthread_tls/Makefile b/tests/pthread_tls/Makefile index e4b10419fdf8cc1593c47d71ca35b62730c2a872..d30f9c0368c5d97947f519c200bf9db47c6dc0f6 100644 --- a/tests/pthread_tls/Makefile +++ b/tests/pthread_tls/Makefile @@ -7,6 +7,4 @@ BOARD_BLACKLIST := arduino-mega2560 USEMODULE += posix USEMODULE += pthread -DISABLE_MODULE += auto_init - include $(RIOTBASE)/Makefile.include