244 lines
8.2 KiB
C
244 lines
8.2 KiB
C
/*******************************************************************************
|
|
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
|