The RTEMS print user need to know nothing about a particular printer implementation. In particular get rid of the <stdio.h> include which would be visible via <rtems.h>. --- c/src/lib/libbsp/shared/src/irq-info.c | 2 +- c/src/lib/libbsp/shared/src/irq-shell.c | 1 + cpukit/Makefile.am | 1 + cpukit/include/rtems/print.h | 83 ++------------------ cpukit/include/rtems/printer.h | 119 +++++++++++++++++++++++++++++ cpukit/libcsupport/src/print_fprintf.c | 4 +- cpukit/libcsupport/src/print_printf.c | 4 +- cpukit/libcsupport/src/printf_plugin.c | 4 +- cpukit/libcsupport/src/printk_plugin.c | 2 +- cpukit/libdl/rap.c | 1 + cpukit/libmisc/cpuuse/cpuusagereport.c | 1 + cpukit/libmisc/cpuuse/cpuusagetop.c | 1 + cpukit/libmisc/fb/mw_print.c | 1 + cpukit/libmisc/shell/main_blkstats.c | 1 + cpukit/libmisc/shell/main_cpuinfo.c | 1 + cpukit/libmisc/shell/main_cpuuse.c | 1 + cpukit/libmisc/shell/main_perioduse.c | 1 + cpukit/libmisc/shell/main_profreport.c | 1 + cpukit/libmisc/shell/main_stackuse.c | 1 + cpukit/libmisc/shell/main_top.c | 1 + cpukit/libmisc/stackchk/check.c | 1 + cpukit/libmisc/testsupport/test.h | 2 +- cpukit/mghttpd/mongoose.c | 2 +- cpukit/preinstall.am | 4 + cpukit/rtems/src/ratemonreportstatistics.c | 2 +- cpukit/score/src/cpusetprintsupport.c | 4 +- testsuites/samples/hello/init.c | 1 + 27 files changed, 153 insertions(+), 94 deletions(-) create mode 100644 cpukit/include/rtems/printer.h
diff --git a/c/src/lib/libbsp/shared/src/irq-info.c b/c/src/lib/libbsp/shared/src/irq-info.c index f5f2323..ef965d3 100644 --- a/c/src/lib/libbsp/shared/src/irq-info.c +++ b/c/src/lib/libbsp/shared/src/irq-info.c @@ -21,7 +21,7 @@ #include <inttypes.h> -#include <rtems/print.h> +#include <rtems/printer.h> #include <bsp/irq-generic.h> #include <bsp/irq-info.h> diff --git a/c/src/lib/libbsp/shared/src/irq-shell.c b/c/src/lib/libbsp/shared/src/irq-shell.c index 512594c..ca936f8 100644 --- a/c/src/lib/libbsp/shared/src/irq-shell.c +++ b/c/src/lib/libbsp/shared/src/irq-shell.c @@ -21,6 +21,7 @@ #include <stdio.h> +#include <rtems/printer.h> #include <rtems/shell.h> #include <bsp/irq-info.h> diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am index aa1111e..ac97530 100644 --- a/cpukit/Makefile.am +++ b/cpukit/Makefile.am @@ -98,6 +98,7 @@ endif include_rtems_HEADERS += include/rtems/bspIo.h include_rtems_HEADERS += include/rtems/print.h +include_rtems_HEADERS += include/rtems/printer.h include_rtems_HEADERS += include/rtems/userenv.h include_rtems_HEADERS += include/rtems/fs.h if !LIBPCI diff --git a/cpukit/include/rtems/print.h b/cpukit/include/rtems/print.h index 07e50d0..2fd744e 100644 --- a/cpukit/include/rtems/print.h +++ b/cpukit/include/rtems/print.h @@ -21,53 +21,21 @@ #include <rtems/score/basedefs.h> #include <stdarg.h> -#include <stdio.h> #ifdef __cplusplus extern "C" { #endif +typedef struct rtems_printer rtems_printer; + /** - * @defgroup RTEMS Print Support + * @defgroup RTEMSPrintSupport RTEMS Print Support * * This module contains all methods and support related to providing the user * with an interface to the kernel level print support. */ /** - * Type definition for function which can be plugged in to certain reporting - * routines to redirect the output. - * - * Use the RTEMS Print interface to call these functions. Do not directly use - * them. - * - * If the user provides their own printer, then they may redirect those reports - * as they see fit. - */ -typedef int (*rtems_print_printer)(void *, const char *format, va_list ap); - -/** - * Type definition for the printer structure used to access the kernel print - * support. - */ -typedef struct rtems_printer { - void *context; - rtems_print_printer printer; -} rtems_printer; - -/** - * @brief check if the printer is valid. - * - * @param[in] printer Pointer to the printer structure. - * - * @return true The printer is valid else false is returned. - */ -static inline bool rtems_print_printer_valid(const rtems_printer *printer) -{ - return printer != NULL && printer->printer != NULL; -} - -/** * @brief Print to the kernel plugin handler. This has to be a macro because * there is no vprint version of the plug in handlers. * @@ -95,51 +63,10 @@ extern int rtems_vprintf(const rtems_printer *printer, const char *format, va_list ap); -/** - * @brief Intiialise the rtems_printer struct to empty. - * - * An empty printer prints nothing. You can use this to implement an enable and - * disable type print implementation. - * - * @param[in] printer Pointer to the printer structure. - */ -static inline void rtems_print_printer_empty(rtems_printer *printer) -{ - printer->context = NULL; - printer->printer = NULL; -} - -/** - * @brief Intiialise the rtems_printer struct to printk - * - * The printer will output to the kernel printk support. - * - * @param[in] printer Pointer to the printer structure. - */ -void rtems_print_printer_printk(rtems_printer *printer); - -/** - * @brief Intiialise the rtems_printer struct to printf - * - * The printer will output to the libc printf support. - * - * @param[in] printer Pointer to the printer structure. - */ -extern void rtems_print_printer_printf(rtems_printer *printer); - -/** - * @brief Intiialise the rtems_printer struct to a fprintf device. - * - * The printer will output to the libc fprintf file provided. - * - * @param[in] printer Pointer to the printer structure. - */ -extern void rtems_print_printer_fprintf(rtems_printer *printer, FILE *file); - -/**@}*/ +/** @} */ #ifdef __cplusplus } #endif -#endif +#endif /* _RTEMS_PRINT_H */ diff --git a/cpukit/include/rtems/printer.h b/cpukit/include/rtems/printer.h new file mode 100644 index 0000000..2ed6b6a --- /dev/null +++ b/cpukit/include/rtems/printer.h @@ -0,0 +1,119 @@ +/** + * @file rtems/print.h + * + * @brief User print interface to the bspIO print plug in. + * + * This include file defines the user interface to kernel print methods. + */ + +/* + * Copyright (c) 2016 Chris Johns <chr...@rtems.org> + * All rights reserved. + * + * 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. + */ + +#ifndef _RTEMS_PRINTER_H +#define _RTEMS_PRINTER_H + +#include <rtems/print.h> + +#include <stdio.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup XXX + * + * @{ + */ + +/** + * @defgroup RTEMSPrintSupport + */ + +/** + * Type definition for function which can be plugged in to certain reporting + * routines to redirect the output. + * + * Use the RTEMS Print interface to call these functions. Do not directly use + * them. + * + * If the user provides their own printer, then they may redirect those reports + * as they see fit. + */ +typedef int (*rtems_print_printer)(void *, const char *format, va_list ap); + +/** + * Type definition for the printer structure used to access the kernel print + * support. + */ +struct rtems_printer { + void *context; + rtems_print_printer printer; +}; + +/** + * @brief check if the printer is valid. + * + * @param[in] printer Pointer to the printer structure. + * + * @return true The printer is valid else false is returned. + */ +static inline bool rtems_print_printer_valid(const rtems_printer *printer) +{ + return printer != NULL && printer->printer != NULL; +} + +/** + * @brief Initializes the rtems_printer struct to empty. + * + * An empty printer prints nothing. You can use this to implement an enable and + * disable type print implementation. + * + * @param[in] printer Pointer to the printer structure. + */ +static inline void rtems_print_printer_empty(rtems_printer *printer) +{ + printer->context = NULL; + printer->printer = NULL; +} + +/** + * @brief Initializes the rtems_printer struct to printk + * + * The printer will output to the kernel printk support. + * + * @param[in] printer Pointer to the printer structure. + */ +void rtems_print_printer_printk(rtems_printer *printer); + +/** + * @brief Initializes the rtems_printer struct to printf + * + * The printer will output to the libc printf support. + * + * @param[in] printer Pointer to the printer structure. + */ +extern void rtems_print_printer_printf(rtems_printer *printer); + +/** + * @brief Initializes the rtems_printer struct to a fprintf device. + * + * The printer will output to the libc fprintf file provided. + * + * @param[in] printer Pointer to the printer structure. + */ +extern void rtems_print_printer_fprintf(rtems_printer *printer, FILE *file); + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif /* _RTEMS_PRINTER_H */ diff --git a/cpukit/libcsupport/src/print_fprintf.c b/cpukit/libcsupport/src/print_fprintf.c index 3ff80f7..43ff478 100644 --- a/cpukit/libcsupport/src/print_fprintf.c +++ b/cpukit/libcsupport/src/print_fprintf.c @@ -18,9 +18,7 @@ #include "config.h" #endif -#include <rtems/print.h> - -#include <stdio.h> +#include <rtems/printer.h> static int rtems_fprintf_plugin(void *context, const char *fmt, va_list ap) { diff --git a/cpukit/libcsupport/src/print_printf.c b/cpukit/libcsupport/src/print_printf.c index c869523..c9b273a 100644 --- a/cpukit/libcsupport/src/print_printf.c +++ b/cpukit/libcsupport/src/print_printf.c @@ -18,9 +18,7 @@ #include "config.h" #endif -#include <rtems/print.h> - -#include <stdio.h> +#include <rtems/printer.h> int rtems_vprintf( const rtems_printer *printer, diff --git a/cpukit/libcsupport/src/printf_plugin.c b/cpukit/libcsupport/src/printf_plugin.c index 23ac9f6..d8da6a0 100644 --- a/cpukit/libcsupport/src/printf_plugin.c +++ b/cpukit/libcsupport/src/printf_plugin.c @@ -23,9 +23,7 @@ #include "config.h" #endif -#include <rtems/print.h> - -#include <stdio.h> +#include <rtems/printer.h> static int rtems_printf_plugin(void *context, const char *format, va_list ap) { diff --git a/cpukit/libcsupport/src/printk_plugin.c b/cpukit/libcsupport/src/printk_plugin.c index 38214f8..3b4a911 100644 --- a/cpukit/libcsupport/src/printk_plugin.c +++ b/cpukit/libcsupport/src/printk_plugin.c @@ -18,7 +18,7 @@ #include "config.h" #endif -#include <rtems/print.h> +#include <rtems/printer.h> #include <rtems/bspIo.h> static int printk_plugin( diff --git a/cpukit/libdl/rap.c b/cpukit/libdl/rap.c index 4e07c54..87b3bc3 100644 --- a/cpukit/libdl/rap.c +++ b/cpukit/libdl/rap.c @@ -19,6 +19,7 @@ #include "config.h" #endif +#include <stdarg.h> #include <stdlib.h> #include <stdio.h> #include <string.h> diff --git a/cpukit/libmisc/cpuuse/cpuusagereport.c b/cpukit/libmisc/cpuuse/cpuusagereport.c index 2a6eaf3..370eb05 100644 --- a/cpukit/libmisc/cpuuse/cpuusagereport.c +++ b/cpukit/libmisc/cpuuse/cpuusagereport.c @@ -25,6 +25,7 @@ #include <inttypes.h> #include <rtems/cpuuse.h> +#include <rtems/printer.h> #include <rtems/score/objectimpl.h> #include <rtems/score/threadimpl.h> #include <rtems/score/todimpl.h> diff --git a/cpukit/libmisc/cpuuse/cpuusagetop.c b/cpukit/libmisc/cpuuse/cpuusagetop.c index e300ee7..aa2b74c 100644 --- a/cpukit/libmisc/cpuuse/cpuusagetop.c +++ b/cpukit/libmisc/cpuuse/cpuusagetop.c @@ -32,6 +32,7 @@ #include <inttypes.h> #include <rtems/cpuuse.h> +#include <rtems/printer.h> #include <rtems/malloc.h> #include <rtems/score/objectimpl.h> #include <rtems/score/protectedheap.h> diff --git a/cpukit/libmisc/fb/mw_print.c b/cpukit/libmisc/fb/mw_print.c index 25a3456..c04f5a2 100644 --- a/cpukit/libmisc/fb/mw_print.c +++ b/cpukit/libmisc/fb/mw_print.c @@ -21,6 +21,7 @@ #include <stdio.h> #include <rtems/mw_uid.h> +#include <rtems/printer.h> static const char *uid_buttons( unsigned short btns, diff --git a/cpukit/libmisc/shell/main_blkstats.c b/cpukit/libmisc/shell/main_blkstats.c index d814df6..69548cf 100644 --- a/cpukit/libmisc/shell/main_blkstats.c +++ b/cpukit/libmisc/shell/main_blkstats.c @@ -17,6 +17,7 @@ #endif #include <rtems/blkdev.h> +#include <rtems/printer.h> #include <rtems/shellconfig.h> #include <string.h> diff --git a/cpukit/libmisc/shell/main_cpuinfo.c b/cpukit/libmisc/shell/main_cpuinfo.c index c5bc9a3..9245c0f 100644 --- a/cpukit/libmisc/shell/main_cpuinfo.c +++ b/cpukit/libmisc/shell/main_cpuinfo.c @@ -19,6 +19,7 @@ #include <rtems/shell.h> #include <rtems/shellconfig.h> #include <rtems/cpuuse.h> +#include <rtems/printer.h> static int rtems_shell_main_cpuinfo(int argc, char **argv) { diff --git a/cpukit/libmisc/shell/main_cpuuse.c b/cpukit/libmisc/shell/main_cpuuse.c index 190fd03..726d907 100644 --- a/cpukit/libmisc/shell/main_cpuuse.c +++ b/cpukit/libmisc/shell/main_cpuuse.c @@ -18,6 +18,7 @@ #include <rtems.h> #include <rtems/cpuuse.h> +#include <rtems/printer.h> #include <rtems/shell.h> #include "internal.h" diff --git a/cpukit/libmisc/shell/main_perioduse.c b/cpukit/libmisc/shell/main_perioduse.c index 023e154..6b74bb5 100644 --- a/cpukit/libmisc/shell/main_perioduse.c +++ b/cpukit/libmisc/shell/main_perioduse.c @@ -17,6 +17,7 @@ #include <string.h> #include <rtems.h> +#include <rtems/printer.h> #include <rtems/shell.h> #include "internal.h" diff --git a/cpukit/libmisc/shell/main_profreport.c b/cpukit/libmisc/shell/main_profreport.c index a98b8ba..499e55d 100644 --- a/cpukit/libmisc/shell/main_profreport.c +++ b/cpukit/libmisc/shell/main_profreport.c @@ -19,6 +19,7 @@ #include <stdio.h> #include <rtems/profiling.h> +#include <rtems/printer.h> #include <rtems/shell.h> #include <rtems/shellconfig.h> diff --git a/cpukit/libmisc/shell/main_stackuse.c b/cpukit/libmisc/shell/main_stackuse.c index 40fc711..66ab863 100644 --- a/cpukit/libmisc/shell/main_stackuse.c +++ b/cpukit/libmisc/shell/main_stackuse.c @@ -16,6 +16,7 @@ #include <stdio.h> #include <rtems.h> +#include <rtems/printer.h> #include <rtems/stackchk.h> #include <rtems/shell.h> #include "internal.h" diff --git a/cpukit/libmisc/shell/main_top.c b/cpukit/libmisc/shell/main_top.c index aea50d8..1596ff0 100644 --- a/cpukit/libmisc/shell/main_top.c +++ b/cpukit/libmisc/shell/main_top.c @@ -18,6 +18,7 @@ #include <rtems.h> #include <rtems/cpuuse.h> +#include <rtems/printer.h> #include <rtems/shell.h> #include "internal.h" diff --git a/cpukit/libmisc/stackchk/check.c b/cpukit/libmisc/stackchk/check.c index 39650f5..a4b606a 100644 --- a/cpukit/libmisc/stackchk/check.c +++ b/cpukit/libmisc/stackchk/check.c @@ -40,6 +40,7 @@ #include <stdlib.h> #include <rtems/bspIo.h> +#include <rtems/printer.h> #include <rtems/stackchk.h> #include <rtems/score/percpu.h> #include "internal.h" diff --git a/cpukit/libmisc/testsupport/test.h b/cpukit/libmisc/testsupport/test.h index ce5172f..94f917f 100644 --- a/cpukit/libmisc/testsupport/test.h +++ b/cpukit/libmisc/testsupport/test.h @@ -16,7 +16,7 @@ #define _RTEMS_TEST_H #include <rtems.h> -#include <rtems/print.h> +#include <rtems/printer.h> #include <rtems/score/atomic.h> #include <rtems/score/smpbarrier.h> diff --git a/cpukit/mghttpd/mongoose.c b/cpukit/mghttpd/mongoose.c index a89fc56..3dd0d4b 100644 --- a/cpukit/mghttpd/mongoose.c +++ b/cpukit/mghttpd/mongoose.c @@ -5520,7 +5520,7 @@ struct mg_context *mg_start(const struct mg_callbacks *callbacks, return ctx; } #ifdef __rtems__ -#include <rtems/print.h> +#include <rtems/printer.h> static int mg_printer_plugin(void *context, const char *fmt, va_list ap) { return mg_vprintf(context, fmt, ap); diff --git a/cpukit/preinstall.am b/cpukit/preinstall.am index fdf2016..5ba1ee4 100644 --- a/cpukit/preinstall.am +++ b/cpukit/preinstall.am @@ -228,6 +228,10 @@ $(PROJECT_INCLUDE)/rtems/print.h: include/rtems/print.h $(PROJECT_INCLUDE)/rtems $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/print.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/print.h +$(PROJECT_INCLUDE)/rtems/printer.h: include/rtems/printer.h $(PROJECT_INCLUDE)/rtems/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/printer.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/printer.h + $(PROJECT_INCLUDE)/rtems/userenv.h: include/rtems/userenv.h $(PROJECT_INCLUDE)/rtems/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/userenv.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/userenv.h diff --git a/cpukit/rtems/src/ratemonreportstatistics.c b/cpukit/rtems/src/ratemonreportstatistics.c index 3f264df..a1bab4a 100644 --- a/cpukit/rtems/src/ratemonreportstatistics.c +++ b/cpukit/rtems/src/ratemonreportstatistics.c @@ -20,7 +20,7 @@ #include <rtems/rtems/ratemonimpl.h> #include <rtems/rtems/object.h> -#include <rtems/print.h> +#include <rtems/printer.h> #include <inttypes.h> diff --git a/cpukit/score/src/cpusetprintsupport.c b/cpukit/score/src/cpusetprintsupport.c index 83345d9..13cffd9 100644 --- a/cpukit/score/src/cpusetprintsupport.c +++ b/cpukit/score/src/cpusetprintsupport.c @@ -23,7 +23,7 @@ #include <stdio.h> #include <ctype.h> #include <inttypes.h> -#include <rtems/print.h> +#include <rtems/printer.h> #include <rtems/score/cpusetimpl.h> #ifdef __RTEMS_HAVE_SYS_CPUSET_H__ @@ -49,7 +49,7 @@ int i; rtems_printf(printer ,"%s: ", description); for(i=0; i<_NCPUWORDS; i++) - rtems_printf(printer ,"%x", cpuset->__bits[i]); + rtems_printf(printer ,"%" PRIx32 "", cpuset->__bits[i]); rtems_printf(printer ,"\n"); } diff --git a/testsuites/samples/hello/init.c b/testsuites/samples/hello/init.c index ea9af89..acdabd8 100644 --- a/testsuites/samples/hello/init.c +++ b/testsuites/samples/hello/init.c @@ -11,6 +11,7 @@ #include "config.h" #endif +#include <rtems/printer.h> #include <rtems/test.h> #include <bsp.h> /* for device driver prototypes */ -- 1.8.4.5 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel