diff --git a/os/hal/include/pwm.h b/os/hal/include/pwm.h index 9b0043a21..562be26bc 100644 --- a/os/hal/include/pwm.h +++ b/os/hal/include/pwm.h @@ -78,6 +78,32 @@ typedef void (*pwmcallback_t)(void); /* Driver macros. */ /*===========================================================================*/ +/** + * @brief Enables a PWM channel. + * @details Programs (or reprograms) a PWM channel. + * @note This function has to be invoked from a lock zone. + * + * @param[in] pwmp pointer to a @p PWMDriver object + * @param[in] channel PWM channel identifier + * @param[in] width PWM pulse width as clock pulses number + */ +#define pwmEnableChannelI(pwmp, channel, width) { \ + pwm_lld_enable_channel(pwmp, channel, width); \ +} + +/** + * @brief Disables a PWM channel. + * @details The channel is disabled and its output line returned to the + * idle state. + * @note This function has to be invoked from a lock zone. + * + * @param[in] pwmp pointer to a @p PWMDriver object + * @param[in] channel PWM channel identifier + */ +#define pwmDisableChannelI(pwmp, channel) { \ + pwm_lld_disable_channel(pwmp, channel); \ +} + /*===========================================================================*/ /* External declarations. */ /*===========================================================================*/ diff --git a/os/hal/src/adc.c b/os/hal/src/adc.c index 2a329d003..5348d7e93 100644 --- a/os/hal/src/adc.c +++ b/os/hal/src/adc.c @@ -112,11 +112,10 @@ void adcStop(ADCDriver *adcp) { * @brief Starts an ADC conversion. * @details Starts a conversion operation, there are two kind of conversion * modes: - * - LINEAR, this mode is activated when the @p callback - * parameter is set to @p NULL, in this mode the buffer is filled - * once and then the conversion stops automatically. - * - CIRCULAR, when a callback function is defined the - * conversion never stops and the buffer is filled circularly. + * - LINEAR, in this mode the buffer is filled once and then + * the conversion stops automatically. + * - CIRCULAR, in this mode the conversion never stops and + * the buffer is filled circularly.
* During the conversion the callback function is invoked when * the buffer is 50% filled and when the buffer is 100% filled, * this way is possible to process the conversion stream in real @@ -133,7 +132,8 @@ void adcStop(ADCDriver *adcp) { * @param[out] samples pointer to the samples buffer * @param[in] depth buffer depth (matrix rows number). The buffer depth * must be one or an even number. - * @param[in] callback pointer to the conversion callback function + * @param[in] callback pointer to the conversion callback function, this + * parameter can be @p NULL if a callback is not required * @return The operation status. * @retval FALSE the conversion has been started. * @retval TRUE the driver is busy, conversion not started. diff --git a/os/hal/src/pwm.c b/os/hal/src/pwm.c index 3aeec1309..4b797da0c 100644 --- a/os/hal/src/pwm.c +++ b/os/hal/src/pwm.c @@ -20,6 +20,7 @@ /** * @file pwm.c * @brief PWM Driver code. + * * @addtogroup PWM * @{ */ @@ -104,6 +105,7 @@ void pwmStop(PWMDriver *pwmp) { /** * @brief Enables a PWM channel. + * @details Programs (or reprograms) a PWM channel. * * @param[in] pwmp pointer to a @p PWMDriver object * @param[in] channel PWM channel identifier diff --git a/os/kernel/include/chfiles.h b/os/kernel/include/chfiles.h new file mode 100644 index 000000000..ecd03fd04 --- /dev/null +++ b/os/kernel/include/chfiles.h @@ -0,0 +1,133 @@ +/* + ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010 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 chfiles.h + * @brief Data files. + * @details This header defines abstract interfaces useful to access generic + * data files in a standardized way. + * + * @addtogroup data_files + * @details This module define an abstract interface for generic data files. + * Note that no code is present, data files are just abstract + * interface-like structures, you should look at the systems as to + * a set of abstract C++ classes (even if written in C). This system + * has the advantage to make the access to streams independent + * from the implementation logic.
+ * The data files interface can be used as base class for high level + * object types such as an API for a File System implementation. + * @{ + */ + +#ifndef _CHFILES_H_ +#define _CHFILES_H_ + +/** + * @brief Error code from the file stream methods. + */ +#define FILE_ERROR 0xFFFFFFFFUL + +/** + * @brief File offset type. + */ +typedef uint32_t fileoffset_t; + +/** + * @brief BaseFileStream specific methods. + */ +#define _base_file_stream_methods \ + _base_sequential_stream_methods \ + /* File close method.*/ \ + uint32_t (*close)(void *instance); \ + /* Get last error code method.*/ \ + int (*geterror)(void *instance); \ + /* File get size method.*/ \ + fileoffset_t (*getsize)(void *instance); \ + /* File get current position method.*/ \ + fileoffset_t (*getposition)(void *instance); \ + /* File seek method.*/ \ + fileoffset_t (*lseek)(void *instance, fileoffset_t offset); + +/** + * @brief @p BaseFileStream specific data. + * @note It is empty because @p BaseFileStream is only an interface + * without implementation. + */ +#define _base_file_stream_data \ + _base_sequential_stream_data + +/** + * @brief @p BaseFileStream virtual methods table. + */ +struct BaseFilelStreamVMT { + _base_file_stream_methods +}; + +/** + * @extends BaseSequentialStream + * + * @brief Base file stream class. + * @details This class represents a generic file data stream. + */ +typedef struct { + /** @brief Virtual Methods Table.*/ + const struct FileStreamVMT *vmt; + _base_file_stream_data +} BaseFileStream; + +/** + * @brief Base file Stream close. + * @details The function closes a file stream. + * + * @param[in] ip pointer to a @p BaseFileStream or derived class + */ +#define chFileStreamClose(ip) ((ip)->vmt->close(ip)) + +/** + * @brief Returns an implementation dependent error code. + * + * @param[in] ip pointer to a @p BaseFileStream or derived class + */ +#define chFileStreamGetError ((ip)->vmt->geterror(ip)) + +/** + * @brief Returns the current file size. + * + * @param[in] ip pointer to a @p BaseFileStream or derived class + */ +#define chFileStreamGetSize ((ip)->vmt->getposition(ip)) + +/** + * @brief Returns the current file pointer position. + * + * @param[in] ip pointer to a @p BaseFileStream or derived class + */ +#define chFileStreamGetPosition ((ip)->vmt->getposition(ip)) + +/** + * @brief Moves the file current pointer to an absolute position. + * + * @param[in] ip pointer to a @p BaseFileStream or derived class + * @param[in] offset new absolute position + */ +#define chFileStreamSeek ((ip)->vmt->lseek(ip, offset)) + +#endif /* _CHFILES_H_ */ + +/** @} */ diff --git a/readme.txt b/readme.txt index 498e1b6e8..8b1e64b6a 100644 --- a/readme.txt +++ b/readme.txt @@ -55,13 +55,23 @@ +--test/ - Kernel test suite source code. | +--coverage/ - Code coverage project. +--testhal/ - HAL integration test demos. + +--STM32/ - STM32 HAL demos. ***************************************************************************** *** Releases *** ***************************************************************************** *** 2.1.2 *** +- FIX: Fixed a documentation error regarding the ADC driver function + adcStartConversion() (bug 3039890)(backported to 2.0.3). - NEW: Added a simple STM32 ADC demo under ./testhal/STM32/ADC. +- NEW: Added pwmEnableChannelI() and pwmDisableChannelI() APIs to the PWM + driver in order to allow channel reprogramming from within callbacks or + other interrupt handlers. The new APIs are implemented as macros so there + is no footprint overhead. +- NEW: Added a generic BaseFileStream interface for future File System + implementations or integrations (untested and not sure if it will stay or + change). *** 2.1.1 *** - FIX: Fixed insufficient stack size for idle thread (bug 3033624)(backported diff --git a/todo.txt b/todo.txt index 24806859c..6343e00fa 100644 --- a/todo.txt +++ b/todo.txt @@ -14,11 +14,12 @@ Within 2.1.x (hopefully) verifiable. X Resist doing more changes and optimizations in the kernel, fixes only. X Rework STM32 drivers to use friendly IRQ names and centralized DMA macros. -- Merge the Coldfire branch in mainline. -- Merge the H8S branch in mainline. -- File System infrastructure. +X File System infrastructure. +X General HAL improvements. - Add a *very simple* ADC API for simgle one shot sampling (implement it as an injected conversion on the STM32). +- Evaluate if reimplement the SPI/CAN drivers to be callback-based like the + ADC, PWM and UART drivers, the current API could be rebuilt on top. - MAC driver for STM32F105/STM32F107 (hardware missing). - Device drivers for STM8 (SPI, ADC, PWM, bring it on par with STM32). - Support for more compilers (ARMCMx only initially). @@ -26,6 +27,8 @@ X Rework STM32 drivers to use friendly IRQ names and centralized DMA macros. - Batch testing of the ARM7/ARMCMx port using OpenOCD, with reports. Later but within 2.x.x +- Merge the Coldfire branch in mainline. +- Merge the H8S branch in mainline. - Debug-related features and tools. - I2C device driver class support. - USB device driver class support.