diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-11-03 08:33:16 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-11-06 07:25:51 +0100 |
commit | ac28f1588d4cfd315ec59d485df432c79d13cd46 (patch) | |
tree | 30594dcb03b3620e9fb8d57bcdb645ea9f34f015 /cpukit/libcsupport/src/consolesimple.c | |
parent | score: Add _IO_Printf() and _IO_Vprintf() (diff) | |
download | rtems-ac28f1588d4cfd315ec59d485df432c79d13cd46.tar.bz2 |
Add simple console driver
Update #3170.
Update #3199.
Diffstat (limited to 'cpukit/libcsupport/src/consolesimple.c')
-rw-r--r-- | cpukit/libcsupport/src/consolesimple.c | 97 |
1 files changed, 97 insertions, 0 deletions
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 + * <rtems@embedded-brains.de> + * + * 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 <rtems/console.h> +#include <rtems/bspIo.h> +#include <rtems/imfs.h> + +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 + ); +} |