module IsobusVTMessageTypes {

import from General_Types all
import from IsobusMessageTypes all

external function encode_VT2ECU(in VT2ECU pdu) return octetstring 
with { extension "prototype(convert) encode(RAW)" }
external function decode_VT2ECU(in octetstring data) return VT2ECU
with { extension "prototype(convert) decode(RAW)" }

external function encode_ECU2VT(in ECU2VT pdu) return octetstring 
with { extension "prototype(convert) encode(RAW)" }
external function decode_ECU2VT(in octetstring data) return ECU2VT
with { extension "prototype(convert) decode(RAW)" }

type INT1 VTfunction

type integer AnyObjectID (0..65535) with { variant "FIELDLENGTH(16)" }; // includes also 65535 as no object
type integer ValidObjectID (0..65534) with { variant "FIELDLENGTH(16)" };
type integer AttributeID (0..255) with { variant "FIELDLENGTH(8)" };
type integer PercentType (0..100) with { variant "FIELDLENGTH(8)" };
type integer DeltaPositionType (-127..128) with { variant "FIELDLENGTH(8)" };
type integer XPositionType  (-32768 .. +32767) with { variant "FIELDLENGTH(16)" };
type integer YPositionType  (-32768 .. +32767) with { variant "FIELDLENGTH(16)" };
type integer XOffsetType  (-32768 .. +32767) with { variant "FIELDLENGTH(16)" };
type integer YOffsetType  (-32768 .. +32767) with { variant "FIELDLENGTH(16)" };
type integer ViewportXAttribute  (-32768 .. +32767) with { variant "FIELDLENGTH(16)" };
type integer ViewportYAttribute  (-32768 .. +32767) with { variant "FIELDLENGTH(16)" };

type INT2 WidthType 
type INT2 HeightType 
type INT2 PositionType 
type INT1 KeyNumberType
type INT2 FrequencyType
type INT1 ColorType  // See A.3 VT standard colour palette
type INT1 FontSize
type INT1 FontType
type INT1 FontStyle
type INT1 LineWidth
type INT1 Priority
type INT1 Index
type BIT16n LineArt

type charstring CHR7 length(7) with { variant "FIELDLENGTH(7)" };
type CHR7 VersionLabel7Char

type float SingleFloat
with {
  variant "FORMAT(IEEE754 float)"
}

type enumerated e_SoftKeyActivationReq_KeyAactivationCode { 
  keyHasBeenReleased     (0),
  keyHasBeenPressed      (1),
  keyIsStillPressed      (2),
  keyPressAborted        (3)}
with {variant "PADDING(octet)" };

type record SoftKeyActivationReq 
{
  VTfunction                                vtfunction (0),
  e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,
  ValidObjectID                             objectID,
  ValidObjectID                             parentObjectID,
  KeyNumberType                             keyNumber,
  OCT1                                      reserved8  ('FF'O)
} with {variant "" };

type record SoftKeyActivationRes 
{
  VTfunction                                vtfunction (0),
  e_SoftKeyActivationReq_KeyAactivationCode keyActivationCode,  
  ValidObjectID                             objectID,
  ValidObjectID                             parentObjectID,
  KeyNumberType                             keyNumber,
  OCT1                                      reserved8  ('FF'O)
} with {variant "" };

type enumerated e_ButtonActivationReq_KeyAactivationCode { 
  buttonHasBeenUnlatchedorReleased     (0),
  buttonHasBeenPressedOrLatched        (1),
  buttonIsStillHeld                    (2),
  buttonPressAborted                   (3)}
with {variant "PADDING(octet)" };

type record ButtonActivationReq
{
  VTfunction                               vtfunction (1),
  e_ButtonActivationReq_KeyAactivationCode keyAactivationCode,
  ValidObjectID                            objectID,
  ValidObjectID                            parentObjectID,
  KeyNumberType                            buttonKeyCode,
  OCT1                                     reserved8  ('FF'O)
} with {variant "" };

type enumerated e_ButtonActivationRes_KeyAactivationCode { 
  buttonHasBeenUnlatchedorReleased     (0),
  buttonHasBeenPressedOrLatched        (1),
  buttonIsStillHeld                    (2),
  buttonPressAborted                   (3)}
with {variant "PADDING(octet)" };

type record ButtonActivationRes
{
  VTfunction                               vtfunction (1),
  e_ButtonActivationRes_KeyAactivationCode keyAactivationCode,
  ValidObjectID                            objectID,
  ValidObjectID                            parentObjectID,
  KeyNumberType                            buttonKeyCode,
  OCT1                                     reserved8  ('FF'O)
} with {variant "" };

type enumerated e_PointingEvent_touchState {
  released    (0), // version 4 and later
  pressed     (1), // version 4 and later
  held        (2), // version 4 and later
  reserved  (255)} // version 3 and prior
with {variant "PADDING(octet)" };

type record PointingEventReq {
  VTfunction                      vtfunction (2),
  PositionType                    x_position,
  PositionType                    y_position,
  e_PointingEvent_touchState   touchState,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record PointingEventRes {
  VTfunction                      vtfunction (2),
  PositionType                    x_position,
  PositionType                    y_position,
  e_PointingEvent_touchState   touchState,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type enumerated e_VTOnUserLayoutHideShow_state { 
  hidden     (0),
  shown      (1)}
with {variant "PADDING(octet)" };

type enumerated e_VTSelectInputObject_selection {
  objectIsDeselected (0),
  objectIsSelected   (1)}
with {variant "PADDING(octet)" };

type record VTSelectInputObject_Bitmask{ 
  boolean objectIsOpenForDataInput, // for v3 or earlier: true , 
  // for v4 and later:
  //   1 = object is open for data input – Byte 4 "selection" shall be set to objectIsSelected
  boolean reserved1, // for v3 or earlier: true , for v4 and later: false
  boolean reserved2, // for v3 or earlier: true , for v4 and later: false
  boolean reserved3, // for v3 or earlier: true , for v4 and later: false
  boolean reserved4, // for v3 or earlier: true , for v4 and later: false
  boolean reserved5, // for v3 or earlier: true , for v4 and later: false
  boolean reserved6, // for v3 or earlier: true , for v4 and later: false
  boolean reserved7  // for v3 or earlier: true , for v4 and later: false
}
with {variant "" };

type record VTSelectInputObject_v4AndLater_Bitmask{ 
  boolean objectIsOpenForDataInput,
  boolean reserved1     (false),
  boolean reserved2     (false),
  boolean reserved3     (false),
  boolean reserved4     (false),
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record VTSelectInputObjectReq {
  VTfunction                             vtfunction (3),
  ValidObjectID                          objectID,
  e_VTSelectInputObject_selection        selection,
  VTSelectInputObject_Bitmask            bitmask,
  OCT1                                   reserved6  ('FF'O),
  OCT1                                   reserved7  ('FF'O),
  OCT1                                   reserved8  ('FF'O)
} with {variant "" };

type record VTSelectInputObjectReq_v3AndPrior {
  VTfunction                      vtfunction (3),
  ValidObjectID                   objectID,
  e_VTSelectInputObject_selection selection,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record VTSelectInputObjectReq_v4AndLater {
  VTfunction                             vtfunction (3),
  ValidObjectID                          objectID,
  e_VTSelectInputObject_selection        selection,
  VTSelectInputObject_v4AndLater_Bitmask bitmask,
  OCT1                                   reserved6  ('FF'O),
  OCT1                                   reserved7  ('FF'O),
  OCT1                                   reserved8  ('FF'O)
} with {variant "" };

type record VTSelectInputObjectRes {
  VTfunction                             vtfunction (3),
  ValidObjectID                          objectID,
  e_VTSelectInputObject_selection        selection,
  VTSelectInputObject_Bitmask            bitmask,
  OCT1                                   reserved6  ('FF'O),
  OCT1                                   reserved7  ('FF'O),
  OCT1                                   reserved8  ('FF'O)
} with {variant "" };

type record VTSelectInputObjectRes_v4AndPrior {
  VTfunction                      vtfunction (3),
  ValidObjectID                   objectID,
  e_VTSelectInputObject_selection selection,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record VTSelectInputObjectRes_v5AndLater {
  VTfunction                             vtfunction (3),
  ValidObjectID                          objectID,
  e_VTSelectInputObject_selection        selection,
  VTSelectInputObject_v4AndLater_Bitmask bitmask,
  OCT1                                   reserved6  ('FF'O),
  OCT1                                   reserved7  ('FF'O),
  OCT1                                   reserved8  ('FF'O)
} with {variant "" };

type record VTESC_ErrorCodes{ 
  boolean noInputFieldIsSelected,
  boolean reserved1     (false),
  boolean reserved2     (false),
  boolean reserved3     (false),
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };


type record VTESCReq {
  VTfunction                             vtfunction (4),
  AnyObjectID                            objectID, // Object ID where input was aborted if no error code
  VTESC_ErrorCodes                       errorCodes,
  OCT1                                   reserved5  ('FF'O),
  OCT1                                   reserved6  ('FF'O),
  OCT1                                   reserved7  ('FF'O),
  OCT1                                   reserved8  ('FF'O)
} with {variant "" };

type record VTESCRes {
  VTfunction                             vtfunction (4),
  AnyObjectID                            objectID, // Object ID where input was aborted if no error code
  OCT1                                   reserved4  ('FF'O),
  OCT1                                   reserved5  ('FF'O),
  OCT1                                   reserved6  ('FF'O),
  OCT1                                   reserved7  ('FF'O),
  OCT1                                   reserved8  ('FF'O)
} with {variant "" };

type record VTChangeNumericValueReq
{
  VTfunction                      vtfunction (5),
  ValidObjectID                   objectID,
  OCT1                            reserved4  ('FF'O),
  OCT4                            value_
} with { variant "" };

type record VTChangeNumericValueRes
{
  VTfunction                      vtfunction (5),
  ValidObjectID                   objectID,
  OCT1                            reserved4  ('FF'O),
  OCT4                            value_
} with { variant "" };

type record VTChangeActiveMasErrorcodes{ 
  boolean reserved0                      (false),
  boolean reserved1                      (false),
  boolean missingObjects,
  boolean maskOrChildObjectHasErrors,
  boolean anyOtherError,
  boolean poolBeingDeleted,
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record VTChangeActiveMaskReq
{
  VTfunction                      vtfunction (6),
  ValidObjectID                   activeMaskOrWindowMaskOrKeyGroupObjectID,
  VTChangeActiveMasErrorcodes     errorCodes,
  ValidObjectID                   objectIDcontainingError,
  ValidObjectID                   parentObjectIDofErrorObjectID
} with { variant "" };

type record VTChangeActiveMaskRes
{
  VTfunction                      vtfunction (6),
  ValidObjectID                   activeMaskObjectID,
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };


type record VTChangeSoftKeyMaskErrorCodes{ 
  boolean reserved0                      (false),
  boolean reserved1                      (false),
  boolean missingObjects,
  boolean maskOrChildObjectHasErrors,
  boolean anyOtherError,
  boolean poolBeingDeleted,              // this bit is always set in v5 or later 
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record VTChangeSoftKeyMaskReq
{
  VTfunction                      vtfunction (7),
  ValidObjectID                   dataOrAlarmMaskObjectID,
  ValidObjectID                   softKeyMaskObjectID,
  VTChangeSoftKeyMaskErrorCodes   errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record VTChangeSoftKeyMaskRes
{
  VTfunction                      vtfunction (7),
  ValidObjectID                   dataOrAlarmMaskObjectID,
  ValidObjectID                   softKeyMaskObjectID,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record VTChangeStringValueReq
{
  VTfunction                      vtfunction (8),
  ValidObjectID                   inputStringOrStringVariableObjectID,
  INT1                            numberOfBytes,
  octetstring                     enteredStringValue
} with {
  variant (numberOfBytes) "LENGTHTO(enteredStringValue)";
  variant (numberOfBytes) "UNIT(octets)"
}

type record VTChangeStringValueRes
{
  VTfunction                      vtfunction (8),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  ValidObjectID                   inputStringOrStringVariableObjectID,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record VTOnUserLayoutHideShowReq
{
  VTfunction                      vtfunction (9),
  ValidObjectID                   objectID1,
  e_VTOnUserLayoutHideShow_state  state1,
  AnyObjectID                     objectID2,
  e_VTOnUserLayoutHideShow_state  state2, // If the previous attribute is the NULL Object ID, this bit shall be set to false.
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record VTOnUserLayoutHideShowRes
{
  VTfunction                      vtfunction (9),
  ValidObjectID                   objectID1,
  e_VTOnUserLayoutHideShow_state  state1,
  AnyObjectID                     objectID2,
  e_VTOnUserLayoutHideShow_state  state2, // If the previous attribute is the NULL Object ID, this bit shall be set to false.
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record VTControlAudioSignalTerminationParameterTerminationCause
{ 
  boolean AudioWasTerminated             (true),
  boolean reserved1                      (false),
  boolean reserved2                      (false),
  boolean reserved3                      (false),
  boolean reserved4                      (false),
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };


type record VTControlAudioSignalTerminationInd // version V4 or higher
{
  VTfunction                                                vtfunction (10),
  VTControlAudioSignalTerminationParameterTerminationCause  terminationCause,
  OCT1                                                      reserved3  ('FF'O),
  OCT1                                                      reserved4  ('FF'O),
  OCT1                                                      reserved5  ('FF'O),
  OCT1                                                      reserved6  ('FF'O),
  OCT1                                                      reserved7  ('FF'O),
  OCT1                                                      reserved8  ('FF'O)
} with { variant "" };

type octetstring ObjectPoolRecords  with { variant "" };

type record ObjectPoolTransferInd
{
  VTfunction                      vtfunction (17),
  ObjectPoolRecords               objectPoolRecords
} with { variant "" };

type record EndOfObjectPoolReq
{
  VTfunction                      vtfunction (18),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record EndOfObjectPoolResErrorCodes
{ 
  boolean thereAreErrorsInTheObjectPool,  //refer to Bytes 3 to 8 for additional error information
  boolean vtRanOutOfMemoryDuringTransfer (false),
  boolean reserved2                      (false),
  boolean reserved3                      (false),
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record EndOfObjectPoolResObjectPoolErrorCodes
{ 
  boolean methodOrAttributeNotSupportedByTheVT,
  boolean unknownObjectReference, // (missing object)
  boolean anyOtherError,
  boolean objectPoolWasDeletedFromVolatileMemory,
  boolean reserved4                      (false),
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record EndOfObjectPoolRes
{
  VTfunction                             vtfunction (18),
  EndOfObjectPoolResErrorCodes           errorCodes,
  AnyObjectID                            parentObjectIDoFaultyObject, // set to NULL Object ID if there are no
  AnyObjectID                            objectIDofFaultyObject,      // set to NULL Object ID if there are no
  EndOfObjectPoolResObjectPoolErrorCodes objectPoolErrorCodes,
  OCT1                                   reserved8  ('FF'O)
} with { variant "" };

type record VTfunction32VT2ECU
{
  VTfunction                      vtfunction (32),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction32ECU2VT
{
  VTfunction                      vtfunction (32),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction33ECU2VT
{
  VTfunction                      vtfunction (33),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction34VT2ECU
{
  VTfunction                      vtfunction (34),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction34ECU2VT
{
  VTfunction                      vtfunction (34),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction36VT2ECU
{
  VTfunction                      vtfunction (36),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction36ECU2VT
{
  VTfunction                      vtfunction (36),
  octetstring                     notImplementedYet
} with { variant "" };


type record VTfunction37VT2ECU
{
  VTfunction                      vtfunction (37),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction37ECU2VT
{
  VTfunction                      vtfunction (37),
  octetstring                     notImplementedYet
} with { variant "" };

type ValidObjectID AuxiliaryInputType2StatusInd_AuxiliaryInputObjectID

type BIT2np AuxiliaryInputType2StatusInd_OperatingStateType

type record AuxiliaryInputType2StatusInd
{
  VTfunction                                          vtfunction (38),
  AuxiliaryInputType2StatusInd_AuxiliaryInputObjectID auxiliaryInputObjectID,
  OCT2                                                value1,
  OCT2                                                value2,
  AuxiliaryInputType2StatusInd_OperatingStateType     operationState
} with { variant "" };


type record VTfunction39VT2ECU
{
  VTfunction                      vtfunction (39),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction39ECU2VT
{
  VTfunction                      vtfunction (39),
  octetstring                     notImplementedYet
} with { variant "" };

type record ESCreq
{
  VTfunction                      vtfunction (146),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ESCerrorCodes
{ 
  boolean NoInputFieldIsOpenForInputESCignored,
  boolean reserved1                      (false),
  boolean reserved2                      (false),
  boolean reserved3                      (false),
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record ESCres
{
  VTfunction                      vtfunction (146),
  AnyObjectID                     ObjectIDwhereInputWasAborted, // if no error code
  ESCerrorCodes                   ErrorCodes,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type enumerated e_HideShowObject_state { 
  hide      (0),
  show      (1)}
with {variant "PADDING(octet)" };

type record HideShowObjectReq
{
  VTfunction                      vtfunction (160),
  ValidObjectID                   objectID,
  e_HideShowObject_state          hideShow,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record HideShowObjectRes_errorCodes{ 
  boolean referencesToMissingObjects,
  boolean invalidObjectID,
  boolean undefined     (false),
  boolean anyOtherError,
  boolean reserved4     (false),
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record HideShowObjectRes
{
  VTfunction                      vtfunction (160),
  ValidObjectID                   objectID,
  e_HideShowObject_state          hideShow,
  HideShowObjectRes_errorCodes    errorCodes,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record VTfunction161VT2ECU
{
  VTfunction                      vtfunction (161),
  octetstring                     notImplementedYet
} with { variant "" };

type record VTfunction161ECU2VT
{
  VTfunction                      vtfunction (161),
  octetstring                     notImplementedYet
} with { variant "" };

type enumerated e_EnableDisableObject_DisableEnable { 
  disable                (0),
  enable                 (1)}
with {variant "PADDING(octet)" };

type record EnableDisableObjectReq
{
  VTfunction                          vtfunction (161),
  ValidObjectID                       objectID,
  e_EnableDisableObject_DisableEnable DisableEnable,
  OCT1                                reserved5  ('FF'O),
  OCT1                                reserved6  ('FF'O),
  OCT1                                reserved7  ('FF'O),
  OCT1                                reserved8  ('FF'O)
} with {variant "" };

type record EnableDisableObjectRes_errorCodes { 
  boolean reserved0     (false),
  boolean invalidObjectID,
  boolean commandError,
  boolean couldNotCompleteOperatorInputIsActiveOnThisObject,
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record EnableDisableObjectRes
{
  VTfunction                          vtfunction (161),
  ValidObjectID                       objectID,
  e_EnableDisableObject_DisableEnable DisableEnable,
  EnableDisableObjectRes_errorCodes   errorCodes,
  OCT1                                reserved6  ('FF'O),
  OCT1                                reserved7  ('FF'O),
  OCT1                                reserved8  ('FF'O)
} with {variant "" };




type enumerated e_SelectInputObjectReq_Option { 
  activateForDataInputTheObjectReferencedByObjectID     (0),
  activateForDataInputTheObjectReferencedByObjectID1    (1),
  setFocusToObjectReferencedByObjectID                (255)}
with {variant "PADDING(octet)" };

type record SelectInputObjectReq{
  VTfunction                      vtfunction (162),
  AnyObjectID                     objectID,
  e_SelectInputObjectReq_Option   option,                
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)  
} with {variant "" };

type enumerated e_SelectInputObjectRes_Response { 
  objectReferencedByObjectIDisNotSelectedOrObjectIDisTheNULLobject     (0),
  objectReferencedByObjectIDisSelected                                 (1),
  objectReferencedByObjectIDisOpenedForEdit                            (2)}
with {variant "PADDING(octet)" };

type record SelectInputObjectRes_errorCodes { 
  boolean objectIsDisabled,
  boolean invalidObjectID,
  boolean objectIsNotOnTheActiveMaskOrObjectIsInAHiddenContainer,
  boolean couldNotCompleteAnotherInputFieldIsCurrentlyBeingModifiedOrAButtonOrSoftKeyisCurrentlyBeingHeld,
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record SelectInputObjectRes{
  VTfunction                      vtfunction (162),
  AnyObjectID                     objectID,
  e_SelectInputObjectRes_Response response,                
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)  
} with {variant "" };

type record ControlAudioSignalReq{
  VTfunction                      vtfunction (163),
  INT1                            activations,
  FrequencyType                   frequencyInHz,
  INT2                            onTimeDuration_ms,
  INT2                            offTimeDuration_ms
} with {variant "" };

type enumerated e_ControlAudioSignalRes_ErrorCodes { 
  audioDeviceIsBusy     (0),
  undefined             (1),
  objectReferencedByObjectIDisOpenedForEdit                            (2)}
with {variant "PADDING(octet)" };

type record ControlAudioSignalRes_ErrorCodes { 
  boolean audioDeviceIsBusy,
  boolean undefined1    (false),
  boolean undefined2    (false),
  boolean undefined3    (false),
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ControlAudioSignalRes{
  VTfunction                        vtfunction (163),
  ControlAudioSignalRes_ErrorCodes  errorCodes,
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record SetAudioVolumeReq
{
  VTfunction                      vtfunction (164),
  PercentType                     volumeInPercent,
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record SetAudioVolumeErrorCodes
{ 
  boolean AudioDeviceIsBusySubsequentCommandsUseTheNewSetting,
  boolean CommandIsNotSupported,
  boolean reserved2                      (false),
  boolean reserved3                      (false),
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record SetAudioVolumeRes
{
  VTfunction                      vtfunction (164),
  SetAudioVolumeErrorCodes        errorCodes,
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" }; 

type record  ChangeChildLocationReq 
{
  VTfunction                      vtfunction (165),
  ValidObjectID                   parentObjectID,
  ValidObjectID                   objectIDofObjectToMove,
  DeltaPositionType               relativeChangeInXposition,
  DeltaPositionType               relativeChangeInYposition,
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ChangeChildLocationRes_errorCodes
{ 
  boolean invalidParentObjectID,
  boolean invalidObjectID,
  boolean reserved2                      (false),
  boolean reserved3                      (false),
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record  ChangeChildLocationRes 
{
  VTfunction                        vtfunction (165),
  ValidObjectID                     parentObjectID,
  ValidObjectID                     objectIDofObjectToMove,
  ChangeChildLocationRes_errorCodes errorCodes,
  OCT1                              reserved7  ('FF'O),
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeSizeReq
{
  VTfunction                        vtfunction (166),
  ValidObjectID                     objectIDofObjectToSize,
  WidthType                         newWidth,
  HeightType                        newHeight,
  OCT1                              reserved8  ('FF'O)
} with { variant "" };


type record ChangeSizeRes_errorCodes
{ 
  boolean invalidObjectID,
  boolean reserved1                      (false),
  boolean reserved2                      (false),
  boolean reserved3                      (false),
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record ChangeSizeRes
{
  VTfunction                        vtfunction (166),
  ValidObjectID                     objectIDofObjectToSize,
  ChangeSizeRes_errorCodes          errorCodes,
  OCT1                              reserved5  ('FF'O),
  OCT1                              reserved6  ('FF'O),
  OCT1                              reserved7  ('FF'O),
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeBackgroundColourReq
{
  VTfunction                        vtfunction (167),
  ValidObjectID                     objectIDofObjectToChange,
  ColorType                         newBackgroundColour,
  OCT1                              reserved5  ('FF'O),
  OCT1                              reserved6  ('FF'O),
  OCT1                              reserved7  ('FF'O),
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeBackgroundColourRes_errorCodes { 
  boolean invalidObjectID,
  boolean invalidColourCode,
  boolean reserved2     (false),
  boolean reserved3     (false),
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ChangeBackgroundColourRes
{
  VTfunction                           vtfunction (167),
  ValidObjectID                        objectIDofObjectToChange,
  ColorType                            newBackgroundColour,
  ChangeBackgroundColourRes_errorCodes errorCodes,
  OCT1                                 reserved6  ('FF'O),
  OCT1                                 reserved7  ('FF'O),
  OCT1                                 reserved8  ('FF'O)
} with { variant "" };

type record ChangeNumericValueReq{
  VTfunction                      vtfunction (168),
  ValidObjectID                   objectID,
  OCT1                            reserved4  ('FF'O),
  OCT4                            newValueForValueAttribute  
} with {variant "" };

type record ChangeNumericValueRes_errorCodes { 
  boolean invalidObjectID,
  boolean invalidValue,
  boolean valueInUse,
  boolean undefined     (false),
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ChangeNumericValueRes{
  VTfunction                        vtfunction (168),
  ValidObjectID                     objectID,
  ChangeNumericValueRes_errorCodes  errorCodes,
  OCT4                              valueForValueAttribute  
} with {variant "" };

type record ChangeEndPointRes_errorCodes
{ 
  boolean invalidObjectID,
  boolean invalidLineDirection,
  boolean reserved2                      (false),
  boolean reserved3                      (false),
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record ChangeEndPointRes
{
  VTfunction                        vtfunction (169),
  ValidObjectID                     objectID,
  ChangeEndPointRes_errorCodes      errorCodes,
  OCT1                              reserved5  ('FF'O),
  OCT1                              reserved6  ('FF'O),
  OCT1                              reserved7  ('FF'O),
  OCT1                              reserved8  ('FF'O)
} with { variant "" };



type enumerated e_ChangeEndPointReq_LineDirection { 
  lineIsDrawnFromTopLeftToBottomRightOfEnclosingVirtualRectangle  (0),
  lineIsDrawnFromBottomLeftToToRightOfEnclosingVirtualRectangle   (1)}
with {variant "PADDING(octet)" };

type record ChangeEndPointReq
{
  VTfunction                        vtfunction (169),
  ValidObjectID                     objectIDofAnOutputLineObjectToChange,
  WidthType                         width, // in pixles
  HeightType                        height, // in pixels
  e_ChangeEndPointReq_LineDirection lineDirection
} with { variant "" };

type record ChangeFontAttributesRes_errorCodes
{ 
  boolean invalidObjectID,
  boolean invalidColor,
  boolean invalidSize,
  boolean invalidType,
  boolean invalidStyle,
  boolean anyOtherError,
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record ChangeFontAttributesRes
{
  VTfunction                        vtfunction (170),
  ValidObjectID                     objectID,
  ChangeFontAttributesRes_errorCodes errorCodes,
  OCT1                              reserved5  ('FF'O),
  OCT1                              reserved6  ('FF'O),
  OCT1                              reserved7  ('FF'O),
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeFontAttributesReq 
{
  VTfunction                        vtfunction (170),
  ValidObjectID                     ObjectIDofObjectToChange, 
  ColorType                         fontColour, 
  FontSize                          fontSize,
  FontType                          fontType,
  FontStyle                         fontStyle,
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeLineAttributesRes_errorCodes
{ 
  boolean invalidObjectID,
  boolean invalidColor,
  boolean invalidWidth,
  boolean reserved3                      (false),
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record ChangeLineAttributesRes
{
  VTfunction                        vtfunction (171),
  ValidObjectID                     objectID,
  ChangeLineAttributesRes_errorCodes errorCodes,
  OCT1                              reserved5  ('FF'O),
  OCT1                              reserved6  ('FF'O),
  OCT1                              reserved7  ('FF'O),
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record  ChangeLineAttributesReq
{
  VTfunction                        vtfunction (171),
  ValidObjectID                     ObjectIDofObjectToChange, 
  ColorType                         lineColour, 
  LineWidth                         lineWidth,
  LineArt                           LineArt,
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeFillAttributesRes_errorCodes
{ 
  boolean invalidObjectID,
  boolean invalidType,
  boolean invalidColor,
  boolean invalidPatternObjectID,
  boolean anyOtherError,
  boolean reserved5                      (false),
  boolean reserved6                      (false),
  boolean reserved7                      (false)
}
with {variant "" };

type record ChangeFillAttributesRes
{
  VTfunction                      vtfunction (172),
  ValidObjectID                     objectID,
  ChangeFillAttributesRes_errorCodes errorCodes,
  OCT1                              reserved5  ('FF'O),
  OCT1                              reserved6  ('FF'O),
  OCT1                              reserved7  ('FF'O),
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeFillAttributesReq 
{
  VTfunction                      vtfunction (172),
  ValidObjectID                     ObjectIDofObjectToChange, 
  ColorType                         lineColour, 
  LineWidth                         lineWidth,
  LineArt                           lineArt,
  ValidObjectID                     fillPatternObjectID,
  OCT1                              reserved8  ('FF'O)
} with { variant "" };

type record ChangeActiveMaskReq
{
  VTfunction                      vtfunction (173),
  ValidObjectID                   workingSetObjectID,
  ValidObjectID                   newActiveMaskObjectID,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record ChangeActiveMaskRes_errorCodes { 
  boolean invalidWorkingSetObjectID,
  boolean invalidMaskObjectID,
  boolean undefined1    (false),
  boolean undefined2    (false),
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ChangeActiveMaskRes
{
  VTfunction                      vtfunction (173),
  ValidObjectID                   newActiveMaskObjectID,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
}
with {variant "" };

type enumerated e_ChangeSoftKeyMaskReq_MaskType { 
  Data                     (1),
  Alarm                    (2)}
with {variant "PADDING(octet)" };

type record ChangeSoftKeyMaskReq 
{
  VTfunction                      vtfunction (174),
  e_ChangeSoftKeyMaskReq_MaskType maskType,
  ValidObjectID                   DataOrAlarmMaskObjectID,
  ValidObjectID                   NewSoftKeyMaskObjectID,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)}
with {variant "" };

type record ChangeSoftKeyMaskRes_errorCodes { 
  boolean invalidDataOrAlarmMaskObjectID,
  boolean invalidSoftKeyMaskObjectID,
  boolean missingObjects,
  boolean MaskOrChildObjectHasErrors,
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ChangeSoftKeyMaskRes 
{
  VTfunction                      vtfunction (174),
  ValidObjectID                   DataOrAlarmMaskObjectID,
  ValidObjectID                   NewSoftKeyMaskObjectID,
  ChangeSoftKeyMaskRes_errorCodes errorCodes,
  OCT1                            reserved8  ('FF'O)}
with {variant "" };

type record ChangeAttributeReq
{
  VTfunction                      vtfunction (175),
  ValidObjectID                   objectID,
  AttributeID                     attributeID,
  OCT4                            newValueOfAttribute
}
with {variant "" };

type record ChangeAttributeRes_errorCodes { 
  boolean invalidWorkingSetObjectID,
  boolean invalidAttributeID,
  boolean invalidValue,
  boolean valueInUse,
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ChangeAttributeRes
{
  VTfunction                      vtfunction (175),
  ValidObjectID                   objectID,
  AttributeID                     attributeID,
  ChangeAttributeRes_errorCodes   errorCodes,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
}
with {variant "" };

type record ChangePriorityRes_errorCodes { 
  boolean invalidObjectID,
  boolean invalidPriority,
  boolean reserved2     (false),
  boolean reserved3     (false),
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ChangePriorityRes
{
  VTfunction                      vtfunction (176),
  ValidObjectID                   objectIDofArlarmMask,
  Priority                        newPriority,
  ChangePriorityRes_errorCodes    errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ChangePriorityReq
{
  VTfunction                      vtfunction (176),
  ValidObjectID                   objectIDofArlarmMask,
  Priority                        newPriority,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ChangeListItemRes_errorCodes { 
  boolean invalidObjectID, // Invalid Input List object ID or Output List object ID , 
  // Animation object , External Object Definition object
  boolean invalidListIndex,                           
  boolean invalidNewListItemObjectID,
  boolean valueInUse,      // (e.g. open for input)
  boolean anyOtherError,
  boolean reserved5     (false),
  boolean reserved6     (false),
  boolean reserved7     (false)
}
with {variant "" };

type record ChangeListItemRes
{
  VTfunction                      vtfunction (177),
  ValidObjectID                   objectID,  // of an Input List object, Output List object, Animation object, 
  // or External Object Definition object
  Index                           listIndex, // (items are numbered 0-n)
  AnyObjectID                     newObjectID, //  or 0xFFFF to set empty item
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ChangeListItemReq
{
  VTfunction                      vtfunction (177),
  ValidObjectID                   objectID, // of an Input List object, Output List object, Animation object, 
  // or External Object Definition object
  Index                           listIndex, // (items are numbered 0-n)
  AnyObjectID                     newObjectID, //  or 0xFFFF to set empty item
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record DeleteObjectPoolReq
{
  VTfunction                      vtfunction (178),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record DeleteObjectPoolRes_ErrorCodes { 
  boolean deletionError,
  boolean undefined1      (false),
  boolean undefined2      (false),
  boolean undefined3      (false),
  boolean anyOtherError,
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}

type record DeleteObjectPoolRes
{
  VTfunction                      vtfunction (178),
  DeleteObjectPoolRes_ErrorCodes  errorCodes,
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record ChangeStringValueReq
{
  VTfunction vtfunction (179),
  ValidObjectID     objectID,
  INT2              numberOfBytes ,
  octetstring       newStringValue
}
with {
  variant (numberOfBytes) "LENGTHTO(newStringValue)";
  variant (numberOfBytes) "UNIT(octets)"
}

type record ChangeStringValueRes_ErrorCodes { 
  boolean undefined       (false),
  boolean invalidObjectID,
  boolean stringTooLong,
  boolean anyOtherError,
  boolean reserved4       (false),
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record ChangeStringValueRes
{
  VTfunction                      vtfunction (179),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  ValidObjectID                   objectID,
  ChangeStringValueRes_ErrorCodes errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with {variant "" };

type record ChangeChildPositionReq
{
  VTfunction vtfunction (180),
  ValidObjectID  parentObjectID,
  ValidObjectID  objectID,
  PositionType   pos_x_relative, 
  PositionType   pos_y_relative  
} with { variant "" };

type record ChangeChildPositionRes_ErrorCodes { 
  boolean invalidParentObjectID,
  boolean invalidObjectID,
  boolean undefined       (false),
  boolean anyOtherError,
  boolean reserved4       (false),
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record ChangeChildPositionRes
{
  VTfunction vtfunction (180),
  ValidObjectID  parentObjectID,
  ValidObjectID  objectID,
  ChangeChildPositionRes_ErrorCodes errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ChangeObjectLabelRes_ErrorCodes { 
  boolean invalidObjectID,
  boolean invalidStringVariableObjectID,
  boolean invalidFontType,
  boolean noObjectLabelReferenceListObjectAvailableInObjectPool,
  boolean designatorReferencesInvalidObjects,
  boolean anyOtherError,
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record ChangeObjectLabelRes
{
  VTfunction                      vtfunction (181),
  ChangeObjectLabelRes_ErrorCodes errorCodes,
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ChangeObjectLabelReq
{
  VTfunction                      vtfunction (181),
  ValidObjectID                   objectIDofObjectToAssociateLabelWith,
  ValidObjectID                   objectIDofAStringVariableObjectThatContainsTheLabelString,
  // (32 characters maximum) or 0xFFFF if no text is supplied
  FontType                        fontType, // (See Annex L) (ignored if String Variable object
  // reference is NULL or the string contains a WideString (See
  // Clause 4.6.19.7 String encoding).
  ValidObjectID                   objectIDofAnObjectToBeUsedAsAGraphicRepresentationOfTheObjectLabel
  // Object ID of an object to be used as a graphic representation of
  // the object label or FFFF16 if no designator supplied. When
  // the VT draws this object it shall be clipped to the size of a
  // Soft Key designator. (See Table A.2 — Allowed hierarchical
  // relationships of objects)
} with { variant "" };

type record ChangePolygonPointRes_ErrorCodes { 
  boolean invalidObjectID,
  boolean invalidPointIndex,
  boolean anyOtherError,
  boolean reserved3       (false),
  boolean reserved4       (false),
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record ChangePolygonPointRes
{
  VTfunction                      vtfunction (182),
  ValidObjectID                   objectIDofTheOutputPolygonObjectToChange,
  ChangePolygonPointRes_ErrorCodes errorCodes,
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ChangePolygonPointReq
{
  VTfunction                      vtfunction (182),
  ValidObjectID                   objectIDofTheOutputPolygonObjectToChange,
  Index                           pointIndexOfThePointToReplace,
  // NOTE: The first point in the polygon point list is at index zero (0).
  PositionType                    newXposition, 
  // New X value of a point relative to the top left corner of the polygon
  PositionType                    newYposition
  // New Y value of a point relative to the top left corner of the polygon
} with { variant "" };

type record ChangePolygonScaleRes_ErrorCodes { 
  boolean invalidObjectID,
  boolean reserved1       (false),
  boolean reserved2       (false),
  boolean reserved3       (false),
  boolean anyOtherError,
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record  ChangePolygonScaleRes
{
  VTfunction                      vtfunction (183),
  ValidObjectID                   objectIDofaOutputPolygonObjectToScale,
  WidthType                       newWidthAttribute,
  HeightType                      newHeightAttribute,
  ChangePolygonScaleRes_ErrorCodes errorCodes
} with { variant "" };

type record  ChangePolygonScaleReq
{
  VTfunction                      vtfunction (183),
  ValidObjectID                   objectIDofaOutputPolygonObjectToScale,
  WidthType                       newWidthAttribute,
  HeightType                      newHeightAttribute,
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record GraphicsContextRes_ErrorCodes { 
  boolean invalidObjectIDorObjectIsNotAGraphics,
  boolean InvalidSubCommandID,
  boolean InvalidParameter,
  boolean SubCommandWillProduceInvalidResults,
  boolean anyOtherError,
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record  GraphicsContextRes
{
  VTfunction                      vtfunction (184),
  ValidObjectID                   objectIDofAGraphicsContextObject,
  INT1                            subcommandID,   
  GraphicsContextRes_ErrorCodes   errorCodes,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record SetGraphicsCursor
{
  XPositionType                   xPosition,
  YPositionType                   yPosition
} with { variant "" };

type record MoveGraphicsCursor
{
  XOffsetType                     xOffset,
  YOffsetType                     yOffset
} with { variant "" };

type record SetForegroundColour
{
  ColorType                       foregroundColor,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record SetBackgroundColour
{
  ColorType                       backgroundColor,
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };


type record SetLineAttributesObjectID
{
  AnyObjectID                     objectIDofLineAttributesObject, // or NULL for line suppression
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record SetFileAttributesObjectID
{
  AnyObjectID                     objectIDofFillAttributesObject, // or NULL for no filling
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record SetFontAttributesObjectID
{
  AnyObjectID                     objectIDofFontAttributesObject, // or NULL for no font attributes
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record EraseRectangle
{
  WidthType                       width,
  HeightType                      height
} with { variant "" };

type record DrawPoint
{
  XOffsetType                     xOffset,
  YOffsetType                     yOffset
} with { variant "" };

type record DrawLine
{
  XOffsetType                     xOffset,
  YOffsetType                     yOffset
} with { variant "" };


type record DrawRectangle
{
  WidthType                       width,
  HeightType                      height
} with { variant "" };

type record DrawClosedEllipse
{
  WidthType                       width,
  HeightType                      height
} with { variant "" };

type record PolygonPoint
{
  XOffsetType                     xOffset,
  YOffsetType                     yOffset
} with { variant "" };

type record of PolygonPoint PolygonPointArray

type record DrawPolygon
{
  INT1                            numberOfPolygonPointsToFollow,
  PolygonPointArray               polygonPointArray
} with {
  variant (numberOfPolygonPointsToFollow) "LENGTHTO(polygonPointArray)";
  variant (numberOfPolygonPointsToFollow) "UNIT(elements)"}

type enumerated e_Tranparency { 
  opaque           (0),
  transparent      (1)}
with {variant "PADDING(octet)" };

type record DrawText
{
  e_Tranparency                   transparency,
  INT1                            numberOfBytesToFollow,
  octetstring                     textStringValue,
  OCT1                            padding1 optional, // just to make sure the command has at least 8 bytes. 
  // needed in case numberOfBytesToFollow is 0 or 1.
  OCT1                            padding2 optional  // just to make sure the command has at least 8 bytes. 
  // needed in case numberOfBytesToFollow is 0.
} with {
  variant (numberOfBytesToFollow) "LENGTHTO(textStringValue)";
  variant (numberOfBytesToFollow) "UNIT(octets)"}

type record PanViewport
{
  ViewportXAttribute              viewportXattribute,
  ViewportXAttribute              viewportYattribute
} with { variant "" };

type record ZoomViewport
{
  SingleFloat                     zoom
} with { variant "" };

type record PanAndZoomViewport
{
  ViewportXAttribute              viewportXattribute,
  ViewportXAttribute              viewportYattribute,
  SingleFloat                     zoom
} with { variant "" };

type record ChangeViewportSize
{
  WidthType                       newWidth,
  HeightType                      newHeight
} with { variant "" }; 

type record DrawVTObject
{
  ValidObjectID                   objectIDofObjectToDraw,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" }; 

type record CopyCanvasToPictureGraphic
{
  ValidObjectID                   objectIDofPictureGraphicObjectToCopyTo,  
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" }; 

type record CopyViewportToPictureGraphic
{
  ValidObjectID                   objectIDofPictureGraphicObjectToCopyTo,  
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" }; 

type union GraphicsContextReq_union {
  SetGraphicsCursor               setGraphicsCursor,
  MoveGraphicsCursor              moveGraphicsCursor,
  SetForegroundColour             setForegroundColour,
  SetBackgroundColour             setBackgroundColour,
  SetLineAttributesObjectID       setLineAttributesObjectID,
  SetFileAttributesObjectID       setFileAttributesObjectID,
  SetFontAttributesObjectID       setFontAttributesObjectID,
  EraseRectangle                  eraseRectangle,
  DrawPoint                       drawPoint,
  DrawLine                        drawLine,
  DrawRectangle                   drawRectangle,
  DrawClosedEllipse               drawClosedEllipse,
  DrawPolygon                     drawPolygon,
  DrawText                        drawText,
  PanViewport                     panViewport ,
  ZoomViewport                    zoomViewport,
  PanAndZoomViewport              panAndZoomViewport,
  ChangeViewportSize              changeViewportSize,
  DrawVTObject                    drawVTObject,
  CopyCanvasToPictureGraphic      copyCanvasToPictureGraphic,
  CopyViewportToPictureGraphic    copyViewportToPictureGraphic}
with { variant "" }

type record  GraphicsContextReq 
{
  VTfunction                      vtfunction (184),
  ValidObjectID                   objectIDofaGraphicsContextObject,
  INT1                            subcommandID,                                
  GraphicsContextReq_union        parameters // based upon subcommad ID
} with { variant (parameters)"CROSSTAG( 
  setGraphicsCursor,            subcommandID = 0;
  moveGraphicsCursor,           subcommandID = 1;
  setForegroundColour,          subcommandID = 2;
  setBackgroundColour,          subcommandID = 3;
  setLineAttributesObjectID,    subcommandID = 4;
  setFileAttributesObjectID,    subcommandID = 5;
  setFontAttributesObjectID,    subcommandID = 6;
  eraseRectangle,               subcommandID = 7;
  drawPoint,                    subcommandID = 8;
  drawLine,                     subcommandID = 9;
  drawRectangle,                subcommandID = 10;
  drawClosedEllipse,            subcommandID = 11;
  drawPolygon,                  subcommandID = 12;
  drawText,                     subcommandID = 13;
  panViewport,                  subcommandID = 14;
  zoomViewport,                 subcommandID = 15;
  panAndZoomViewport,           subcommandID = 16;
  changeViewportSize,           subcommandID = 17;
  drawVTObject,                 subcommandID = 18;
  copyCanvasToPictureGraphic,   subcommandID = 19;
  copyViewportToPictureGraphic, subcommandID = 20)" };

type record GetAttributeValueRes
{
  VTfunction                      vtfunction (185),
  AnyObjectID                     ObjectIDorFFFFtoTndicateAnErrorResponse,
  AttributeID                     AttributeIDofTheObject,   
  OCT1                            data1, // data1 to data4 can not be handled by TTCN raw en/decoder
  OCT1                            data2, // thus here hex values
  OCT1                            data3,
  OCT1                            data4
} with { variant "" };

type record  GetAttributeValueReq
{
  VTfunction                      vtfunction (185),
  ValidObjectID                   objectID,
  AttributeID                     AttributeIDofTheObject,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record SelectColourMapRes_ErrorCodes { 
  boolean invalidObjectID,
  boolean invalidColourMap,
  boolean anyOtherError,
  boolean reserved3       (false),
  boolean reserved4       (false),
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record SelectColourMapRes
{
  VTfunction                      vtfunction (186),
  ValidObjectID                   objectIDofTheColourMapObject,  
  SelectColourMapRes_ErrorCodes   errorCodes,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record SelectColourMapReq
{
  VTfunction                      vtfunction (186),
  ValidObjectID                   ObjectIDofTheColourMapObjectOrFFFFtoRestoreTheDefaultColourTable,
  // (See A.3 VT standard colour palette)
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record IdentifyVTRes
{
  VTfunction                      vtfunction (187),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record IdentifyVTReq 
{
  VTfunction                      vtfunction (187),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExecuteExtendedMacroRes_ErrorCodes { 
  boolean objectIDdoesNotExist,
  boolean objectIDisNotAMacroObject,
  boolean anyOtherError,
  boolean reserved3       (false),
  boolean reserved4       (false),
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record ExecuteExtendedMacroRes
{
  VTfunction                      vtfunction (188),
  ValidObjectID                   ObjectIDofMacroObject,
  ExecuteExtendedMacroRes_ErrorCodes   errorCodes,
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExecuteExtendedMacroReq
{
  VTfunction                      vtfunction (188),
  ValidObjectID                   ObjectIDofMacroObject,
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };


type record LockUnlockMaskRes_ErrorCodes { 
  boolean commandIgnoredNoMaskIsVisibleOrGivenObjectIDdoesNotMatchTheVisibleMask,
  boolean lockCommandIgnoredAlreadyLocked,
  boolean unlockCommandIgnoredNotLocked,
  boolean lockCommandIgnoredAnAlarmMaskIsActive,
  boolean unsolicitedUnlockTimeoutOccurred,
  boolean unsolicitedUnlockThisMaskIsHidden,
  boolean unsolicitedUnlockOperatorInducedOrAnyOtherError,
  boolean anyOtherError
}
with {variant "" };

type record LockUnlockMaskRes
{
  VTfunction                      vtfunction (189),
  e_LockUnlockMaskReqCommand      command,
  LockUnlockMaskRes_ErrorCodes    errorCodes,
  OCT1                            reserved4  ('FF'O), 
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type enumerated e_LockUnlockMaskReqCommand { 
  unlockDataMaskOrUserLayoutDataMask           (0),
  lockDataMaskOrUserLayoutDataMask             (1)}
with {variant "PADDING(octet)" };


type record LockUnlockMaskReq
{
  VTfunction                      vtfunction (189),
  e_LockUnlockMaskReqCommand      command,
  ValidObjectID                   ObjectIDofTheDataMaskOrUserLayoutDataMaskToLockOrUnlock,
  INT2                            lockTimeout,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExecuteMacroReq_ErrorCodes { 
  boolean objectIDdoesNotExist,
  boolean objectIDisNotAMacroObject,
  boolean anyOtherError,
  boolean reserved3       (false),
  boolean reserved4       (false),
  boolean reserved5       (false),
  boolean reserved6       (false),
  boolean reserved7       (false)
}
with {variant "" };

type record ExecuteMacroRes
{
  VTfunction                      vtfunction (190),
  ValidObjectID                   objectIDofMacroObject,
  ExecuteMacroReq_ErrorCodes      errorCodes,
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExecuteMacroReq
{
  VTfunction                      vtfunction (190),
  ValidObjectID                   objectIDofMacroObject,
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
  } with { variant "" };

type record GetMemoryReq
{
  VTfunction vtfunction (194),
  OCT1           reserved2  ('FF'O),
  INT3           memoryRequired,
  OCT1           reserved7  ('FF'O),
  OCT1           reserved8  ('FF'O)
} with { variant "" };

type enumerated e_GetMemoryResVersionNumber { 
  compliantWithHannoverAgritechnica_2001_limitedfeatureSet          (0),
  compliantWithFDISVersionISO11783_6_2002_E_Final_Draft             (1),
  compliantWithISVersionISO11783_6_2004_E_First_Edition             (2),
  compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_3  (3),
  compliantWithISVersionISO11783_6_2010_E_Second_Edition_version_4 (4),
  compliantWithISVersionISO11783_6_2014_E_Third_Edition             (5)}
with {variant "PADDING(octet)" };

type enumerated e_GetMemoryResStatus { 
  thereCanBeEnoughMemory             (0),
  thereIsNotEnoughMemoryAvailable    (1)}
with {variant "PADDING(octet)" }

type record GetMemoryRes
{
  VTfunction vtfunction (194),
  e_GetMemoryResVersionNumber versionNumber,
  e_GetMemoryResStatus        status,
  OCT1    reserved4  ('FF'O),
  OCT1    reserved5  ('FF'O),
  OCT1    reserved6  ('FF'O),
  OCT1    reserved7  ('FF'O),
  OCT1    reserved8  ('FF'O)
} with { variant "" };

type record GetNumberOfSoftKeysReq
{
  VTfunction vtfunction (192),
  OCT1           reserved2  ('FF'O),
  OCT1           reserved3  ('FF'O),
  OCT1           reserved4  ('FF'O),
  OCT1           reserved5  ('FF'O),
  OCT1           reserved6  ('FF'O),
  OCT1           reserved7  ('FF'O),
  OCT1           reserved8  ('FF'O)
} with { variant "" };

type record GetNumberOfSoftKeysRes
{
  VTfunction vtfunction (192),
  OCT1           navigationSoftKeys_,
  OCT1           reserved3  ('FF'O),
  OCT1           reserved4  ('FF'O),
  OCT1           x_dots,
  OCT1           y_dots,
  OCT1           numberOfVirtualSoftKeys_,
  OCT1           numberOfPhysicalSoftKeys_
} with { variant "" };

type record GetTextFontDataReq
{
  VTfunction vtfunction (195),
  OCT1           reserved2  ('FF'O),
  OCT1           reserved3  ('FF'O),
  OCT1           reserved4  ('FF'O),
  OCT1           reserved5  ('FF'O),
  OCT1           reserved6  ('FF'O),
  OCT1           reserved7  ('FF'O),
  OCT1           reserved8  ('FF'O)
} with { variant "" };


type record TextFontDataRes_small_font_sizes { 
  boolean font_8x8,
  boolean font_8x12,
  boolean font_12x16,
  boolean font_16x16,
  boolean font_16x24,
  boolean font_24x32,
  boolean font_32x32,
  boolean reserved
}
with {variant "" };

type record TextFontDataRes_large_font_sizes { 
  boolean font_32x48,
  boolean font_48x64,
  boolean font_64x64,
  boolean font_64x96,
  boolean font_96x128,
  boolean font_128x128,
  boolean font_128x192,
  boolean reserved (false)
}
with {variant "" }

type record TextFontDataRes_type_attribute { 
  boolean bold_text,
  boolean crossed_out_text,
  boolean underlined_text,
  boolean italics_text,
  boolean inverted_text,
  boolean flash_inverted,
  boolean flash_background_and_foreground,
  boolean proportional_font_rendering
}
with {variant ""}

type record GetTextFontDataRes
{
  VTfunction vtfunction (195),
  OCT1           reserved2  ('FF'O),
  OCT1           reserved3  ('FF'O),
  OCT1           reserved4  ('FF'O),
  OCT1           reserved5  ('FF'O),
  TextFontDataRes_small_font_sizes  small_font_sizes,
  TextFontDataRes_large_font_sizes  large_font_sizes,
  TextFontDataRes_type_attribute    type_attribute
} with { variant "" };

type record GetHardwareReq
{
  VTfunction vtfunction (199),
  OCT1           reserved2  ('FF'O),
  OCT1           reserved3  ('FF'O),
  OCT1           reserved4  ('FF'O),
  OCT1           reserved5  ('FF'O),
  OCT1           reserved6  ('FF'O),
  OCT1           reserved7  ('FF'O),
  OCT1           reserved8  ('FF'O)
} with { variant "" };


type enumerated e_GetHardwareResGraphicType { 
  monochrome                      (0),
  colors16                        (1),
  colors256                       (2)
}
with {variant "PADDING(octet)"}

type record GetHardwareResHardwareType {
  boolean touchScreenandPointingEvent,
  boolean pointingDeviceAndPointingEvent,
  boolean multipleFrequencyAudioOutput,
  boolean adjustableVolumeAudioOutput,
  boolean simultaneousActivationsOfPhysicalSoftKeys,
  boolean simultaneousActivationsOfButtons,
  boolean dragOperationViaPointingEvent,
  boolean intermediateCoordinatesDuringDragOperation
} with { variant "" };

type INT1 BootTimeType

type record GetHardwareRes
{
  VTfunction                   vtfunction (199),
  BootTimeType                 bootTimeInSeconds,  // 255 for information not available
  e_GetHardwareResGraphicType  graphicType,
  GetHardwareResHardwareType   hardware,
  INT2                         xPixels,
  INT2                         yPixels
} with { variant "" };

type enumerated e_Codeplane { 
  codeplane0     (0),
  codeplane1     (1),
  codeplane2     (2),
  codeplane3     (3),
  codeplane4     (4),
  codeplane5     (5),
  codeplane6     (6),
  codeplane7     (7),
  codeplane8     (8),
  codeplane9     (9),
  codeplane10    (10),
  codeplane11    (11),
  codeplane12    (12),
  codeplane13    (13),
  codeplane14    (14),
  codeplane15    (15),
  codeplane16    (16)}
with {variant "PADDING(octet)"}


type record GetSupportedWidecharsReq
{
  VTfunction vtfunction (193),
  e_Codeplane    codeplane,
  OCT2           firstWideCharInInquiryRange,
  OCT2           lastWideCharInInquiryRange,
  OCT1           reserved7  ('FF'O),
  OCT1           reserved8  ('FF'O)
} with { variant "" };

type record WideCharRange
{
  OCT2           firstWideChar, 
  OCT2           lastWideChar
} with { variant "" };

type record of WideCharRange WideCharRangeArray

type record GetSupportedWidecharsRes
{
  VTfunction vtfunction (193),
  e_Codeplane        codeplane,
  OCT2               firstWideCharInInquiryRange,
  OCT2               lastWideCharInInquiryRange,
  INT1               numberOfRanges,
  WideCharRangeArray wideCharRangeArray
} with {
  variant (numberOfRanges) "LENGTHTO(wideCharRangeArray)";
  variant (numberOfRanges) "UNIT(elements)"}

type record GetWindowMaskDataReq
{
  VTfunction vtfunction (196),
  OCT1    reserved2  ('FF'O),
  OCT1    reserved3  ('FF'O),
  OCT1    reserved4  ('FF'O),
  OCT1    reserved5  ('FF'O),
  OCT1    reserved6  ('FF'O),
  OCT1    reserved7  ('FF'O),
  OCT1    reserved8  ('FF'O)
} with { variant "" };

type record GetWindowMaskDataRes
{
  VTfunction vtfunction (196),
  OCT1    BackgroundColourVTUserLayoutDataMasks,
  OCT1    BackgroundColourVTKeyCells,
  OCT1    reserved4  ('FF'O),
  OCT1    reserved5  ('FF'O),
  OCT1    reserved6  ('FF'O),
  OCT1    reserved7  ('FF'O),
  OCT1    reserved8  ('FF'O)
} with { variant "" };

type record GetSupportedObjectsReq
{
  VTfunction vtfunction (197),
  OCT1    reserved2  ('FF'O),
  OCT1    reserved3  ('FF'O),
  OCT1    reserved4  ('FF'O),
  OCT1    reserved5  ('FF'O),
  OCT1    reserved6  ('FF'O),
  OCT1    reserved7  ('FF'O),
  OCT1    reserved8  ('FF'O)
} with { variant "" };

type record GetSupportedObjectsRes
{
  VTfunction vtfunction (197),
  INT2         numberOfBytesToFollow,
  OCT1         supportedObjectTypes
} with {
  variant (numberOfBytesToFollow) "LENGTHTO(supportedObjectTypes)";
  variant (numberOfBytesToFollow) "UNIT(elements)"}

type record StoreVersionRes_errorCodesType {
  boolean reserved0,
  boolean versionLabelIsNotCorrect,
  boolean insufficientMemoryAvailable,
  boolean anyOtherError,
  boolean reserved4,
  boolean reserved5,
  boolean reserved6,
  boolean reserved7
} with {variant ""}

type record StoreVersionRes
{
  VTfunction                      vtfunction (208),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  StoreVersionRes_errorCodesType  errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record  StoreVersionReq
{
  VTfunction                      vtfunction (208),
  VersionLabel7Char               versionLabel
} with { variant "" };

type record WorkingSetMaintenanceBitMask {
  boolean initiatingWorkingSetMaintenance,
  boolean reserved1 (false),
  boolean reserved2 (false),
  boolean reserved3 (false),
  boolean reserved4 (false),
  boolean reserved5 (false),
  boolean reserved6 (false),
  boolean reserved7 (false)
} with { variant "" };

type enumerated e_WorkingSetMaintenanceVersionNumber { 
  reserved0               (0),
  reserved1               (1),
  reserved2               (2),
  compliantWithVTVersion3 (3),
  compliantWithVTVersion4 (4),
  compliantWithVTVersion5 (5),
  compliantWithVTVersion2 (255)}
with {variant "PADDING(octet)"}

type record LoadVersionReq
{
  VTfunction vtfunction (209),
  VersionLabel7Char versionLabel
} with { variant "" };

type record LoadVersionRes_errorCodesType {
  boolean fileSystemErrorOrPoolDataCorruption,
  boolean versionLabelIsNotCorrectOrVersionLabeUnknown,
  boolean insufficientMemoryAvailable,
  boolean anyOtherError,
  boolean reserved5,
  boolean reserved6,
  boolean reserved7,
  boolean reserved8
} with {variant ""}

type record LoadVersionRes
{
  VTfunction vtfunction (209),
  OCT1    reserved2  ('FF'O),
  OCT1    reserved3  ('FF'O),
  OCT1    reserved4  ('FF'O),
  OCT1    reserved5  ('FF'O),
  LoadVersionRes_errorCodesType    errorCodes,
  OCT1    reserved7  ('FF'O),
  OCT1    reserved8  ('FF'O)
} with { variant "" };

type record DeleteVersionRes_errorCodesType {
  boolean reserved0,
  boolean versionLabelIsNotCorrectOrVersionLabelUnknown,
  boolean reserved2,
  boolean anyOtherError,
  boolean reserved4,
  boolean reserved5,
  boolean reserved6,
  boolean reserved7
} with {variant ""}

type record DeleteVersionRes
{
  VTfunction                      vtfunction (210),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  DeleteVersionRes_errorCodesType  errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record  DeleteVersionReq
{
  VTfunction                      vtfunction (210),
  VersionLabel7Char               versionLabel
} with { variant "" };

type record ExtendedGetVersionsRes
{
  VTfunction                      vtfunction (211),
  INT1                            numberOfVersionStrings,
  OCT32                           versionLabels,
  OCT6                            padding optional  // just to make sure the command has at least 8 bytes,
                                                    // used if version numberOfVersionStrings is 0
}
with{
  variant (numberOfVersionStrings) "LENGTHTO(versionLabels)";
  variant (numberOfVersionStrings) "UNIT(elements)"
}


type record ExtendedGetVersionsReq 
{
  VTfunction                      vtfunction (211),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExtendedStoreVersionRes_errorCodesType {
  boolean reserved0,
  boolean versionLabelIsNotCorrect,
  boolean insufficientMemoryAvailable,
  boolean anyOtherError,
  boolean reserved4,
  boolean reserved5,
  boolean reserved6,
  boolean reserved7
} with {variant ""}

type record ExtendedStoreVersionRes
{
  VTfunction                      vtfunction (212),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  ExtendedStoreVersionRes_errorCodesType  errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExtendedStoreVersionReq 
{
  VTfunction                      vtfunction (212),
  OCT32                           versionLabel
} with { variant "" };

type record ExtendedLoadVersionRes_errorCodesType {
  boolean fileSystemErrorOrPoolDataCorruption,
  boolean versionLabelIsNotCorrectOrVersionLabelUnknown,
  boolean insufficientMemoryAvailable,
  boolean anyOtherError,
  boolean reserved4,
  boolean reserved5,
  boolean reserved6,
  boolean reserved7
} with {variant ""}

type record ExtendedLoadVersionRes
{
  VTfunction                      vtfunction (213),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  ExtendedLoadVersionRes_errorCodesType  errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExtendedLoadVersionReq
{
  VTfunction                      vtfunction (213),
  OCT32                           versionLabel
} with { variant "" };

type record ExtendedDeleteVersionRes_errorCodesType {
  boolean reserved0,
  boolean versionLabelIsNotCorrectOrVersionLabelUnknown,
  boolean reserved2,
  boolean anyOtherError,
  boolean reserved4,
  boolean reserved5,
  boolean reserved6,
  boolean reserved7
} with {variant ""}

type record ExtendedDeleteVersionRes
{
  VTfunction                      vtfunction (214),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  ExtendedDeleteVersionRes_errorCodesType  errorCodes,
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record ExtendedDeleteVersionReq
{
  VTfunction                      vtfunction (214),
  OCT32                           versionLabel
} with { variant "" };

type record GetVersionsReq
{
  VTfunction                      vtfunction (223),
  OCT1                            reserved2  ('FF'O),
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record GetVersionsRes
{
  VTfunction                      vtfunction (224),
  INT1                            numberOfVersionStrings,
  VersionLabel7Char               versionStrings
}
with{
  variant (numberOfVersionStrings) "LENGTHTO(versionStrings)";
  variant (numberOfVersionStrings) "UNIT(elements)"
}

type record  VTUnsupportedVTFunctionInd 
{
  VTfunction                      vtfunction (253),
  OCT1                            unsupportedVTfunction, // should be VTfunction, but since unsupported is OCT1
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type record  UnsupportedVTFunctionInd 
{
  VTfunction                      vtfunction (253),
  OCT1                            unsupportedVTfunction, // should be VTfunction, but since unsupported is OCT1
  OCT1                            reserved3  ('FF'O),
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)

} with { variant "" };

type record WorkingSetMaintenanceReq
{
  VTfunction                      vtfunction (255),
  WorkingSetMaintenanceBitMask    bitMask,
  e_WorkingSetMaintenanceVersionNumber versionNumber,
  OCT1                            reserved4  ('FF'O),
  OCT1                            reserved5  ('FF'O),
  OCT1                            reserved6  ('FF'O),
  OCT1                            reserved7  ('FF'O),
  OCT1                            reserved8  ('FF'O)
} with { variant "" };

type enumerated e_BusyCodes { 
  vtIsBusyUpdatingVisibleMask            (0),
  vtIsBusySavingDataToNonVolatileMemory  (1),
  vtIsBusyExecutingACommand              (2),
  vtIsBusyExecutingAMacro                (3),
  vtIsBusyParsingAnObjectPool            (4),
  reserved                               (5),
  auxiliaryControlsLearnModeActive       (6),
  vtIsOutOfMemory                        (7)}
with {variant "PADDING(octet)"}

type record VTStatusReq
{
  VTfunction                      vtfunction (254),
  OCT1 	                          sourceAddressOfActiveWorkingSetMaster,
  OCT2 	                          objectIDOfTheVisibleDataAlarmMaskOfTheActiveWorkingSet,
  OCT2 	                          objectIDOfTheVisibleSoftKeyMaskOfTheActiveWorkingSet,
  e_BusyCodes                     vtBusyCodes,
  OCT1                            vtFunctionCode
} with { variant "" };

type union VT2ECU
{
  // put all VT2ECU messages here
  SoftKeyActivationReq               softKeyActivationReq,
  ButtonActivationReq                buttonActivationReq,
  PointingEventReq                   pointingEventReq,
  VTSelectInputObjectReq             vtSelectInputObjectReq,
  // VTSelectInputObjectReq_v3AndPrior vtSelectInputObjectReq, // for v3 and prior
  // VTSelectInputObjectReq_v4AndLater vtSelectInputObjectReq, // for v4 and later
  VTESCReq                           vtESCReq,
  VTChangeNumericValueReq            vtChangeNumericValueReq,
  VTChangeActiveMaskReq              vtChangeActiveMaskReq,
  VTChangeSoftKeyMaskReq             vtChangeSoftKeyMaskReq,
  VTChangeStringValueReq             vtChangeStringValueReq,
  VTOnUserLayoutHideShowReq          vtOnUserLayoutHideShowReq,
  VTControlAudioSignalTerminationInd vtControlAudioSignalTerminationInd,
  EndOfObjectPoolRes                 endOfObjectPoolRes,
  VTfunction32VT2ECU                 vtfunction32VT2ECU,
  VTfunction34VT2ECU                 vtfunction34VT2ECU,
  VTfunction36VT2ECU                 vtfunction36VT2ECU,
  VTfunction37VT2ECU                 vtfunction37VT2ECU,
  VTfunction39VT2ECU                 vtfunction39VT2ECU,
  ESCres                             escRes,
  HideShowObjectRes                  hideShowObjectRes,
  EnableDisableObjectRes             enableDisableObjectRes,
  SelectInputObjectRes               selectInputObjectRes,  
  ControlAudioSignalRes              controlAudioSignalRes,
  SetAudioVolumeRes                  setAudioVolumeRes,
  ChangeChildLocationRes             changeChildLocationRes,
  ChangeSizeRes                      changeSizeRes,
  ChangeBackgroundColourRes          changeBackgroundColourRes,
  ChangeNumericValueRes              changeNumericValueRes,
  ChangeEndPointRes                  changeEndPointRes,
  ChangeFontAttributesRes            changeFontAttributesRes,
  ChangeLineAttributesRes            changeLineAttributesRes,
  ChangeFillAttributesRes            changeFillAttributesRes,
  ChangeActiveMaskRes                changeActiveMaskRes,
  ChangeSoftKeyMaskRes               changeSoftKeyMaskRes,
  ChangeAttributeRes                 changeAttributeRes,
  ChangePriorityRes                  changePriorityRes,
  ChangeListItemRes                  changeListItemRes,
  DeleteObjectPoolRes                deleteObjectPoolRes,
  ChangeStringValueRes               changeStringValueRes,
  ChangeChildPositionRes             changeChildPositionRes,
  ChangeObjectLabelRes               changeObjectLabelRes,
  ChangePolygonPointRes              changePolygonPointRes,
  ChangePolygonScaleRes              changePolygonScaleRes,
  GraphicsContextRes                 graphicsContextRes,
  GetAttributeValueRes               getAttributeValueRes,
  SelectColourMapRes                 selectColourMapRes,
  IdentifyVTRes                      identifyVTRes,
  ExecuteExtendedMacroRes            executeExtendedMacroRes,
  LockUnlockMaskRes                  lockUnlockMaskRes,
  ExecuteMacroRes                    executeMacroRes,
  GetMemoryRes                       getMemoryRes,
  GetNumberOfSoftKeysRes             getNumberOfSoftKeysRes,
  GetTextFontDataRes                 getTextFontDataRes,
  GetHardwareRes                     getHardwareRes,
  GetSupportedWidecharsRes           getSupportedWidecharsRes,
  GetWindowMaskDataRes               getWindowMaskDataRes,
  GetSupportedObjectsRes             getSupportedObjectsRes,
  StoreVersionRes                    storeVersionRes,
  LoadVersionRes                     loadVersionRes,
  DeleteVersionRes                   deleteVersionRes,
  ExtendedGetVersionsRes             extendedGetVersionsRes,
  ExtendedStoreVersionRes            extendedStoreVersionRes,
  ExtendedLoadVersionRes             extendedLoadVersionRes,
  ExtendedDeleteVersionRes           extendedDeleteVersionRes,
  GetVersionsRes                     getVersionsRes,
  VTUnsupportedVTFunctionInd         vtUnsupportedVTFunctionInd,
  VTStatusReq                        vtStatusReq
}
with {variant "TAG	(
  // put all VT2ECU messages here
  softKeyActivationReq,              vtfunction =   0; 
  buttonActivationReq,               vtfunction =   1;
  pointingEventReq,                  vtfunction =   2; 
  vtSelectInputObjectReq,            vtfunction =   3;
  vtESCReq,                          vtfunction =   4;
  vtChangeNumericValueReq,           vtfunction =   5;
  vtChangeActiveMaskReq,             vtfunction =   6;
  vtChangeSoftKeyMaskReq,            vtfunction =   7;
  vtChangeStringValueReq,            vtfunction =   8;
  vtOnUserLayoutHideShowReq,         vtfunction =   9;
  vtControlAudioSignalTerminationInd,vtfunction =  10;
  endOfObjectPoolRes,                vtfunction =  18;
  vtfunction32VT2ECU,                vtfunction =  32;
  vtfunction34VT2ECU,                vtfunction =  34;
  vtfunction36VT2ECU,                vtfunction =  36;
  vtfunction37VT2ECU,                vtfunction =  37;
  vtfunction39VT2ECU,                vtfunction =  39;
  escRes,                            vtfunction = 146;
  hideShowObjectRes,                 vtfunction = 160;
  enableDisableObjectRes,            vtfunction = 161;
  selectInputObjectRes,              vtfunction = 162; 
  controlAudioSignalRes,             vtfunction = 163;
  setAudioVolumeRes,                 vtfunction = 164;
  changeChildLocationRes,            vtfunction = 165;
  changeSizeRes,                     vtfunction = 166;
  changeBackgroundColourRes,         vtfunction = 167;
  changeNumericValueRes,             vtfunction = 168;
  changeEndPointRes,                 vtfunction = 169;
  changeFontAttributesRes,           vtfunction = 170;
  changeLineAttributesRes,           vtfunction = 171;
  changeFillAttributesRes,           vtfunction = 172;
  changeActiveMaskRes,               vtfunction = 173;
  changeSoftKeyMaskRes,              vtfunction = 174; 
  changeAttributeRes,                vtfunction = 175;
  changePriorityRes,                 vtfunction = 176;
  changeListItemRes,                 vtfunction = 177;
  deleteObjectPoolRes,               vtfunction = 178;
  changeStringValueRes,              vtfunction = 179;
  changeChildPositionRes,            vtfunction = 180;
  changeObjectLabelRes,              vtfunction = 181;
  changePolygonPointRes,             vtfunction = 182;
  changePolygonScaleRes,             vtfunction = 183;
  graphicsContextRes,                vtfunction = 184;
  getAttributeValueRes,              vtfunction = 185;
  selectColourMapRes,                vtfunction = 186;
  identifyVTRes,                     vtfunction = 187;
  executeExtendedMacroRes,           vtfunction = 188;
  lockUnlockMaskRes,                 vtfunction = 189;
  executeMacroRes,                   vtfunction = 190;
  getMemoryRes,                      vtfunction = 192;
  getNumberOfSoftKeysRes,            vtfunction = 194;
  getTextFontDataRes,                vtfunction = 195;
  getHardwareRes,                    vtfunction = 199;
  getSupportedWidecharsRes,          vtfunction = 193;
  getWindowMaskDataRes,              vtfunction = 196;
  getSupportedObjectsRes,            vtfunction = 197;
  storeVersionRes,                   vtfunction = 208;
  loadVersionRes,                    vtfunction = 209;
  deleteVersionRes,                  vtfunction = 210;
  extendedGetVersionsRes,            vtfunction = 211;
  extendedStoreVersionRes,           vtfunction = 212;
  extendedLoadVersionRes,            vtfunction = 213;
  extendedDeleteVersionRes,          vtfunction = 214;
  getVersionsRes,                    vtfunction = 224;
  vtUnsupportedVTFunctionInd,        vtfunction = 253;
  vtStatusReq, 	                     vtfunction = 254;)"
} 

type union ECU2VT
{
  // put all ECU2VT messages here
  SoftKeyActivationRes               softKeyActivationRes,
  ButtonActivationRes                buttonActivationRes,
  PointingEventRes                   pointingEventRes,
  VTSelectInputObjectRes             vtSelectInputObjectRes,
  // VTSelectInputObjectRes_v4AndPrior  vtSelectInputObjectRes,   // for v4 and prior
  // VTSelectInputObjectRes_v5AndLater  vtSelectInputObjectRes,   // for v5 and later
  VTESCRes                           vtESCRes, 
  VTChangeNumericValueRes            vtChangeNumericValueRes,
  VTChangeActiveMaskRes              vtChangeActiveMaskRes,
  VTChangeSoftKeyMaskReq             vtChangeSoftKeyMaskReq,
  VTChangeStringValueRes             vtChangeStringValueRes,
  VTOnUserLayoutHideShowRes          vtOnUserLayoutHideShowRes, 
  ObjectPoolTransferInd              objectPoolTransferInd,
  EndOfObjectPoolReq                 endOfObjectPoolReq,
  VTfunction32ECU2VT                 vtfunction32ECU2VT,
  VTfunction33ECU2VT                 vtfunction33ECU2VT,
  VTfunction34ECU2VT                 vtfunction34ECU2VT,
  VTfunction36ECU2VT                 vtfunction36ECU2VT,
  VTfunction37ECU2VT                 vtfunction37ECU2VT,
  AuxiliaryInputType2StatusInd       auxiliaryInputType2StatusInd,   // Note: ECU2VT may not be the right addressing 
  VTfunction39ECU2VT                 vtfunction39ECU2VT,
  ESCreq                             escReq,
  HideShowObjectReq                  hideShowObjectReq,
  EnableDisableObjectReq             enableDisableObjectReq,
  SelectInputObjectReq               selectInputObjectReq,
  ControlAudioSignalReq              controlAudioSignalReq,
  SetAudioVolumeReq                  setAudioVolumeReq,
  ChangeChildLocationReq             changeChildLocationReq,
  ChangeSizeReq                      changeSizeReq,
  ChangeBackgroundColourReq          changeBackgroundColourReq,
  ChangeNumericValueReq              changeNumericValueReq,
  ChangeEndPointReq                  changeEndPointReq,
  ChangeFontAttributesReq            changeFontAttributesReq,
  ChangeLineAttributesReq            changeLineAttributesReq,
  ChangeFillAttributesReq            changeFillAttributesReq,
  ChangeActiveMaskReq                changeActiveMaskReq,
  ChangeSoftKeyMaskRes               changeSoftKeyMaskRes,
  ChangeAttributeReq                 changeAttributeReq,
  ChangePriorityReq                  changePriorityReq,
  ChangeListItemReq                  changeListItemReq,  
  DeleteObjectPoolReq                deleteObjectPoolReq,
  ChangeStringValueReq               changeStringValueReq,
  ChangeChildPositionReq             changeChildPositionReq,
  ChangeObjectLabelReq               changeObjectLabelReq,
  ChangePolygonPointReq              changePolygonPointReq,
  ChangePolygonScaleReq              changePolygonScaleReq,
  GraphicsContextReq                 graphicsContextReq,
  GetAttributeValueReq               getAttributeValueReq,
  SelectColourMapReq                 selectColourMapReq,
  IdentifyVTReq                      identifyVTReq,
  ExecuteExtendedMacroReq            executeExtendedMacroReq,
  LockUnlockMaskReq                  lockUnlockMaskReq,
  ExecuteMacroReq                    executeMacroReq,
  GetMemoryReq                       getMemoryReq,
  GetNumberOfSoftKeysReq             getNumberOfSoftKeysReq,
  GetTextFontDataReq                 getTextFontDataReq,
  GetHardwareReq                     getHardwareReq,
  GetSupportedWidecharsReq           getSupportedWidecharsReq,
  GetWindowMaskDataReq               getWindowMaskDataReq,
  GetSupportedObjectsReq             getSupportedObjectsReq,
  StoreVersionReq                    storeVersionReq,
  LoadVersionReq                     loadVersionReq,
  DeleteVersionReq                   deleteVersionReq,  
  ExtendedGetVersionsReq             extendedGetVersionsReq,  
  ExtendedStoreVersionReq            extendedStoreVersionReq,  
  ExtendedLoadVersionReq             extendedLoadVersionReq,  
  ExtendedDeleteVersionReq           extendedDeleteVersionReq,
  GetVersionsReq                     getVersionsReq,
  UnsupportedVTFunctionInd           unsupportedVTFunctionInd,
  WorkingSetMaintenanceReq           workingSetMaintenanceReq
  // put all ECU2VT response messages here
  //Dummy_ECU2VT_Res                dummy_ECU2VT_Res
}
with {variant "TAG	(
  // put all ECU2VT messages here
  softKeyActivationRes,              vtfunction =   0; 
  buttonActivationRes,               vtfunction =   1;
  pointingEventRes,                  vtfunction =   2;
  vtSelectInputObjectRes,            vtfunction =   3;
  vtESCRes,                          vtfunction =   4;
  vtChangeNumericValueRes,           vtfunction =   5;
  vtChangeActiveMaskRes,             vtfunction =   6;
  vtChangeSoftKeyMaskReq,            vtfunction =   7;
  vtChangeStringValueRes,            vtfunction =   8;
  vtOnUserLayoutHideShowRes,         vtfunction =   9;
  objectPoolTransferInd,             vtfunction =  17;
  endOfObjectPoolReq,                vtfunction =  18;
  vtfunction32ECU2VT,                vtfunction =  32;
  vtfunction33ECU2VT,                vtfunction =  33;
  vtfunction34ECU2VT,                vtfunction =  34;
  vtfunction36ECU2VT,                vtfunction =  36;
  vtfunction37ECU2VT,                vtfunction =  37;
  auxiliaryInputType2StatusInd,      vtfunction =  38;
  vtfunction39ECU2VT,                vtfunction =  39;
  escReq,                            vtfunction = 146;
  hideShowObjectReq,                 vtfunction = 160;
  enableDisableObjectReq,            vtfunction = 161;  
  selectInputObjectReq,              vtfunction = 162;
  controlAudioSignalReq,             vtfunction = 163;
  setAudioVolumeReq,                 vtfunction = 164;
  changeChildLocationReq,            vtfunction = 165;
  changeSizeReq,                     vtfunction = 166;
  changeBackgroundColourReq,         vtfunction = 167;
  changeNumericValueReq,             vtfunction = 168;
  changeEndPointReq,                 vtfunction = 169;
  changeFontAttributesReq,           vtfunction = 170;
  changeLineAttributesReq,           vtfunction = 171;
  changeFillAttributesReq,           vtfunction = 172;      
  changeActiveMaskReq,               vtfunction = 173;
  changeSoftKeyMaskRes,              vtfunction = 174; 
  changeAttributeReq,                vtfunction = 175;
  changePriorityReq,                 vtfunction = 176;
  changeListItemReq,                 vtfunction = 177;
  deleteObjectPoolReq,               vtfunction = 178;
  changeStringValueReq,              vtfunction = 179;
  changeChildPositionReq,            vtfunction = 180;
  changeObjectLabelReq,              vtfunction = 181;
  changePolygonPointReq,             vtfunction = 182;
  changePolygonScaleReq,             vtfunction = 183;
  graphicsContextReq,                vtfunction = 184;
  getAttributeValueReq,              vtfunction = 185;
  selectColourMapReq,                vtfunction = 186;
  identifyVTReq,                     vtfunction = 187;
  executeExtendedMacroReq,           vtfunction = 188;
  lockUnlockMaskReq,                 vtfunction = 189;
  executeMacroReq,                   vtfunction = 190;
  getMemoryReq,                      vtfunction = 192;
  getNumberOfSoftKeysReq,            vtfunction = 194;
  getTextFontDataReq,                vtfunction = 195;
  getHardwareReq,                    vtfunction = 199;
  getSupportedWidecharsReq,          vtfunction = 193;
  getWindowMaskDataReq,              vtfunction = 196;
  getSupportedObjectsReq,            vtfunction = 197;
  storeVersionReq,                   vtfunction = 208;
  loadVersionReq,                    vtfunction = 209;
  deleteVersionReq,                  vtfunction = 210;
  extendedGetVersionsReq,            vtfunction = 211;
  extendedStoreVersionReq,           vtfunction = 212;
  extendedLoadVersionReq,            vtfunction = 213;
  extendedDeleteVersionReq,          vtfunction = 214;
  getVersionsReq,                    vtfunction = 223;
  unsupportedVTFunctionInd,          vtfunction = 253;
  workingSetMaintenanceReq,          vtfunction = 255;
  ) " 
} 

} with { encode "RAW" }

