#include "fbl_def.h"
|
#include "did.h"
|
#include "eeprom_emul.h"
|
#include "uds.h"
|
#include <string.h>
|
|
#define CAL_PART_NUMBER_SIZE ((uint8_t)10)
|
#define CORE_ASSEMBLY_NUMBER_SIZE ((uint8_t)24)
|
#define ECU_SERIAL_NUMBER_SIZE ((uint8_t)16)
|
#define VINID_NUMBER_SIZE ((uint8_t)17)
|
#define SYSTEM_NAME_NUMBER_SIZE ((uint8_t)10)
|
#define VPPS_NUMBER_SIZE ((uint8_t)14)
|
#define DUNS_NAME_NUMBER_SIZE ((uint8_t)9)
|
#define MTC_NAME_NUMBER_SIZE ((uint8_t)16)
|
#define VERSION_CODE_NUMBER_SIZE ((uint8_t)2)
|
|
#define FIGNER_PRINT_WRITE (9)
|
#define FIGNER_PRINT_READ (10)
|
|
#define VA_InstallDate (20u) // 4B
|
#define VA_PROGRAM_DATA (21u) // 32B
|
#define VA_PROGRAM_DATE (25u) // 4B
|
|
#define ProgramBlockLenth (32u)
|
|
typedef struct ProgrammingDate
|
{
|
uint8_t ProgrammingDate_YY_H;
|
uint8_t ProgrammingDate_YY_L;
|
uint8_t ProgrammingDate_MM;
|
uint8_t ProgrammingDate_DD;
|
} ProgrammingDate_t;
|
// total 32 bytes
|
typedef struct
|
{
|
uint8_t RepairShopCodeOrTesterSerialNumber[16]; /*16 byte*/
|
ProgrammingDate_t UDS_NS_ProgrammingDate; /*4Byte*/
|
uint8_t ProgrammingCounter; /*1Byte*/
|
uint8_t ProgrammingAttempCounter; /*1Byte*/
|
uint8_t FingerPrint_W[10];
|
} Program_BLOCK_t;
|
|
static Program_BLOCK_t NVM_ProgramBLOCK = {0};
|
|
uint16_t DIDTable_Entry_Count_u16 = 0;
|
UDS_DIDtableEntry DIDtable[UDS_DID_TABLE_SIZE];
|
// static uint8_t DID_LoaderWaitTimer = 0;
|
static uint8_t DID_NeedtoSaveFlag = 0;
|
|
void did_init(void)
|
{
|
DID_NeedtoSaveFlag = 0;
|
UDS_InitDIDMapRW(DID_NS_ProgrammingCounter, VA_PROGRAM_DATA, &NVM_ProgramBLOCK.ProgrammingCounter, 1);
|
UDS_InitDIDMapRW(DID_NS_ProAtpCounter, VA_PROGRAM_DATA, &NVM_ProgramBLOCK.ProgrammingAttempCounter, 1);
|
UDS_InitDIDMapRW(DID_NS_ReadFingerPrint, VA_PROGRAM_DATA, &NVM_ProgramBLOCK.FingerPrint_W, 9);
|
UDS_InitDIDMapRW(DID_NS_RepairShopCodeOrTester, VA_PROGRAM_DATA, &NVM_ProgramBLOCK.RepairShopCodeOrTesterSerialNumber, 16);
|
UDS_InitDIDMapRW(DID_NS_ECUProgtammingDate, VA_PROGRAM_DATA, &NVM_ProgramBLOCK.UDS_NS_ProgrammingDate.ProgrammingDate_YY_H, 4);
|
UDS_InitDIDMapRW(DID_NS_WriteFingerPrint, VA_PROGRAM_DATA, &NVM_ProgramBLOCK.FingerPrint_W, 10);
|
|
FblReadProgramBlock(); // load program data.must after ee_init()
|
}
|
|
extern void DID_SetWriteSaveFlag(void)
|
{
|
DID_NeedtoSaveFlag = 1;
|
}
|
|
extern int8_t DID_SaveProgamDataToNvm(void)
|
{
|
int8_t rtn = OP_STATUS_FAIL;
|
|
if (DID_NeedtoSaveFlag == 1)
|
{
|
rtn = FblWriteProgramBlock();
|
}
|
else
|
{
|
rtn = OP_STATUS_OK;
|
}
|
}
|
|
extern void DID_UpdateProgramCnt(void)
|
{
|
NVM_ProgramBLOCK.ProgrammingCounter += 1;
|
DID_NeedtoSaveFlag = 1;
|
}
|
|
extern void DID_UpdateAtpProgramCnt(void)
|
{
|
NVM_ProgramBLOCK.ProgrammingAttempCounter += 1;
|
DID_NeedtoSaveFlag = 1;
|
}
|
|
extern int8_t FblReadProgramBlock(void)
|
{
|
|
uint32_t *p_dest = (uint32_t *)(&NVM_ProgramBLOCK);
|
uint8_t i = 0;
|
int8_t rtn = OP_STATUS_OK;
|
EE_Status retValue1 = EE_WRITE_ERROR;
|
|
for (i = 0; i < (ProgramBlockLenth >> 2); i++)
|
{
|
if (EE_OK != EE_ReadVariable32bits(VA_PROGRAM_DATA + i, (p_dest + i)))
|
{
|
rtn = OP_STATUS_FAIL;
|
break;
|
}
|
}
|
return rtn;
|
}
|
|
extern int8_t FblWriteProgramBlock(void)
|
{
|
uint32_t *p_dest = (uint32_t *)(&NVM_ProgramBLOCK);
|
uint8_t i = 0;
|
int8_t rtn = OP_STATUS_OK;
|
EE_Status retValue1 = EE_WRITE_ERROR;
|
|
for (i = 0; i < (ProgramBlockLenth >> 2); i++)
|
{
|
if (EE_OK != EE_WriteVariable32bits(VA_PROGRAM_DATA + i, *(p_dest + i)))
|
{
|
rtn = OP_STATUS_FAIL;
|
break;
|
}
|
}
|
return rtn;
|
}
|