2025-02-15 11:05:28 -05:00

189 lines
7.2 KiB
C

/*******************************************************************************
WINC Flash Interface.
File Name:
m2m_flash.h
Summary:
WINC Flash Interface
Description:
WINC Flash Interface
*******************************************************************************/
//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
/**@defgroup FLASHAPI Flash
*/
#ifndef __M2M_FLASH_H__
#define __M2M_FLASH_H__
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
INCLUDES
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
#include "nm_common.h"
#include "m2m_types.h"
/**@defgroup FlashEnums Enumeration/Typedefs
* @ingroup FLASHAPI
* @{*/
/*!
@enum tenuWincFlashRegion
@brief The regions of WINC flash available for accessing.
*/
typedef enum
{
/*! Access to the entire flash address space. */
WINC_FLASH_REGION_RAW,
/*! Access to the active firmware region. */
WINC_FLASH_REGION_FIRMWARE_ACTIVE,
/*! Access to the inactive firmware region. */
WINC_FLASH_REGION_FIRMWARE_INACTIVE,
/*! Access to PLL table region. Erase is not supported for this region. */
WINC_FLASH_REGION_PLL_TABLE,
/*! Access to gain table region. Erase is not supported for this region. */
WINC_FLASH_REGION_GAIN_TABLE,
/*! Access to PLL and gain tables region. Erase is supported for this region. */
WINC_FLASH_REGION_PLL_AND_GAIN_TABLES,
/*! Access to TLS root certificate region. */
WINC_FLASH_REGION_ROOT_CERTS,
/*! Access to TLS local certificate region. */
WINC_FLASH_REGION_LOCAL_CERTS,
/*! Access to connection parameters region. */
WINC_FLASH_REGION_CONN_PARAM,
/*! Access to HTTP files region. This region is also erased/written by erase/write of firmware regions. */
WINC_FLASH_REGION_HTTP_FILES,
/*! Number of regions. */
WINC_FLASH_NUM_REGIONS
} tenuWincFlashRegion;
/**@}
*/
/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
FUNCTION PROTOTYPES
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
/** \defgroup FLASHFUNCTIONS Functions
* @ingroup FLASHAPI
*/
/**@{*/
/*!
@fn \
int8_t m2m_flash_erase_sector(tenuWincFlashRegion enuRegion, uint8_t u8StartSector, uint8_t u8NumSectors);
@brief Erase one or more sectors within a WINC flash region.
@param [in] enuRegion
Region of flash in which to erase.
@param [in] u8StartSector
Sector offset (within region) of first sector to erase.
@param [in] u8NumSectors
Number of sectors to erase.
@return M2M_SUCCESS - The erase completed successfully.
M2M_ERR_INVALID_ARG - The parameters were invalid.
M2M_ERR_FAIL - The request encountered an error.
@pre The WINC must have been initialised but must not be running. This can be done via
@ref m2m_wifi_init_hold, @ref m2m_wifi_reinit_hold or @ref m2m_wifi_download_mode.
*/
int8_t m2m_flash_erase_sector(tenuWincFlashRegion enuRegion, uint8_t u8StartSector, uint8_t u8NumSectors);
/*!
@fn \
int8_t m2m_flash_write(tenuWincFlashRegion enuRegion, void *pvBuffer, uint32_t u32Offset, uint32_t u32Size);
@brief Write the number of bytes specified to a WINC flash location.
@param [in] enuRegion
Region of flash in which to write.
@param [in] pvBuffer
Pointer to buffer containing the data to write.
@param [in] u32Offset
Byte offset (within region) of write location.
@param [in] u32Size
Number of bytes to write.
@return M2M_SUCCESS - The write completed successfully.
M2M_ERR_INVALID_ARG - The parameters were invalid.
M2M_ERR_FAIL - The request encountered an error.
@pre The WINC must have been initialised but must not be running. This can be done via
@ref m2m_wifi_init_hold, @ref m2m_wifi_reinit_hold or @ref m2m_wifi_download_mode.
@warning The write operation does not erase the flash device first, therefore the user
must ensure the flash region has been erased first.
*/
int8_t m2m_flash_write(tenuWincFlashRegion enuRegion, void *pvBuffer, uint32_t u32Offset, uint32_t u32Size);
/*!
@fn \
int8_t m2m_flash_read(tenuWincFlashRegion enuRegion, void *pvBuffer, uint32_t u32Offset, uint32_t u32Size);
@brief Read the number of bytes specified from a WINC flash location.
@param [in] enuRegion
Region of flash from which to read.
@param [out] pvBuffer
Pointer to buffer to populate with the data being read.
@param [in] u32Offset
Byte offset (within region) of read location.
@param [in] u32Size
Number of bytes to read.
@return M2M_SUCCESS - The read completed successfully.
M2M_ERR_INVALID_ARG - The parameters were invalid.
M2M_ERR_FAIL - The request encountered an error.
@pre The WINC must have been initialised but must not be running. This can be done via
@ref m2m_wifi_init_hold, @ref m2m_wifi_reinit_hold or @ref m2m_wifi_download_mode.
*/
int8_t m2m_flash_read(tenuWincFlashRegion enuRegion, void *pvBuffer, uint32_t u32Offset, uint32_t u32Size);
/*!
@fn \
int8_t m2m_flash_switch_firmware(void);
@brief Switch the active and inactive firmware images.
@return M2M_SUCCESS - The firmware switch completed successfully.
M2M_ERR_FAIL - The request encountered an error.
@pre The WINC must have been initialised but must not be running. This can be done via
@ref m2m_wifi_init_hold, @ref m2m_wifi_reinit_hold or @ref m2m_wifi_download_mode.
*/
int8_t m2m_flash_switch_firmware(void);
/**@}*/
#endif /* __M2M_FLASH_H__ */