#include <stdio.h>
|
#include <string.h>
|
#include "Param.h"
|
#include "HIDO_CRC16.h"
|
#include "MCUFlash.h"
|
#include "AppConfig.h"
|
|
/*******************************************************************************
|
* Macro *
|
*******************************************************************************/
|
#define PARAM_VER_OFFSET 0
|
#define PARAM_LEN_OFFSET 4
|
#define PARAM_CRC_OFFSET 6
|
#define PARAM_DATA_OFFSET 8
|
|
#define PARAM_VERSION 0x01000004
|
#define PARAM_BASE_ADDR 0x08070000
|
/*******************************************************************************
|
* Type Definition *
|
*******************************************************************************/
|
typedef struct
|
{
|
HIDO_BOOL m_bCheckVersion;
|
HIDO_UINT32 m_u32Addr;
|
HIDO_UINT32 m_u32MaxSize;
|
}ST_ParamAddrInfo;
|
|
/*******************************************************************************
|
* Local Variable *
|
*******************************************************************************/
|
static const ST_ParamAddrInfo l_astParamAddrInfo[PARAM_GROUP_LAST] =
|
{
|
{ HIDO_TRUE, 0x0000, 0x1000}, /* PARAM_GROUP_TCP_CLIENT */
|
{ HIDO_TRUE, 0x1000, 0x1000}, /* PARAM_GROUP_WIFI */
|
{ HIDO_TRUE, 0x2000, 0x1000}, /* PARAM_GROUP_DEVICE */
|
};
|
|
/*******************************************************************************
|
* Local Function Declaration *
|
*******************************************************************************/
|
static HIDO_INT32 Param_Write(HIDO_UINT32 _u32Addr, HIDO_UINT32 _u32AddrSize, void *_pParamData, HIDO_UINT32 _u32ParamLen);
|
static HIDO_INT32 Param_Read(HIDO_BOOL _bCheckVersion, HIDO_UINT32 _u32Addr, HIDO_UINT32 _u32AddrSize, void *_pParamData, HIDO_UINT32 _u32ParamLen);
|
|
/*******************************************************************************
|
* Local Function *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Function Name : Param_Write
|
* Description : ²ÎÊýдÈë
|
* Input : _u32Addr ²ÎÊýµØÖ·
|
* _u32AddrSize ²ÎÊý¿Õ¼ä´óС
|
* _pParamData ²ÎÊýÊý¾Ý
|
* _u32ParamLen дÈëµÄ²ÎÊý³¤¶È
|
* Output : None
|
* Return : HIDO_ERR ʧ°Ü
|
* HIDO_OK ³É¹¦
|
* Author : DuJian
|
* Modified Date: : 2018Äê7ÔÂ23ÈÕ
|
*******************************************************************************/
|
static HIDO_INT32 Param_Write(HIDO_UINT32 _u32Addr, HIDO_UINT32 _u32AddrSize, void *_pParamData, HIDO_UINT32 _u32ParamLen)
|
{
|
HIDO_UINT32 u32TmpDWord = 0;
|
HIDO_UINT16 u16TmpWord = 0;
|
HIDO_INT32 iR32esult = HIDO_OK;
|
|
if (NULL == _pParamData || _u32AddrSize < _u32ParamLen)
|
{
|
return HIDO_ERR;
|
}
|
|
/* ¸ñʽ»¯´æ´¢Çø */
|
_u32Addr += PARAM_BASE_ADDR;
|
if (MCUFlash_Erase(_u32Addr, PARAM_DATA_OFFSET + _u32ParamLen) != HIDO_OK)
|
{
|
iR32esult = HIDO_ERR;
|
goto exti;
|
}
|
|
/* д²ÎÊý°æ±¾ */
|
u32TmpDWord = PARAM_VERSION;
|
if (MCUFlash_Write(_u32Addr + PARAM_VER_OFFSET, (HIDO_UINT8 *) &u32TmpDWord, sizeof(u32TmpDWord)) != HIDO_OK)
|
{
|
iR32esult = HIDO_ERR;
|
goto exti;
|
}
|
|
/* д²ÎÊý³¤¶È */
|
u16TmpWord = _u32ParamLen;
|
if (MCUFlash_Write(_u32Addr + PARAM_LEN_OFFSET, (HIDO_UINT8 *) &u16TmpWord, sizeof(u16TmpWord)) != HIDO_OK)
|
{
|
iR32esult = HIDO_ERR;
|
goto exti;
|
}
|
|
/* д²ÎÊýУÑé */
|
u16TmpWord = HIDO_CRC16Calc((HIDO_UINT8 *) _pParamData, _u32ParamLen);
|
if (MCUFlash_Write(_u32Addr + PARAM_CRC_OFFSET, (HIDO_UINT8 *) &u16TmpWord, sizeof(u16TmpWord)) != HIDO_OK)
|
{
|
iR32esult = HIDO_ERR;
|
goto exti;
|
}
|
|
/* д²ÎÊýÊý¾Ý */
|
if (MCUFlash_Write(_u32Addr + PARAM_DATA_OFFSET, (HIDO_UINT8 *) _pParamData, _u32ParamLen) != HIDO_OK)
|
{
|
iR32esult = HIDO_ERR;
|
goto exti;
|
}
|
|
exti:
|
return iR32esult;
|
}
|
|
/*******************************************************************************
|
* Function Name : Param_Read
|
* Description : ²ÎÊý¶ÁÈ¡
|
* Input : _u32Addr ²ÎÊýµØÖ·
|
* _u32AddrSize ²ÎÊý¿Õ¼ä´óС
|
* _u32ParamLen ¶ÁÈ¡µÄ²ÎÊý³¤¶È
|
* Output : _pParamData ²ÎÊýÊý¾Ý
|
* Return : HIDO_ERR ʧ°Ü
|
* HIDO_OK ³É¹¦
|
* Author : DuJian
|
* Modified Date: : 2018Äê7ÔÂ23ÈÕ
|
*******************************************************************************/
|
static HIDO_INT32 Param_Read(HIDO_BOOL _bCheckVersion, HIDO_UINT32 _u32Addr, HIDO_UINT32 _u32AddrSize, void *_pParamData, HIDO_UINT32 _u32ParamLen)
|
{
|
HIDO_UINT32 u32TmpDWord = 0;
|
HIDO_UINT16 u16TmpWord = 0;
|
|
if (NULL == _pParamData || _u32AddrSize < _u32ParamLen)
|
{
|
return HIDO_ERR;
|
}
|
|
_u32Addr += PARAM_BASE_ADDR;
|
|
if(HIDO_TRUE == _bCheckVersion)
|
{
|
/* ¼ì²é²ÎÊý°æ±¾ */
|
MCUFlash_Read((HIDO_UINT8 *) &u32TmpDWord, _u32Addr + PARAM_VER_OFFSET, sizeof(HIDO_UINT32));
|
if (u32TmpDWord != PARAM_VERSION)
|
{
|
return HIDO_ERR;
|
}
|
}
|
|
/* ¼ì²é²ÎÊý³¤¶È */
|
MCUFlash_Read((HIDO_UINT8 *) &u16TmpWord, _u32Addr + PARAM_LEN_OFFSET, sizeof(HIDO_UINT16));
|
if (u16TmpWord != _u32ParamLen)
|
{
|
return HIDO_ERR;
|
}
|
|
/* ¶Á²ÎÊýÊý¾Ý */
|
MCUFlash_Read((HIDO_UINT8 *) _pParamData, _u32Addr + PARAM_DATA_OFFSET, _u32ParamLen);
|
|
/* ¼ì²é²ÎÊýУÑé */
|
MCUFlash_Read((HIDO_UINT8 *) &u16TmpWord, _u32Addr + PARAM_CRC_OFFSET, sizeof(HIDO_UINT16));
|
if (HIDO_CRC16Calc((HIDO_UINT8 *) _pParamData, _u32ParamLen) != u16TmpWord)
|
{
|
return HIDO_ERR;
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Global Function *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Function Name : Param_Reset
|
* Description : ²ÎÊý»Ö¸´³ö³§
|
* Input : _eGroup ²ÎÊý×é
|
* Output : None
|
* Return : HIDO_ERR ʧ°Ü
|
* HIDO_OK ³É¹¦
|
* Author : DuJian
|
* Modified Date: : 2018Äê7ÔÂ23ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Param_Reset(E_ParamGroup _eGroup)
|
{
|
if (MCUFlash_Erase(PARAM_BASE_ADDR + l_astParamAddrInfo[_eGroup].m_u32Addr,
|
l_astParamAddrInfo[_eGroup].m_u32MaxSize) != HIDO_OK)
|
{
|
return HIDO_ERR;
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Param_Save
|
* Description : ²ÎÊý±£´æ
|
* Input : _eGroup ²ÎÊý×é
|
* _pParamData ²ÎÊýÊý¾Ý
|
* _u32ParamLen ²ÎÊý³¤¶È
|
* Output : None
|
* Return : HIDO_ERR ʧ°Ü
|
* HIDO_OK ³É¹¦
|
* Author : DuJian
|
* Modified Date: : 2018Äê7ÔÂ23ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Param_Save(E_ParamGroup _eGroup, HIDO_VOID *_pParamData, HIDO_UINT32 _u32ParamLen)
|
{
|
if (_eGroup >= PARAM_GROUP_LAST)
|
{
|
return HIDO_ERR;
|
}
|
|
/* ±£´æÖ÷·ÖÇø²ÎÊý */
|
if(Param_Write(l_astParamAddrInfo[_eGroup].m_u32Addr, l_astParamAddrInfo[_eGroup].m_u32MaxSize,
|
_pParamData, _u32ParamLen) != HIDO_OK)
|
{
|
return HIDO_ERR;
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Param_Init
|
* Description : ²ÎÊý³õʼ»¯
|
* Input : _eGroup ²ÎÊý×é
|
* _u32ParamLen ²ÎÊý³¤¶È
|
* Output : _pParamData ²ÎÊýÊý¾Ý
|
* Return : HIDO_ERR ʧ°Ü
|
* HIDO_OK ³É¹¦
|
* Author : DuJian
|
* Modified Date: : 2018Äê7ÔÂ23ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Param_Init(E_ParamGroup _eGroup, HIDO_VOID *_pParamData, HIDO_UINT32 _u32ParamLen)
|
{
|
MCUFlash_Init();
|
|
/* ¶ÁÈ¡Ö÷·ÖÇøµÄ */
|
if (Param_Read(l_astParamAddrInfo[_eGroup].m_bCheckVersion, l_astParamAddrInfo[_eGroup].m_u32Addr, l_astParamAddrInfo[_eGroup].m_u32MaxSize,
|
_pParamData, _u32ParamLen) != HIDO_OK)
|
/* Ö÷·ÖÇøÊý¾ÝË𻵠*/
|
{
|
return HIDO_ERR;
|
}
|
|
return HIDO_OK;
|
}
|