diff --git a/os/hal/dox/adc.dox b/os/hal/dox/adc.dox index 48196b0b4..cef7f09c1 100644 --- a/os/hal/dox/adc.dox +++ b/os/hal/dox/adc.dox @@ -141,5 +141,5 @@ * the ADC bus from multiple threads then use the @p adcAcquireBus() and * @p adcReleaseBus() APIs in order to gain exclusive access. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/can.dox b/os/hal/dox/can.dox index 3d9d93942..08e55ac54 100644 --- a/os/hal/dox/can.dox +++ b/os/hal/dox/can.dox @@ -88,5 +88,5 @@ * @enddot * @endif * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/ext.dox b/os/hal/dox/ext.dox index d3e77fc54..28d86f97b 100644 --- a/os/hal/dox/ext.dox +++ b/os/hal/dox/ext.dox @@ -80,5 +80,5 @@ * - EXT_CH_MODE_FALLING_EDGE, callback on a falling edge. * - EXT_CH_MODE_BOTH_EDGES, callback on a both edges. * . - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/gpt.dox b/os/hal/dox/gpt.dox index 11ccf7f18..69f8ce4db 100644 --- a/os/hal/dox/gpt.dox +++ b/os/hal/dox/gpt.dox @@ -74,5 +74,5 @@ * - Delay Mode, the timer is used for inserting a brief delay into * the execution flow, no callback is invoked in this mode. * . - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/hal.dox b/os/hal/dox/hal.dox index 2d3ea3808..b5aeb84f2 100644 --- a/os/hal/dox/hal.dox +++ b/os/hal/dox/hal.dox @@ -32,5 +32,5 @@ * setup function that can be invoked before the C runtime * initialization in order to accelerate the startup time. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/hal_files.dox b/os/hal/dox/hal_files.dox new file mode 100644 index 000000000..3dfc6db6b --- /dev/null +++ b/os/hal/dox/hal_files.dox @@ -0,0 +1,24 @@ +/* + ChibiOS - Copyright (C) 2006,2007,2008,2009,2010, + 2011,2012,2013,2014 Giovanni Di Sirio. + + This file is part of ChibiOS/HAL + + ChibiOS/HAL 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 . +*/ + +/** + * @defgroup HAL_FILES Abstract Files + * @ingroup HAL_INTERFACES + */ diff --git a/os/hal/dox/hal_streams.dox b/os/hal/dox/hal_streams.dox new file mode 100644 index 000000000..2c82a155e --- /dev/null +++ b/os/hal/dox/hal_streams.dox @@ -0,0 +1,24 @@ +/* + ChibiOS - Copyright (C) 2006,2007,2008,2009,2010, + 2011,2012,2013,2014 Giovanni Di Sirio. + + This file is part of ChibiOS/HAL + + ChibiOS/HAL 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 . +*/ + +/** + * @defgroup HAL_STREAMS Abstract Streams + * @ingroup HAL_INTERFACES + */ diff --git a/os/hal/dox/i2c.dox b/os/hal/dox/i2c.dox index ed080da13..4b1a51a63 100644 --- a/os/hal/dox/i2c.dox +++ b/os/hal/dox/i2c.dox @@ -98,5 +98,5 @@ * the I2C bus from multiple threads then use the @p i2cAcquireBus() and * @p i2cReleaseBus() APIs in order to gain exclusive access. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/i2s.dox b/os/hal/dox/i2s.dox index 7f47de350..183bfb220 100644 --- a/os/hal/dox/i2s.dox +++ b/os/hal/dox/i2s.dox @@ -27,5 +27,5 @@ * * @section i2s_1 Driver State Machine * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/icu.dox b/os/hal/dox/icu.dox index f7fbd96c8..5a5d70fd9 100644 --- a/os/hal/dox/icu.dox +++ b/os/hal/dox/icu.dox @@ -107,5 +107,5 @@ * available from this callback and can be retrieved using * @p icuGetPeriodX() and @p icuGetWidthX(). * . - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/io_block.dox b/os/hal/dox/io_block.dox index f27746853..8adf8180e 100644 --- a/os/hal/dox/io_block.dox +++ b/os/hal/dox/io_block.dox @@ -20,7 +20,7 @@ /** * @defgroup IO_BLOCK Abstract I/O Block Device - * @ingroup IO + * @ingroup HAL_INTERFACES * * @section io_block_1 Driver State Machine * The drivers implementing this interface shall implement the following diff --git a/os/hal/dox/io_channel.dox b/os/hal/dox/io_channel.dox index 3425e3da0..ae966c67e 100644 --- a/os/hal/dox/io_channel.dox +++ b/os/hal/dox/io_channel.dox @@ -20,5 +20,5 @@ /** * @defgroup IO_CHANNEL Abstract I/O Channel - * @ingroup IO + * @ingroup HAL_INTERFACES */ diff --git a/os/hal/dox/mac.dox b/os/hal/dox/mac.dox index 1cf977135..d01e75daf 100644 --- a/os/hal/dox/mac.dox +++ b/os/hal/dox/mac.dox @@ -26,5 +26,5 @@ * @pre In order to use the MAC driver the @p HAL_USE_MAC option * must be enabled in @p halconf.h. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/main.dox b/os/hal/dox/main.dox new file mode 100644 index 000000000..a704c9c90 --- /dev/null +++ b/os/hal/dox/main.dox @@ -0,0 +1,132 @@ +/* + ChibiOS - Copyright (C) 2006,2007,2008,2009,2010, + 2011,2012,2013,2014 Giovanni Di Sirio. + + This file is part of ChibiOS/HAL + + ChibiOS/HAL 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 . +*/ + +/** + * @defgroup IO HAL + * @brief Hardware Abstraction Layer. + * @details Under ChibiOS/RT the set of the various device driver interfaces + * is called the HAL subsystem: Hardware Abstraction Layer. The HAL is the + * abstract interface between ChibiOS/RT application and hardware. + * + * @section hal_device_driver_arch HAL Device Drivers Architecture + * The HAL contains several kind of modules: + * - Normal Device Drivers + * - Complex Device Drivers + * - Interfaces + * - Inner Code + * . + * @section hal_normal_device_drivers HAL Normal Device Drivers + * Normal device are meant to interface the application to the underlying + * hardware through an high level API. Normal Device Drivers are split in two + * layers: + * - High Level Device Driver (HLD). This layer contains the definitions + * of the driver's APIs and the platform independent part of the driver.
+ * An HLD is composed by two files: + * - @p @.c, the HLD implementation file. This file must be + * included in the Makefile in order to use the driver. + * - @p @.h, the HLD header file. This file is implicitly + * included by the HAL header file @p hal.h. + * . + * - Low Level Device Driver (LLD). This layer contains the platform + * dependent part of the driver.
+ * A LLD is composed by two files: + * - @p @_lld.c, the LLD implementation file. This file must be + * included in the Makefile in order to use the driver. + * - @p @_lld.h, the LLD header file. This file is implicitly + * included by the HLD header file. + * . + * . + * @subsection hal_device_driver_diagram Diagram + * @dot + digraph example { + graph [size="5, 7", pad="1.5, 0"]; + node [shape=rectangle, fontname=Helvetica, fontsize=8, + fixedsize="true", width="2.0", height="0.4"]; + edge [fontname=Helvetica, fontsize=8]; + + app [label="Application"]; + hld [label="High Level Driver"]; + lld [label="Low Level Driver"]; + hw [label="Microcontroller Hardware"]; + hal_lld [label="HAL shared low level code"]; + + app->hld; + hld->lld; + lld-> hw; + lld->hal_lld; + hal_lld->hw; + } + * @enddot + * + * @section hal_complex_device_drivers HAL Complex Device Drivers + * It is a class of device drivers that offer an high level API but do not + * use the hardware directly. Complex device drivers use other drivers for + * accessing the machine resources. + * + * @section hal_interfaces HAL Interfaces + * An interface is a binary structure allowing the access to a service + * using virtual functions. This allows to create drivers that can be + * accessed using a common interface. + * The concept of interface is commonly found in object-oriented languages + * like Java or C++, their meaning in ChibiOS/HAL is exactly the same. + * + * @section hal_inner_code HAL Inner Code + * Some modules are shared among multiple device drivers and are not + * necessarily meant to be used by the application layer. + */ + +/** + * @defgroup HAL_CONF Configuration + * @brief HAL Configuration. + * @details The file @p halconf.h contains the high level settings for all + * the drivers supported by the HAL. The low level, platform dependent, + * settings are contained in the @p mcuconf.h file instead and are describe + * in the various platforms reference manuals. + * + * @ingroup IO + */ + +/** + * @defgroup HAL_NORMAL_DRIVERS Normal Drivers + * @brief HAL Normal Drivers. + * + * @ingroup IO + */ + +/** + * @defgroup HAL_COMPLEX_DRIVERS Complex Drivers + * @brief HAL Complex Drivers. + * + * @ingroup IO + */ + +/** + * @defgroup HAL_INTERFACES Interfaces + * @brief HAL Interfaces. + * + * @ingroup IO + */ + +/** + * @defgroup HAL_INNER_CODE Inner Code + * @brief HAL Inner Code. + * + * @ingroup IO + */ diff --git a/os/hal/dox/mmc_spi.dox b/os/hal/dox/mmc_spi.dox index 840c50e80..f18d56bd5 100644 --- a/os/hal/dox/mmc_spi.dox +++ b/os/hal/dox/mmc_spi.dox @@ -35,5 +35,5 @@ * This driver allows to read or write single or multiple 512 bytes blocks * on a SD Card. * - * @ingroup IO + * @ingroup HAL_COMPLEX_DRIVERS */ diff --git a/os/hal/dox/mmcsd.dox b/os/hal/dox/mmcsd.dox index a39b61e77..42e89b3be 100644 --- a/os/hal/dox/mmcsd.dox +++ b/os/hal/dox/mmcsd.dox @@ -24,5 +24,5 @@ * accessing MMC or SD cards. This interface inherits the state * machine and the interface from the @ref IO_BLOCK module. * - * @ingroup IO + * @ingroup HAL_INNER_CODE */ diff --git a/os/hal/dox/pal.dox b/os/hal/dox/pal.dox index aba575363..413eaae83 100644 --- a/os/hal/dox/pal.dox +++ b/os/hal/dox/pal.dox @@ -70,5 +70,5 @@ * @subsection pal_1_5 Reading or writing on pins associated to other functionalities * The behavior is not specified. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/pwm.dox b/os/hal/dox/pwm.dox index eed5f0663..63b8db233 100644 --- a/os/hal/dox/pwm.dox +++ b/os/hal/dox/pwm.dox @@ -65,5 +65,5 @@ * Note that the two states can be associated to both logical zero or one in * the @p PWMChannelConfig structure. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/rtc.dox b/os/hal/dox/rtc.dox index d503f786c..465bdff25 100644 --- a/os/hal/dox/rtc.dox +++ b/os/hal/dox/rtc.dox @@ -26,5 +26,5 @@ * @pre In order to use the RTC driver the @p HAL_USE_RTC option * must be enabled in @p halconf.h. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/sdc.dox b/os/hal/dox/sdc.dox index 71f56d41a..f7be5f82b 100644 --- a/os/hal/dox/sdc.dox +++ b/os/hal/dox/sdc.dox @@ -33,5 +33,5 @@ * This driver allows to read or write single or multiple 512 bytes blocks * on a SD Card. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/serial.dox b/os/hal/dox/serial.dox index e1a01800a..2dbf1d34b 100644 --- a/os/hal/dox/serial.dox +++ b/os/hal/dox/serial.dox @@ -57,5 +57,5 @@ } * @enddot * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/serial_usb.dox b/os/hal/dox/serial_usb.dox index 08e72cfbd..9ba5d542c 100644 --- a/os/hal/dox/serial_usb.dox +++ b/os/hal/dox/serial_usb.dox @@ -52,5 +52,5 @@ } * @enddot * - * @ingroup IO + * @ingroup HAL_COMPLEX_DRIVERS */ diff --git a/os/hal/dox/spi.dox b/os/hal/dox/spi.dox index e02656998..74db799eb 100644 --- a/os/hal/dox/spi.dox +++ b/os/hal/dox/spi.dox @@ -90,5 +90,5 @@ * the SPI bus from multiple threads then use the @p spiAcquireBus() and * @p spiReleaseBus() APIs in order to gain exclusive access. * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/uart.dox b/os/hal/dox/uart.dox index 316d2604e..683a32dbf 100644 --- a/os/hal/dox/uart.dox +++ b/os/hal/dox/uart.dox @@ -121,5 +121,5 @@ } * @enddot * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/dox/usb.dox b/os/hal/dox/usb.dox index d37cc093e..81066ab0b 100644 --- a/os/hal/dox/usb.dox +++ b/os/hal/dox/usb.dox @@ -180,5 +180,5 @@ * conditions using those callbacks. * . * - * @ingroup IO + * @ingroup HAL_NORMAL_DRIVERS */ diff --git a/os/hal/include/hal_files.h b/os/hal/include/hal_files.h index aba8a7271..21e64b07d 100644 --- a/os/hal/include/hal_files.h +++ b/os/hal/include/hal_files.h @@ -24,7 +24,7 @@ * @details This header defines abstract interfaces useful to access generic * data files in a standardized way. * - * @addtogroup FILE_STREAMS + * @addtogroup HAL_FILES * @details This module define an abstract interface for generic data files by * extending the @p BaseSequentialStream interface. Note that no code * is present, data files are just abstract interface-like structures, diff --git a/os/hal/include/hal_streams.h b/os/hal/include/hal_streams.h index 8365c6014..905341323 100644 --- a/os/hal/include/hal_streams.h +++ b/os/hal/include/hal_streams.h @@ -24,7 +24,7 @@ * @details This header defines abstract interfaces useful to access generic * data streams in a standardized way. * - * @addtogroup data_streams + * @addtogroup HAL_STREAMS * @details This module define an abstract interface for generic data streams. * Note that no code is present, just abstract interfaces-like * structures, you should look at the system as to a set of