From d88897bf4d4a5d5436277814d76f0991ecbf4489 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 30 Aug 2009 17:21:10 +0000 Subject: [PATCH] Updated the coverage tool. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1145 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- test/coverage/Makefile | 7 +-- test/coverage/chconf.h | 10 --- test/coverage/chcore.c | 12 +--- test/coverage/main.c | 10 +-- test/coverage/serial_lld.c | 116 ++++++++++++++++++++++++++++++++++ test/coverage/serial_lld.h | 124 +++++++++++++++++++++++++++++++++++++ test/coverage/simcom.c | 66 -------------------- 7 files changed, 251 insertions(+), 94 deletions(-) create mode 100644 test/coverage/serial_lld.c create mode 100644 test/coverage/serial_lld.h delete mode 100644 test/coverage/simcom.c diff --git a/test/coverage/Makefile b/test/coverage/Makefile index a00e5015a..69f55884e 100644 --- a/test/coverage/Makefile +++ b/test/coverage/Makefile @@ -63,15 +63,14 @@ include ../../test/test.mk # List C source files here SRC = ${KERNSRC} \ ${TESTSRC} \ - chcore.c \ - simcom.c \ - main.c + ../../os/io/serial.c \ + chcore.c serial_lld.c main.c # List ASM source files here ASRC = # List all user directories here -UINCDIR = $(KERNINC) $(TESTINC) +UINCDIR = $(KERNINC) $(TESTINC) ../../os/io # List the user directory to look for the libraries here ULIBDIR = diff --git a/test/coverage/chconf.h b/test/coverage/chconf.h index 88528e834..a45650258 100644 --- a/test/coverage/chconf.h +++ b/test/coverage/chconf.h @@ -232,16 +232,6 @@ #define CH_USE_QUEUES TRUE #endif -/** - * If specified then the full duplex serial driver APIs are included in the - * kernel. - * @note The default is @p TRUE. - * @note Requires @p CH_USE_QUEUES. - */ -#if !defined(CH_USE_SERIAL_FULLDUPLEX) || defined(__DOXYGEN__) -#define CH_USE_SERIAL_FULLDUPLEX TRUE -#endif - /** * If specified then the memory heap allocator APIs are included in the kernel. * @note The default is @p TRUE. diff --git a/test/coverage/chcore.c b/test/coverage/chcore.c index cdc87ceb5..b5191aa6c 100644 --- a/test/coverage/chcore.c +++ b/test/coverage/chcore.c @@ -20,23 +20,17 @@ #include #include -#undef CDECL - /** * @addtogroup WIN32SIM_CORE * @{ */ #include +#include static LARGE_INTEGER nextcnt; static LARGE_INTEGER slice; -void init_simcom1(void); -bool_t com1_conn_chkint(void); -bool_t com1_in_chkint(void); -bool_t com1_out_chkint(void); - /* * Simulated HW initialization. */ @@ -53,7 +47,7 @@ void InitCore(void) { QueryPerformanceCounter(&nextcnt); nextcnt.QuadPart += slice.QuadPart; - init_simcom1(); + sdInit(); fflush(stdout); } @@ -65,7 +59,7 @@ void ChkIntSources(void) { LARGE_INTEGER n; bool_t rflag = FALSE; - if (com1_conn_chkint() || com1_in_chkint() || com1_out_chkint()) { + if (sd_lld_interrupt_pending()) { if (chSchRescRequiredI()) rflag = TRUE; } diff --git a/test/coverage/main.c b/test/coverage/main.c index af8762562..893747546 100644 --- a/test/coverage/main.c +++ b/test/coverage/main.c @@ -17,15 +17,13 @@ along with this program. If not, see . */ -#include #include #include #include +#include #include -extern FullDuplexDriver COM1; - /* * Simulator main. */ @@ -33,8 +31,10 @@ int main(int argc, char *argv[]) { msg_t result; chSysInit(); - result = TestThread(&COM1); - chThdSleepMilliseconds(1); /* Gives time to flush COM1 output queue */ + sdStart(&SD1, NULL); + + result = TestThread(&SD1); + chThdSleepMilliseconds(1); /* Gives time to flush SD1 output queue */ fflush(stdout); if (result) exit(1); diff --git a/test/coverage/serial_lld.c b/test/coverage/serial_lld.c new file mode 100644 index 000000000..70c073648 --- /dev/null +++ b/test/coverage/serial_lld.c @@ -0,0 +1,116 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file Win32/serial_lld.c + * @brief Win32 low level simulated serial driver code + * @addtogroup WIN32_SERIAL + * @{ + */ + +#include +#include + +#include +#include + +/** @brief Test serial driver identifier.*/ +SerialDriver SD1; + +/** @brief Driver default configuration.*/ +static const SerialDriverConfig default_config = { +}; + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +static bool_t sd1_conn_chkint(void) { + + return FALSE; +} + +static bool_t sd1_in_chkint(void) { + + return FALSE; +} + +static bool_t sd1_out_chkint(void) { + msg_t n; + bool_t rflag = FALSE; + + while (TRUE) { + n = sdRequestDataI(&SD1); + if (n < 0) { + fflush(stdout); + return rflag; + } + fputc(n, stdout); + rflag = TRUE; + } +} + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * Low level serial driver initialization. + */ +void sd_lld_init(void) { + + sdObjectInit(&SD1, NULL, NULL); +} + +/** + * @brief Low level serial driver configuration and (re)start. + * + * @param[in] sdp pointer to a @p SerialDriver object + * @param[in] config the architecture-dependent serial driver configuration. + * If this parameter is set to @p NULL then a default + * configuration is used. + */ +void sd_lld_start(SerialDriver *sdp, const SerialDriverConfig *config) { + + if (config == NULL) + config = &default_config; + +} + +/** + * @brief Low level serial driver stop. + * @details De-initializes the USART, stops the associated clock, resets the + * interrupt vector. + * + * @param[in] sdp pointer to a @p SerialDriver object + */ +void sd_lld_stop(SerialDriver *sdp) { + +} + +bool_t sd_lld_interrupt_pending(void) { + + return sd1_conn_chkint() || sd1_in_chkint() || sd1_out_chkint(); +} + +/** @} */ diff --git a/test/coverage/serial_lld.h b/test/coverage/serial_lld.h new file mode 100644 index 000000000..ba3a27b87 --- /dev/null +++ b/test/coverage/serial_lld.h @@ -0,0 +1,124 @@ +/* + ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. + + This file is part of ChibiOS/RT. + + ChibiOS/RT is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + ChibiOS/RT is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +/** + * @file Win32/serial_lld.h + * @brief Win32 low level simulated serial driver header + * @addtogroup WIN32_SERIAL + * @{ + */ + +#ifndef _SERIAL_LLD_H_ +#define _SERIAL_LLD_H_ + +#include + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Serial buffers size. + * @details Configuration parameter, you can change the depth of the queue + * buffers depending on the requirements of your application. + */ +#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define SERIAL_BUFFERS_SIZE 1024 +#endif + +/*===========================================================================*/ +/* Unsupported event flags and custom events. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * Serial Driver condition flags type. + */ +typedef uint32_t sdflags_t; + +/** + * @brief @p SerialDriver specific data. + */ +struct _serial_driver_data { + /** + * Input queue, incoming data can be read from this input queue by + * using the queues APIs. + */ + InputQueue iqueue; + /** + * Output queue, outgoing data can be written to this output queue by + * using the queues APIs. + */ + OutputQueue oqueue; + /** + * Status Change @p EventSource. This event is generated when one or more + * condition flags change. + */ + EventSource sevent; + /** + * I/O driver status flags. + */ + sdflags_t flags; + /** + * Input circular buffer. + */ + uint8_t ib[SERIAL_BUFFERS_SIZE]; + /** + * Output circular buffer. + */ + uint8_t ob[SERIAL_BUFFERS_SIZE]; +}; + +/** + * @brief Generic Serial Driver configuration structure. + * @details An instance of this structure must be passed to @p sdStart() + * in order to configure and start a serial driver operations. + * + * @note This structure content is architecture dependent, each driver + * implementation defines its own version and the custom static + * initializers. + */ +typedef struct { +} SerialDriverConfig; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +/** @cond never*/ +extern SerialDriver SD1; + +#ifdef __cplusplus +extern "C" { +#endif + void sd_lld_init(void); + void sd_lld_start(SerialDriver *sdp, const SerialDriverConfig *config); + void sd_lld_stop(SerialDriver *sdp); + bool_t sd_lld_interrupt_pending(void); +#ifdef __cplusplus +} +#endif +/** @endcond*/ + +#endif /* _SERIAL_LLD_H_ */ + +/** @} */ diff --git a/test/coverage/simcom.c b/test/coverage/simcom.c deleted file mode 100644 index e8fceb76a..000000000 --- a/test/coverage/simcom.c +++ /dev/null @@ -1,66 +0,0 @@ -/* - ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio. - - This file is part of ChibiOS/RT. - - ChibiOS/RT is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS/RT is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -/* - * Win32 COM port simulator (on stdout). - */ - -#include - -#include -#include - -#undef CDECL - -#include - -FullDuplexDriver COM1; - -static uint8_t com_ib[1024]; -static uint8_t com_ob[1024]; - -void init_simcom1(void) { - - chFDDInit(&COM1, com_ib, sizeof(com_ib), NULL, com_ob, sizeof(com_ob), NULL); -} - -bool_t com1_conn_chkint(void) { - - return FALSE; -} - -bool_t com1_in_chkint(void) { - - return FALSE; -} - -bool_t com1_out_chkint(void) { - msg_t n; - bool_t rflag = FALSE; - - while (TRUE) { - n = chFDDRequestDataI(&COM1); - if (n < 0) { - fflush(stdout); - return rflag; - } - fputc(n, stdout); - rflag = TRUE; - } -}