You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

492 lines
13 KiB

2 months ago
#ifndef _COMMON_DEF_FOR_A2L_
#define _COMMON_DEF_FOR_A2L_
#include <list>
#include <stdio.h>
#include <stdint.h>
2 months ago
enum A2L_DATA_TYPE {
A2L_DATA_TYPE_UBYTE = 0, // 1 byte unsigned integer
A2L_DATA_TYPE_SBYTE, // 1 byte signed integer
A2L_DATA_TYPE_UWORD, // 2 byte unsigned integer
A2L_DATA_TYPE_SWORD, // 2 byte signed integer
A2L_DATA_TYPE_ULONG, // 4 byte unsigned integer
A2L_DATA_TYPE_SLONG, // 4 byte signed integer
A2L_DATA_TYPE_UINT64, // 8 byte unsigned integer
A2L_DATA_TYPE_INT64, // 8 byte signed integer
A2L_DATA_TYPE_FLOAT16_IEEE, // 4 byte(32 bit) floating point IEEE format
A2L_DATA_TYPE_FLOAT32_IEEE, // 4 byte(32 bit) floating point IEEE format
A2L_DATA_TYPE_FLOAT64_IEEE, // 8 byte(64 bit) floating point IEEE format
A2L_DATA_TYPE_FLOAT32_TASKING // 4 byte(32 bit) floating point tasking format
};
2 months ago
enum A2L_BYTE_ORDER_MSB_TYPE {
BYTE_ORDER_MSB_LAST = 0,
BYTE_ORDER_MSB_FIRST = 1
};
enum A2L_ADDRESS_GRANULARITY_TYPE {
ADDRESS_GRANULARITY_BYTE = 1,
ADDRESS_GRANULARITY_WORD = 2,
ADDRESS_GRANULARITY_DWORD = 4
};
enum A2L_OPTIONAL_COMMAND_TYPE {
GET_COMM_MODE_INFO = 0xFB,
GET_ID = 0xFA,
SET_REQUEST = 0xF9,
GET_SEED = 0xF8,
UNLOCK = 0xF7,
SET_MTA = 0xF6,
UPLOAD = 0xF5,
SHORT_UPLOAD = 0xF4,
BUILD_CHECKSUM = 0xF3,
TRANSPORT_LAYER_CMD = 0xF2,
USER_CMD = 0xF1,
DOWNLOAD = 0xF0,
DOWNLOAD_NEXT = 0xEF,
DOWNLOAD_MAX = 0xEE,
SHORT_DOWNLOAD = 0xED,
MODIFY_BITS = 0xEC,
SET_CAL_PAGE = 0xEB,
GET_CAL_PAGE = 0xEA,
GET_PAG_PROCESSOR_INFO = 0xE9,
GET_SEGMENT_INFO = 0xE8,
GET_PAGE_INFO = 0xE7,
SET_SEGMENT_MODE = 0xE6,
GET_SEGMENT_MODE = 0xE5,
COPY_CAL_PAGE = 0xE4,
CLEAR_DAQ_LIST = 0xE3,
SET_DAQ_PTR = 0xE2,
WRITE_DAQ = 0xE1,
SET_DAQ_LIST_MODE = 0xE0,
GET_DAQ_LIST_MODE = 0xDF,
START_STOP_DAQ_LIST = 0xDE,
START_STOP_SYNCH = 0xDD,
GET_DAQ_CLOCK = 0xDC,
READ_DAQ = 0xDB,
GET_DAQ_PROCESSOR_INFO = 0xDA,
GET_DAQ_RESOLUTION_INFO = 0xD9,
GET_DAQ_LIST_INFO = 0xD8,
GET_DAQ_EVENT_INFO = 0xD7,
FREE_DAQ = 0xD6,
ALLOC_DAQ = 0xD5,
ALLOC_ODT = 0xD4,
ALLOC_ODT_ENTRY = 0xD3,
PROGRAM_START = 0xD2,
PROGRAM_CLEAR = 0xD1,
PROGRAM = 0xD0,
PROGRAM_RESET = 0xCF,
GET_PGM_PROCESSOR_INFO = 0xCE,
GET_SECTOR_INFO = 0xCD,
PROGRAM_PREPARE = 0xCC,
PROGRAM_FORMAT = 0xCB,
PROGRAM_NEXT = 0xCA,
PROGRAM_MAX = 0xC9,
PROGRAM_VERIFY = 0xC8,
WRITE_DAQ_MULTIPLE = 0xC7
};
enum A2L_DAQ_MODE_TYPE {
STATIC = 0,
DYNAMIC = 1
};
enum A2L_DAQ_OPTIMISATION_TYPE {
OPTIMISATION_TYPE_DEFAULT = 0,
OPTIMISATION_TYPE_ODT_TYPE_16 = 1,
OPTIMISATION_TYPE_ODT_TYPE_32 = 2,
OPTIMISATION_TYPE_ODT_TYPE_64 = 3,
OPTIMISATION_TYPE_ODT_TYPE_ALIGNMENT = 4,
OPTIMISATION_TYPE_MAX_ENTRY_SIZE = 5
};
enum A2L_DAQ_ADDRESS_EXTENSION {
ADDRESS_EXTENSION_FREE = 0,
ADDRESS_EXTENSION_ODT = 1,
ADDRESS_EXTENSION_DAQ = 3,
};
enum A2L_DAQ_IDENTIFICATION_FIELD_TYPE {
IDENTIFICATION_FIELD_TYPE_ABSOLUTE = 0,
IDENTIFICATION_FIELD_TYPE_RELATIVE_BYTE = 1,
IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD = 2,
IDENTIFICATION_FIELD_TYPE_RELATIVE_WORD_ALIGNED = 3
};
enum A2L_DAQ_GRANULARITY_ODT_ENTRY_SIZE {
GRANULARITY_ODT_ENTRY_SIZE_DAQ_BYTE = 1,
GRANULARITY_ODT_ENTRY_SIZE_DAQ_WORD = 2,
GRANULARITY_ODT_ENTRY_SIZE_DAQ_DWORD = 4,
GRANULARITY_ODT_ENTRY_SIZE_DAQ_DLONG = 8
};
enum A2L_OverloadIndication {
NO_OVERLOAD_INDICATION = 0,
OVERLOAD_INDICATION_PID = 1,
OVERLOAD_INDICATION_EVENT = 2
};
enum A2L_GranularityOdtEntrySizeStim{
GRANULARITY_ODT_ENTRY_SIZE_STIM_BYTE = 1,
GRANULARITY_ODT_ENTRY_SIZE_STIM_WORD = 2,
GRANULARITY_ODT_ENTRY_SIZE_STIM_DWORD = 4,
GRANULARITY_ODT_ENTRY_SIZE_STIM_DLONG = 8
};
enum A2L_TimestampSupportedSize{
NO_TIME_STAMP = 0,
SIZE_BYTE = 1,
SIZE_WORD = 2,
SIZE_DWORD = 4
};
enum A2L_TimestampSupportedUnit {
UNIT_1NS = 0,
UNIT_10NS = 1,
UNIT_100NS = 2,
UNIT_1US = 3,
UNIT_10US = 4,
UNIT_100US = 5,
UNIT_1MS = 6,
UNIT_10MS = 7,
UNIT_100MS = 8,
UNIT_1S = 9
};
enum A2L_DaqListType {
2 months ago
LIST_DAQ = 1,
LIST_STIM = 2,
LIST_DAQ_STIM = 3
};
enum A2L_DaqEventType {
EVENT_DAQ = 1,
EVENT_STIM = 2,
EVENT_DAQ_STIM = 3
};
enum A2L_PGMMode {
PGM_MODE_ABSOLUTE = 1,
PGM_MODE_FUNCTIONAL = 2,
PGM_MODE_ABSOLUTE_AND_FUNCTIONAL = 3
};
enum A2L_CAN_SAMPLE_RATE {
RATE_SINGLE = 1,
RATE_TRIPLE = 3
};
enum A2L_CAN_SYNC_EDGE {
EDGE_SINGLE = 1,
EDGE_DUAL = 2
};
enum A2L_TRANSCEIVER_DELAY_COMPENSATION {
COMPENSATION_OFF = 0,
COMPENSATION_ON = 1
};
enum A2L_TAB_CONVERSION_TYPE {
IDENTICAL = 0,
FORM, //- formula as specified in the Formula property.
LINEAR ,// 20260223 compumethod 일단 추가함 ax + b, coeffs_linear 값 가지는듯
RAT_FUNC, //- fractional rational function f(x) = (axx + bx + c) / (dxx + ex + f), where coefficients 'a' through 'f' are specified properties.
TAB_INTP, // - table with interpolation.
TAB_NOINTP, //- table without interpolation.
TAB_VERB, //- verbal conversion table.
UNKNOWN
};
enum A2L_CHRACTERISTICS_TYPE {
ASCII = 0,
CURVE, // - an array of values with 1 axis.
MAP,// - a table of values with 2 axes.
CUBOID,
CUBE_4,
CUBE_5,
VAL_BLK,
VALUE // - a single value with no axis.
2 months ago
};
struct A2L_CommunicatonModeSupported {
bool m_bIsBlockMode;
2 months ago
bool m_bIsBlockSlaveMode;
bool m_bIsBlockMasterMode;
2 months ago
unsigned char m_cMaster_MAX_BS; // MAX_BS
unsigned char m_cMaster_MIN_ST; // MIN_ST
unsigned char m_cInterleaved; // QUEUE_SIZE
};
2 months ago
struct A2L_XCP_Protocol_Layer {
2 months ago
uint32_t m_nXCPProtocolVersion; /* XCP protocol layer version, current 0x100 */
uint32_t m_nTimeout_T1; /* T1 [ms] */
uint32_t m_nTimeout_T2; /* T2 [ms] */
uint32_t m_nTimeout_T3; /* T3 [ms] */
uint32_t m_nTimeout_T4; /* T4 [ms] */
uint32_t m_nTimeout_T5; /* T5 [ms] */
uint32_t m_nTimeout_T6; /* T6 [ms] */
uint32_t m_nTimeout_T7; /* T7 [ms] */
unsigned char m_cMAX_CTO; /* MAX_CTO */
uint32_t m_nMAX_DTO; /* MAX_DTO */
A2L_BYTE_ORDER_MSB_TYPE m_nByteOrderMSBType;
A2L_ADDRESS_GRANULARITY_TYPE m_nAddressGranularityType;
std::list < unsigned char > m_nOptionalCommandList;
A2L_CommunicatonModeSupported m_stCommunicationModeSupported;
std::string m_strSeedAndKeyExternalFunction; // Name of the Seed&Key function
/*
"COMMUNICATION_MODE_SUPPORTED" taggedunion {
"BLOCK" taggedstruct {
"SLAVE";
"MASTER" struct {
uchar; // MAX_BS
uchar; // MIN_ST
};
};
"INTERLEAVED" uchar; // QUEUE_SIZE
};
"SEED_AND_KEY_EXTERNAL_FUNCTION" char[256]; // Name of the Seed&Key function
};
*/
};
struct A2L_StimBlock {
bool m_bIsUse;
A2L_GranularityOdtEntrySizeStim m_nGranularityOdtEntrySizeStim;
unsigned char m_cMaxOdtEntrySizeStim;
};
struct A2l_DaqTimeStampSupported {
bool m_bIsUse;
uint32_t m_nTimestampTicks;
A2L_TimestampSupportedSize m_nTimestampSupportedSize;
A2L_TimestampSupportedUnit m_nTimestampSupportedUnit;
};
struct A2L_ODTEntry {
unsigned char m_cOdtEntryNumber;
unsigned long m_lElementAddress;
unsigned char m_cExtenstionElementAddress;
unsigned char m_cElementSize;
unsigned char m_cBitOffset;
};
struct A2L_DaqListPredefined {
unsigned char m_cOdtNumber;
std::list < A2L_ODTEntry> m_OdtEntryList;
};
struct A2L_DaqList {
uint32_t m_nDaqListNumber;
2 months ago
A2L_DaqListType m_nDaqListType;
2 months ago
unsigned char m_cMaxOdt;
unsigned char m_cMaxOdtEntries;
unsigned char m_cFirstPid;
uint32_t m_nEventFixed;
std::list < A2L_DaqListPredefined> m_PredefinedList;
};
2 months ago
struct A2L_DaqEvent {
std::string m_strEventChannelName; // max len 101
std::string m_strEventChannelShortName; // max len 9
uint32_t m_nEventChannelNumber;
A2L_DaqEventType m_nDaqEventType;
unsigned char m_cMaxDaqList;
unsigned char m_cTimeCycle;
unsigned char m_cTimeUnit;
unsigned char m_cPriority;
};
struct A2L_XCP_Daq {
2 months ago
A2L_DAQ_MODE_TYPE m_nDaqMode;
uint32_t m_nMaxDaq; /* MAX_DAQ */
uint32_t m_nMaxEventChannel; /* MAX_EVENT_CHANNEL */
unsigned char m_cMinDaq; /* MIN_DAQ */
A2L_DAQ_OPTIMISATION_TYPE m_nOptimisationType;
A2L_DAQ_ADDRESS_EXTENSION m_nAddressExtention;
A2L_DAQ_IDENTIFICATION_FIELD_TYPE m_nIdentificationFieldType;
A2L_DAQ_GRANULARITY_ODT_ENTRY_SIZE m_nGranularityOdtSize;
unsigned char m_cMaxOdtEntrySize; /* MAX_ODT_ENTRY_SIZE_DAQ */
A2L_OverloadIndication m_nOverloadIndication;
A2L_StimBlock m_nStimBlock;
A2l_DaqTimeStampSupported m_nTimeStampSupported;
std::list <A2L_DaqList> m_nDaqList;
2 months ago
std::list <A2L_DaqEvent> m_nDaqEventList;
};
struct A2L_XCP_PAG {
unsigned char m_cMaxSegments;
};
struct A2L_PGMSector {
std::string m_strSectorName;
unsigned char m_cSectorNumber;
unsigned long m_lAddress;
unsigned long m_llength;
unsigned char m_cClearSequenceNumber;
unsigned char m_cProgramSequenceNumber;
unsigned char m_cProgramMethod;
};
struct A2L_XCP_PGM {
A2L_PGMMode m_nPGMMode;
unsigned char m_nMaxSectors;
unsigned char m_nMaxCtoPgm;
A2L_CommunicatonModeSupported m_nCommunicationModeSupported;
std::list <A2L_PGMSector> m_nSectorList;
};
struct A2L_DAQ_LIST_CAN_ID {
uint32_t m_nDaqListNumber;
std::list <unsigned long> m_lFixedDAQCanIDList;
};
2 months ago
2 months ago
struct A2L_EVENT_LIST_CAN_ID {
uint32_t m_EventListNumber;
std::list <unsigned long> m_lFixedDAQCanIDList;
};
struct A2L_XCP_CANFD {
uint32_t m_nMAXDlc; // 8, 12, 16, 20, 24, 32, 48 or 64
unsigned long m_lBaudrate; // BAUDRATE [Hz]
unsigned char m_cSamplePoint;
unsigned char m_cBtlCycles;
unsigned char m_cSJW;
A2L_CAN_SYNC_EDGE m_nSyncEdge;
bool m_bIsMaxDlcRequired; // master to slave frames
unsigned char m_cSecondarySamplePoint;
A2L_TRANSCEIVER_DELAY_COMPENSATION m_nTransceiverDelayCompensation;
};
struct A2L_XCP_ON_CAN {
uint32_t m_nVersion; // xcp on can version
unsigned long m_lCanIdBroadcast; // auto detection CAN-ID
unsigned long m_lCanIDMater; // CMD/STIM CAN-ID
unsigned long m_lCanIDSlave; // RES/ERR/EV/SERV/DAQ CAN-ID
unsigned long m_lBaudrate; // Baudrate in Hz
unsigned char m_cSamplePoint; // Sample point in % of bit time
A2L_CAN_SAMPLE_RATE m_nSampleRate;
unsigned char m_cBtlCycles; // slots per bit time
unsigned char m_cSJW;
A2L_CAN_SYNC_EDGE m_nSyncEdge;
bool m_bIsMaxDlcRequired; // master to slave frames
std::list <A2L_DAQ_LIST_CAN_ID> m_DaqList;
std::list <A2L_EVENT_LIST_CAN_ID> m_EventList;
A2L_XCP_CANFD m_stCANFD;
};
struct A2L_IFDATAs_XCP {
uint32_t m_nXCPProtocolVersion;
A2L_XCP_Protocol_Layer m_stProtocolLayer;;
A2L_XCP_Daq m_stDAQ;
A2L_XCP_PAG m_stPAG;
A2L_XCP_PGM m_stPGM;
A2L_XCP_ON_CAN m_stXCPCAN;
};
// 20260223 unit 추후에
struct A2L_UNIT {
std::string m_strName;
std::string m_strDescription;
std::string m_strUnit;
};
struct A2L_UNITs {
std::list <A2L_UNIT> m_UnitList;
};
struct COMPU_METHOD {
std::string m_strName;
std::string m_strDescription;
A2L_TAB_CONVERSION_TYPE m_nConversionType;
std::string m_strFormat;
std::string m_strUnit;
std::list <double> m_Coeffs;
};
struct COMPU_METHODs {
std::list < COMPU_METHOD> m_CompuMethodList;
2 months ago
};
2 months ago
struct A2L_MEASUREMENT { // https://guide.intrepidcs.com/docs/asap2/a2l-item-area/measurements-tab/
std::string m_strName;
std::string m_strDescription;
A2L_DATA_TYPE m_cDataType;
std::string m_strCompuMothod;
unsigned char m_cResolution; // Smallest possible change in bits. (0 to 255)
unsigned char m_cAccuracy; // Possible variation from exact value in %.
int32_t m_nLowerLimit;
int32_t m_nUpperLimit;
int64_t m_nBitmask;
std::string m_strFormat; // Display formatting applied to numerical values. The syntax for this field is: %Length.Layout, Length = overall length, Layout = number of decimal places
std::string m_strSymbolLink;
int32_t m_nSymbolOffset;
int32_t m_nECUAddress;
std::list < int32_t > m_MatrixDimSizeList;
};
struct A2L_MEASUREMENTs {
std::list <A2L_MEASUREMENT> m_MeasurementList;
};
struct A2L_CHARACTERISTIC { // https://guide.intrepidcs.com/docs/asap2/a2l-item-area/characteristics-tab/
std::string m_strName;
std::string m_strDescription;
A2L_CHRACTERISTICS_TYPE m_cType;
int32_t m_nAddress;
std::string m_strRecordLayoutName;
int32_t m_nMaxDiff;
std::string m_strCompuMothod;
std::string m_strFormat; // Display formatting applied to numerical values. The syntax for this field is: %Length.Layout, Length = overall length, Layout = number of decimal places
int32_t m_nLowerLimit; // smallvalues, identify, bigvalue, linear, verbal, range byte
int32_t m_nUpperLimit;
int32_t m_nLowerLimitEx;
int32_t m_nUpperLimitEx;
std::string m_strSymbolLink;
int32_t m_nSymbolOffset;
int32_t m_nLength; // noral is 1, matix dim is other value
};
struct A2L_CHARACTERISTICs {
std::list <A2L_CHARACTERISTIC> m_CharacteristicList;
};
struct A2L_RECORDLAYOUT {
std::string m_strName;
int32_t m_nPosition;
A2L_DATA_TYPE m_nDataType;
std::string m_strIndexMode;
std::string m_strAddressType;
};
struct A2L_RECORDLAYOUTs {
std::list <A2L_RECORDLAYOUT> m_RecordLayoutList;
};
struct A2L_Data {
A2L_IFDATAs_XCP m_stIFDATAs;
A2L_UNITs m_stUnits;
COMPU_METHODs m_stCompuMethods;
A2L_MEASUREMENTs m_stMeasurements;
A2L_CHARACTERISTICs m_stCharacteristics;
A2L_RECORDLAYOUTs m_stRecordLayouts;
};
2 months ago
#endif