/begin A2ML
  block "IF_DATA" taggedunion if_data {
    "ASAP1B_CCP" taggedstruct {
      (block "SOURCE" struct {
	char [101];                  // Name of the DAQ list (data acquisition list), measurement source 
	int;                         // Period definition : Basic scaling unit in CSE 
	long;                        // Period definition : Rate in Scaling Units 
	taggedstruct {
	  "DISPLAY_IDENTIFIER" char[32]; // display identifier of DAQ list
	  block "QP_BLOB" struct {
	    uint;                      // Number of the DAQ list 0..n 
	    taggedstruct {
	      "LENGTH" uint;         // Length of the DAQ list, maximum number of the useable ODTs 
	      "CAN_ID_VARIABLE";     // CAN-Message-ID is variable 
	      "CAN_ID_FIXED" ulong;  // CAN-Message-ID of the DTOs if fixed 
	      ("RASTER" uchar )*;    // Supported CCP Event Channel Names of this DAQ List 
	      ("EXCLUSIVE" int )*;   // Exclusion of other DAQ-Lists 
	      "REDUCTION_ALLOWED";   // Data reduction possible 
	      "FIRST_PID" uchar;     // First Packet ID (PID) of this DAQ List 
	    };
	  };
        };  // optional parameters for this DAQ list  
      })*; // DAQ list description
      (block "RASTER" struct { 
        char [101];                    // CCP Event Channel Name 
        char [9];                      // Short Display Name of the Event Channel Name 
        uchar;                         // Event Channel No., used for CCP START_STOP) 
        int;                           // Period definition :  basic scaling unit in CSE as defined in ASAP1b 
        long;                          // ECU sample rate of the event channel 
        taggedstruct { 
          ("EXCLUSIVE" uchar )*;     // Exclusion of other CCP Event Channels 
        }; // optional parameters
      })*; // Event channel description
      (block "EVENT_GROUP" struct { 
        char [101];                    // Event group name 
        char [9];                      // Short name for the event group 
        taggedstruct { 
          ("RASTER" uchar )*;          // event channel number
        };// list of all event channels beloging to the group
      })*; // Group several event channels to form one combined event
      block "SEED_KEY" struct { 
        char[256];                     // Name of the Seed&Key DLL for CAL Priviledge, including file-Extension without path 
        char[256];                     // Name of the Seed&Key DLL for DAQ Priviledge, including file-Extension without path 
        char[256];                     // Name of the Seed&Key DLL for PGM Priviledge, including file-Extension without path 
      }; // Description of the authentification process
      block "CHECKSUM" struct { 
        char[256];                     // Name of the Checksum DLL representing the ECU Algorithm, including file-Extension without path 
      }; // Description of the checksum calculation process
      block "TP_BLOB" struct {
        uint;                          // CCP Version, High Byte: Version, Low Byte : subversion (dec.) 
        uint;                          // Blob-Version, High Byte: Version, Low Byte : subversion (dec.) 
        ulong;                         // CAN-Message ID for 'Transmitting to ECU (CRM)' 
        ulong;                         // CAN-Message ID for 'Receiving from ECU (DTM)' 
        uint;                          // Logical CCP-Address of the (station address) 
        uint;                          // Byte order of Multiple-byte-items 1 = high Byte first, 2 = low byte first 
        taggedstruct {
          block "CAN_PARAM" struct { 
            uint;                      // Quartz freq. of the elec. control unit  
            uchar;                     // BTR0: Bit timing register 
            uchar;                     // BTR1: Bit timing register 
          }; // CAN parameters
          "BAUDRATE" ulong;          // Baud rate in Hz. 
          "SAMPLE_POINT" uchar;      // sampling point of time in percent 
          "SAMPLE_RATE" uchar;       // number of samples per Bit (1 oder 3) 
          "BTL_CYCLES" uchar;        // number of BTL-cycles 
          "SJW" uchar;               // SJW-parameter in BTL-cycles 
          "SYNC_EDGE" enum { 
            "SINGLE" = 0,            
            "DUAL" = 1               
          }; // Synchronisation (SINGLE: on falling edge only, DUAL: on falling and rising edge)
          "DAQ_MODE" enum {          
            "ALTERNATING" = 0,       
            "BURST" = 1              
          };   // mode of cylcic data acquisition (ALTERNATING: ECU is sending one ODT per cycle, BURST: ECU is sending a complete DAQ)
          "BYTES_ONLY";              // ECU supports max. elements of one Byte size otherwise ECU supports different dataTypes 
          "RESUME_SUPPORTED";        // ECU supports the Resume function 
          "STORE_SUPPORTED";         // ECU supports the Store function 
          "CONSISTENCY" enum { 
            "DAQ" = 0,
            "ODT" = 1
          }; // guaranteed consistency (DAQ: consistency of a complete DAQ is guaranteed, ODT: consistency of a complete ODT is guaranteed)
          "ADDRESS_EXTENSION" enum { 
            "DAQ" = 0,
            "ODT" = 1
          }; // ECU supported address extension (DAQ: only one address extension within a DAQ, ODT: only one address extension within an ODT)
          block "CHECKSUM_PARAM" struct { 
            uint;                      // checksum calculation procedure standard types not yet defined, if greater of equal 1000 : manufacturer specific  
            ulong;                     // Maximum block length used by an ASAP1a-CCP command, for checksum calculation procedure  
            taggedstruct { 
              "CHECKSUM_CALCULATION" enum { 
                "ACTIVE_PAGE" = 0, 
                "BIT_OR_WITH_OPT_PAGE" = 1 
              }; // checksum calculation method
            }; // optional
          }; // checksum parameters 
          (block "DEFINED_PAGES" struct {
            uint;                    // logical number of the memory page (1,2,..) 
            char[101];               // name of the memory page 
            uint;                    // adress-Extension of the memory page (only Low Byte significant) 
            ulong;                   // base address of the memory page 
            ulong;                   // length of the memory page in Bytes 
            taggedstruct { 
              "RAM";                 // memory page in RAM 
              "ROM";                 // memory page in ROM 
              "FLASH";               // memory page in FLASH 
              "EEPROM";              // memory page in EEPROM 
              "RAM_INIT_BY_ECU";     // memory page is initialised by ECU start-up 
              "RAM_INIT_BY_TOOL";    // RAM- memory page is initialised by the MCS 
              "AUTO_FLASH_BACK";     // RAM memory page is automatically flashed back 
              "FLASH_BACK";          // feature available to flash back the RAM memory page 
              "DEFAULT";             // memory page is standard (fallback mode) 
            }; // optional parameters 
          })*; // memory page description 
          ( "OPTIONAL_CMD"  uint )*; // CCP-Code of the optional command available 
        }; // optional parameters 
      };
      ("ADDR_MAPPING" struct {
        ulong;  	 // base address of the memory segment to be mapped
        ulong;  	 // address to which the base address is to be mapped
        ulong;  	 // length of the segment to be mapped
      })*; // address mapping for memory segment
      "DP_BLOB" struct {              
        uint;                          // address extension of the calibration data (only low byte significant) 
        ulong;                         // base address of the calibration data 
        ulong;                         // number of Bytes belonging to the calibration data  
      };  // address information for calibration objects and memory segments
      block "KP_BLOB" struct {              
        uint;                          // address extension of the online data (only Low Byte significant) 
        ulong;                         // base address of the online data   
        ulong;                         // number of bytes belonging to the online data (1,2 or 4) 
        taggedstruct {                 // event channel initialization values 
          ("RASTER" uchar )*;          // event channel number
        }; 
      }; // address information for measure objects (online data)
    };
  };
/end A2ML
