From ac28f1588d4cfd315ec59d485df432c79d13cd46 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 3 Nov 2017 08:33:16 +0100 Subject: Add simple console driver Update #3170. Update #3199. --- cpukit/libcsupport/src/consolesimple.c | 97 ++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 cpukit/libcsupport/src/consolesimple.c (limited to 'cpukit/libcsupport/src/consolesimple.c') diff --git a/cpukit/libcsupport/src/consolesimple.c b/cpukit/libcsupport/src/consolesimple.c new file mode 100644 index 0000000000..5aa0f98528 --- /dev/null +++ b/cpukit/libcsupport/src/consolesimple.c @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#include +#include +#include + +static ssize_t _Console_simple_Read( + rtems_libio_t *iop, + void *buffer, + size_t count +) +{ + char *buf; + ssize_t i; + ssize_t n; + + buf = buffer; + n = (ssize_t) count; + + for ( i = 0; i < n; ++i ) { + int c; + + do { + c = getchark(); + } while (c == -1); + + buf[ i ] = (char) c; + } + + return n; +} + +static ssize_t _Console_simple_Write( + rtems_libio_t *iop, + const void *buffer, + size_t count +) +{ + const char *buf; + ssize_t i; + ssize_t n; + + buf = buffer; + n = (ssize_t) count; + + for ( i = 0; i < n; ++i ) { + rtems_putc( buf[ i ] ); + } + + return n; +} + +static const rtems_filesystem_file_handlers_r _Console_simple_Handlers = { + .open_h = rtems_filesystem_default_open, + .close_h = rtems_filesystem_default_close, + .read_h = _Console_simple_Read, + .write_h = _Console_simple_Write, + .ioctl_h = rtems_filesystem_default_ioctl, + .lseek_h = rtems_filesystem_default_lseek, + .fstat_h = IMFS_stat, + .ftruncate_h = rtems_filesystem_default_ftruncate, + .fsync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fcntl_h = rtems_filesystem_default_fcntl, + .readv_h = rtems_filesystem_default_readv, + .writev_h = rtems_filesystem_default_writev, + .mmap_h = rtems_filesystem_default_mmap +}; + +static const IMFS_node_control +_Console_simple_Node_control = IMFS_GENERIC_INITIALIZER( + &_Console_simple_Handlers, + IMFS_node_initialize_default, + IMFS_node_destroy_default +); + +void _Console_simple_Initialize( void ) +{ + IMFS_make_generic_node( + CONSOLE_DEVICE_NAME, + S_IFCHR | S_IRWXU | S_IRWXG | S_IRWXO, + &_Console_simple_Node_control, + NULL + ); +} -- cgit v1.2.3