optical/NxFuncs/stpara/stparas.h

287 lines
6.5 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
//-------------------------------------------------------------------------------
// 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