| /* ------------------------------------------ |
| * Copyright (c) 2016, Synopsys, Inc. All rights reserved. |
| |
| * Redistribution and use in source and binary forms, with or without modification, |
| * are permitted provided that the following conditions are met: |
| |
| * 1) Redistributions of source code must retain the above copyright notice, this |
| * list of conditions and the following disclaimer. |
| |
| * 2) Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation and/or |
| * other materials provided with the distribution. |
| |
| * 3) Neither the name of the Synopsys, Inc., nor the names of its contributors may |
| * be used to endorse or promote products derived from this software without |
| * specific prior written permission. |
| |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
| * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
| * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| * \version 2016.05 |
| * \date 2014-06-16 |
| * \author Huaqi Fang(Huaqi.Fang@synopsys.com) |
| --------------------------------------------- */ |
| |
| /** |
| * \defgroup DEVICE_HAL_COMMON Common Device Layer Definitions |
| * \ingroup DEVICE_HAL_DEF |
| * \brief common definitions for device layer (\ref dev_common.h) |
| * |
| * @{ |
| * |
| * \file |
| * \brief header file to define common definitions for device layer |
| * \details Here in this file provide definitions that need by other |
| * devices in device layer |
| */ |
| |
| #ifndef _DEVICE_HAL_COMMON_H_ |
| #define _DEVICE_HAL_COMMON_H_ |
| |
| #include <stdint.h> |
| |
| /** |
| * \defgroup DEVICE_HAL_COMMON_DEVSTATE Common Device State |
| * \ingroup DEVICE_HAL_COMMON |
| * \brief definitions for device state |
| * \details here defines macros for device open/close, |
| * device working good/error, used in |
| * \ref DEVICE_HAL_UART, \ref DEVICE_HAL_SPI, |
| * \ref DEVICE_HAL_IIC, \ref DEVICE_HAL_GPIO |
| * @{ |
| */ |
| /* |
| * macros for device open and close state |
| */ |
| #define DEV_CLOSED (0) /*!< Indicate that device was closed */ |
| #define DEV_OPENED (1) /*!< Indicate that the device was opened */ |
| |
| /* |
| * macros for device good and error state |
| */ |
| #define DEV_GOOD (0) /*!< Indicate device is good */ |
| #define DEV_ERROR (1) /*!< Indicate device error */ |
| /** @} */ |
| |
| /** |
| * \defgroup DEVICE_HAL_COMMON_DEVMTHD Common Device Working Method |
| * \ingroup DEVICE_HAL_COMMON |
| * \brief definitions for device working method(interrupt or poll) |
| * \details here defines macros for working method, |
| * interrupt or poll method,used in |
| * \ref DEVICE_HAL_UART, \ref DEVICE_HAL_SPI, |
| * \ref DEVICE_HAL_IIC, \ref DEVICE_HAL_GPIO |
| * @{ |
| */ |
| /* |
| * macros for device working method |
| */ |
| #define DEV_POLL_METHOD (0) /*!< Indicate that the device running in poll method */ |
| #define DEV_INTERRUPT_METHOD (1) /*!< Indicate that the device running in interrupt method */ |
| /** @} */ |
| |
| /** |
| * \defgroup DEVICE_HAL_COMMON_DEVMODE Common Device Working Mode |
| * \ingroup DEVICE_HAL_COMMON |
| * \brief definitions for device working mode(master or slave) |
| * \details here defines macros for working mode, |
| * Master or Slave mode,used in |
| * \ref DEV_HAL_IIC, \ref DEV_HAL_SPI. |
| * @{ |
| */ |
| /* |
| * macros for device working mode |
| */ |
| #define DEV_MASTER_MODE (0) /*!< Indicate that the device working as master */ |
| #define DEV_SLAVE_MODE (1) /*!< Indicate that the device working as slave */ |
| /** @} */ |
| |
| /** |
| * \defgroup DEVICE_HAL_COMMON_DEVSTATUS Common Device Status |
| * \ingroup DEVICE_HAL_COMMON |
| * \brief definitions for device status, 1 bit for 1 function |
| * @{ |
| */ |
| #define DEV_DISABLED (0) /*!< Bit 0 for device enabled state, disabled */ |
| #define DEV_ENABLED (1<<0) /*!< Bit 0 for device enabled state, enabled */ |
| #define DEV_IN_TX (1<<1) /*!< Bit 1 for device in transmit state */ |
| #define DEV_IN_RX (1<<2) /*!< Bit 2 for device in receive state */ |
| #define DEV_IN_XFER (1<<3) /*!< Bit 3 for device in transfer state */ |
| #define DEV_IN_TX_ABRT (1<<4) /*!< Bit 4 for device in transmit abort state */ |
| #define DEV_IN_RX_ABRT (1<<5) /*!< Bit 5 for device in receive abort state */ |
| #define DEV_IN_XFER_ABRT (1<<6) /*!< Bit 6 for device in transfer abort state */ |
| /** @} */ |
| |
| /** |
| * \defgroup DEVICE_HAL_COMMON_DEFCMD Common Device Defining Command |
| * \ingroup DEVICE_HAL_COMMON |
| * \brief definitions for defining command code |
| * \details here defines macros to define command code, |
| * in system code, use \ref DEV_SET_SYSCMD to define command code. |
| * in user code, use \ref DEV_SET_USRCMD to define command code. |
| * So that there will be no conflicts in system and user defined command code. |
| * this used used in |
| * \ref DEVICE_HAL_UART, \ref DEVICE_HAL_SPI, |
| * \ref DEVICE_HAL_IIC, \ref DEVICE_HAL_GPIO, |
| * and in user code |
| * @{ |
| */ |
| /* |
| * macros for control command base |
| */ |
| #define DEV_SYS_CMDBSE (0x00000000) /*!< default system device control command base(defined by embARC) */ |
| #define DEV_USR_CMDBSE (0x80000000) /*!< default user device control command base(defined by user) in user implementing */ |
| #define DEV_SET_SYSCMD(cmd) (DEV_SYS_CMDBSE|(cmd)) /*!< set device system control command */ |
| #define DEV_SET_USRCMD(cmd) (DEV_USR_CMDBSE|(cmd)) /*!< set device user control command */ |
| |
| #define CONV2VOID(param) ((void *)(param)) /*!< convert param into void * type */ |
| /** @} */ |
| |
| /** |
| * Common Device Buffer Structure |
| */ |
| typedef struct dev_buffer { |
| void *buf; /*!< buffer pointer */ |
| uint32_t len; /*!< buffer length in bytes */ |
| uint32_t ofs; /*!< current offset in buffer */ |
| } DEV_BUFFER; |
| |
| /** Init device buffer */ |
| #define DEV_BUFFER_INIT(devbuf, buffer, size) { \ |
| (devbuf)->buf = (void *)(buffer); \ |
| (devbuf)->len = (uint32_t)(size); \ |
| (devbuf)->ofs = (uint32_t)(0); \ |
| } |
| |
| /** |
| * Device callback function typedef. |
| * This is usually used in device callback settings, |
| * and \ptr should be the device object pointer, |
| * such as DEV_IIC * */ |
| typedef void (*DEV_CALLBACK) (void *ptr); |
| |
| /** @} */ |
| #endif /* _DEVICE_HAL_COMMON_H_ */ |