forked from Imagelibrary/rtems
@@ -147,6 +147,15 @@ rtems_device_driver console_control(
|
||||
void *arg
|
||||
);
|
||||
|
||||
/**
|
||||
* @brief Initializes a simple console device.
|
||||
*
|
||||
* This device writes via rtems_putc() and reads via getchark(). The Termios
|
||||
* framework is not used. There is no support to change device settings, e.g.
|
||||
* baud, stop bits, parity, etc.
|
||||
*/
|
||||
void _Console_simple_Initialize( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -138,6 +138,7 @@ libcsupport_a_SOURCES = src/gxx_wrappers.c src/getchark.c src/printk.c \
|
||||
src/resource_snapshot.c \
|
||||
$(BSD_LIBC_C_FILES) $(BASE_FS_C_FILES) $(MALLOC_C_FILES) \
|
||||
$(ERROR_C_FILES) $(ASSOCIATION_C_FILES)
|
||||
libcsupport_a_SOURCES += src/consolesimple.c
|
||||
libcsupport_a_SOURCES += src/printertask.c
|
||||
libcsupport_a_SOURCES += src/printerfprintfputc.c
|
||||
|
||||
|
||||
97
cpukit/libcsupport/src/consolesimple.c
Normal file
97
cpukit/libcsupport/src/consolesimple.c
Normal file
@@ -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
|
||||
);
|
||||
}
|
||||
@@ -1610,10 +1610,27 @@ extern rtems_initialization_tasks_table Initialization_tasks[];
|
||||
#define NULL_DRIVER_TABLE_ENTRY \
|
||||
{ NULL, NULL, NULL, NULL, NULL, NULL }
|
||||
|
||||
#if defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \
|
||||
defined(CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER)
|
||||
#error "CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER and CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER are mutually exclusive"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#include <rtems/console.h>
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
|
||||
#include <rtems/console.h>
|
||||
|
||||
#ifdef CONFIGURE_INIT
|
||||
RTEMS_SYSINIT_ITEM(
|
||||
_Console_simple_Initialize,
|
||||
RTEMS_SYSINIT_DEVICE_DRIVERS,
|
||||
RTEMS_SYSINIT_ORDER_SECOND
|
||||
);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
#include <rtems/clockdrv.h>
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user