2025-04-26 16:03:23 +08:00

566 lines
16 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @copyright: KUWE technologies Co.,Ltd. 2013-2015. all rights reserved.
* @file: calibration.h
* @brief: This file contains all the functions prototypes for the calibration.
* @author:
* @version: V1.0.0
* @date: 2016-03-31
* @history:
* 1.
* author:
* version:
* date:
* modification:
*/
#include "error.h"
#include "calibration.h"
#include "cpu.h"
#include "nvm.h"
#include "key_app.h"
//110078209
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f182[SYSDID_F182_CK_LEN] @SYSDID_F182_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f182[SYSDID_F182_CK_LEN] __attribute__((at(SYSDID_F182_ADDR)))=
//const u8 g_sysdid_f182[SYSDID_F182_CK_LEN] __attribute__((at(0x00015BCC)))=
#endif
{
0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x30,0x30,0x37,0x38,0x32,0x30,0x39,0x00,
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f187[SYSDID_F187_CK_LEN] @SYSDID_F187_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f187[SYSDID_F187_CK_LEN] __attribute__((at(SYSDID_F187_ADDR)))=
#endif
{
0x30,0x31,0x31,0x30,0x30,0x37,0x38,0x32,0x30,0x37,0x2fu,0x30,0x30,0x31,0x00
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f188[SYSDID_F188_CK_LEN] @SYSDID_F188_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f188[SYSDID_F188_CK_LEN] __attribute__((at(SYSDID_F188_ADDR)))=
#endif
{
0x30,0x31,0x31,0x30,0x30,0x37,0x38,0x32,0x30,0x38,0x2fu,0x30,0x30,0x31,0x00
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f18a[SYSDID_F18A_CK_LEN] @SYSDID_F18A_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f18a[SYSDID_F18A_CK_LEN] __attribute__((at(SYSDID_F18A_ADDR)))=
#endif
{
0x35,0x30,0x32,0x32,0x30,0x38,0x00,
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f18b[SYSDID_F18B_CK_LEN] @SYSDID_F18B_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f18b[SYSDID_F18B_CK_LEN] __attribute__((at(SYSDID_F18B_ADDR)))=
#endif
{
0x20,0x21,0x05,0x08,0x00,
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f18c[SYSDID_F18C_CK_LEN] @SYSDID_F18C_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f18c[SYSDID_F18C_CK_LEN] __attribute__((at(SYSDID_F18C_ADDR)))=
#endif
{
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,
};
//656106800A 110008086 0110008086/001
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f191[SYSDID_F191_CK_LEN] @SYSDID_F191_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f191[SYSDID_F191_CK_LEN] __attribute__((at(SYSDID_F191_ADDR)))=
#endif
{
0x30,0x31,0x31,0x30,0x30,0x30,0x38,0x30,0x38,0x36,0x2fu,0x30,0x30,0x01,0x00
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f192[SYSDID_F192_CK_LEN] @SYSDID_F192_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f192[SYSDID_F192_CK_LEN] __attribute__((at(SYSDID_F192_ADDR)))=
#endif
{
'U','K','E','A','-','7','7','J','S','W','0','4','0','2','_','2','5','0','2','2','8','_','H','1',0x00u
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f193[SYSDID_F193_CK_LEN] @SYSDID_F193_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f193[SYSDID_F193_CK_LEN] __attribute__((at(SYSDID_F193_ADDR)))=
#endif
{
#if 0
//'V','1','.','0','-',0x32,0x30,0x32,0x31,0x30,0x34,0x31,0x34,0x30,0x00,
0x56u,0x31u,0x2eu,0x30u,0x2du,0x32u,0x30u,0x32u,0x31u,0x30u,0x34u,0x31u,0x34u,0x30u,0x00u
#else
1,23,4,14,0,0,
#endif
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f194[SYSDID_F194_CK_LEN] @SYSDID_F194_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f194[SYSDID_F194_CK_LEN] __attribute__((at(SYSDID_F194_ADDR)))=
#endif
{
//0x4Du,0x54u,0x00u,0x11u,0x99u,0x1Eu,0x00u,0x00u,0x02u,0x6B //最后一个字节校验码,方式是全字节累加
0x4Du,0x54u,0x00u,0x10u,0xADu,0x1Eu,0x00u,0x00u,0x01u,0x7Du //最后一个字节校验码,方式是全字节累加--UKEA-C的编码
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f195[SYSDID_F195_CK_LEN] @SYSDID_F195_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f195[SYSDID_F195_CK_LEN] __attribute__((at(SYSDID_F195_ADDR)))=
#endif
{
0x9Cu,0x42u,0x19u,0x02u,0x1Cu,0x00u,0x00u,
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f1f1[SYSDID_F1F1_CK_LEN] @SYSDID_F1F1_ADDR =
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f1f1[SYSDID_F1F1_CK_LEN] __attribute__((at(SYSDID_F1F1_ADDR)))=
#endif
{
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x00,
};
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f19e[SYSDID_F19E_CK_LEN] @SYSDID_F19E_ADDR=
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_sysdid_f19e[SYSDID_F19E_CK_LEN] __attribute__((at(SYSDID_F19E_ADDR)))=
#endif
{
0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x30,0x30,0x37,0x38,0x32,0x31,0x31,0x00,
};
#if 1
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 eeprom_flag_first_reset[4] @(EEPROM_FLAG_FIRST_ADDR) ;//= EEPROM_FLAG_NOT_FIRST_RESET;
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 eeprom_flag_first_reset[4] __attribute__((at(EEPROM_FLAG_FIRST_ADDR)))= EEPROM_FLAG_NOT_FIRST_RESET;
#endif
#endif
//當節點丟失後收到N幀認為清除DTC
#ifdef __ICCARM__
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_dtc_loss_recover_times[DTC_LOSS_RECOVER_TIMES_CK_LEN] @DTC_LOSS_RECOVER_TIMES_ADDR=
#else
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_dtc_loss_recover_times[DTC_LOSS_RECOVER_TIMES_CK_LEN] __attribute__((at(DTC_LOSS_RECOVER_TIMES_ADDR)))=
#endif
{
3, //第一个参数是表示节点丢失后要恢复的满足的次数3次
10, //第二个参数是checksum错误和恢复的总计数
10, //第三个参数是rolling count错误的总计数
3, //第四个参数是rollingcount相差的个数
0x00
};
//各 DATA ID
#if 0
const u16 g_data_id_cfg[E2E_DATA_ID_U16_CK_LEN] @E2E_DATA_ID_ADDR =
{
CAN_TX_DATAID_SWS_LEFT,
CAN_TX_DATAID_SWS_RIGHT,
CAN_RX_DATAID_BCM_STA,
CAN_RX_DATAID_ADAS_HWA,
0,
};
//當節點丟失後收到N幀認為清除DTC
const u16 g_key_cfg_times1[KEY_TIME_CFG_U16_CK_LEN] @KEY_TIME_CFG_ADDR=
{
0u,//KEY_SCAN_DITHERING_TIME,//第一个参数是数字按键的消抖时间单位是和key app调用周期相关
0u,//KEY_SCAN_STUCK_TIMEOUT,//第二个参数是数字按键的消卡滞时间单位是和key app调用周期相关
0u,//KEY_SCAN_FAULT_TIMEOUT, //故障检测
0u,//ADC_KEY_TIME_DEBOUNCE,//第三个参数是ad按键的消抖时间单位是和key adc mid 调用周期相关
0u,//ADC_KEY_TIME_STICKPRESS,//第四个参数是ad按键的卡滞时间单位是和key adc mid调用周期相关
0u,//ADC_KEY_TIME_FAULT, //故障检测
0u,//ADC_ASIL_KEY_TIME_DEBOUNCE, //预留给ASILA按键
0u,//ADC_ASIL_KEY_TIME_STUCK, //预留给ASILA按键
0u,//ADC_ASIL_KEY_TIME_FAULT, //预留给ASILA按键
0u
};
#endif
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_cfg_supply_info[CFG_SUPPLY_INFO_CK_LEN] @CFG_SUPPLY_INFO_ADDR= //
{
1u, //支持level 写入 01a0
0u
};
MEMORY_MAP_FLAG_NO_OPTIME const u8 g_cfg_speed_limit[CFG_SPEED_LIMIT_CK_LEN] @CFG_SPEED_LIMIT_ADDR=
{
0u,//APP_COM_VHSPEED_MIN,
0u,
};
const did_attribute_t did_attribute_table[DID_ATTRIBUTE_TABLE_LENGTH] =
{
{0xF180u, DID_TYPE_CONST, READ_ONLY, SYSDID_F180_ADDR, SYSDID_F180_CK_LEN},
{0xF181u, DID_TYPE_CONST, READ_ONLY, SYSDID_F181_ADDR, SYSDID_F181_CK_LEN},
{0xF1F2u, DID_TYPE_CONST, READ_ONLY, SYSDID_F1F2_ADDR, SYSDID_F1F2_CK_LEN},
{0xF182u, DID_TYPE_CONST, READ_ONLY, SYSDID_F182_ADDR, SYSDID_F182_CK_LEN},
{0xF187u, DID_TYPE_CONST, READ_ONLY, SYSDID_F187_ADDR, SYSDID_F187_CK_LEN},
{0xF188u, DID_TYPE_CONST, READ_ONLY, SYSDID_F188_ADDR, SYSDID_F188_CK_LEN},
{0xF18Au, DID_TYPE_CONST, READ_ONLY, SYSDID_F18A_ADDR, SYSDID_F18A_CK_LEN},
{0xF18Bu, DID_TYPE_CONST, READ_ONLY, SYSDID_F18B_ADDR, SYSDID_F18B_CK_LEN},
{0xF18Cu, DID_TYPE_VOLATILE, READ_AND_WRITE, SYSDID_ECU_SN_ADDR, SYSDID_ECU_SN_CK_LEN},
{0xF191u, DID_TYPE_CONST, READ_ONLY, SYSDID_F191_ADDR, SYSDID_F191_CK_LEN},
{0xF192u, DID_TYPE_CONST, READ_ONLY, SYSDID_F192_ADDR, SYSDID_F192_CK_LEN},
{0xF193u, DID_TYPE_CONST, READ_ONLY, SYSDID_F193_ADDR, SYSDID_F193_CK_LEN},
{0xF194u, DID_TYPE_CONST, READ_ONLY, SYSDID_F194_ADDR, SYSDID_F194_CK_LEN},
{0xF195u, DID_TYPE_CONST, READ_ONLY, SYSDID_F195_ADDR, SYSDID_F195_CK_LEN}, //(uint32_t)&g_sysdid_f195[0]
{0xF1F1u, DID_TYPE_CONST, READ_ONLY, SYSDID_F1F1_ADDR, SYSDID_F1F1_CK_LEN},
{0xF19eu, DID_TYPE_CONST, READ_ONLY, SYSDID_F19E_ADDR, SYSDID_F19E_CK_LEN},
{0xF1A0u, DID_TYPE_VOLATILE, READ_AND_WRITE, SYSDID_VEHICLE_CONFIG_ADDR, SYSDID_VEHICLE_CONFIG_CK_LEN},
{0x01A0u, DID_TYPE_VOLATILE, READ_AND_WRITE, SYSDID_MANUFAC_LIFECYCLE_COUNT_ADDR, SYSDID_MANUFAC_LIFECYCLE_COUNT_CK_LEN},
{0x01B0u, DID_TYPE_VOLATILE, WRITE_ONLY, SYSDID_SECURITY_KEY_ADDR, SYSDID_SECURITY_KEY_CK_LEN},
{0xF190u, DID_TYPE_VOLATILE, READ_AND_WRITE, SYSDID_F190_VIN_ADDR, SYSDID_F190_VIN_CK_LEN},
{0xF198u, DID_TYPE_VOLATILE, READ_ONLY, SYSDID_F198_REPAIR_SN_ADDR, SYSDID_F198_REPAIR_SN_CK_LEN},
{0xF199u, DID_TYPE_VOLATILE, READ_ONLY, SYSDID_F199_DATE_ADDR, SYSDID_F199_DATE_CK_LEN},
{0xF100u, DID_TYPE_VOLATILE, READ_ONLY, SYSDID_ATTEMP_ADDR, SYSDID_ATTEMP_LEN+SYSDID_ATTEMP_MAX_LEN}
};
static uint8_t get_did_headler(did_t did)
{
uint8_t i;
u8 l_result =0xffu;
for(i = 0; i < DID_ATTRIBUTE_TABLE_LENGTH; i++)
{
if(did == did_attribute_table[i].id)
{
l_result = i;
break;
}
}
return l_result;
}
u8 cal_read_did(did_t did, uint8_t *p_buf, uint8_t length)
{
uint8_t headler;
uint8_t opt_length;
u8 l_result = TRUE;
do
{
headler = get_did_headler(did) ;
if( (headler == 0xffu) || (did_attribute_table[headler].rw == WRITE_ONLY) )
{
l_result = FALSE;
break;
}
if(length < did_attribute_table[headler].length)
{
opt_length = length;
}
else
{
opt_length = did_attribute_table[headler].length;
}
CAL_ENTER_CRITICAL();
#if 0
for(i = 0; i < opt_length; i++)
{
p_buf[i] = did_attribute_table[headler].addr[i];
}
#endif
if(did_attribute_table[headler].type == DID_TYPE_CONST)
{
(void)nvm_read_bytes(NVM_TYPE_FLASH,did_attribute_table[headler].phy_addr,p_buf,(u16)opt_length);
}
else
{
(void)nvm_read_bytes(NVM_TYPE_EEPROM,did_attribute_table[headler].phy_addr,p_buf,(u16)opt_length);
}
CAL_EXIT_CRITICAL();
}while(0);
return l_result;
}
volatile uint16_t test1;
u8 cal_write_did(did_t did, const uint8_t *p_buf, uint8_t length)
{
uint8_t l_result = FALSE;
uint8_t headler;
uint8_t opt_length;
do
{
headler = get_did_headler(did) ;
if( (headler == 0xffu) || (did_attribute_table[headler].rw == READ_ONLY))
{
l_result = FALSE;
break;
}
if(length < did_attribute_table[headler].length)
{
opt_length = length;
}
else
{
opt_length = did_attribute_table[headler].length;
}
CAL_ENTER_CRITICAL();
#if 0
for(i = 0; i < opt_length; i++)
{
did_attribute_table[headler].addr[i] = p_buf[i];
}
#endif
if(did_attribute_table[headler].type == DID_TYPE_CONST)
{
l_result = TRUE;
//(void)nvm_write_bytes(NVM_TYPE_FLASH,did_attribute_table[headler].phy_addr,p_buf,opt_length);
}
else
{
l_result = nvm_write_bytes(NVM_TYPE_EEPROM,did_attribute_table[headler].phy_addr,(u8*)&p_buf[0],(u16)opt_length); /*PRQA S 0311*/
if((u8)ERR_OK == l_result)
{
l_result = TRUE;
}
}
CAL_EXIT_CRITICAL();
}while(0);
return l_result;
}
void cal_did_init(void)
{
uint8_t i;
//u8 j;
//u16_swap_t l_buf[8];
//u8 l_data[64];
for(i = 0; i < DID_ATTRIBUTE_TABLE_LENGTH; i++)
{
#ifdef FUN_WDT_ENABLE
wdog_task();
#endif
if(did_attribute_table[ i ].type == DID_TYPE_CONST)
{
continue;
}
CAL_ENTER_CRITICAL();
CAL_EXIT_CRITICAL();
}
//cal_did_test();
}
//static u8 g_cal_refresh_flag = 0u; /*PRQA S 3207*/
/*讀取數據之後的更新*/
void cal_did_read_refresh(void)
{
#if 0
u8 j;
u16_swap_t l_buf[16]={0};
if(g_cal_refresh_flag ==0)
{
g_cal_refresh_flag = 1;
#ifdef FUN_WDT_ENABLE
wdog_task();
#endif
#if 1
/*F180*/
for(j=0;j<8;j++)
{
#ifdef CAL_USE_NVM
(void)eeprom_get_u16((eeprom_addr_t)(EEPROM_DATA_BASE_ADDR+EEPROM_F180_ADDR+2*j), &l_buf[j].w);
#endif
volatile_did.boot_soft_id[2*j] = l_buf[j].w >> 8;
volatile_did.boot_soft_id[2*j+1] = l_buf[j].w;
}
#endif
#if 1
/*F187*/
for(j=0;j<5;j++)
{
l_buf[j].w = (u16)const_did.geely_spare_part_number[2*j] << 8 | const_did.geely_spare_part_number[2*j+1] ;
#ifdef CAL_USE_NVM
(void)eeprom_set_u16((eeprom_addr_t)(EEPROM_DATA_BASE_ADDR+EEPROM_F187_ADDR+2*j), l_buf[j].w);
#endif
}
#endif
#if 1
/*F189*/
for(j=0;j<8;j++)
{
l_buf[j].w = (u16)const_did.ecu_software_version_number[2*j] << 8 | const_did.ecu_software_version_number[2*j+1] ;
#ifdef CAL_USE_NVM
(void)eeprom_set_u16((eeprom_addr_t)(EEPROM_DATA_BASE_ADDR+EEPROM_F189_ADDR+2*j), l_buf[j].w);
#endif
}
#endif
#if 1
/*F193*/
for(j=0;j<8;j++)
{
l_buf[j].w = (u16)const_did.system_supplier_ecu_hardware_version_number[2*j] << 8 | const_did.system_supplier_ecu_hardware_version_number[2*j+1] ;
#ifdef CAL_USE_NVM
(void)eeprom_set_u16((eeprom_addr_t)(EEPROM_DATA_BASE_ADDR+EEPROM_F193_ADDR+2*j), l_buf[j].w);
#endif
}
#endif
}
#endif
}
/** 判斷數組的值是否都為 value;
* @param Pdata內容
* @param
* @param
* @return
*/
u8 buf_judge_value_is_same(uc8 *pdata,u8 len ,u8 value)
{
u8 l_result = TRUE;
u8 i;
for(i=0;i<len;i++)
{
if( pdata[i] != value )
{
l_result = FALSE;
break;
}
}
return l_result;
}
#if 0
//u8 *g_cal_paddr;
volatile u8 g_cal_w_buf[50];
volatile u8 g_cal_r_buf[50];
void cal_did_test(void)
{
//g_cal_paddr = (u8*)&g_sysdid_f195[0];
cal_read_did(0xF195u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF180u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF100u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF181u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF1F2u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF182u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF187u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF188u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF18au,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF18bu,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF18cu,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF191u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF192u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF193u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF194u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF195u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF1f1u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF19eu,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF190u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF190u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF198u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF199u,(u8*)&g_cal_r_buf[0],50);
cal_read_did(0xF195u,(u8*)&g_cal_w_buf[0],50);
cal_write_did(0xF190u,(u8*)&g_cal_w_buf[0],50);
cal_read_did(0xF190u,(u8*)&g_cal_r_buf[0],50);
//(void)nvm_read_bytes(NVM_TYPE_FLASH,(u32)&g_cal_paddr,&g_cal_r_buf[0],SYSDID_F195_CK_LEN);
//(void)nvm_read_bytes(NVM_TYPE_FLASH,(u32)&g_sysdid_f195[0],&g_cal_w_buf[0],SYSDID_F195_CK_LEN);
}
#endif
#ifdef CALIBRATION_DISP_ADDR_DEBUG
typedef struct
{
u16 addr;
u8 len;
}cal_disp_s;
MEMORY_MAP_FLAG_NO_OPTIME const cal_disp_s g_cal_eeprom_addr[] =
{
{SYSDID_ATTEMP_ADDR,SYSDID_ATTEMP_LEN},
{SYSDID_ATTEMP_MAX_ADDR,SYSDID_ATTEMP_MAX_LEN},
{SYSDID_ATTEMP_CRC_ADDR,SYSDID_ATTEMP_CK_LEN},
{SYSDID_ECU_SN_ADDR,SYSDID_ECU_SN_CK_LEN},
{SYSDID_F190_VIN_ADDR,SYSDID_F190_VIN_CK_LEN},
{SYSDID_F198_REPAIR_SN_ADDR,SYSDID_F198_REPAIR_SN_CK_LEN},
{SYSDID_F199_DATE_ADDR,SYSDID_F199_DATE_CK_LEN},
{SYSDID_MANUFAC_LIFECYCLE_COUNT_ADDR,SYSDID_MANUFAC_LIFECYCLE_COUNT_CK_LEN},
{SYSDID_SECURITY_KEY_ADDR,SYSDID_SECURITY_KEY_CK_LEN},
{SYSDID_SA_LOCKTIMER_TIME_ADDR,SYSDID_SA_LOCKTIMER_TIME_LEN},
{SYSDID_SA_LOCKTIMER_FLAG_ADDR,SYSDID_SA_LOCKTIMER_FLAG_LEN},
{SYSDID_SA_LV1_ATTEMPT_ADDR,SYSDID_SA_LV1_ATTEMPT_LEN},
{SYSDID_SA_LC_CRC_ADDR,SYSDID_SA_LOCKTIMER_CK_LEN},
{SYSDID_SU_LOCKTIMER_TIME_ADDR,SYSDID_SU_LOCKTIMER_TIME_LEN},
{SYSDID_SU_LOCKTIMER_FLAG_ADDR,SYSDID_SU_LOCKTIMER_FLAG_LEN},
{SYSDID_SU_LV1_ATTEMPT_ADDR,SYSDID_SU_LV1_ATTEMPT_LEN},
{SYSDID_SU_LC_CRC_ADDR,SYSDID_SU_LOCKTIMER_CK_LEN},
{SYSDID_VEHICLE_CONFIG_ADDR,SYSDID_VEHICLE_CONFIG_CK_LEN},
{SYSDID_SW_VERSION_FOR_SG_ADDR,SYSDID_SW_VERSION_FOR_SG_CK_LEN},
{SYSDID_RES1_ADDR,SYSDID_RES1_CK_LEN},
{SYSDID_RES2_ADDR,SYSDID_RES2_CK_LEN},
{SYSDID_RES3_ADDR,SYSDID_RES3_CK_LEN},
{SYSDID_RES4_ADDR,SYSDID_RES4_CK_LEN},
{SYSDID_RES5_ADDR,SYSDID_RES5_CK_LEN},
{SYSDID_RES6_ADDR,SYSDID_RES6_CK_LEN},
{SYSDID_SA_TOTAL_TIMEOUT_ADDR,SYSDID_SA_TOTAL_TIMEOUT_CK_LEN},
{SYSDID_SU_TOTAL_TIMEOUT_ADDR,SYSDID_SU_TOTAL_TIMEOUT_CK_LEN},
};
#endif
/*PRQA S 1503*/