From d4c616e6eeb0587ca450c75b1086efa77ac690e5 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sun, 29 Nov 2009 08:50:13 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1351 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/templates/adc_lld.c | 101 ++++++++++++ os/hal/templates/adc_lld.h | 141 ++++++++++++++++ os/hal/templates/can_lld.c | 159 ++++++++++++++++++ os/hal/templates/can_lld.h | 154 ++++++++++++++++++ os/hal/templates/hal_lld.c | 57 +++++++ os/hal/templates/hal_lld.h | 56 +++++++ os/hal/templates/halconf.h | 88 ++++++++++ os/hal/templates/mac_lld.c | 153 +++++++++++++++++ os/hal/templates/mac_lld.h | 121 ++++++++++++++ os/hal/templates/meta/driver.c | 87 ++++++++++ os/hal/templates/meta/driver.h | 54 ++++++ os/hal/templates/meta/driver_lld.c | 79 +++++++++ os/hal/templates/meta/driver_lld.h | 81 +++++++++ os/hal/templates/mii_lld.c | 70 ++++++++ os/hal/templates/mii_lld.h | 65 ++++++++ os/hal/templates/pal_lld.c | 54 ++++++ os/hal/templates/pal_lld.h | 326 +++++++++++++++++++++++++++++++++++++ os/hal/templates/serial_lld.c | 91 +++++++++++ os/hal/templates/serial_lld.h | 113 +++++++++++++ os/hal/templates/spi_lld.c | 160 ++++++++++++++++++ os/hal/templates/spi_lld.h | 108 ++++++++++++ 21 files changed, 2318 insertions(+) create mode 100644 os/hal/templates/adc_lld.c create mode 100644 os/hal/templates/adc_lld.h create mode 100644 os/hal/templates/can_lld.c create mode 100644 os/hal/templates/can_lld.h create mode 100644 os/hal/templates/hal_lld.c create mode 100644 os/hal/templates/hal_lld.h create mode 100644 os/hal/templates/halconf.h create mode 100644 os/hal/templates/mac_lld.c create mode 100644 os/hal/templates/mac_lld.h create mode 100644 os/hal/templates/meta/driver.c create mode 100644 os/hal/templates/meta/driver.h create mode 100644 os/hal/templates/meta/driver_lld.c create mode 100644 os/hal/templates/meta/driver_lld.h create mode 100644 os/hal/templates/mii_lld.c create mode 100644 os/hal/templates/mii_lld.h create mode 100644 os/hal/templates/pal_lld.c create mode 100644 os/hal/templates/pal_lld.h create mode 100644 os/hal/templates/serial_lld.c create mode 100644 os/hal/templates/serial_lld.h create mode 100644 os/hal/templates/spi_lld.c create mode 100644 os/hal/templates/spi_lld.h (limited to 'os/hal/templates') diff --git a/os/hal/templates/adc_lld.c b/os/hal/templates/adc_lld.c new file mode 100644 index 000000000..9aabc4bcd --- /dev/null +++ b/os/hal/templates/adc_lld.c @@ -0,0 +1,101 @@ +/* + 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 templates/adc_lld.c + * @brief ADC Driver subsystem low level driver source template + * @addtogroup ADC_LLD + * @{ + */ + +#include "ch.h" +#include "hal.h" + +#if CH_HAL_USE_ADC + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level ADC driver initialization. + */ +void adc_lld_init(void) { + +} + +/** + * @brief Configures and activates the ADC peripheral. + * + * @param[in] adcp pointer to the @p ADCDriver object + */ +void adc_lld_start(ADCDriver *adcp) { + + if (adcp->adc_state == ADC_STOP) { + /* Clock activation.*/ + } + /* Configuration.*/ +} + +/** + * @brief Deactivates the ADC peripheral. + * + * @param[in] adcp pointer to the @p ADCDriver object + */ +void adc_lld_stop(ADCDriver *adcp) { + +} + +/** + * @brief Starts an ADC conversion. + * + * @param[in] adcp pointer to the @p ADCDriver object + */ +void adc_lld_start_conversion(ADCDriver *adcp) { + +} + +/** + * @brief Stops an ongoing conversion. + * + * @param[in] adcp pointer to the @p ADCDriver object + */ +void adc_lld_stop_conversion(ADCDriver *adcp) { + +} + +#endif /* CH_HAL_USE_ADC */ + +/** @} */ diff --git a/os/hal/templates/adc_lld.h b/os/hal/templates/adc_lld.h new file mode 100644 index 000000000..ca14577f0 --- /dev/null +++ b/os/hal/templates/adc_lld.h @@ -0,0 +1,141 @@ +/* + 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 templates/adc_lld.h + * @brief ADC Driver subsystem low level driver header template + * @addtogroup ADC_LLD + * @{ + */ + +#ifndef _ADC_LLD_H_ +#define _ADC_LLD_H_ + +#if CH_HAL_USE_ADC + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief ADC sample data type. + */ +typedef uint16_t adcsample_t; + +/** + * @brief Channels number in a conversion group. + */ +typedef uint16_t adc_channels_num_t; + +/** + * @brief ADC notification callback type. + * @param[in] buffer pointer to the most recent samples data + * @param[in] n number of buffer rows available starting from @p buffer + */ +typedef void (*adccallback_t)(adcsample_t *buffer, size_t n); + +/** + * @brief Conversion group configuration structure. + * @details This implementation-dependent structure describes a conversion + * operation. + */ +typedef struct { + /** + * @brief Enables the circular buffer mode for the group. + */ + bool_t acg_circular; + /** + * @brief Number of the analog channels belonging to the conversion group. + */ + adc_channels_num_t acg_num_channels; + /* End of the mandatory fields.*/ +} ADCConversionGroup; + +/** + * @brief Driver configuration structure. + * @note It could be empty on some architectures. + */ +typedef struct { + +} ADCConfig; + +/** + * @brief Structure representing an ADC driver. + */ +typedef struct { + /** + * @brief Driver state. + */ + adcstate_t ad_state; + /** + * @brief Current configuration data. + */ + const ADCConfig *ad_config; + /** + * @brief Synchronization semaphore. + */ + Semaphore ad_sem; + /** + * @brief Current callback function or @p NULL. + */ + adccallback_t ad_callback; + /** + * @brief Current samples buffer pointer or @p NULL. + */ + adcsample_t *ad_samples; + /** + * @brief Current samples buffer depth or @p 0. + */ + size_t ad_depth; + /** + * @brief Current conversion group pointer or @p NULL. + */ + const ADCConversionGroup *ad_grpp; + /* End of the mandatory fields.*/ +} ADCDriver; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void adc_lld_init(void); + void adc_lld_start(ADCDriver *adcp); + void adc_lld_stop(ADCDriver *adcp); + void adc_lld_start_conversion(ADCDriver *adcp); + void adc_lld_stop_conversion(ADCDriver *adcp); +#ifdef __cplusplus +} +#endif + +#endif /* CH_HAL_USE_ADC */ + +#endif /* _ADC_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/can_lld.c b/os/hal/templates/can_lld.c new file mode 100644 index 000000000..7c56acad1 --- /dev/null +++ b/os/hal/templates/can_lld.c @@ -0,0 +1,159 @@ +/* + 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 templates/can_lld.c + * @brief CAN Driver subsystem low level driver source template + * @addtogroup CAN_LLD + * @{ + */ + +#include "ch.h" +#include "hal.h" + +#if CH_HAL_USE_CAN + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level CAN driver initialization. + */ +void can_lld_init(void) { + +} + +/** + * @brief Configures and activates the CAN peripheral. + * + * @param[in] canp pointer to the @p CANDriver object + */ +void can_lld_start(CANDriver *canp) { + + if (canp->can_state == CAN_STOP) { + /* Clock activation.*/ + } + /* Configuration.*/ +} + +/** + * @brief Deactivates the CAN peripheral. + * + * @param[in] canp pointer to the @p CANDriver object + */ +void can_lld_stop(CANDriver *canp) { + +} + +/** + * @brief Determines whether a frame can be transmitted. + * + * @param[in] canp pointer to the @p CANDriver object + * + * @return The queue space availability. + * @retval FALSE no space in the transmit queue. + * @retval TRUE transmit slot available. + */ +bool_t can_lld_can_transmit(CANDriver *canp) { + + return FALSE; +} + +/** + * @brief Inserts a frame into the transmit queue. + * + * @param[in] canp pointer to the @p CANDriver object + * @param[in] cfp pointer to the CAN frame to be transmitted + * + * @return The operation status. + * @retval RDY_OK frame transmitted. + */ +msg_t can_lld_transmit(CANDriver *canp, const CANFrame *cfp) { + + return RDY_OK; +} + +/** + * @brief Determines whether a frame has been received. + * + * @param[in] canp pointer to the @p CANDriver object + * + * @return The queue space availability. + * @retval FALSE no space in the transmit queue. + * @retval TRUE transmit slot available. + */ +bool_t can_lld_can_receive(CANDriver *canp) { + + return FALSE; +} + +/** + * @brief Receives a frame from the input queue. + * + * @param[in] canp pointer to the @p CANDriver object + * @param[out] cfp pointer to the buffer where the CAN frame is copied + * + * @return The operation status. + * @retval RDY_OK frame received. + */ +msg_t can_lld_receive(CANDriver *canp, CANFrame *cfp) { + + return RDY_OK; +} + +#if CAN_USE_SLEEP_MODE || defined(__DOXYGEN__) +/** + * @brief Enters the sleep mode. + * + * @param[in] canp pointer to the @p CANDriver object + */ +void can_lld_sleep(CANDriver *canp) { + +} + +/** + * @brief Enforces leaving the sleep mode. + * + * @param[in] canp pointer to the @p CANDriver object + */ +void can_lld_wakeup(CANDriver *canp) { + +} +#endif /* CAN_USE_SLEEP_MODE */ + +#endif /* CH_HAL_USE_CAN */ + +/** @} */ diff --git a/os/hal/templates/can_lld.h b/os/hal/templates/can_lld.h new file mode 100644 index 000000000..c899055c6 --- /dev/null +++ b/os/hal/templates/can_lld.h @@ -0,0 +1,154 @@ +/* + 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 templates/can_lld.h + * @brief CAN Driver subsystem low level driver header template + * @addtogroup CAN_LLD + * @{ + */ + +#ifndef _CAN_LLD_H_ +#define _CAN_LLD_H_ + +#if CH_HAL_USE_CAN + +/** + * @brief This switch defines whether the driver implementation supports + * a low power switch mode with automatic an wakeup feature. + */ +#define CAN_SUPPORTS_SLEEP TRUE + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Sleep mode related APIs inclusion switch. + * @note This switch is enforced to @p FALSE if the driver implementation + * does not support the sleep mode. + */ +#if CAN_SUPPORTS_SLEEP || defined(__DOXYGEN__) +#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__) +#define CAN_USE_SLEEP_MODE TRUE +#endif +#else /* !CAN_SUPPORTS_SLEEP */ +#define CAN_USE_SLEEP_MODE FALSE +#endif /* !CAN_SUPPORTS_SLEEP */ + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief CAN frame. + * @note Accessing the frame data as word16 or word32 is not portable because + * machine data endianness, it can be still useful for a quick filling. + */ +typedef struct { + uint8_t cf_DLC:4; /**< @brief Data length. */ + uint8_t cf_IDE:1; /**< @brief Identifier type. */ + uint8_t cf_RTR:1; /**< @brief Frame type. */ + uint32_t cf_id; /**< @brief Frame identifier. */ + union { + uint8_t cf_data8[8]; /**< @brief Frame data. */ + uint16_t cf_data16[4]; /**< @brief Frame data. */ + uint32_t cf_data32[2]; /**< @brief Frame data. */ + }; +} CANFrame; + +/** + * @brief Driver configuration structure. + * @note It could be empty on some architectures. + */ +typedef struct { +} CANConfig; + +/** + * @brief Structure representing an CAN driver. + */ +typedef struct { + /** + * @brief Driver state. + */ + canstate_t can_state; + /** + * @brief Current configuration data. + */ + const CANConfig *can_config; + /** + * @brief Transmission queue semaphore. + */ + Semaphore can_txsem; + /** + * @brief Receive queue semaphore. + */ + Semaphore can_rxsem; + /** + * @brief One or more frames become available. + */ + EventSource can_rxfull_event; + /** + * @brief One or more transmission slots become available. + */ + EventSource can_txempty_event; +#if CAN_USE_SLEEP_MODE || defined (__DOXYGEN__) + /** + * @brief Entering sleep state event. + */ + EventSource can_sleep_event; + /** + * @brief Exiting sleep state event. + */ + EventSource can_wakeup_event; +#endif /* CAN_USE_SLEEP_MODE */ + /* End of the mandatory fields.*/ +} CANDriver; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void can_lld_init(void); + void can_lld_start(CANDriver *canp); + void can_lld_stop(CANDriver *canp); + bool_t can_lld_can_transmit(CANDriver *canp); + msg_t can_lld_transmit(CANDriver *canp, const CANFrame *cfp); + bool_t can_lld_can_receive(CANDriver *canp); + msg_t can_lld_receive(CANDriver *canp, CANFrame *cfp); +#if CAN_USE_SLEEP_MODE + void can_lld_sleep(CANDriver *canp); + void can_lld_wakeup(CANDriver *canp); +#endif /* CAN_USE_SLEEP_MODE */ +#ifdef __cplusplus +} +#endif + +#endif /* CH_HAL_USE_CAN */ + +#endif /* _CAN_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/hal_lld.c b/os/hal/templates/hal_lld.c new file mode 100644 index 000000000..0d2d46dcc --- /dev/null +++ b/os/hal/templates/hal_lld.c @@ -0,0 +1,57 @@ +/* + 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 templates/hal_lld.c + * @brief HAL Driver subsystem low level driver source template + * @addtogroup HAL_LLD + * @{ + */ + +#include +#include + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level HAL driver initialization. + */ +void hal_lld_init(void) { + +} + +/** @} */ diff --git a/os/hal/templates/hal_lld.h b/os/hal/templates/hal_lld.h new file mode 100644 index 000000000..b401e4217 --- /dev/null +++ b/os/hal/templates/hal_lld.h @@ -0,0 +1,56 @@ +/* + 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 templates/hal_lld.h + * @brief HAL subsystem low level driver header template + * @addtogroup HAL_LLD + * @{ + */ + +#ifndef _HAL_LLD_H_ +#define _HAL_LLD_H_ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void hal_lld_init(void); +#ifdef __cplusplus +} +#endif + +#endif /* _HAL_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/halconf.h b/os/hal/templates/halconf.h new file mode 100644 index 000000000..f08ffcda5 --- /dev/null +++ b/os/hal/templates/halconf.h @@ -0,0 +1,88 @@ +/* + 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 templates/halconf.h + * @brief HAL configuration header. + * @addtogroup HAL_CONF + * @{ + */ + +#ifndef _HALCONF_H_ +#define _HALCONF_H_ + +/** + * @brief Enables the PAL subsystem. + */ +#if !defined(CH_HAL_USE_PAL) || defined(__DOXYGEN__) +#define CH_HAL_USE_PAL TRUE +#endif + +/** + * @brief Enables the ADC subsystem. + */ +#if !defined(CH_HAL_USE_ADC) || defined(__DOXYGEN__) +#define CH_HAL_USE_ADC TRUE +#endif + +/** + * @brief Enables the CAN subsystem. + */ +#if !defined(CH_HAL_USE_CAN) || defined(__DOXYGEN__) +#define CH_HAL_USE_CAN TRUE +#endif + +/** + * @brief Enables the MAC subsystem. + */ +#if !defined(CH_HAL_USE_MAC) || defined(__DOXYGEN__) +#define CH_HAL_USE_MAC TRUE +#endif + +/** + * @brief Enables the MII subsystem. + */ +#if !defined(CH_HAL_USE_MII) || defined(__DOXYGEN__) +#define CH_HAL_USE_MII TRUE +#endif + +/** + * @brief Enables the SERIAL subsystem. + */ +#if !defined(CH_HAL_USE_SERIAL) || defined(__DOXYGEN__) +#define CH_HAL_USE_SERIAL TRUE +#endif + +/** + * @brief Enables the SPI subsystem. + */ +#if !defined(CH_HAL_USE_SPI) || defined(__DOXYGEN__) +#define CH_HAL_USE_SPI TRUE +#endif + +/** + * @brief Enables the MMC_SPI subsystem. + */ +#if !defined(CH_HAL_USE_MMC_SPI) || defined(__DOXYGEN__) +#define CH_HAL_USE_MMC_SPI TRUE +#endif + +#endif /* _HALCONF_H_ */ + +/** @} */ diff --git a/os/hal/templates/mac_lld.c b/os/hal/templates/mac_lld.c new file mode 100644 index 000000000..fa6ef7a9e --- /dev/null +++ b/os/hal/templates/mac_lld.c @@ -0,0 +1,153 @@ +/* + 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 templates/mac_lld.c + * @brief MAC Driver subsystem low level driver source template + * @addtogroup MAC_LLD + * @{ + */ + +#include "ch.h" +#include "hal.h" + +#if CH_HAL_USE_MAC + +/** + * @brief Low level MAC initialization. + */ +void mac_lld_init(void) { + +} + +/** + * @brief Low level MAC address setup. + * + * @param[in] macp pointer to the @p MACDriver object + * @param[in] p pointer to a six bytes buffer containing the MAC address. If + * this parameter is set to @p NULL then a system default MAC is + * used. + */ +void mac_lld_set_address(MACDriver *macp, const uint8_t *p) { + +} + +/** + * @brief Returns a transmission descriptor. + * @details One of the available transmission descriptors is locked and + * returned. + * + * @param[in] macp pointer to the @p MACDriver object + * @param[out] tdp pointer to a @p MACTransmitDescriptor structure + * @return The operation status. + * @retval RDY_OK the descriptor was obtained. + * @retval RDY_TIMEOUT descriptor not available. + */ +msg_t max_lld_get_transmit_descriptor(MACDriver *macp, + MACTransmitDescriptor *tdp) { + + return RDY_OK; +} + +/** + * @brief Writes to a transmit descriptor's stream. + * + * @param[in] tdp pointer to a @p MACTransmitDescriptor structure + * @param[in] buf pointer to the buffer cointaining the data to be written + * @param[in] size number of bytes to be written + * @return The number of bytes written into the descriptor's stream, this + * value can be less than the amount specified in the parameter + * @p size if the maximum frame size is reached. + */ +size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp, + uint8_t *buf, + size_t size) { + + return 0; +} + +/** + * @brief Releases a transmit descriptor and starts the transmission of the + * enqueued data as a single frame. + * + * @param[in] tdp the pointer to the @p MACTransmitDescriptor structure + */ +void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp) { + +} + +/** + * @brief Returns a receive descriptor. + * + * @param[in] macp pointer to the @p MACDriver object + * @param[out] rdp pointer to a @p MACReceiveDescriptor structure + * @return The operation status. + * @retval RDY_OK the descriptor was obtained. + * @retval RDY_TIMEOUT descriptor not available. + */ +msg_t max_lld_get_receive_descriptor(MACDriver *macp, + MACReceiveDescriptor *rdp) { + + return RDY_OK; +} + +/** + * @brief Reads from a receive descriptor's stream. + * + * @param[in] rdp pointer to a @p MACReceiveDescriptor structure + * @param[in] buf pointer to the buffer that will receive the read data + * @param[in] size number of bytes to be read + * @return The number of bytes read from the descriptor's stream, this + * value can be less than the amount specified in the parameter + * @p size if there are no more bytes to read. + */ +size_t mac_lld_read_receive_descriptor(MACReceiveDescriptor *rdp, + uint8_t *buf, + size_t size) { + + return 0; +} + +/** + * @brief Releases a receive descriptor. + * @details The descriptor and its buffer are made available for more incoming + * frames. + * + * @param[in] rdp the pointer to the @p MACReceiveDescriptor structure + */ +void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp) { + +} + +/** + * @brief Updates and returns the link status. + * + * @param[in] macp pointer to the @p MACDriver object + * @return The link status. + * @retval TRUE if the link is active. + * @retval FALSE if the link is down. + */ +bool_t mac_lld_poll_link_status(MACDriver *macp) { + + return FALSE; +} + +#endif /* CH_HAL_USE_MAC */ + +/** @} */ diff --git a/os/hal/templates/mac_lld.h b/os/hal/templates/mac_lld.h new file mode 100644 index 000000000..07a199f7e --- /dev/null +++ b/os/hal/templates/mac_lld.h @@ -0,0 +1,121 @@ +/* + 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 templates/mac_lld.h + * @brief MAC Driver subsystem low level driver header template + * @addtogroup MAC_LLD + * @{ + */ + +#ifndef _MAC_LLD_H_ +#define _MAC_LLD_H_ + +#if CH_HAL_USE_MAC + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Number of available transmit buffers. + */ +#if !defined(MAC_TRANSMIT_BUFFERS) || defined(__DOXYGEN__) +#define MAC_TRANSMIT_BUFFERS 2 +#endif + +/** + * @brief Number of available receive buffers. + */ +#if !defined(MAC_RECEIVE_BUFFERS) || defined(__DOXYGEN__) +#define MAC_RECEIVE_BUFFERS 2 +#endif + +/** + * @brief Maximum supported frame size. + */ +#if !defined(MAC_BUFFERS_SIZE) || defined(__DOXYGEN__) +#define MAC_BUFFERS_SIZE 1518 +#endif + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Structure representing a MAC driver. + */ +typedef struct { + Semaphore md_tdsem; /**< Transmit semaphore. */ + Semaphore md_rdsem; /**< Receive semaphore. */ +#if CH_USE_EVENTS + EventSource md_rdevent; /**< Receive event source. */ +#endif + /* End of the mandatory fields.*/ +} MACDriver; + +/** + * @brief Structure representing a transmit descriptor. + */ +typedef struct { + size_t td_offset; /**< Current write offset. */ + size_t td_size; /**< Available space size. */ + /* End of the mandatory fields.*/ +} MACTransmitDescriptor; + +/** + * @brief Structure representing a receive descriptor. + */ +typedef struct { + size_t rd_offset; /**< Current read offset. */ + size_t rd_size; /**< Available data size. */ + /* End of the mandatory fields.*/ +} MACReceiveDescriptor; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void mac_lld_init(void); + void mac_lld_set_address(MACDriver *macp, const uint8_t *p); + msg_t max_lld_get_transmit_descriptor(MACDriver *macp, + MACTransmitDescriptor *tdp); + size_t mac_lld_write_transmit_descriptor(MACTransmitDescriptor *tdp, + uint8_t *buf, + size_t size); + void mac_lld_release_transmit_descriptor(MACTransmitDescriptor *tdp); + msg_t max_lld_get_receive_descriptor(MACDriver *macp, + MACReceiveDescriptor *rdp); + size_t mac_lld_read_receive_descriptor(MACReceiveDescriptor *rdp, + uint8_t *buf, + size_t size); + void mac_lld_release_receive_descriptor(MACReceiveDescriptor *rdp); + bool_t mac_lld_poll_link_status(MACDriver *macp); +#ifdef __cplusplus +} +#endif + +#endif /* CH_HAL_USE_MAC */ + +#endif /* _MAC_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/meta/driver.c b/os/hal/templates/meta/driver.c new file mode 100644 index 000000000..9bf785ed2 --- /dev/null +++ b/os/hal/templates/meta/driver.c @@ -0,0 +1,87 @@ +/* + 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 XXX.c + * @brief XXX Driver code. + * @addtogroup XXX + * @{ + */ + +#include +#include + +/** + * @brief XXX Driver initialization. + */ +void xxxInit(void) { + + xxx_lld_init(); +} + +/** + * @brief Initializes the standard part of a @p XXXDriver structure. + * + * @param[in] xxxp pointer to the @p XXXDriver object + */ +void xxxObjectInit(XXXDriver *xxxp) { + + xxxp->xxx_state = XXX_STOP; + xxxp->xxx_config = NULL; +} + +/** + * @brief Configures and activates the XXX peripheral. + * + * @param[in] xxxp pointer to the @p XXXDriver object + * @param[in] config pointer to the @p XXXConfig object + */ +void xxxStart(XXXDriver *xxxp, const XXXConfig *config) { + + chDbgCheck((xxxp != NULL) && (config != NULL), "xxxStart"); + + chSysLock(); + chDbgAssert((xxxp->xxx_state == XXX_STOP) || (xxxp->xxx_state == XXX_READY), + "xxxStart(), #1", + "invalid state"); + xxxp->xxx_config = config; + xxx_lld_start(xxxp); + xxxp->xxx_state = XXX_READY; + chSysUnlock(); +} + +/** + * @brief Deactivates the XXX peripheral. + * + * @param[in] xxxp pointer to the @p XXXDriver object + */ +void xxxStop(XXXDriver *xxxp) { + + chDbgCheck(xxxp != NULL, "xxxStop"); + + chSysLock(); + chDbgAssert((xxxp->xxx_state == XXX_STOP) || (xxxp->xxx_state == XXX_READY), + "xxxStop(), #1", + "invalid state"); + xxx_lld_stop(xxxp); + xxxp->xxx_state = XXX_STOP; + chSysUnlock(); +} + +/** @} */ diff --git a/os/hal/templates/meta/driver.h b/os/hal/templates/meta/driver.h new file mode 100644 index 000000000..675bc6689 --- /dev/null +++ b/os/hal/templates/meta/driver.h @@ -0,0 +1,54 @@ +/* + 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 xxx.h + * @brief XXX Driver macros and structures. + * @addtogroup XXX + * @{ + */ + +#ifndef _XXX_H_ +#define _XXX_H_ + +/** + * @brief Driver state machine possible states. + */ +typedef enum { + XXX_UNINIT = 0, /**< @brief Not initialized. */ + XXX_STOP = 1, /**< @brief Stopped. */ + XXX_READY = 2, /**< @brief Ready. */ +} xxxstate_t; + +#include "xxx_lld.h" + +#ifdef __cplusplus +extern "C" { +#endif + void xxxInit(void); + void xxxObjectInit(XXXDriver *xxxp); + void xxxStart(XXXDriver *xxxp, const XXXConfig *config); + void xxxStop(XXXDriver *xxxp); +#ifdef __cplusplus +} +#endif + +#endif /* _XXX_H_ */ + +/** @} */ diff --git a/os/hal/templates/meta/driver_lld.c b/os/hal/templates/meta/driver_lld.c new file mode 100644 index 000000000..df91ed21b --- /dev/null +++ b/os/hal/templates/meta/driver_lld.c @@ -0,0 +1,79 @@ +/* + 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 templates/xxx_lld.c + * @brief XXX Driver subsystem low level driver source template + * @addtogroup XXX_LLD + * @{ + */ + +#include +#include + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level XXX driver initialization. + */ +void xxx_lld_init(void) { + +} + +/** + * @brief Configures and activates the XXX peripheral. + * + * @param[in] xxxp pointer to the @p XXXDriver object + */ +void xxx_lld_start(XXXDriver *xxxp) { + + if (xxxp->xxx_state == XXX_STOP) { + /* Clock activation.*/ + } + /* Configuration.*/ +} + +/** + * @brief Deactivates the XXX peripheral. + * + * @param[in] xxxp pointer to the @p XXXDriver object + */ +void xxx_lld_stop(XXXDriver *xxxp) { + +} + +/** @} */ diff --git a/os/hal/templates/meta/driver_lld.h b/os/hal/templates/meta/driver_lld.h new file mode 100644 index 000000000..92194664e --- /dev/null +++ b/os/hal/templates/meta/driver_lld.h @@ -0,0 +1,81 @@ +/* + 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 templates/xxx_lld.h + * @brief XXX Driver subsystem low level driver header template + * @addtogroup XXX_LLD + * @{ + */ + +#ifndef _XXX_LLD_H_ +#define _XXX_LLD_H_ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Driver configuration structure. + * @note It could be empty on some architectures. + */ +typedef struct { + +} XXXConfig; + +/** + * @brief Structure representing an XXX driver. + */ +typedef struct { + /** + * @brief Driver state. + */ + xxxstate_t xxx_state; + /** + * @brief Current configuration data. + */ + const XXXConfig *xxx_config; + /* End of the mandatory fields.*/ +} XXXDriver; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void xxx_lld_init(void); + void xxx_lld_start(XXXDriver *xxxp); + void xxx_lld_stop(XXXDriver *xxxp); +#ifdef __cplusplus +} +#endif + +#endif /* _XXX_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/mii_lld.c b/os/hal/templates/mii_lld.c new file mode 100644 index 000000000..2381c4f1e --- /dev/null +++ b/os/hal/templates/mii_lld.c @@ -0,0 +1,70 @@ +/* + 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 templates/mii_lld.c + * @brief MII Driver subsystem low level driver source template + * @addtogroup MII_LLD + * @{ + */ + +#include "ch.h" +#include "mac.h" +#include "mii.h" + +/** + * @brief Low level MII driver initialization. + */ +void mii_lld_init(void) { + +} + +/** + * Resets a PHY device. + * + * @param[in] macp pointer to the @p MACDriver object + */ +void mii_lld_reset(MACDriver *macp) { + +} + +/** + * @brief Reads a PHY register through the MII interface. + * + * @param[in] macp pointer to the @p MACDriver object + * @param addr the register address + * @return The register value. + */ +phyreg_t mii_lld_get(MACDriver *macp, phyaddr_t addr) { + + return 0; +} + +/** + * @brief Writes a PHY register through the MII interface. + * + * @param[in] macp pointer to the @p MACDriver object + * @param addr the register address + * @param value the new register value + */ +void mii_lld_put(MACDriver *macp, phyaddr_t addr, phyreg_t value) { + +} + +/** @} */ diff --git a/os/hal/templates/mii_lld.h b/os/hal/templates/mii_lld.h new file mode 100644 index 000000000..974588363 --- /dev/null +++ b/os/hal/templates/mii_lld.h @@ -0,0 +1,65 @@ +/* + 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 templates/mii_lld.h + * @brief MII Driver subsystem low level driver header template + * @addtogroup MII_LLD + * @{ + */ + +#ifndef _MII_LLD_H_ +#define _MII_LLD_H_ + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Type of a PHY register value. + */ +typedef uint16_t phyreg_t; + +/** + * @brief Type of a PHY register address. + */ +typedef uint8_t phyaddr_t; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void mii_lld_init(void); + void mii_lld_reset(MACDriver *macp); + phyreg_t mii_lld_get(MACDriver *macp, phyaddr_t addr); + void mii_lld_put(MACDriver *macp, phyaddr_t addr, phyreg_t value); +#ifdef __cplusplus +} +#endif + +#endif /* _MII_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/pal_lld.c b/os/hal/templates/pal_lld.c new file mode 100644 index 000000000..598832d09 --- /dev/null +++ b/os/hal/templates/pal_lld.c @@ -0,0 +1,54 @@ +/* + 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 templates/pal_lld.c + * @brief PAL subsystem low level driver template + * @addtogroup PAL_LLD + * @{ + */ + +#include "ch.h" +#include "hal.h" + +#if CH_HAL_USE_PAL + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +#endif /* CH_HAL_USE_PAL */ + +/** @} */ diff --git a/os/hal/templates/pal_lld.h b/os/hal/templates/pal_lld.h new file mode 100644 index 000000000..a8caf089b --- /dev/null +++ b/os/hal/templates/pal_lld.h @@ -0,0 +1,326 @@ +/* + 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 templates/pal_lld.h + * @brief PAL subsystem low level driver header template + * @addtogroup PAL_LLD + * @{ + */ + +#ifndef _PAL_LLD_H_ +#define _PAL_LLD_H_ + +#if CH_HAL_USE_PAL + +/*===========================================================================*/ +/* Unsupported modes and specific modes */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* I/O Ports Types and constants. */ +/*===========================================================================*/ + +/** + * @brief Generic I/O ports static initializer. + * @details An instance of this structure must be passed to @p palInit() at + * system startup time in order to initialized the digital I/O + * subsystem. This represents only the initial setup, specific pads + * or whole ports can be reprogrammed at later time. + * + * @note This structure content is architecture dependent. The nome should be + * changed to include the architecture name following this pattern:
+ * - [ARCH][CELL]Config. + * . + * As example:
+ * - MSP430DIOConfig. + * . + */ +typedef struct { + +} GenericConfig; + +/** + * @brief Width, in bits, of an I/O port. + */ +#define PAL_IOPORTS_WIDTH 32 + +/** + * @brief Whole port mask. + * @brief This macro specifies all the valid bits into a port. + */ +#define PAL_WHOLE_PORT ((ioportmask_t)0xFFFFFFFF) + +/** + * @brief Digital I/O port sized unsigned type. + */ +typedef uint32_t ioportmask_t; + +/** + * @brief Port Identifier. + * @details This type can be a scalar or some kind of pointer, do not make + * any assumption about it, use the provided macros when populating + * variables of this type. + */ +typedef uint32_t ioportid_t; + +/*===========================================================================*/ +/* I/O Ports Identifiers. */ +/*===========================================================================*/ + +/** + * @brief First I/O port identifier. + * @details Low level drivers can define multiple ports, it is suggested to + * use this naming convention. + */ +#define IOPORT1 0 + +/*===========================================================================*/ +/* Implementation, some of the following macros could be implemented as */ +/* functions, if so please put them in pal_lld.c. */ +/*===========================================================================*/ + +/** + * @brief Low level PAL subsystem initialization. + * + * @param[in] config the architecture-dependent ports configuration + */ +#define pal_lld_init(config) + +/** + * @brief Reads the physical I/O port states. + * + * @param[in] port the port identifier + * @return The port bits. + * + * @note This function is not meant to be invoked directly by the application + * code. + */ +#define pal_lld_readport(port) + +/** + * @brief Reads the output latch. + * @details The purpose of this function is to read back the latched output + * value. + * + * @param[in] port the port identifier + * @return The latched logical states. + * + * @note This function is not meant to be invoked directly by the application + * code. + */ +#define pal_lld_readlatch(port) + +/** + * @brief Writes a bits mask on a I/O port. + * + * @param[in] port the port identifier + * @param[in] bits the bits to be written on the specified port + * + * @note This function is not meant to be invoked directly by the application + * code. + */ +#define pal_lld_writeport(port, bits) + +/** + * @brief Sets a bits mask on a I/O port. + * + * @param[in] port the port identifier + * @param[in] bits the bits to be ORed on the specified port + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_setport(port, bits) + +/** + * @brief Clears a bits mask on a I/O port. + * + * @param[in] port the port identifier + * @param[in] bits the bits to be cleared on the specified port + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_clearport(port, bits) + +/** + * @brief Toggles a bits mask on a I/O port. + * + * @param[in] port the port identifier + * @param[in] bits the bits to be XORed on the specified port + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_toggleport(port, bits) + +/** + * @brief Reads a group of bits. + * + * @param[in] port the port identifier + * @param[in] mask the group mask + * @param[in] offset the group bit offset within the port + * @return The group logical states. + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_readgroup(port, mask, offset) + +/** + * @brief Writes a group of bits. + * + * @param[in] port the port identifier + * @param[in] mask the group mask + * @param[in] offset the group bit offset within the port + * @param[in] bits the bits to be written. Values exceeding the group width + * are masked. + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_writegroup(port, mask, offset, bits) + +/** + * @brief Pads group mode setup. + * @details This function programs a pads group belonging to the same port + * with the specified mode. + * + * @param[in] port the port identifier + * @param[in] mask the group mask + * @param[in] mode the mode + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note Programming an unknown or unsupported mode is silently ignored. + */ +#define pal_lld_setgroupmode(port, mask, mode) + +/** + * @brief Reads a logical state from an I/O pad. + * + * @param[in] port the port identifier + * @param[in] pad the pad number within the port + * @return The logical state. + * @retval 0 low logical state. + * @retval 1 high logical state. + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_readpad(port, pad) + +/** + * @brief Writes a logical state on an output pad. + * + * @param[in] port the port identifier + * @param[in] pad the pad number within the port + * @param[out] bit the logical value, the value must be @p 0 or @p 1 + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_writepad(port, pad, bit) + +/** + * @brief Sets a pad logical state to @p 1. + * + * @param[in] port the port identifier + * @param[in] pad the pad number within the port + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_setpad(port, pad) + +/** + * @brief Clears a pad logical state to @p 0. + * + * @param[in] port the port identifier + * @param[in] pad the pad number within the port + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_clearpad(port, pad) + +/** + * @brief Toggles a pad logical state. + * + * @param[in] port the port identifier + * @param[in] pad the pad number within the port + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + */ +#define pal_lld_togglepad(port, pad) + +/** + * @brief Pad mode setup. + * @details This function programs a pad with the specified mode. + * + * @param[in] port the port identifier + * @param[in] pad the pad number within the port + * @param[in] mode the mode + * + * @note This function is not meant to be invoked directly by the application + * code. + * @note The @ref PAL provides a default software implementation of this + * functionality, implement this function if can optimize it by using + * special hardware functionalities or special coding. + * @note Programming an unknown or unsupported mode is silently ignored. + */ +#define pal_lld_setpadmode(port, pad, mode) + +#endif /* CH_HAL_USE_PAL */ + +#endif /* _PAL_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/serial_lld.c b/os/hal/templates/serial_lld.c new file mode 100644 index 000000000..c4d63ed76 --- /dev/null +++ b/os/hal/templates/serial_lld.c @@ -0,0 +1,91 @@ +/* + 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 templates/serial_lld.c + * @brief Serial Driver subsystem low level driver source template + * @addtogroup SERIAL_LLD + * @{ + */ + +#include "ch.h" +#include "hal.h" + +#if CH_HAL_USE_SERIAL + +/** @brief Driver default configuration.*/ +static const SerialDriverConfig default_config = { +}; + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * Low level serial driver initialization. + */ +void sd_lld_init(void) { + +} + +/** + * @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) { + +} + +#endif /* CH_HAL_USE_SERIAL */ + +/** @} */ diff --git a/os/hal/templates/serial_lld.h b/os/hal/templates/serial_lld.h new file mode 100644 index 000000000..53cf2ce25 --- /dev/null +++ b/os/hal/templates/serial_lld.h @@ -0,0 +1,113 @@ +/* + 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 templates/serial_lld.h + * @brief Serial Driver subsystem low level driver header template + * @addtogroup SERIAL_LLD + * @{ + */ + +#ifndef _SERIAL_LLD_H_ +#define _SERIAL_LLD_H_ + +#if CH_HAL_USE_SERIAL + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver constants. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * Serial Driver condition flags type. + */ +typedef uint8_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. */ +/*===========================================================================*/ + +#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); +#ifdef __cplusplus +} +#endif + +#endif /* CH_HAL_USE_SERIAL */ + +#endif /* _SERIAL_LLD_H_ */ + +/** @} */ diff --git a/os/hal/templates/spi_lld.c b/os/hal/templates/spi_lld.c new file mode 100644 index 000000000..5fd6295d2 --- /dev/null +++ b/os/hal/templates/spi_lld.c @@ -0,0 +1,160 @@ +/* + 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 templates/spi_lld.c + * @brief SPI Driver subsystem low level driver source template + * @addtogroup SPI_LLD + * @{ + */ + +#include "ch.h" +#include "hal.h" + +#if CH_HAL_USE_SPI + +/*===========================================================================*/ +/* Low Level Driver exported variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local variables. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver local functions. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver interrupt handlers. */ +/*===========================================================================*/ + +/*===========================================================================*/ +/* Low Level Driver exported functions. */ +/*===========================================================================*/ + +/** + * @brief Low level SPI driver initialization. + */ +void spi_lld_init(void) { + +} + +/** + * @brief Configures and activates the SPI peripheral. + * + * @param[in] spip pointer to the @p SPIDriver object + */ +void spi_lld_start(SPIDriver *spip) { + + if (spip->spd_state == SPI_STOP) { + /* Clock activation.*/ + } + /* Configuration.*/ +} + +/** + * @brief Deactivates the SPI peripheral. + * + * @param[in] spip pointer to the @p SPIDriver object + */ +void spi_lld_stop(SPIDriver *spip) { + +} + +/** + * @brief Asserts the slave select signal and prepares for transfers. + * + * @param[in] spip pointer to the @p SPIDriver object + */ +void spi_lld_select(SPIDriver *spip) { + +} + +/** + * @brief Deasserts the slave select signal. + * @details The previously selected peripheral is unselected. + * + * @param[in] spip pointer to the @p SPIDriver object + */ +void spi_lld_unselect(SPIDriver *spip) { + +} + +/** + * @brief Ignores data on the SPI bus. + * @details This function transmits a series of idle words on the SPI bus and + * ignores the received data. This function can be invoked even + * when a slave select signal has not been yet asserted. + * + * @param[in] spip pointer to the @p SPIDriver object + * @param[in] n number of words to be ignored + */ +void spi_lld_ignore(SPIDriver *spip, size_t n) { + +} + +/** + * @brief Exchanges data on the SPI bus. + * @details This function performs a simultaneous transmit/receive operation. + * + * @param[in] spip pointer to the @p SPIDriver object + * @param[in] n number of words to be exchanged + * @param[in] txbuf the pointer to the transmit buffer + * @param[out] rxbuf the pointer to the receive buffer + * + * @note The buffers are organized as uint8_t arrays for data sizes below or + * equal to 8 bits else it is organized as uint16_t arrays. + */ +void spi_lld_exchange(SPIDriver *spip, size_t n, + const void *txbuf, void *rxbuf) { + +} + +/** + * @brief Sends data ever the SPI bus. + * + * @param[in] spip pointer to the @p SPIDriver object + * @param[in] n number of words to send + * @param[in] txbuf the pointer to the transmit buffer + * + * @note The buffers are organized as uint8_t arrays for data sizes below or + * equal to 8 bits else it is organized as uint16_t arrays. + */ +void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf) { + +} + +/** + * @brief Receives data from the SPI bus. + * + * @param[in] spip pointer to the @p SPIDriver object + * @param[in] n number of words to receive + * @param[out] rxbuf the pointer to the receive buffer + * + * @note The buffers are organized as uint8_t arrays for data sizes below or + * equal to 8 bits else it is organized as uint16_t arrays. + */ +void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf) { + +} + +#endif /* CH_HAL_USE_SPI */ + +/** @} */ diff --git a/os/hal/templates/spi_lld.h b/os/hal/templates/spi_lld.h new file mode 100644 index 000000000..907bad859 --- /dev/null +++ b/os/hal/templates/spi_lld.h @@ -0,0 +1,108 @@ +/* + 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 templates/spi_lld.h + * @brief SPI Driver subsystem low level driver header template + * @addtogroup SPI_LLD + * @{ + */ + +#ifndef _SPI_LLD_H_ +#define _SPI_LLD_H_ + +#if CH_HAL_USE_SPI + +/*===========================================================================*/ +/* Driver pre-compile time settings. */ +/*===========================================================================*/ + +/** + * @brief Enables the mutual exclusion APIs on the SPI bus. + */ +#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__) +#define SPI_USE_MUTUAL_EXCLUSION TRUE +#endif + +#if SPI_USE_MUTUAL_EXCLUSION && !CH_USE_MUTEXES && !CH_USE_SEMAPHORES +#error "SPI_USE_MUTUAL_EXCLUSION requires CH_USE_MUTEXES and/or CH_USE_SEMAPHORES" +#endif + +/*===========================================================================*/ +/* Driver data structures and types. */ +/*===========================================================================*/ + +/** + * @brief Driver configuration structure. + */ +typedef struct { + +} SPIConfig; + +/** + * @brief Structure representing a SPI driver. + */ +typedef struct { + /** + * @brief Driver state. + */ + spistate_t spd_state; +#if SPI_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__) +#if CH_USE_MUTEXES || defined(__DOXYGEN__) + /** + * @brief Mutex protecting the bus. + */ + Mutex spd_mutex; +#elif CH_USE_SEMAPHORES + Semaphore spd_semaphore; +#endif +#endif /* SPI_USE_MUTUAL_EXCLUSION */ + /** + * @brief Current configuration data. + */ + const SPIConfig *spd_config; + /* End of the mandatory fields.*/ +} SPIDriver; + +/*===========================================================================*/ +/* External declarations. */ +/*===========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + void spi_lld_init(void); + void spi_lld_start(SPIDriver *spip); + void spi_lld_stop(SPIDriver *spip); + void spi_lld_select(SPIDriver *spip); + void spi_lld_unselect(SPIDriver *spip); + void spi_lld_ignore(SPIDriver *spip, size_t n); + void spi_lld_exchange(SPIDriver *spip, size_t n, + const void *txbuf, void *rxbuf); + void spi_lld_send(SPIDriver *spip, size_t n, const void *txbuf); + void spi_lld_receive(SPIDriver *spip, size_t n, void *rxbuf); +#ifdef __cplusplus +} +#endif + +#endif /* CH_HAL_USE_SPI */ + +#endif /* _SPI_LLD_H_ */ + +/** @} */ -- cgit v1.2.3