/** * * \file * * \brief This module contains M2M host interface APIs implementation. * * Copyright (c) 2016-2017 Atmel Corporation. All rights reserved. * * \asf_license_start * * \page License * * 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. The name of Atmel may not be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL 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. * * \asf_license_stop * */ #ifndef _M2M_HIF_ #define _M2M_HIF_ /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* INCLUDES *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ #include "common/include/nm_common.h" /*!< Include depends on UNO Board is used or not*/ #ifdef ENABLE_UNO_BOARD #include "m2m_uno_hif.h" #endif /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* MACROS *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ #define M2M_HIF_MAX_PACKET_SIZE (1600 - 4) /*!< Maximum size of the buffer could be transferred between Host and Firmware. */ #define M2M_HIF_HDR_OFFSET (sizeof(tstrHifHdr) + 4) /** * @struct tstrHifHdr * @brief Structure to hold HIF header */ typedef struct { uint8 u8Gid; /*!< Group ID */ uint8 u8Opcode; /*!< OP code */ uint16 u16Length; /*!< Payload length */ }tstrHifHdr; #ifdef __cplusplus extern "C" { #endif /*! @typedef typedef void (*tpfHifCallBack)(uint8 u8OpCode, uint16 u16DataSize, uint32 u32Addr); @brief used to point to Wi-Fi call back function depend on Arduino project or other projects. @param [in] u8OpCode HIF Opcode type. @param [in] u16DataSize HIF data length. @param [in] u32Addr HIF address. @param [in] grp HIF group type. */ typedef void (*tpfHifCallBack)(uint8 u8OpCode, uint16 u16DataSize, uint32 u32Addr); /** * @fn NMI_API sint8 hif_init(void * arg); * @brief To initialize HIF layer. * @param [in] arg * Pointer to the arguments. * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_init(void * arg); /** * @fn NMI_API sint8 hif_deinit(void * arg); * @brief To Deinitialize HIF layer. * @param [in] arg * Pointer to the arguments. * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_deinit(void * arg); /** * @fn NMI_API sint8 hif_send(uint8 u8Gid,uint8 u8Opcode,uint8 *pu8CtrlBuf,uint16 u16CtrlBufSize, uint8 *pu8DataBuf,uint16 u16DataSize, uint16 u16DataOffset) * @brief Send packet using host interface. * @param [in] u8Gid * Group ID. * @param [in] u8Opcode * Operation ID. * @param [in] pu8CtrlBuf * Pointer to the Control buffer. * @param [in] u16CtrlBufSize Control buffer size. * @param [in] u16DataOffset Packet Data offset. * @param [in] pu8DataBuf * Packet buffer Allocated by the caller. * @param [in] u16DataSize Packet buffer size (including the HIF header). * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_send(uint8 u8Gid,uint8 u8Opcode,uint8 *pu8CtrlBuf,uint16 u16CtrlBufSize, uint8 *pu8DataBuf,uint16 u16DataSize, uint16 u16DataOffset); /* * @fn hif_receive * @brief Host interface interrupt serviece routine * @param [in] u32Addr * Receive start address * @param [out] pu8Buf * Pointer to receive buffer. Allocated by the caller * @param [in] u16Sz * Receive buffer size * @param [in] isDone * If you don't need any more packets send True otherwise send false * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_receive(uint32 u32Addr, uint8 *pu8Buf, uint16 u16Sz, uint8 isDone); /** * @fn hif_register_cb * @brief To set Callback function for every Component. * @param [in] u8Grp * Group to which the Callback function should be set. * @param [in] fn * function to be set to the specified group. * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_register_cb(uint8 u8Grp,tpfHifCallBack fn); /** * @fn NMI_API sint8 hif_chip_sleep(void); * @brief To make the chip sleep. * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_chip_sleep(void); /** * @fn NMI_API sint8 hif_chip_sleep_sc(void); * @brief To clear the chip count only but keep the chip awake * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_chip_sleep_sc(void); /** * @fn NMI_API sint8 hif_chip_wake(void); * @brief To Wakeup the chip. * @return The function shall return ZERO for successful operation and a negative value otherwise. */ NMI_API sint8 hif_chip_wake(void); /*! @fn \ NMI_API void hif_set_sleep_mode(uint8 u8Pstype); @brief Set the sleep mode of the HIF layer. @param [in] u8Pstype Sleep mode. @return The function SHALL return 0 for success and a negative value otherwise. */ NMI_API void hif_set_sleep_mode(uint8 u8Pstype); /*! @fn \ NMI_API uint8 hif_get_sleep_mode(void); @brief Get the sleep mode of the HIF layer. @return The function SHALL return the sleep mode of the HIF layer. */ NMI_API uint8 hif_get_sleep_mode(void); #ifdef CORTUS_APP /** * @fn hif_Resp_handler(uint8 *pu8Buffer, uint16 u16BufferSize) * @brief Response handler for HIF layer. * @param [in] pu8Buffer Pointer to the buffer. * @param [in] u16BufferSize Buffer size. * @return The function SHALL return 0 for success and a negative value otherwise. */ NMI_API sint8 hif_Resp_handler(uint8 *pu8Buffer, uint16 u16BufferSize); #endif /** * @fn hif_handle_isr(void) * @brief Handle interrupt received from NMC1500 firmware. * @return The function SHALL return 0 for success and a negative value otherwise. */ NMI_API sint8 hif_handle_isr(void); #ifdef __cplusplus } #endif #endif