/********************************************************************/
/*                                                                  */
/*   ASAP2-Meta-Beschreibung der BOSCH-spezifischen Informationen   */
/*                                                                  */
/*   - fuer ASAP2 Version 1.0 (kompatibel zum "alten" Konverter)    */
/*                                                                  */
/********************************************************************/

/begin A2ML

/* ---------------------------------------------------------------- */
/*    allgemeine interface-spezifische Parameter                    */
/* ---------------------------------------------------------------- */

struct dtab_par {
  long;       /* Adresse der Displaytabelle */
  int;        /* Laenge der Displaytabelle  */
  long;       /* DPR-Adresse                */
  long;       /* Trigger-Id                 */
  char[40];   /* Name                       */
  int;        /* Ausgaberaster              */
};

enum mcini_mode {
  "MASSE"  = 0,    /* Massetastung */
  "KW2000" = 1     /* Keyword 2000 */
};

taggedstruct appl_par_mcmess {         /* Parameter fuer McMess-Protokoll  */
  "KOMKEN"           uint;             /* Kommunikationskennung 1..255     */
  "MCTGT"            long;             /* Targetadresse im Steuerger„t     */
  "MCINI"            enum mcini_mode;  /* Reizungstyp                      */
  "ZYLZA"            uint;             /* Zylinderanzahl                   */
  "ZYLZNAME"         char[20];         /* Name der Zylinderz„hlerramzelle  */
  "ZYLREI"           char[30];         /* Zuendreihenfolge: z.B. "1,3,4,2" */
  "XRAMOF"           uint;             /* EXRAM-Offset: 0..255             */
  "BLKZ_W"           uint;             /* Byteanzahl im Block winkelsynch. */
  "BLKZ_Z"           uint;             /* Byteanzahl im Block zeitsynch.   */
  "BAUD1"            char[10];         /* Baudratenwert 1: z.B. "$14,1"    */
  "BAUD2"            char[10];         /* Baudratenwert 2:                 */
  "BAUD3"            char[10];         /* Baudratenwert 3:                 */
  "BAUD4"            char[10];         /* Baudratenwert 4:                 */
  "BAUD5"            char[10];         /* Baudratenwert 5:                 */
  "BAUD6"            char[10];         /* Baudratenwert 6:                 */
  "BAUD7"            char[10];         /* Baudratenwert 7:                 */
  "BAUD8"            char[10];         /* Baudratenwert 8:                 */
  "BAUD9"            char[10];         /* Baudratenwert 9:                 */
  "WFSIDLE0"         uint;             /* Wegfahrsperren IDLE0             */
  "WFSIDLE1"         uint;             /* Wegfahrsperren IDLE1             */
  "WFS5B"            uint;             /* Wegfahrsperren 5 Baud            */
  block "VS_DEF"     (char[41]) * ;      /* Verstellparameterzuordnung: VSW:N40 VSGF:XKRS ... */
  block "PSEUDO_ADR" (char[24]) * ;      /* Zuordnung von Pseudoadressen: N40:1 XLSK:4 ...*/
};

taggedstruct appl_par {                   /* Parameter fuer Applikationsprot.  */
  block "MCMESS" taggedstruct appl_par_mcmess;
}

enum mem_layout {
  "PRG_EXRAM" = 0
};

taggedunion if_data {
  "DIM" taggedstruct {
    "VECTAB_ADDRESS"  long;               /* Anfangsadresse der Vektortabelle   */
    "TRGSEG_ADDRESS"  long;               /* Triggersegment-Adresse             */
    "DAT_MOD"         uint;               /* Ausgabemodus                       */
    "TRG_MOD"         uint;               /* Triggermodus                       */
    "DISPLAY_TAB"     uint;               /* Art der Displaytabelle             */
    ("DISPLAY_PAR"    struct dtab_par)*;  /* Parameter fuer Messdatenerfassung  */
  };
  "DIM_X" taggedstruct {
    "VECTAB_ADDRESS"  long;               /* Anfangsadresse der Vektortabelle   */
    "TRGSEG_ADDRESS"  long;               /* Triggersegment-Adresse             */
    "DAT_MOD"         uint;               /* Ausgabemodus                       */
    "TRG_MOD"         uint;               /* Triggermodus                       */
    "DISPLAY_TAB"     uint;               /* Art der Displaytabelle             */
    ("DISPLAY_PAR"    struct dtab_par)*;  /* Parameter fuer Messdatenerfassung  */
    "ETK_CFG"        ( char ) *;
    "PRG_CRC_DATA"   struct { long; long; };
    "PRG_CRC_EXRAM"  struct { long; long; };
    ("MEMORY_LAYOUT"  struct { enum mem_layout; long; long; long; long; long; long; long; };)*; 
  };
  "KLEITUNG" taggedstruct {
    block "APPL_PROT" taggedstruct appl_par;
  }
};


/* ---------------------------------------------------------------- */
/*    interface-spezifische Parameter fuer Kenngroessen             */
/*    interface-spezifische Parameter fuer Messgroessen             */
/* ---------------------------------------------------------------- */

enum addr_mode {
  "DIRECT"   = 0,
  "INDIRECT" = 1
};

struct if_data_dim_char {
  enum addr_mode;   /* Adressierungsart (INDIRECT fuer Vektor-Kenngroessen) */
  long;             /* Vector-Adresse */
};

enum mem_typ {
  "INTERN" = 0,
  "EXTERN" = 1
};

enum addr_typ {
  "BYTE" = 1,
  "WORD" = 2,
  "LONG" = 4
};

struct if_data_dim_meas {
  long;                     /* Adresse der Source           */
  enum mem_typ;             /* Adressort der Source         */
  enum addr_typ;            /* Adresslaenge in Bytes        */
};

struct if_data_mcmess_meas {
  long;                     /* Adresse der Source           */
  enum mem_typ;             /* Adressort der Source         */
  taggedstruct {            /* Optionale Schluesselwoerter  */
    "PSEUDO_ADR" uint;      /* Pseudoadresse 1..255         */
    "VS_DEF"     char[20];  /* Name des Verstellparameters  */
  };
};

"IF_DATA" taggedunion if_data {
   "DIM%AXIS_PTS" struct if_data_dim_char;
   "DIM_X%AXIS_PTS" struct if_data_dim_char;
   "DIM%CHARACTERISTIC" struct if_data_dim_char;
   "DIM_X%CHARACTERISTIC" struct if_data_dim_char;
   "MCMESS%MEASUREMENT" struct if_data_mcmess_meas;
   "DIM%MEASUREMENT" struct if_data_dim_meas;
   "DIM_X%MEASUREMENT" struct if_data_dim_meas;
};

/end A2ML
