optical/EMBOS/Users/EmbFunc/security/installment.c

606 lines
12 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#include "installment.h"
#include "password.h"
#include "fram.h"
#include "paras.h"
#include "cpuid.h"
#include "shell.h"
#include "trigger.h"
/*
*/
//-------------------------------------------------------------------------------
u32 GetRTCSecond(void)
{
// RTC_GetCounter
// LL_RTC_TIME_GetSecond
return 0;
}
//-------------------------------------------------------------------------------
#define INS_SIZE 64
typedef struct
{
// 0
u8 curmc; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>,CUR_MACHINE
u16 mctype; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,MC_TYPE
u8 clientId; // <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
u32 cpuId;
// 8
u8 lastpswd[24]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 32
s32 workableTimer; // <20>ɹ<EFBFBD><C9B9><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>
u32 rtcSecondTimer; // ʵʱʱ<CAB1>Ӽ<EFBFBD><D3BC><EFBFBD>
// 40
u8 rev[INS_SIZE - 4 - 40];
u32 encount; // д<><D0B4><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} __attribute__ ((packed)) Installment;
#define UNLOCK_COUNTER_MIN (S32_MAX - S16_MAX - U16_MAX) // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA>
#define UNLOCK_COUNTER_MAX (S32_MAX)
#define UNLOCK_COUNTER (UNLOCK_COUNTER_MIN+S16_MAX + (S16_MAX)/2) // Ĭ<><C4AC>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//-------------------------------------------------------------------------------
Installment g_installment;
int g_instsel = -1;
//-------------------------------------------------------------------------------
void TestInstall(char * para1, char * para2);
void ResetInstall(void);
//-------------------------------------------------------------------------------
// <20><>ʼ<EFBFBD><CABC>
int InitInstallment(void)
{
int rslt;
u32 cpuid;
Installment tmpinstall1, tmpinstall2;
rslt = 0;
if (g_instsel >= 0)
{
return 0;
}
cpuid = 0;
{
CpuId id;
GetCpuID(&id);
cpuid += id.dword.dword1;
cpuid += id.dword.dword2;
cpuid += id.dword.dword3;
cpuid += id.dword.dword4;
}
memset(&g_installment, 0, sizeof(Installment));
// ȷ<><C8B7><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
ReadFramData(ENC_ADDR, (u8*)&tmpinstall1, sizeof(Installment));
ReadFramData(ENC_ADDR+INS_SIZE, (u8*)&tmpinstall2, sizeof(Installment));
if (1 &&
tmpinstall1.curmc == CUR_MACHINE &&
tmpinstall1.mctype == MC_TYPE &&
tmpinstall1.clientId == CUR_CLINET &&
tmpinstall1.cpuId == cpuid &&
1 )
{
if (1 &&
tmpinstall2.curmc == CUR_MACHINE &&
tmpinstall2.mctype == MC_TYPE &&
tmpinstall2.clientId == CUR_CLINET &&
tmpinstall2.cpuId == cpuid &&
1 )
{
if (tmpinstall2.encount > tmpinstall1.encount)
{
g_instsel = 1;
}
else
{
g_instsel = 0;
}
}
else
{
g_instsel = 0;
// <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>д<EFBFBD><D0B4><EFBFBD><EFBFBD>Ч<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
WriteFramData(ENC_ADDR+INS_SIZE, (u8*)&tmpinstall1, sizeof(Installment));
}
}
else
{
if (1 &&
tmpinstall2.curmc == CUR_MACHINE &&
tmpinstall2.mctype == MC_TYPE &&
tmpinstall2.clientId == CUR_CLINET &&
tmpinstall2.cpuId == cpuid &&
1 )
{
g_instsel = 1;
// <20><><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>д<EFBFBD><D0B4><EFBFBD><EFBFBD>Ч<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
WriteFramData(ENC_ADDR, (u8*)&tmpinstall2, sizeof(Installment));
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
}
}
if (g_instsel < 0)
{
ResetInstall();
}
// <20><><EFBFBD><EFBFBD><C2B6><EFBFBD>
if (g_instsel == 0)
{
printf("load enc 0\r\n");
ReadFramData(ENC_ADDR, (u8*)&g_installment, sizeof(Installment));
}
else if (g_instsel == 1)
{
printf("load enc 1\r\n");
ReadFramData(ENC_ADDR+INS_SIZE, (u8*)&g_installment, sizeof(Installment));
}
else
{
printf("load enc error\r\n");
}
if (0 ||
g_installment.curmc != CUR_MACHINE ||
g_installment.mctype != MC_TYPE ||
g_installment.clientId != CUR_CLINET ||
g_installment.cpuId != cpuid ||
0 )
{
printf("reload enc error\r\n");
ResetInstall();
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤
int rslt = -1;
PswdCtrl pswdctrl;
rslt = DecodePswdString(&pswdctrl, (char*)(g_installment.lastpswd), g_installment.clientId); // <20><><EFBFBD><EFBFBD>
if (rslt < 0)
{
printf("DecodePswdString error, reset ResetInstall\r\n");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB2BB>ȷ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD>
ResetInstall();
}
else
{
if (pswdctrl.clientId == g_installment.clientId &&
pswdctrl.cpuId == g_installment.cpuId &&
1 )
{
s32 thishours = pswdctrl.thishours;
if (thishours >= UNLOCK_MIN && thishours <= UNLOCK_MAX)
{
// ȫ<><C8AB>
g_installment.workableTimer = UNLOCK_COUNTER; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if (thishours < 0)
{
thishours *= -1;
if (thishours >= LOCK_MIN && thishours <= LOCK_MAX)
{
g_installment.workableTimer = 0; // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
}
else
{
printf("clientId or cpuId not equ, reset ResetInstall\r\n");
ResetInstall();
}
}
}
// <20>ı<EFBFBD><C4B1>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ʱ<EFBFBD><CAB1>
if (g_installment.workableTimer < UNLOCK_COUNTER_MIN) // <20><>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
u32 temp;
temp = GetRTCSecond(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>RTC<54><43>ֵ
if (temp >= g_installment.rtcSecondTimer)
{
temp -= g_installment.rtcSecondTimer;
printf("rtc record, close time=%u sec\r\n", temp);
temp /= 60; // <20>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp++; // <20><><EFBFBD>ټ<EFBFBD>ȥ1<C8A5><31><EFBFBD><EFBFBD>
g_installment.workableTimer -= temp;
if (g_installment.workableTimer < 0)
{
g_installment.workableTimer = 0;
}
if (g_installment.workableTimer >= UNLOCK_COUNTER_MIN)
{
g_installment.workableTimer = UNLOCK_COUNTER_MIN-1;
}
rslt = temp - 1;
}
else
{
printf("rtc reset\r\n");
// <20><><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5>ص<EFBFBD><D8B5><EFBFBD>, rtc <20><>λ
}
}
g_installment.rtcSecondTimer = GetRTCSecond(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>RTC<54><43>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>¼
AddShellCmd("INS", "Install function", TestInstall);
return rslt;
}
void ResetInstall()
{
Installment tmpinstall;
u32 cpuid;
cpuid = 0;
{
CpuId id;
GetCpuID(&id);
cpuid += id.dword.dword1;
cpuid += id.dword.dword2;
cpuid += id.dword.dword3;
cpuid += id.dword.dword4;
}
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memset(&tmpinstall, 0, sizeof(Installment));
tmpinstall.curmc = CUR_MACHINE;
tmpinstall.mctype = MC_TYPE;
tmpinstall.clientId = CUR_CLINET;
tmpinstall.cpuId = cpuid;
tmpinstall.encount = 100;
tmpinstall.workableTimer = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ0
tmpinstall.rtcSecondTimer = GetRTCSecond(); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>RTC<54><43>ֵ
WriteFramData(ENC_ADDR, (u8*)&tmpinstall, sizeof(Installment));
WriteFramData(ENC_ADDR+INS_SIZE, (u8*)&tmpinstall, sizeof(Installment));
g_instsel = 0;
printf("ResetInstall\r\n");
}
int SetInstallMent(char * pPswdStr)
{
int rslt = -1;
PswdCtrl pswdctrl;
ChangeToUper(pPswdStr); // ת<><D7AA>Ϊ<EFBFBD><CEAA>д
do
{
if (g_instsel >= 0)
{
rslt = DecodePswdString(&pswdctrl, pPswdStr, g_installment.clientId); // <20><><EFBFBD><EFBFBD>
if (rslt >= 0)
{
// 6. <20><>֤<EFBFBD>ͻ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ϵ<EFBFBD>ǰ<EFBFBD><EFBFBD><E8B1B8>
if (pswdctrl.clientId == g_installment.clientId &&
pswdctrl.cpuId == g_installment.cpuId &&
1 )
{
PswdCtrl oldctrl;
if (g_installment.lastpswd[0] != 0) // <20>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
rslt = DecodePswdString(&oldctrl, (char*)(g_installment.lastpswd), g_installment.clientId); // <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD>
if (rslt < 0)
{
break;
}
}
else
{
if (pswdctrl.totaltime >= 0 && pswdctrl.totaltime < TIME_MUTI)
{
oldctrl.nexttotaltime = pswdctrl.totaltime;
}
else
{
rslt = -1; // <20><><EFBFBD>ò<EFBFBD><C3B2>ɹ<EFBFBD>
break;
}
}
// 7.<2E><>֤<EFBFBD>ϴμ<CFB4><CEBC><EFBFBD><EFBFBD>ۼ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ƿ<EFBFBD><C7B7>Ͱ忨<CDB0><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>£<EFBFBD><C2A3><EFBFBD>Сʱ<D0A1><CAB1><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD>
if (pswdctrl.totaltime == oldctrl.nexttotaltime)
{
// 8.<2E><><EFBFBD>µĸı<C4B8>ʱ<EFBFBD><CAB1><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
s32 thishours = pswdctrl.thishours;
if (thishours >= NORMAL_MIN && thishours <= NORMAL_MAX) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
{
if (g_installment.workableTimer >= UNLOCK_COUNTER_MIN || // <20>ϴ<EFBFBD><CFB4><EFBFBD>ȫ<EFBFBD><C8AB>
g_installment.workableTimer < 0 ) // <20>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_installment.workableTimer = thishours*60; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬
}
else
{
g_installment.workableTimer += thishours*60; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
if (g_installment.workableTimer < 0)
{
g_installment.workableTimer = 0;
}
if (g_installment.workableTimer >= UNLOCK_COUNTER_MIN)
{
g_installment.workableTimer = UNLOCK_COUNTER_MIN-1;
}
}
}
else if (thishours >= UNLOCK_MIN && thishours <= UNLOCK_MAX) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB>
{
// ȫ<><C8AB>
g_installment.workableTimer = UNLOCK_COUNTER; // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else if (thishours < 0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
thishours *= -1;
if (thishours >= NORMAL_MIN && thishours <= NORMAL_MAX) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
{
if (g_installment.workableTimer >= UNLOCK_COUNTER_MIN) // <20>ϴ<EFBFBD><CFB4><EFBFBD>ȫ<EFBFBD><C8AB>
{
g_installment.workableTimer = 0; // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
g_installment.workableTimer -= thishours*60; // <20><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ʱ<EFBFBD><CAB1>
if (g_installment.workableTimer < 0)
{
g_installment.workableTimer = 0;
}
if (g_installment.workableTimer >= UNLOCK_COUNTER_MIN)
{
g_installment.workableTimer = UNLOCK_COUNTER_MIN-1;
}
}
}
else if (thishours >= LOCK_MIN && thishours <= LOCK_MAX)
{
g_installment.workableTimer = 0; // ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
rslt = -1; // <20><><EFBFBD>ò<EFBFBD><C3B2>ɹ<EFBFBD>
break;
}
}
else
{
rslt = -1; // <20><><EFBFBD>ò<EFBFBD><C3B2>ɹ<EFBFBD>
break;
}
// 9.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB4AE><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy(g_installment.lastpswd, pPswdStr, PSWDSTR_LEN);
g_installment.lastpswd[PSWDSTR_LEN] = 0;
RefWorkableTimer(0);
rslt = 0;
break;
}
else
{
rslt = -1;
break;
}
}
else
{
rslt = -1;
break;
}
}
}
}while(0);
return rslt;
}
// <20>õ<EFBFBD>ʣ<EFBFBD><EFBFBD><E0B9A4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>
int GetWorkableTime(void)
{
if (g_instsel >= 0)
{
return g_installment.workableTimer;
}
else
{
return 0;
}
}
// <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>
int RefWorkableTimer(s32 val)
{
if (g_instsel < 0)
{
g_installment.workableTimer = 0;
}
else
{
g_installment.rtcSecondTimer = GetRTCSecond(); // ÿ<><C3BF>1<EFBFBD><31><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>¼rtc<74>ļ<EFBFBD><C4BC><EFBFBD>ֵ
/*
* 20221024 ljs++
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵Ĺػ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCMD_SET_ELAPSED_TIME
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>͹ػ<EFBFBD>ʱ<EFBFBD><EFBFBD>5000Сʱ,ʵ<EFBFBD>ʲ<EFBFBD>û<EFBFBD>йػ<EFBFBD>,ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>if<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* <EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
if (g_installment.workableTimer < UNLOCK_COUNTER_MIN) // <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
g_installment.workableTimer += val;
}
if (g_installment.workableTimer < 0)
{
g_installment.workableTimer = 0;
}
else if (g_installment.workableTimer >= UNLOCK_COUNTER_MIN)
{
g_installment.workableTimer = UNLOCK_COUNTER;
}
g_installment.encount++;
if (g_instsel == 0)
{
WriteFramData(ENC_ADDR+INS_SIZE, (u8*)&g_installment, sizeof(Installment));
g_instsel = 1;
}
else
{
WriteFramData(ENC_ADDR, (u8*)&g_installment, sizeof(Installment));
g_instsel = 0;
}
}
#if (0) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
static u32 timer = 0;
u32 gap = 0;
u32 temp;
temp = GetMsSoftTimer();
if (timer == 0)
{
gap = 0;
}
else
{
gap = temp - timer;
}
timer = temp;
printf("at %d, RefWorkableTimer, gap = %d, ",timer, gap);
if (g_installment.workableTimer <= 0)
{
g_installment.workableTimer = 0;
printf("limit use\r\n");
}
else if (g_installment.workableTimer >= UNLOCK_COUNTER_MIN)
{
g_installment.workableTimer = UNLOCK_COUNTER;
printf("no limit\r\n");
}
else
{
printf("change workabletimer to %d\r\n", g_installment.workableTimer);
}
}
#endif
return g_installment.workableTimer;
}
// <20>忨ID<49><44>Ϣ
void GetBoardIdInfo(char * boardId)
{
sprintf(boardId, "CPUID: %u", g_installment.cpuId);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
void GetLastInstallment(char * installment)
{
sprintf(installment, "LPSWD: %s", g_installment.lastpswd);
}
// <20><>ȡǰһ<C7B0><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void GetLastpswd(u8 * lastpswd)
{
memcpy(lastpswd, g_installment.lastpswd, 24);
}
void TestInstall(char * para1, char * para2)
{
int p1, p2;
p1 = 0;
p2 = 0;
if (para1 == NULL || para2 == NULL)
{
return;
}
printf("para1=%s, para2=%s\r\n", para1, para2);
if (strcmp(para1, "") != 0)
{
p1 = atoi(para1);
}
if (strcmp(para2, "") != 0)
{
p2 = atoi(para2);
}
if (p1 == p2)
{
}
//--------------------------------
{
if (p1 == 0)
{
char buff[32];
GetBoardIdInfo(buff); // <20>忨ID<49><44>Ϣ
printf("%s\r\n", buff);
GetLastInstallment(buff); // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
printf("%s\r\n", buff);
printf("Workable = %d min\r\n", GetWorkableTime());
}
else if (p1 == 1)
{
SetInstallMent(para2);
}
else if (p1 == 2)
{
RefWorkableTimer(p2);
}
else if (p1 == 100)
{
ResetInstall();
}
}
}