optical/EMBOS/Users/EmbBase/paras.c

773 lines
15 KiB
C
Raw Permalink Normal View History

2025-09-04 01:45:08 +00:00
#define _IN_PARAS_C
#include "paras.h"
#include "shell.h"
#include "delay.h"
#include "fram.h"
#include "smec98sp.h"
//----------------------------------------------------------
u32 * g_pMcParaList = NULL; // <20><><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ĭ<EFBFBD><C4AC>ֵ)
u32 * g_pWkParaList = NULL;
u32 * g_pdefAngParaList = NULL; // <20><><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD>
char* * g_pMcParasName = NULL;
char* * g_pWkParasName = NULL;
void LoadMcPara(void);
void LoadWkPara(void);
void LoadAngPara(void);
void ShowMcPara(char * para1, char * para2);
void ShowWkPara(char * para1, char * para2);
void SetMcPara(char * para1, char * para2);
void SetWkPara(char * para1, char * para2);
void ShowAngPara(char * para1, char * para2);
void SetAngPara(char * para1, char * para2);
//----------------------------------------------------------
void InitParas(void)
{
LoadMcPara();
LoadWkPara();
LoadAngPara();
AddShellCmd("SHOWMCPARA", "show the mc para", ShowMcPara);
AddShellCmd("SHOWWKPARA", "show the wk para", ShowWkPara);
AddShellCmd("SETMCPARA", "set the mc para", SetMcPara);
AddShellCmd("SETWKPARA", "set the wk para", SetWkPara);
AddShellCmd("SHOWANG", "show the ang para", ShowAngPara);
AddShellCmd("SETANG", "set the ang para", SetAngPara);
}
//-------------------------------------------
void LoadPara(u16 addr, u8 * pBuf, u16 len)
{
if (len == 0 || pBuf == NULL)
{
return;
}
ReadFramData(addr, pBuf, len);
if (USE_SMEC == 1) // 1:ʹ<>ü<EFBFBD><C3BC><EFBFBD>оƬ (ʹ<>ü<EFBFBD><C3BC><EFBFBD>оƬÿ<C6AC>ζ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>30ms)
{
int i,j,k;
u8 dat[128] = {0};
u8 rst = 0;
int jump = len / 120 +1;
for (i=0,j=0;i<len;i++)
{
if ((i % jump) == 0)
{
dat[j++] = *(pBuf+i);
}
}
for (k=0;k<10;k++)
{
rst = SMEC_DecryptionData(0,dat,j);
if (rst == 0)
{
for (i=0,j=0;i<len;i++)
{
if ((i % jump) == 0)
{
*(pBuf+i) = dat[j++];
}
}
}
else
{
printf("LoadPara Err: Encryption chip access failed!\r\n");
}
}
}
}
void SavePara(u16 addr, u8 * pBuf, u16 len)
{
if (len == 0 || pBuf == NULL)
{
return;
}
if (USE_SMEC == 1) // 1:ʹ<>ü<EFBFBD><C3BC><EFBFBD>оƬ (ʹ<>ü<EFBFBD><C3BC><EFBFBD>оƬÿ<C6AC>ζ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>30ms)
{
int i,j,k;
u8 dat[128] = {0};
u8 rst = 0;
int jump = len / 120 +1;
for (i=0,j=0;i<len;i++)
{
if ((i % jump) == 0)
{
dat[j++] = *(pBuf+i);
}
}
for (k=0;k<10;k++)
{
rst = SMEC_EncryptionData(0,dat,j);
if (rst == 0)
{
for (i=0,j=0;i<len;i++)
{
if ((i % jump) == 0)
{
*(pBuf+i) = dat[j++];
}
}
}
else
{
printf("SavePara Err: Encryption chip access failed!\r\n");
}
}
}
WriteFramData(addr, pBuf, len);
}
//-------------------------------------------
void LoadMcPara(void)
{
LoadPara(MCPARA_ADDR, (u8*)(&g_mcPara), sizeof(ParaStruct));
}
void LoadWkPara(void)
{
LoadPara(WKPARA_ADDR, (u8*)(&g_wkPara), sizeof(ParaStruct));
}
void LoadAngPara(void)
{
LoadPara(ANGPARA_ADDR, (u8*)(&g_angPara), sizeof(ParaStruct));
}
//-------------------------------------------
void SaveMcPara(void)
{
SavePara(MCPARA_ADDR, (u8*)(&g_mcPara), sizeof(ParaStruct));
}
void SaveWkPara(void)
{
SavePara(WKPARA_ADDR, (u8*)(&g_wkPara), sizeof(ParaStruct));
}
void SaveAngPara(void)
{
SavePara(ANGPARA_ADDR, (u8*)(&g_angPara), sizeof(ParaStruct));
}
void WriteDefMcPara(void)
{
if (g_pMcParaList == NULL)
{
return;
}
int offset;
for (int i = 0; i < PARA_NUM; i++)
{
offset = i * 4 + 3;
g_mcPara.buf[i] = *(g_pMcParaList + offset);
}
SaveMcPara();
printf("write def mc para\r\n");
}
void WriteDefWkPara(void)
{
if (g_pWkParaList == NULL)
{
return;
}
int offset;
for (int i = 0; i < PARA_NUM; i++)
{
offset = i * 4 + 3;
g_wkPara.buf[i] = *(g_pWkParaList + offset);
}
SaveWkPara();
printf("write def wk para\r\n");
}
void WriteDefMvAngPara(void)
{
if (g_pdefAngParaList == NULL)
{
return;
}
memcpy(&g_angPara, g_pdefAngParaList, sizeof(ParaStruct));
SaveAngPara();
printf("write def angle para\r\n");
}
void CheckMcParaRange(void)
{
if (g_pMcParaList == NULL)
{
return;
}
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
for (int i = 0; i < PARA_NUM; i++)
{
paratype = (i * 4);
minOffset = (i * 4 + 1);
maxOffset = (i * 4 + 2);
if (*(g_pMcParaList+paratype) == PTYPE_U)
{
if (g_mcPara.buf[i] < *(g_pMcParaList+minOffset))
{
printf("mc para id=%d, val=%d less than min=%d, set to min\r\n", i+1, g_mcPara.buf[i], *(g_pMcParaList+minOffset));
g_mcPara.buf[i] = *(g_pMcParaList+minOffset);
}
else if (g_mcPara.buf[i] > *(g_pMcParaList+maxOffset))
{
printf("mc para id=%d, val=%d more than max=%d, set to max\r\n", i+1, g_mcPara.buf[i], *(g_pMcParaList+maxOffset));
g_mcPara.buf[i] = *(g_pMcParaList+maxOffset);
}
}
else if (*(g_pMcParaList+paratype) == PTYPE_S)
{
if ((s32)g_mcPara.buf[i] < (s32)*(g_pMcParaList+minOffset))
{
printf("mc para id=%d, val=%d less than min=%d, set to min\r\n", i+1, (s32)g_mcPara.buf[i], (s32)*(g_pMcParaList+minOffset));
g_mcPara.buf[i] = *(g_pMcParaList+minOffset);
}
else if ((s32)g_mcPara.buf[i] > (s32)*(g_pMcParaList+maxOffset))
{
printf("mc para id=%d, val=%d more than max=%d, set to max\r\n", i+1, (s32)g_mcPara.buf[i], (s32)*(g_pMcParaList+maxOffset));
g_mcPara.buf[i] = *(g_pMcParaList+maxOffset);
}
}
}
}
void CheckAMcParaRange(int id)
{
if (g_pMcParaList == NULL || id <= 0 || id > PARA_NUM)
{
return;
}
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
int idx = id - 1;
paratype = (idx * 4);
minOffset = (idx * 4 + 1);
maxOffset = (idx * 4 + 2);
if (*(g_pMcParaList+paratype) == PTYPE_U)
{
if (g_mcPara.buf[idx] < *(g_pMcParaList+minOffset))
{
printf("mc para id=%d, val=%d less than min=%d, set to min\r\n", id, g_mcPara.buf[idx], *(g_pMcParaList+minOffset));
g_mcPara.buf[idx] = *(g_pMcParaList+minOffset);
}
else if (g_mcPara.buf[idx] > *(g_pMcParaList+maxOffset))
{
printf("mc para id=%d, val=%d more than max=%d, set to max\r\n", id, g_mcPara.buf[idx], *(g_pMcParaList+maxOffset));
g_mcPara.buf[idx] = *(g_pMcParaList+maxOffset);
}
}
else if (*(g_pMcParaList+paratype) == PTYPE_S)
{
if ((s32)g_mcPara.buf[idx] < (s32)*(g_pMcParaList+minOffset))
{
printf("mc para id=%d, val=%d less than min=%d, set to min\r\n", id, (s32)g_mcPara.buf[idx], (s32)*(g_pMcParaList+minOffset));
g_mcPara.buf[idx] = *(g_pMcParaList+minOffset);
}
else if ((s32)g_mcPara.buf[idx] > (s32)*(g_pMcParaList+maxOffset))
{
printf("mc para id=%d, val=%d more than max=%d, set to max\r\n", id, (s32)g_mcPara.buf[idx], (s32)*(g_pMcParaList+maxOffset));
g_mcPara.buf[idx] = *(g_pMcParaList+maxOffset);
}
}
}
void CheckWkParaRange(void)
{
if (g_pWkParaList == NULL)
{
return;
}
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
for (int i = 0; i < PARA_NUM; i++)
{
paratype = (i * 4);
minOffset = (i * 4 + 1);
maxOffset = (i * 4 + 2);
if (*(g_pWkParaList+paratype) == PTYPE_U)
{
if (g_wkPara.buf[i] < *(g_pWkParaList+minOffset))
{
printf("wk para id=%d, val=%d less than min=%d, set to min\r\n", i+1, g_wkPara.buf[i], *(g_pWkParaList+minOffset));
g_wkPara.buf[i] = *(g_pWkParaList+minOffset);
}
else if (g_wkPara.buf[i] > *(g_pWkParaList+maxOffset))
{
printf("wk para id=%d, val=%d more than max=%d, set to max\r\n", i+1, g_wkPara.buf[i], *(g_pWkParaList+maxOffset));
g_wkPara.buf[i] = *(g_pWkParaList+maxOffset);
}
}
else if (*(g_pWkParaList+paratype) == PTYPE_S)
{
if ((s32)g_wkPara.buf[i] < (s32)*(g_pWkParaList+minOffset))
{
printf("wk para id=%d, val=%d less than min=%d, set to min\r\n", i+1, (s32)g_wkPara.buf[i], (s32)*(g_pWkParaList+minOffset));
g_wkPara.buf[i] = *(g_pWkParaList+minOffset);
}
else if ((s32)g_wkPara.buf[i] > (s32)*(g_pWkParaList+maxOffset))
{
printf("wk para id=%d, val=%d more than max=%d, set to max\r\n", i+1, (s32)g_wkPara.buf[i], (s32)*(g_pWkParaList+maxOffset));
g_wkPara.buf[i] = *(g_pWkParaList+maxOffset);
}
}
}
}
void CheckAWkParaRange(int id)
{
if (g_pWkParaList == NULL || id <= 0 || id > PARA_NUM)
{
return;
}
int paratype, minOffset, maxOffset; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵָ<D6B5><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
int idx = id - 1;
paratype = (idx * 4);
minOffset = (idx * 4 + 1);
maxOffset = (idx * 4 + 2);
if (*(g_pWkParaList+paratype) == PTYPE_U)
{
if (g_wkPara.buf[idx] < *(g_pWkParaList+minOffset))
{
printf("wk para id=%d, val=%d less than min=%d, set to min\r\n", id, g_wkPara.buf[idx], *(g_pWkParaList+minOffset));
g_wkPara.buf[idx] = *(g_pWkParaList+minOffset);
}
else if (g_wkPara.buf[idx] > *(g_pWkParaList+maxOffset))
{
printf("wk para id=%d, val=%d more than max=%d, set to max\r\n", id, g_wkPara.buf[idx], *(g_pWkParaList+maxOffset));
g_wkPara.buf[idx] = *(g_pWkParaList+maxOffset);
}
}
else if (*(g_pWkParaList+paratype) == PTYPE_S)
{
if ((s32)g_wkPara.buf[idx] < (s32)*(g_pWkParaList+minOffset))
{
printf("wk para id=%d, val=%d less than min=%d, set to min\r\n", id, (s32)g_wkPara.buf[idx], (s32)*(g_pWkParaList+minOffset));
g_wkPara.buf[idx] = *(g_pWkParaList+minOffset);
}
else if ((s32)g_wkPara.buf[idx] > (s32)*(g_pWkParaList+maxOffset))
{
printf("wk para id=%d, val=%d more than max=%d, set to max\r\n", id, (s32)g_wkPara.buf[idx], (s32)*(g_pWkParaList+maxOffset));
g_wkPara.buf[idx] = *(g_pWkParaList+maxOffset);
}
}
}
void SetMcParaNameString(void* pDat)
{
g_pMcParasName = pDat;
}
void SetWkParaNameString(void* pDat)
{
g_pWkParasName = pDat;
}
void SetMcParaList(void * pDat)
{
g_pMcParaList = pDat;
}
void SetWkParaList(void * pDat)
{
g_pWkParaList = pDat;
}
void SetDefAngParaList(void * pDat)
{
g_pdefAngParaList = pDat;
}
u32 GetAMcPara(int id)
{
int idx = id - 1;
if (idx >= 0 && idx < PARA_NUM)
{
return g_mcPara.buf[idx];
}
return 0;
}
void SetAMcPara(int id, u32 val)
{
u32 * pItem;
char * pInfo = NULL;
int idx = id - 1;
if (idx >= 0 && idx < PARA_NUM)
{
pItem = &g_mcPara.buf[idx];
pInfo = g_pMcParasName[idx];
printf("set mc para ");
if (*(g_pMcParaList + idx * 4) == PTYPE_S)
{
s32 old = (s32)(*pItem);
*pItem = val;
if (pInfo != NULL)
{
printf("%d. %s = %d, oldvalue=%d\r\n", id, pInfo, (s32)*pItem, old);
}
else
{
printf("%d. = %d, oldvalue=%d\r\n", id, (s32)*pItem, old);
}
}
else
{
u32 old = *pItem;
*pItem = val;
if (pInfo != NULL)
{
printf("%d. %s = %d, oldvalue=%d\r\n", id, pInfo, *pItem, old);
}
else
{
printf("%d. = %d, oldvalue=%d\r\n", id, *pItem, old);
}
}
CheckAMcParaRange(id);
}
}
u32 GetAWkPara(int id)
{
int idx = id - 1;
if (idx >= 0 && idx < PARA_NUM)
{
return g_wkPara.buf[idx];
}
return 0;
}
void SetAWkPara(int id, u32 val)
{
u32 * pItem;
char * pInfo = NULL;
int idx = id - 1;
if (idx >= 0 && idx < PARA_NUM)
{
pItem = &g_wkPara.buf[idx];
pInfo = g_pWkParasName[idx];
printf("set wk para ");
if (*(g_pWkParaList + idx * 4) == PTYPE_S)
{
s32 old = (s32)(*pItem);
*pItem = val;
if (pInfo != NULL)
{
printf("%d. %s = %d, oldvalue=%d\r\n", id, pInfo, (s32)*pItem, old);
}
else
{
printf("%d. = %d, oldvalue=%d\r\n", id, (s32)*pItem, old);
}
}
else
{
u32 old = *pItem;
*pItem = val;
if (pInfo != NULL)
{
printf("%d. %s = %d, oldvalue=%d\r\n", id, pInfo, *pItem, old);
}
else
{
printf("%d. = %d, oldvalue=%d\r\n", id, *pItem, old);
}
}
CheckAWkParaRange(id);
}
}
void SetAAnglePara(int id, u16 val)
{
int old;
u16 * pItem;
int idx = id - 1;
if ( idx >= 0 && idx < (PARA_NUM*2) )
{
pItem = ((u16*)(&g_angPara)+idx);
printf("set move start angle ");
old = *pItem;
*pItem = val;
printf("%d. = %d, oldvalue=%d\r\n", id, *pItem, old);
}
}
void ShowMcPara(char * para1, char * para2)
{
printf("mc para:\r\n");
for (int i = 0; i < PARA_NUM; i++)
{
if (g_pMcParasName[i] != NULL)
{
if (strlen(g_pMcParasName[i]) != 0)
{
if (*(g_pMcParaList + i * 4) == PTYPE_U)
{
printf("%d. %s = %d\r\n", i+1, g_pMcParasName[i], g_mcPara.buf[i]);
}
else if (*(g_pMcParaList + i * 4) == PTYPE_S)
{
printf("%d. %s = %d\r\n", i+1, g_pMcParasName[i], (s32)g_mcPara.buf[i]);
}
else
{
printf("%d. %s = 0x%x\r\n", i+1, g_pMcParasName[i], g_mcPara.buf[i]);
}
DelayMs(2);
}
}
}
}
void ShowWkPara(char * para1, char * para2)
{
printf("wk para:\r\n");
for (int i = 0; i < PARA_NUM; i++)
{
if (g_pWkParasName[i] != NULL)
{
if (strlen(g_pWkParasName[i]) != 0)
{
if (*(g_pWkParaList + i * 4) == PTYPE_U)
{
printf("%d. %s = %d\r\n", i+1, g_pWkParasName[i], g_wkPara.buf[i]);
}
else if (*(g_pWkParaList + i * 4) == PTYPE_S)
{
printf("%d. %s = %d\r\n", i+1, g_pWkParasName[i], (s32)g_wkPara.buf[i]);
}
else
{
printf("%d. %s = 0x%x\r\n", i+1, g_pWkParasName[i], g_wkPara.buf[i]);
}
DelayMs(2);
}
}
}
}
void SetMcPara(char * para1, char * para2)
{
int p1, p2;
if (para1 == NULL || para2 == NULL)
{
return;
}
printf("para1=%s, para2=%s\r\n", para1, para2);
if (strcmp(para1, "") == 0 || strcmp(para2, "") == 0)
{
return;
}
p1 = atoi(para1);
p2 = atoi(para2);
if (p1 == p2)
{
}
if (p1 == 0 && p2 == 0)
{
WriteDefMcPara(); // дĬ<D0B4>ϲ<EFBFBD><CFB2><EFBFBD>
}
else if (p1 <= PARA_NUM && p1 >= 1)
{
SetAMcPara(p1, p2);
}
else if (p1 == 1000)
{
printf("save mc para\r\n");
SaveMcPara();
}
else
{
}
}
void SetWkPara(char * para1, char * para2)
{
int p1, p2;
if (para1 == NULL || para2 == NULL)
{
return;
}
printf("para1=%s, para2=%s\r\n", para1, para2);
if (strcmp(para1, "") == 0 || strcmp(para2, "") == 0)
{
return;
}
p1 = atoi(para1);
p2 = atoi(para2);
if (p1 == p2)
{
}
if (p1 == 0 && p2 == 0)
{
WriteDefWkPara(); // дĬ<D0B4>ϲ<EFBFBD><CFB2><EFBFBD>
}
else if (p1 <= PARA_NUM && p1 >= 1)
{
SetAWkPara(p1, p2);
}
else if (p1 == 1000)
{
printf("save wk para\r\n");
SaveWkPara();
}
else
{
}
}
void ShowAngPara(char * para1, char * para2)
{
int p1 = 1;
if (para1 != NULL)
{
p1 = atoi(para1);
}
{
int gid = p1;
ParaStruct * pPara = NULL;
int ofst, val, ofst2;
ofst = val = 0;
printf("ang para %d:\r\n", gid);
if (gid == 1 || gid == 2)
{
pPara = (&g_angPara);
}
if (gid == 1)
{
ofst2 = 0;
}
else if (gid == 2)
{
ofst2 = MAX_HOR * MAX_VER;
}
if (pPara != NULL)
{
printf("\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10\t11\t12\r\n");
for (int i = 0; i < MAX_VER; i++)
{
printf("%d:\t", i+1);
for (int j = 0; j < MAX_HOR; j++)
{
ofst = (i * MAX_HOR + j + ofst2);
val = *((u16*)(pPara) + ofst);
printf("%d\t", val);
DelayMs(1);
}
printf("\r\n");
}
}
}
}
void SetAngPara(char * para1, char * para2)
{
int p1, p2;
if (para1 == NULL || para2 == NULL)
{
return;
}
printf("para1=%s, para2=%s\r\n", para1, para2);
if (strcmp(para1, "") == 0 || strcmp(para2, "") == 0)
{
return;
}
p1 = atoi(para1);
p2 = atoi(para2);
if (p1 == p2)
{
}
if (p1 == 0)
{
WriteDefMvAngPara();
}
else if (p1 == 1000)
{
SaveAngPara();
printf("save angle para\r\n");
}
else
{
int gid, subscript1, subscript2; // <20>±<EFBFBD>1,<2C>±<EFBFBD>2
int id;
gid = p1 / 10000;
p1 %= 10000;
subscript1 = p1 / 100;
subscript2 = p1 % 100;
if (subscript1 < 1 || subscript2 < 1 || subscript1 > MAX_VER || subscript2 > MAX_HOR)
{
printf("idx err\r\n");
return;
}
id = (subscript1-1) * MAX_HOR + (subscript2-1) + 1;
if (id < 1 || id > PARA_NUM)
{
printf("idx err\r\n");
return;
}
printf("set ang table %d, at (%d, %d), value=%d\r\n", gid, subscript1, subscript2, p2);
if (gid == 2)
{
id += MAX_HOR * MAX_VER;
}
SetAAnglePara(id, p2);
}
}