Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2a3ca9c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Rename and Redoc VMS HAL defs." into oc-mr1-dev

parents ff16a480 01d10a11
Loading
Loading
Loading
Loading
+68 −30
Original line number Diff line number Diff line
@@ -208,9 +208,9 @@ $(GEN): $(LOCAL_PATH)/types.hal
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsBaseMessageIntegerValuesIndex)
# Build types.hal (VmsAvailabilityStateIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsBaseMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsAvailabilityStateIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -220,16 +220,16 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsBaseMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsAvailabilityStateIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsDataMessageIntegerValuesIndex)
# Build types.hal (VmsBaseMessageIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsDataMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsBaseMessageIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -239,7 +239,7 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsDataMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsBaseMessageIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
@@ -265,9 +265,9 @@ $(GEN): $(LOCAL_PATH)/types.hal
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsOfferingMessageIntegerValuesIndex)
# Build types.hal (VmsMessageWithLayerAndPublisherIdIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsOfferingMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsMessageWithLayerAndPublisherIdIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -277,16 +277,35 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsOfferingMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsMessageWithLayerAndPublisherIdIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsMessageWithLayerIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsMessageWithLayerIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsMessageWithLayerIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsSimpleMessageIntegerValuesIndex)
# Build types.hal (VmsOfferingMessageIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsSimpleMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsOfferingMessageIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -296,16 +315,16 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsSimpleMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsOfferingMessageIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsSubscriptionResponseFormat)
# Build types.hal (VmsSubscriptionsStateIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsSubscriptionResponseFormat.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsSubscriptionsStateIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -315,7 +334,7 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsSubscriptionResponseFormat
        android.hardware.automotive.vehicle@2.1::types.VmsSubscriptionsStateIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
@@ -548,9 +567,9 @@ $(GEN): $(LOCAL_PATH)/types.hal
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsBaseMessageIntegerValuesIndex)
# Build types.hal (VmsAvailabilityStateIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsBaseMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsAvailabilityStateIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -560,16 +579,16 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsBaseMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsAvailabilityStateIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsDataMessageIntegerValuesIndex)
# Build types.hal (VmsBaseMessageIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsDataMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsBaseMessageIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -579,7 +598,7 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsDataMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsBaseMessageIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
@@ -605,9 +624,9 @@ $(GEN): $(LOCAL_PATH)/types.hal
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsOfferingMessageIntegerValuesIndex)
# Build types.hal (VmsMessageWithLayerAndPublisherIdIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsOfferingMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsMessageWithLayerAndPublisherIdIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -617,16 +636,35 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsOfferingMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsMessageWithLayerAndPublisherIdIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsMessageWithLayerIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsMessageWithLayerIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
$(GEN): PRIVATE_OUTPUT_DIR := $(intermediates)
$(GEN): PRIVATE_CUSTOM_TOOL = \
        $(PRIVATE_HIDL) -o $(PRIVATE_OUTPUT_DIR) \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsMessageWithLayerIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsSimpleMessageIntegerValuesIndex)
# Build types.hal (VmsOfferingMessageIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsSimpleMessageIntegerValuesIndex.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsOfferingMessageIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -636,16 +674,16 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsSimpleMessageIntegerValuesIndex
        android.hardware.automotive.vehicle@2.1::types.VmsOfferingMessageIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
LOCAL_GENERATED_SOURCES += $(GEN)

#
# Build types.hal (VmsSubscriptionResponseFormat)
# Build types.hal (VmsSubscriptionsStateIntegerValuesIndex)
#
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsSubscriptionResponseFormat.java
GEN := $(intermediates)/android/hardware/automotive/vehicle/V2_1/VmsSubscriptionsStateIntegerValuesIndex.java
$(GEN): $(HIDL)
$(GEN): PRIVATE_HIDL := $(HIDL)
$(GEN): PRIVATE_DEPS := $(LOCAL_PATH)/types.hal
@@ -655,7 +693,7 @@ $(GEN): PRIVATE_CUSTOM_TOOL = \
        -Ljava \
        -randroid.hardware:hardware/interfaces \
        -randroid.hidl:system/libhidl/transport \
        android.hardware.automotive.vehicle@2.1::types.VmsSubscriptionResponseFormat
        android.hardware.automotive.vehicle@2.1::types.VmsSubscriptionsStateIntegerValuesIndex

$(GEN): $(LOCAL_PATH)/types.hal
	$(transform-generated-source)
+150 −54
Original line number Diff line number Diff line
@@ -119,6 +119,8 @@ enum VehicleProperty: @2.0::VehicleProperty {
     * bytes is a serialized VMS message as defined in the vms protocol
     * which is opaque to the framework;
     *
     * IVehicle#get must always return StatusCode::NOT_AVAILABLE.
     *
     * @change_mode VehiclePropertyChangeMode:ON_CHANGE
     * @access VehiclePropertyAccess:READ_WRITE
     */
@@ -509,102 +511,196 @@ enum DiagnosticFloatSensorIndex : int32_t {
};

/**
 * This enum lists the types of supported VMS messages.
 * This enum lists the types of supported VMS messages. It is used as the first
 * integer in the vehicle property integers array and determines how the rest of
 * the message is decoded.
 */
enum VmsMessageType : int32_t {
  /** A client subscribes to a layer. */
  /**
   * A request from the subscribers to the VMS service to subscribe to a layer.
   *
   * This message type uses enum VmsMessageWithLayerIntegerValuesIndex.
   */
  SUBSCRIBE = 1,

  /** A client unsubscribes from a layer. */
  UNSUBSCRIBE = 2,
  /**
   * A request from the subscribers to the VMS service to subscribe to a layer from a specific publisher.
   *
   * This message type uses enum VmsMessageWithLayerAndPublisherIdIntegerValuesIndex.
   */
  SUBSCRIBE_TO_PUBLISHER = 2,

  /**
   * A request from the subscribers to the VMS service to unsubscribes from a layer.
   *
   * This message type uses enum VmsMessageWithLayerIntegerValuesIndex.
   */
  UNSUBSCRIBE = 3,

  /**
   * A request from the subscribers to the VMS service to unsubscribes from a layer from a specific publisher.
   *
   * This message type uses enum VmsMessageWithLayerAndPublisherIdIntegerValuesIndex.
   */
  UNSUBSCRIBE_TO_PUBLISHER = 4,

  /** A client publishes a data packet. */
  DATA = 3,
  /**
   * Information from the publishers to the VMS service about the layers which the client can publish.
   *
   * This message type uses enum VmsOfferingMessageIntegerValuesIndex.
   */
  OFFERING = 5,

  /** A client declaring layers offering. */
  OFFERING = 4,
  /**
   * A request from the subscribers to the VMS service to get the available layers.
   *
   * This message type uses enum VmsBaseMessageIntegerValuesIndex.
   */
  AVAILABILITY_REQUEST = 6,

  /** Requesting the list of available layers. */
  AVAILABILITY_REQUEST = 5,
  /**
   * A request from the publishers to the VMS service to get the layers with subscribers.
   *
   * This message type uses enum VmsBaseMessageIntegerValuesIndex.
   */
  SUBSCRIPTIONS_REQUEST = 7,

  /** Returning the list of available layers. */
  AVAILABILITY_RESPONSE = 6,
  /**
   * A response from the VMS service to the subscribers to a VmsMessageType.AVAILABILITY_REQUEST
   *
   * This message type uses enum VmsAvailabilityStateIntegerValuesIndex.
   */
  AVAILABILITY_RESPONSE = 8,

  /** Sending to the HAL the current list of the available layers. */
  AVAILABILITY_CHANGE = 7,
  /**
   * A notification from the VMS service to the subscribers on a change in the available layers.
   *
   * This message type uses enum VmsAvailabilityStateIntegerValuesIndex.
   */
  AVAILABILITY_CHANGE = 9,

  /** Requesting layers that have subscribers. */
  SUBSCRIPTIONS_REQUEST = 8,
  /**
   * A response from the VMS service to the publishers to a VmsMessageType.SUBSCRIPTIONS_REQUEST
   *
   * This message type uses enum VmsSubscriptionsStateIntegerValuesIndex.
   */
  SUBSCRIPTIONS_RESPONSE = 10,

  /** Returning layers that have subscribers. */
  SUBSCRIPTIONS_RESPONSE = 9,
  /**
   * A notification from the VMS service to the publishers on a change in the layers with subscribers.
   *
   * This message type uses enum VmsSubscriptionsStateIntegerValuesIndex.
   */
  SUBSCRIPTIONS_CHANGE = 11,

  /** Sending to the HAL the current list of the subscribed layers. */
  SUBSCRIPTIONS_CHANGE = 10,
  /**
   * A message from the VMS service to the subscribers or from the publishers to the VMS service
   * with a serialized VMS data packet as defined in the VMS protocol.
   *
   * This message type uses enum VmsBaseMessageIntegerValuesIndex.
   */
  DATA = 12,
};

/**
 * This enum provides the canonical mapping for VMS properties that have an
 * integer value.
 * Every VMS message starts with the type of the message from the VmsMessageType enum.
 * Messages with no parameters such as VmsMessageType.AVAILABILITY_REQUEST,
 * VmsMessageType.SUBSCRIPTIONS_REQUEST and VmsMessageType.DATA are also based on this enum.
 */
enum VmsBaseMessageIntegerValuesIndex : int32_t {
  /* The message type as enumerated by VmsMessageType enum. */
  VMS_MESSAGE_TYPE = 0,
  MESSAGE_TYPE = 0,
};

/*
 * This enum provides the canonical mapping for VMS SUBMIT and UNSUBMIT
 * messages integer value properties.
 * A VMS message with a layer is sent as part of a VmsMessageType.SUBSCRIBE or
 * VmsMessageType.UNSUBSCRIBE messages.
 *
 * The layer type is defined in the VMS protocol, and the subtype and version are
 * controlled by the implementer of the publisher.
 */
enum VmsSimpleMessageIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex {
  /* The layer ID as defined in the vms protocol. */
  VMS_LAYER_ID = 1,
enum VmsMessageWithLayerIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex {
  LAYER_TYPE = 1,

  /* The version of the VMS layer. */
  VMS_LAYER_VERSION = 2,
  LAYER_SUBTYPE = 2,

  /* The layer type as defined in the vms protocol */
  VMS_LAYER_SUB_TYPE = 3,
  LAYER_VERSION = 3,
};

/*
 * This enum provides the canonical mapping for VMS DATA
 * message integer value properties.
 * A VMS message with a layer and publisher ID is sent as part of a
 * VmsMessageType.SUBSCRIBE_TO_PUBLISHER and VmsMessageType.UNSUBSCRIBE_TO_PUBLISHER messages.
 */
enum VmsDataMessageIntegerValuesIndex : VmsSimpleMessageIntegerValuesIndex {
  /* A publisher ID of the client that published this message. */
  VMS_PUBLISHER_ID = 4,
enum VmsMessageWithLayerAndPublisherIdIntegerValuesIndex : VmsMessageWithLayerIntegerValuesIndex {
  PUBLISHER_ID = 4,
};

/*
 * This enum provides the canonical mapping for VMS offering messages integer
 * value properties
 * An offering can be sent by publishers as part of VmsMessageType.OFFERING in order to
 * advertise which layers they can publish and under which constraints: e.g., I can publish Layer X
 * if someone else will publish Layer Y.
 * The offering contains the publisher ID which was assigned to the publisher by the VMS service.
 * A single offering is represented as:
 * - Layer type
 * - Layer subtype
 * - Layer version
 * - Number of dependencies (N)
 * - N x (Layer type, Layer subtype, Layer version)
 */
enum VmsOfferingMessageIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex {
  /* The ID assigend to the publisher by the VMS core. */
  PUBLISHER_ID = 1,

  /* The number of VMS layer dependencies. */
  VMS_NUMBER_OF_LAYERS_DEPENDENCIES = 2,
  NUMBER_OF_OFFERS = 2,

  /* The first index that contain dependencies */
  FIRST_DEPENDENCIES_INDEX = 3,
  OFFERING_START = 3,
};

/**
 * A VMS subscription request only contains its message type. The format of a VMS subscription
 * response is described below.
 * A subscriptions state is sent to the publishers in response to a change in the subscriptions
 * as part of a VmsMessageType.SUBSCRIPTIONS_CHANGE, or in response to a
 * VmsMessageType.SUBSCRIPTIONS_REQUEST message as part of VmsMessageType.SUBSCRIPTIONS_RESPONSE.
 * The VMS service issues monotonically increasing sequence numbers, and in case a subscriber receives
 * a smaller sequnce number it should ignore the message.
 * The subscriptions are sent as a list of layers followed by a list of associated layers:
 * {Sequence number, N, M, N x layer, M x associated layer}
 * A subscribed layer is represented as three integers:
 * - Layer type
 * - Layer subtype
 * - Layer version
 * A subscribed associated layer is a layer with a list of publisher IDs. It is represented as:
 * - Layer type
 * - Layer subtype
 * - Layer version
 * - Number of publisher IDs (N)
 * - N x publisher ID
 */
enum VmsSubscriptionResponseFormat : VmsBaseMessageIntegerValuesIndex {
enum VmsSubscriptionsStateIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex {
  SEQUENCE_NUMBER = 1,

  NUMBER_OF_LAYERS = 2,

  NUMBER_OF_ASSOCIATED_LAYERS = 3,

  SUBSCRIPTIONS_START = 4,
};

/**
    * Recipients should ignore any packet with a sequence number that is less than the highest
    * sequence number they have seen thus far.
 * An availability state is sent to the subscribers in response to a change in the available
 * layers as part of a VmsMessageType.AVAILABILITY_CHANGE message, or in response to a
 * VmsMessageType.AVAILABILITY_REQUEST message as part of a VmsMessageType.AVAILABILITY_RESPONSE.
 * The VMS service issues monotonically increasing sequence numbers, and in case a subscriber receives
 * a smaller sequnce number, it should ignore the message.
 * An available associated layer is a layer with a list of publisher IDs:
 * - Layer type
 * - Layer subtype
 * - Layer version
 * - Number of publisher IDs (N)
 * - N x publisher ID
*/
enum VmsAvailabilityStateIntegerValuesIndex : VmsBaseMessageIntegerValuesIndex {
  SEQUENCE_NUMBER = 1,

  /** The number of VMS layers. Each layer has two integers: type and version. */
  NUMBER_OF_LAYERS = 2,
  NUMBER_OF_ASSOCIATED_LAYERS = 2,

  /** The first index that contains a layer. */
  FIRST_LAYER = 3,
  LAYERS_START = 3,
};