diff --git a/sys/chardev_thread.c b/sys/chardev_thread.c deleted file mode 100644 index aa0ce66a91f87be8c92161f60a5c5d0795fb9486..0000000000000000000000000000000000000000 --- a/sys/chardev_thread.c +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Character device messaging loop. - * - * 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 chardev - * @{ - * @file - * @brief Runs an infinite loop in a separate thread to handle access to character devices such as uart. - * @author Kaspar Schleiser <kaspar@schleiser.de> - * @} - */ - -#include <stdio.h> -#include <errno.h> - -#include "irq.h" -#include "msg.h" - -#include "ringbuffer.h" -#include "posix_io.h" - -/* increase stack size in uart0 when setting this to 1 */ -#define ENABLE_DEBUG (0) -#include "debug.h" - -static int min(int a, int b) -{ - if (b > a) { - return a; - } - else { - return b; - } -} - -void chardev_loop(ringbuffer_t *rb) -{ - msg_t m; - - kernel_pid_t reader_pid = KERNEL_PID_UNDEF; - struct posix_iop_t *r = NULL; - - puts("UART0 thread started."); - - while (1) { - msg_receive(&m); - - if (!msg_sent_by_int(&m)) { - DEBUG("Receiving message from another thread: "); - - switch(m.type) { - case OPEN: - DEBUG("OPEN\n"); - if (reader_pid == KERNEL_PID_UNDEF) { - reader_pid = m.sender_pid; - /* no error */ - m.content.value = 0; - } - else { - m.content.value = -EBUSY; - } - - msg_reply(&m, &m); - break; - - case READ: - DEBUG("READ\n"); - if (m.sender_pid != reader_pid) { - m.content.value = -EINVAL; - r = NULL; - msg_reply(&m, &m); - } - else { - r = (struct posix_iop_t *)(void*)m.content.ptr; - } - - break; - - case CLOSE: - DEBUG("CLOSE\n"); - if (m.sender_pid == reader_pid) { - DEBUG("uart0_thread: closing file from %" PRIkernel_pid "\n", reader_pid); - reader_pid = KERNEL_PID_UNDEF; - r = NULL; - m.content.value = 0; - } - else { - m.content.value = -EINVAL; - } - - msg_reply(&m, &m); - break; - - default: - DEBUG("UNKNOWN\n"); - m.content.value = -EINVAL; - msg_reply(&m, &m); - } - } - - if (rb->avail && (r != NULL)) { - DEBUG("Data is available\n"); - unsigned state = disableIRQ(); - int nbytes = min(r->nbytes, rb->avail); - DEBUG("uart0_thread [%i]: sending %i bytes received from %" PRIkernel_pid " to pid %" PRIkernel_pid "\n", thread_getpid(), nbytes, m.sender_pid, reader_pid); - ringbuffer_get(rb, r->buffer, nbytes); - r->nbytes = nbytes; - - m.sender_pid = reader_pid; - m.type = OPEN; - m.content.ptr = (char *)r; - - msg_reply(&m, &m); - - r = NULL; - restoreIRQ(state); - } - } -} - -void *chardev_thread_entry(void *rb_) -{ - ringbuffer_t *rb = rb_; - chardev_loop(rb); - return NULL; -} diff --git a/sys/include/chardev_thread.h b/sys/include/chardev_thread.h deleted file mode 100644 index a07dd89bef49615abfb94318012d0404f4d60450..0000000000000000000000000000000000000000 --- a/sys/include/chardev_thread.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2010 Kaspar Schleiser - * - * 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. - */ - - -/** - * @defgroup sys_chardevthread Chardev Thread - * @ingroup sys - * @brief Chardev thread - * @{ - * - * @file - * @brief Handles I/O from a char devices - * - * @author Kaspar Schleiser <kaspar@schleiser.de> - */ - -#ifndef __CHARDEV_THREAD_H -#define __CHARDEV_THREAD_H - -#include "ringbuffer.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void chardev_loop(ringbuffer_t *rb); -void *chardev_thread_entry(void *rb_); - -#ifdef __cplusplus -} -#endif - -#endif /* __CHARDEV_THREAD_H */ -/** @} */