606 lines
12 KiB
C
606 lines
12 KiB
C
|
|
|
|||
|
|
#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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|