287 lines
6.5 KiB
C
287 lines
6.5 KiB
C
|
|
|
|||
|
|
//-------------------------------------------------------------------------------
|
|||
|
|
// File Name: stparas.h
|
|||
|
|
// Brief:
|
|||
|
|
// Version: 1.0.0
|
|||
|
|
// Create Date: 2017/05/08
|
|||
|
|
// Create by: Marshal Lee
|
|||
|
|
// Copyright:
|
|||
|
|
// Copyright (c) 2017, GetonAgain Co., LTD.
|
|||
|
|
// All rights reserved.
|
|||
|
|
//
|
|||
|
|
// Modify by: Marshal Lee
|
|||
|
|
// Modify Date: 2017/05/08
|
|||
|
|
|
|||
|
|
// Modify by: ljs
|
|||
|
|
// Modify Date: 2021/12/23
|
|||
|
|
//-------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
#ifndef __STPARAS_H__
|
|||
|
|
#define __STPARAS_H__
|
|||
|
|
|
|||
|
|
#include "config.h"
|
|||
|
|
#include "stflash.h"
|
|||
|
|
|
|||
|
|
//---------------------------------
|
|||
|
|
|
|||
|
|
#ifndef MAX_PARA_NUM
|
|||
|
|
#define MAX_PARA_NUM 32
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#define PARA_NUM (MAX_PARA_NUM-1)
|
|||
|
|
|
|||
|
|
#define PARA_STR_LEN 20
|
|||
|
|
|
|||
|
|
#define PARA_VALID 0x55AA
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define PTYPE_U 0 // <20><EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define PTYPE_S 1 // <20>з<EFBFBD><D0B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define PTYPE_B 2 // λͼ
|
|||
|
|
|
|||
|
|
//---------------------------------
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
u32 paraEn; // 20211223 <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־,<2C><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>Чʱ<D0A7>Զ<EFBFBD>д<EFBFBD><D0B4>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
|
|||
|
|
u32 buf[PARA_NUM];
|
|||
|
|
} __attribute__ ((packed)) StParaStruct;
|
|||
|
|
|
|||
|
|
//---------------------------------
|
|||
|
|
|
|||
|
|
#define STPARA_ADDR (STM32_PARA_ADDR+0)
|
|||
|
|
|
|||
|
|
//------------------------------------
|
|||
|
|
|
|||
|
|
#define ST_PARAS_CODE(staddr, name) \
|
|||
|
|
\
|
|||
|
|
StParaStruct g_##name##Para;\
|
|||
|
|
u32 * g_p##name##ParaList = NULL;\
|
|||
|
|
char * g_p##name##ParasName = NULL;\
|
|||
|
|
\
|
|||
|
|
int Read##name##ParaData(void)\
|
|||
|
|
{\
|
|||
|
|
int rslt;\
|
|||
|
|
u32 rdaddr = (u32)(&g_##name##Para);\
|
|||
|
|
rslt = STMFlashRead((u32)(staddr), (u16*)(rdaddr), (sizeof(StParaStruct))/2);\
|
|||
|
|
return rslt;\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void Write##name##ParaData(void)\
|
|||
|
|
{\
|
|||
|
|
u32 wraddr = (u32)(&g_##name##Para);\
|
|||
|
|
STMFlashWrite((u32)(staddr), (u16*)(wraddr), (sizeof(StParaStruct))/2, 3);\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void Save##name##Para(void)\
|
|||
|
|
{\
|
|||
|
|
printf("save %s para\r\n", #name);\
|
|||
|
|
Write##name##ParaData();\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void Set##name##ParaList(void* pDat)\
|
|||
|
|
{\
|
|||
|
|
g_p##name##ParaList = pDat;\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void WriteDef##name##Para(void)\
|
|||
|
|
{\
|
|||
|
|
printf("write def %s para\r\n", #name);\
|
|||
|
|
if (g_p##name##ParaList != NULL)\
|
|||
|
|
{\
|
|||
|
|
int offset;\
|
|||
|
|
for (int i = 0; i < PARA_NUM; i++)\
|
|||
|
|
{\
|
|||
|
|
offset = i * 4 + 3;\
|
|||
|
|
g_##name##Para.buf[i] = *(g_p##name##ParaList + offset);\
|
|||
|
|
}\
|
|||
|
|
g_##name##Para.paraEn = PARA_VALID+CUR_MACHINE;\
|
|||
|
|
Save##name##Para();\
|
|||
|
|
}\
|
|||
|
|
else\
|
|||
|
|
{\
|
|||
|
|
printf("%s para list is NULL\r\n", #name);\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void Set##name##ParaNameString(void* pDat)\
|
|||
|
|
{\
|
|||
|
|
g_p##name##ParasName = pDat;\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void Load##name##Para(void)\
|
|||
|
|
{\
|
|||
|
|
int rslt;\
|
|||
|
|
rslt = Read##name##ParaData();\
|
|||
|
|
if (rslt != 0 || g_##name##Para.paraEn != (PARA_VALID+CUR_MACHINE))\
|
|||
|
|
{\
|
|||
|
|
printf("%s para invalid, rslt=%d, paraEn=0x%x\r\n", #name, rslt, g_##name##Para.paraEn);\
|
|||
|
|
WriteDef##name##Para();\
|
|||
|
|
}\
|
|||
|
|
else\
|
|||
|
|
{\
|
|||
|
|
printf("load %s para successful\r\n", #name);\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void CheckA##name##ParaRange(int id)\
|
|||
|
|
{\
|
|||
|
|
if (id <= 0 || id > PARA_NUM || g_p##name##ParaList == NULL)\
|
|||
|
|
{\
|
|||
|
|
return;\
|
|||
|
|
}\
|
|||
|
|
int paratype, minOffset, maxOffset;\
|
|||
|
|
int idx = id - 1;\
|
|||
|
|
paratype = (idx * 4);\
|
|||
|
|
minOffset = (idx * 4 + 1);\
|
|||
|
|
maxOffset = (idx * 4 + 2);\
|
|||
|
|
if (*(g_p##name##ParaList+paratype) == PTYPE_U)\
|
|||
|
|
{\
|
|||
|
|
if (g_##name##Para.buf[idx] < *(g_p##name##ParaList+minOffset))\
|
|||
|
|
{\
|
|||
|
|
printf(#name " para id=%d, val=%d less than min=%d, set to min\r\n", id, g_##name##Para.buf[idx], *(g_p##name##ParaList+minOffset));\
|
|||
|
|
g_##name##Para.buf[idx] = *(g_p##name##ParaList+minOffset);\
|
|||
|
|
}\
|
|||
|
|
else if (g_##name##Para.buf[idx] > *(g_p##name##ParaList+maxOffset))\
|
|||
|
|
{\
|
|||
|
|
printf(#name " para id=%d, val=%d more than max=%d, set to max\r\n", id, g_##name##Para.buf[idx], *(g_p##name##ParaList+maxOffset));\
|
|||
|
|
g_##name##Para.buf[idx] = *(g_p##name##ParaList+maxOffset);\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
else if (*(g_p##name##ParaList+paratype) == PTYPE_S)\
|
|||
|
|
{\
|
|||
|
|
if ((s32)g_##name##Para.buf[idx] < (s32)*(g_p##name##ParaList+minOffset))\
|
|||
|
|
{\
|
|||
|
|
printf(#name " para id=%d, val=%d less than min=%d, set to min\r\n", id, (s32)g_##name##Para.buf[idx], (s32)*(g_p##name##ParaList+minOffset));\
|
|||
|
|
g_##name##Para.buf[idx] = *(g_p##name##ParaList+minOffset);\
|
|||
|
|
}\
|
|||
|
|
else if ((s32)g_##name##Para.buf[idx] > (s32)*(g_p##name##ParaList+maxOffset))\
|
|||
|
|
{\
|
|||
|
|
printf(#name " para id=%d, val=%d more than max=%d, set to max\r\n", id, (s32)g_##name##Para.buf[idx], (s32)*(g_p##name##ParaList+maxOffset));\
|
|||
|
|
g_##name##Para.buf[idx] = *(g_p##name##ParaList+maxOffset);\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
void Check##name##ParasRange(void)\
|
|||
|
|
{\
|
|||
|
|
for(int i = 1; i <= PARA_NUM; i++)\
|
|||
|
|
{\
|
|||
|
|
CheckA##name##ParaRange(i);\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
void SetA##name##Para(int id, int val)\
|
|||
|
|
{\
|
|||
|
|
if (id < 1 || id > PARA_NUM)\
|
|||
|
|
{\
|
|||
|
|
return;\
|
|||
|
|
}\
|
|||
|
|
int old;\
|
|||
|
|
old = (int)g_##name##Para.buf[id-1];\
|
|||
|
|
g_##name##Para.buf[id-1] = val;\
|
|||
|
|
if (g_p##name##ParasName != NULL)\
|
|||
|
|
{\
|
|||
|
|
printf("set a para %d. %s = %d, oldvalue=%d\r\n", id, (g_p##name##ParasName+(id-1)*PARA_STR_LEN), g_##name##Para.buf[id-1], old);\
|
|||
|
|
}\
|
|||
|
|
else\
|
|||
|
|
{\
|
|||
|
|
printf("set a para %d. = %d, oldvalue=%d\r\n", id, g_##name##Para.buf[id-1], old);\
|
|||
|
|
}\
|
|||
|
|
CheckA##name##ParaRange(id);\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void Show##name##Para(char * para1, char * para2)\
|
|||
|
|
{\
|
|||
|
|
int i;\
|
|||
|
|
int paratype;\
|
|||
|
|
\
|
|||
|
|
printf(#name " para:\r\n");\
|
|||
|
|
\
|
|||
|
|
if (g_p##name##ParasName != NULL)\
|
|||
|
|
{\
|
|||
|
|
for (i = 0; i < PARA_NUM; i++)\
|
|||
|
|
{\
|
|||
|
|
if (strlen(g_p##name##ParasName+i*PARA_STR_LEN) != 0)\
|
|||
|
|
{\
|
|||
|
|
paratype = (i * 4);\
|
|||
|
|
if (*(g_p##name##ParaList+paratype) == PTYPE_U)\
|
|||
|
|
{\
|
|||
|
|
printf("%d. %s = %d\r\n", i+1, (g_p##name##ParasName+i*PARA_STR_LEN), g_##name##Para.buf[i]);\
|
|||
|
|
DelayMs(2);\
|
|||
|
|
}\
|
|||
|
|
else if (*(g_p##name##ParaList+paratype) == PTYPE_S)\
|
|||
|
|
{\
|
|||
|
|
printf("%d. %s = %d\r\n", i+1, (g_p##name##ParasName+i*PARA_STR_LEN), (s32)g_##name##Para.buf[i]);\
|
|||
|
|
DelayMs(2);\
|
|||
|
|
}\
|
|||
|
|
else if (*(g_p##name##ParaList+paratype) == PTYPE_B)\
|
|||
|
|
{\
|
|||
|
|
printf("%d. %s = 0x%x\r\n", i+1, (g_p##name##ParasName+i*PARA_STR_LEN), g_##name##Para.buf[i]);\
|
|||
|
|
DelayMs(2);\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
void Set##name##Para(char * para1, char * para2)\
|
|||
|
|
{\
|
|||
|
|
int p1, p2;\
|
|||
|
|
\
|
|||
|
|
if (para1 == NULL || para2 == NULL)\
|
|||
|
|
{\
|
|||
|
|
return;\
|
|||
|
|
}\
|
|||
|
|
\
|
|||
|
|
if (strcmp(para1, "") == 0 || strcmp(para2, "") == 0)\
|
|||
|
|
{\
|
|||
|
|
return;\
|
|||
|
|
}\
|
|||
|
|
p1 = atoi(para1);\
|
|||
|
|
p2 = atoi(para2);\
|
|||
|
|
\
|
|||
|
|
if (p1 == 0 && p2 == 0)\
|
|||
|
|
{\
|
|||
|
|
WriteDef##name##Para();\
|
|||
|
|
}\
|
|||
|
|
else if (p1 <= PARA_NUM && p1 >= 1)\
|
|||
|
|
{\
|
|||
|
|
SetA##name##Para(p1, p2);\
|
|||
|
|
}\
|
|||
|
|
else if (p1 == 1000)\
|
|||
|
|
{\
|
|||
|
|
Save##name##Para();\
|
|||
|
|
}\
|
|||
|
|
else\
|
|||
|
|
{\
|
|||
|
|
}\
|
|||
|
|
}\
|
|||
|
|
void Init##name##Paras(void)\
|
|||
|
|
{\
|
|||
|
|
Set##name##ParaList((void*)(&g_def##name##ParaList));\
|
|||
|
|
\
|
|||
|
|
Load##name##Para();\
|
|||
|
|
\
|
|||
|
|
Set##name##ParaNameString((void*)(&g_##name##ParaStrList[0][0]));\
|
|||
|
|
\
|
|||
|
|
Check##name##ParasRange();\
|
|||
|
|
\
|
|||
|
|
AddShellCmd("SHOW"#name"PARA", "show "#name" paras", Show##name##Para);\
|
|||
|
|
AddShellCmd("SET"#name"PARA", "set "#name" paras", Set##name##Para);\
|
|||
|
|
}\
|
|||
|
|
//----------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//---------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//---------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|