243 lines
8.7 KiB
C
243 lines
8.7 KiB
C
/**
|
|
*
|
|
* \file
|
|
*
|
|
* \brief This module contains common APIs declarations.
|
|
*
|
|
* Copyright (c) 2017-2018 Microchip Technology Inc. and its subsidiaries.
|
|
*
|
|
* \asf_license_start
|
|
*
|
|
* \page License
|
|
*
|
|
* 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.
|
|
*
|
|
* \asf_license_stop
|
|
*
|
|
*/
|
|
|
|
/**@defgroup COMMON COMMON
|
|
*/
|
|
|
|
#ifndef _NM_COMMON_H_
|
|
#define _NM_COMMON_H_
|
|
|
|
#include "bsp/include/nm_bsp.h"
|
|
#include "common/include/nm_debug.h"
|
|
|
|
/**@defgroup COMMONDEF Defines
|
|
* @ingroup COMMON
|
|
*/
|
|
/**@{*/
|
|
#define M2M_TIME_OUT_DELAY 10000
|
|
|
|
/*states*/
|
|
#define M2M_SUCCESS ((sint8)0)
|
|
#define M2M_ERR_SEND ((sint8)-1)
|
|
#define M2M_ERR_RCV ((sint8)-2)
|
|
#define M2M_ERR_MEM_ALLOC ((sint8)-3)
|
|
#define M2M_ERR_TIME_OUT ((sint8)-4)
|
|
#define M2M_ERR_INIT ((sint8)-5)
|
|
#define M2M_ERR_BUS_FAIL ((sint8)-6)
|
|
#define M2M_NOT_YET ((sint8)-7)
|
|
#define M2M_ERR_FIRMWARE ((sint8)-8)
|
|
#define M2M_SPI_FAIL ((sint8)-9)
|
|
#define M2M_ERR_FIRMWARE_bURN ((sint8)-10)
|
|
#define M2M_ACK ((sint8)-11)
|
|
#define M2M_ERR_FAIL ((sint8)-12)
|
|
#define M2M_ERR_FW_VER_MISMATCH ((sint8)-13)
|
|
#define M2M_ERR_SCAN_IN_PROGRESS ((sint8)-14)
|
|
/*
|
|
Invalid argument
|
|
*/
|
|
#define M2M_ERR_INVALID_ARG ((sint8)-15)
|
|
|
|
/*i2c MAASTER ERR*/
|
|
#define I2C_ERR_LARGE_ADDRESS 0xE1UL /*!< the address exceed the max addressing mode in i2c flash*/
|
|
#define I2C_ERR_TX_ABRT 0xE2UL /*!< NO ACK from slave*/
|
|
#define I2C_ERR_OVER_SIZE 0xE3UL /**/
|
|
#define ERR_PREFIX_NMIS 0xE4UL /*!< wrong first four byte in flash NMIS*/
|
|
#define ERR_FIRMEWARE_EXCEED_SIZE 0xE5UL /*!< Total size of firmware exceed the max size 256k*/
|
|
/**/
|
|
#define PROGRAM_START 0x26961735UL
|
|
#define BOOT_SUCCESS 0x10add09eUL
|
|
#define BOOT_START 0x12345678UL
|
|
|
|
|
|
#define NBIT31 (0x80000000)
|
|
#define NBIT30 (0x40000000)
|
|
#define NBIT29 (0x20000000)
|
|
#define NBIT28 (0x10000000)
|
|
#define NBIT27 (0x08000000)
|
|
#define NBIT26 (0x04000000)
|
|
#define NBIT25 (0x02000000)
|
|
#define NBIT24 (0x01000000)
|
|
#define NBIT23 (0x00800000)
|
|
#define NBIT22 (0x00400000)
|
|
#define NBIT21 (0x00200000)
|
|
#define NBIT20 (0x00100000)
|
|
#define NBIT19 (0x00080000)
|
|
#define NBIT18 (0x00040000)
|
|
#define NBIT17 (0x00020000)
|
|
#define NBIT16 (0x00010000)
|
|
#define NBIT15 (0x00008000)
|
|
#define NBIT14 (0x00004000)
|
|
#define NBIT13 (0x00002000)
|
|
#define NBIT12 (0x00001000)
|
|
#define NBIT11 (0x00000800)
|
|
#define NBIT10 (0x00000400)
|
|
#define NBIT9 (0x00000200)
|
|
#define NBIT8 (0x00000100)
|
|
#define NBIT7 (0x00000080)
|
|
#define NBIT6 (0x00000040)
|
|
#define NBIT5 (0x00000020)
|
|
#define NBIT4 (0x00000010)
|
|
#define NBIT3 (0x00000008)
|
|
#define NBIT2 (0x00000004)
|
|
#define NBIT1 (0x00000002)
|
|
#define NBIT0 (0x00000001)
|
|
|
|
/*! Maximum of two values */
|
|
#define M2M_MAX(A,B) ((A) > (B) ? (A) : (B))
|
|
/*! Choose one of three values */
|
|
#define M2M_SEL(x,m1,m2,m3) ((x>1)?((x>2)?(m3):(m2)):(m1))
|
|
/*! Align to next multiple of 4 */
|
|
#define WORD_ALIGN(val) (((val) & 0x03) ? ((val) + 4 - ((val) & 0x03)) : (val))
|
|
|
|
|
|
|
|
#define DATA_PKT_OFFSET 4
|
|
|
|
#ifndef BIG_ENDIAN
|
|
/*! Most significant byte of 32bit word (LE) */
|
|
#define BYTE_0(word) ((uint8)(((word) >> 0 ) & 0x000000FFUL))
|
|
/*! Second most significant byte of 32bit word (LE) */
|
|
#define BYTE_1(word) ((uint8)(((word) >> 8 ) & 0x000000FFUL))
|
|
/*! Third most significant byte of 32bit word (LE) */
|
|
#define BYTE_2(word) ((uint8)(((word) >> 16) & 0x000000FFUL))
|
|
/*! Least significant byte of 32bit word (LE) */
|
|
#define BYTE_3(word) ((uint8)(((word) >> 24) & 0x000000FFUL))
|
|
#else
|
|
/*! Most significant byte of 32bit word (BE) */
|
|
#define BYTE_0(word) ((uint8)(((word) >> 24) & 0x000000FFUL))
|
|
/*! Second most significant byte of 32bit word (BE) */
|
|
#define BYTE_1(word) ((uint8)(((word) >> 16) & 0x000000FFUL))
|
|
/*! Third most significant byte of 32bit word (BE) */
|
|
#define BYTE_2(word) ((uint8)(((word) >> 8 ) & 0x000000FFUL))
|
|
/*! Least significant byte of 32bit word (BE) */
|
|
#define BYTE_3(word) ((uint8)(((word) >> 0 ) & 0x000000FFUL))
|
|
#endif
|
|
/**@}*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
/**@defgroup COMMONAPI Functions
|
|
* @ingroup COMMON
|
|
*/
|
|
/**@{*/
|
|
|
|
/*!
|
|
* @fn void m2m_memcpy(uint8* pDst,uint8* pSrc,uint32 sz);
|
|
* @brief Copy specified number of bytes from source buffer to destination buffer
|
|
* @param [in] sz
|
|
* number of data bytes to copy
|
|
* @param [in] pSrc
|
|
* source buffer
|
|
* @param [out] pDst
|
|
* destination buffer
|
|
* @return None
|
|
*/
|
|
NMI_API void m2m_memcpy(uint8* pDst,uint8* pSrc,uint32 sz);
|
|
/*!
|
|
* @fn void m2m_memset(uint8* pBuf,uint8 val,uint32 sz);
|
|
* @brief Set specified number of data bytes in specified data buffer to specified value
|
|
* @param [in] sz
|
|
* number of data bytes (in specified data buffer whose values are to be set to the specified value)
|
|
* @param [in] val
|
|
* the specified value (to which data bytes in data buffer will be set)
|
|
* @param [out] pBuf
|
|
* the specified data buffer (whose data bytes will be set to the specified value)
|
|
* @return None
|
|
*/
|
|
NMI_API void m2m_memset(uint8* pBuf,uint8 val,uint32 sz);
|
|
/*!
|
|
* @fn uint16 m2m_strlen(uint8 * pcStr);
|
|
* @brief Returns the string length of a null terminated string buffer
|
|
* @param [in] pcStr
|
|
* null terminated string buffer
|
|
* @return length of the string in the specified string buffer
|
|
*/
|
|
NMI_API uint16 m2m_strlen(uint8 * pcStr);
|
|
/*!
|
|
* @fn sint8 m2m_memcmp(uint8 *pu8Buff1,uint8 *pu8Buff2 ,uint32 u32Size);
|
|
* @brief Compare specified number of data bytes in pu8Buff1 and pu8Buff2 and decide if they all match.
|
|
* @param [in] u32Size
|
|
* number of data bytes to compare
|
|
* @param [in] pu8Buff1
|
|
* one of two data buffers for the comparison
|
|
* @param [in] pu8Buff2
|
|
* one of two data buffers for the comparison
|
|
* @return zero if matched, one if not matched
|
|
*/
|
|
NMI_API sint8 m2m_memcmp(uint8 *pu8Buff1,uint8 *pu8Buff2 ,uint32 u32Size);
|
|
/*!
|
|
* @fn uint8 m2m_strncmp(uint8 *pcS1, uint8 *pcS2, uint16 u16Len);
|
|
* @brief Compare specified number of data bytes in string buffers pcS1 and pcS2
|
|
* @param [in] u16Len
|
|
* Number of data bytes to compare
|
|
* @param [in] pcS1
|
|
* first of two string buffers for the comparison
|
|
* @param [in] pcS2
|
|
* second of two string buffers for the comparison
|
|
* @return 0 if matched, -1 if the first non-matching byte in pcS1 is smaller than that in pcS2, +1 if it is bigger
|
|
*/
|
|
NMI_API uint8 m2m_strncmp(uint8 *pcS1, uint8 *pcS2, uint16 u16Len);
|
|
/*!
|
|
* @fn uint8 * m2m_strstr(uint8 *pcIn, uint8 *pcStr);
|
|
* @brief Find the occurrence of pcStr string in pcIn string
|
|
* @param [in] pcStr
|
|
* one of two string buffers
|
|
* @param [in] pcIn
|
|
* one of two string buffers
|
|
* @return If pcStr string is part of pcIn string return a valid pointer to the start of pcStr within pcIn. If not a NULL Pointer is returned
|
|
*/
|
|
NMI_API uint8 * m2m_strstr(uint8 *pcIn, uint8 *pcStr);
|
|
/*!
|
|
* @fn uint8 m2m_checksum(uint8* buf, int sz);
|
|
* @brief calculates checksum for the specified number of data bytes in specified data buffer
|
|
* @param [in] sz
|
|
* number of data bytes used in the checksum calculation
|
|
* @param [in] buf
|
|
* the specified data buffer (whose data bytes will be used to calculate the checksum)
|
|
* @return the calculated checksum
|
|
*/
|
|
NMI_API uint8 m2m_checksum(uint8* buf, int sz);
|
|
|
|
/*!
|
|
* @fn void (*at_sb_printf)(const char *_format, ...);
|
|
* @brief chooses which function to use in order to output debug
|
|
*/
|
|
NMI_API void (*at_sb_printf)(const char *_format, ...);
|
|
/**@}*/
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /*_NM_COMMON_H_*/
|