/******************************************************************************* File Name: m2m_hif.h Summary: This module contains M2M host interface API definitions. Description: This module contains M2M host interface API definitions. *******************************************************************************/ //DOM-IGNORE-BEGIN /******************************************************************************* * Copyright (C) 2021 Microchip Technology Inc. and its subsidiaries. * * Subject to your compliance with these terms, you may use Microchip software * and any derivatives exclusively with Microchip products. It is your * responsibility to comply with third party license terms applicable to your * use of third party software (including open source software) that may * accompany Microchip software. * * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER * EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED * WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A * PARTICULAR PURPOSE. * * IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, * INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND * WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS * BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE * FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN * ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY, * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE. *******************************************************************************/ // DOM-IGNORE-END #ifndef _M2M_HIF_ #define _M2M_HIF_ /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* INCLUDES *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ #include "nm_common.h" /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* 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_t u8Gid; /*!< Group ID */ uint8_t u8Opcode; /*!< OP code */ uint16_t u16Length; /*!< Payload length */ } tstrHifHdr; #ifdef __cplusplus extern "C" { #endif /*! @typedef typedef void (*tpfHifCallBack)(uint8_t u8OpCode, uint16_t u16DataSize, uint32_t 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_t u8OpCode, uint16_t u16DataSize, uint32_t u32Addr); /** * @fn int8_t 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. */ int8_t hif_init(void *arg); /** * @fn int8_t 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. */ int8_t hif_deinit(void *arg); /** * @fn int8_t hif_check_compatibility(uint16_t u16HifInfo); * @brief * To check the compatibility of an image with the current driver. * @param [in] u16HifInfo * HIF info of image to be checked. * @return The function shall return ZERO for compatible image and a negative value otherwise. */ int8_t hif_check_compatibility(uint16_t u16HifInfo); /** * @fn int8_t hif_enable_access(void); * @brief * To enable access to HIF layer, based on HIF level of Firmware. * This function reads HIF level directly from a register written by Firmware. * @return The function shall return ZERO for full match operation and a negative value if operation is restricted. */ int8_t hif_enable_access(void); /** * @fn int8_t hif_check_code(uint8_t u8Gid, uint8_t u8OpCode); * @brief * To check that a particular hif message is supported with the current driver/firmware pair. * @param [in] u8Gid * Group ID. * @param [in] u8Opcode * Operation ID. * @return The function shall return ZERO for support and a negative value otherwise. */ int8_t hif_check_code(uint8_t u8Gid, uint8_t u8OpCode); /** * @fn int8_t hif_send(uint8_t u8Gid, uint8_t u8Opcode, uint8_t *pu8CtrlBuf, uint16_t u16CtrlBufSize, uint8_t *pu8DataBuf, uint16_t u16DataSize, uint16_t 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. */ int8_t hif_send(uint8_t u8Gid, uint8_t u8Opcode, uint8_t *pu8CtrlBuf, uint16_t u16CtrlBufSize, uint8_t *pu8DataBuf, uint16_t u16DataSize, uint16_t u16DataOffset); /** * @fn hif_receive * @brief Host interface interrupt service 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. */ int8_t hif_receive(uint32_t u32Addr, uint8_t *pu8Buf, uint16_t u16Sz, uint8_t 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. */ int8_t hif_register_cb(uint8_t u8Grp, tpfHifCallBack fn); /** * @fn int8_t hif_chip_sleep(void); * @brief To make the chip sleep. * @return The function shall return ZERO for successful operation and a negative value otherwise. */ int8_t hif_chip_sleep(void); /** * @fn int8_t hif_chip_wake(void); * @brief To Wakeup the chip. * @return The function shall return ZERO for successful operation and a negative value otherwise. */ int8_t hif_chip_wake(void); /*! @fn \ void hif_set_sleep_mode(uint8_t 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. */ void hif_set_sleep_mode(uint8_t u8Pstype); /*! @fn \ uint8_t 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. */ uint8_t hif_get_sleep_mode(void); /** * @fn hif_handle_isr(void) * @brief Handle interrupt received from WINC3400 firmware. * @return The function SHALL return 0 for success and a negative value otherwise. */ int8_t hif_handle_isr(void); #ifdef __cplusplus } #endif #endif